我正在构建一个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
1折优惠-14
税后申请总额:128.14
如你所见,订单总数不是马赫,差异是1.08,我认为这是折扣和税收问题 .
值得注意的是,外部网站对发送的 Value 进行了自己的数学运算,例如产品,税收等 . 我不能影响外部发票网站进行计算的方式 . 我认为问题发生在不同平台上执行操作的顺序 .
还值得一提的是,当没有折扣存在时,代码可以正常工作 .
在发送值之前我该怎么做,以便我最终得到两个相同的值 .
1 回答
他们计算的总数确实是
(100 + 16.51 - 14) x 1.25 = 128.1375
然而他们对无税折扣的计算是错误的,
18.58 / 1.25 = 14.864
不是14
.是否有规则应将折扣舍入(或覆盖或上限)为整数值?
折扣可能是非整数,意味着不同的税率
如果不是这意味着他们将折扣除以
1.32714285714
,从而考虑到折扣的_1686255税 . 这将是奇怪的,不太可能,因为再次添加折扣他们使用正常25%
检查您的prestashop文档,当地法律或其他任何内容,以确定这是否真实,以及该值是否为例如
33%
或32.7%
由于我对它们存储的税值进行了反向设计,因此可能会因舍入为2而扭曲小数点 .然后,要获得正确的结果,请将折扣替换为
discount * 1.32714285714 / 1.25
,即将预期税率替换为他们应用的税率 .折扣四舍五入为整数
如果无税折扣必须是一个整数,我们可以修改它,以便它也在我们这边,因为我猜最重要的是最终价格 . 因此,使用此算法发送最终将为整数的折扣:
值的总和应该相同:
price - discount == price_send - discount_send
检查它是否不是Prestashop中的错误
更新到最新版本,查找他们的错误跟踪器或联系他们 . 如果没有报告,请提交报告 .
上面的解决方法之一现在可以使用,但是如果它是一个被修复的错误并且您使用第一个,那么您将再次收取错误的金额 .