我正在构建一个Prestashop插件,我偶然发现了这个税务计算问题。
程序流程如下:
一个人在电子商务网站下订单,订单被接受,订单详情,如商品,价格,税金,折扣等都会发送到外部发票API服务。
订单的示例可以是:
(这些价格包含税)
1x T恤20.64
1x送货125
1x折扣-18.58(在此特定测试案例中,产品折扣90%,数学简单20.64 * 0.90 = 18.58)
税后订单总额:127.06
这很好,但是,当我将详细信息发送到API时,订单将保存为以下内容:
(这些价格保存不含税,税率为25%)
1x T恤16.51
1x运送100
1x折扣-14
税后订单总额:128.14
如您所见,订单总数不是马赫,差值是1.08,我认为这是折扣&税务问题。
值得注意的是,外部网站对发送的价值进行了自己的数学运算,例如产品,税收等。我不能影响外部发票网站进行计算的方式。我认为问题出现在不同平台上执行操作的顺序。
还值得一提的是,当没有折扣存在时,代码可以正常运行。
在发送值之前我该怎么做,这样我最终会得到相同的值。
答案 0 :(得分:2)
他们计算的总数确实是(100 + 16.51 - 14) x 1.25 = 128.1375
然而,他们对免税折扣的计算是错误的,18.58 / 1.25 = 14.864
不是14
。
是否有规则应将折扣舍入(或覆盖或上限)为整数值?
如果不是这意味着他们将折扣除以1.32714285714
,从而考虑对折扣征收32.71...%
税。这很奇怪且不太可能,因为再次添加折扣时他们会使用正常的25%
检查您的prestashop文档,当地法律或其他任何内容,以确定这是否真实,以及值是否为例如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
更新到最新版本,查找他们的错误跟踪器或联系他们。如果没有报告,请提交报告。
上面的解决方法之一现在可以使用,但如果它是一个修复过的错误并且您使用第一个错误,那么您将再次收取错误的金额。