Prestashop 插件的税务计算问题

Tax calculation issue for a Prestashop Plugin

我正在构建一个 Prestashop 插件,我无意中发现了这个税收计算问题。

程序流程如下:

某人在电子商务网站下订单,订单被接受,商品、价格、税费、折扣等订单详细信息被发送到外部发票 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

如您所见,订单总计不是 mach,差异是 1.08,我认为这是折扣和税收问题。

值得注意的是,外部站点对发送的值(例如产品、税收等)进行了自己的计算。我无法影响外部发票站点进行计算的方式。我认为问题发生在不同平台上执行操作的顺序。

还值得一提的是,在没有折扣的情况下,代码可以正常工作。

在发送值之前我可以做什么,以便我最终在两个地方得到相同的值。

他们计算的总数确实是 (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

检查这是否不是 Prestashop 中的错误

更新到最新版本,查找他们的错误跟踪器或联系他们。如果没有,请提交一份报告。

上面的解决方法之一暂时有效,但如果它是一个已修复的错误并且您使用第一个,您将再次计费错误的金额。