我正在构建一个Prestashop插件,我无意中发现了这个税务计算问题。
程序流程如下:
一个人在eCommerce网站上下订单,订单被接受,订单细节如物品,价格,税收,折扣等被发送到外部的发票API服务。
订单的一个例子可以是:
(这些价格包括税收)
1件T恤20.64件
1x船运125
1倍折扣-18.58 (在这个特定的测试案例中,折扣率是乘积的90%,数学简单20.64 * 0.90 = 18.58)
税后订单总额: 127.06
这一切都很好,但是,当我将详细信息发送到API时,订单将保存如下:
(这些价格无需缴税,税率为25%)
1件T恤16.51件
1x船运100
1倍折扣-14
税后订单总额: 128.14
如您所见,订单总额不算马赫,差额为1.08,我认为这是一个折扣和税收问题。
值得注意的是,外部站点对发送的值进行自己的计算,例如产品、税收等。我不能影响外部发票站点的计算方法。我认为这个问题发生在不同平台上执行操作的顺序上。
还值得一提的是,在没有折扣的情况下,代码工作得非常好。
在发送这些值之前,我能做些什么,这样我就可以得到两个位置相同的值。
发布于 2015-01-19 12:45:50
他们计算的总数确实是(100 + 16.51 - 14) x 1.25 = 128.1375。
然而,他们对免税折扣的计算是错误的,18.58 / 1.25 = 14.864而不是14。
是否有一条规则,折扣应该四舍五入(或泛指或上限)为整数值?
折扣可能是非整数的,这意味着不同的税率。
如果不是,这意味着他们将折扣除以1.32714285714,因此考虑到对折扣征收32.71...%税。这将是奇怪的,也不太可能,因为当再次添加折扣时,他们使用的是正常的25%。
检查你的商店前文件,当地法律或其他什么,以确定这是否真实,以及价值是否是33%或32.7%,因为我从他们存储的税收价值反向工程,它可能被扭曲的四舍五入为2小数位数。
然后,为了得到正确的结果,用discount * 1.32714285714 / 1.25代替折扣,即用他们申请的税率代替您的预期税率。
折扣四舍五入为整数。
如果免税折扣必须是整数,我们可以修改它,使它也在我们这边,因为我猜最重要的是最终价格。因此,使用此算法发送最终将是整数的折扣:
% get taxless prices
price_notax = price / 1.25
discount_notax = discount / 1.25
% transfer decimal part of discount into price reduction
discount_int = floor(discount_notax)
price_compensated = price_notax - (discount_int - discount_notax)
% re-add tax to get values to send
discount_send = discount_int * 1.25
price_send = price_compensated * 1.25值之和应相同:price - discount == price_send - discount_send
检查一下它是不是Prestashop的一个bug
更新到最新版本,查找他们的bug跟踪器或联系他们。如果没有报告,就提交一份报告。
以上的解决方案之一目前将有效,但如果是一个bug被修复,并且使用第一个错误,您将再次支付错误的金额。
https://stackoverflow.com/questions/28017425
复制相似问题