1

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

程序流程如下:

一个人在电子商务网站下订单,订单被接受,订单详细信息(如商品、价格、税金、折扣等)被发送到外部发票 API 服务。

订单的示例可能是:

(这些价格含税)

1 件 T 恤 20.64

1x 运费 125

1x 折扣 -18.58 (在这个特定的测试案例中,折扣是产品 90% 的折扣,数学很简单 20.64 * 0.90 = 18.58)

税后订单总额:127.06

这一切都很好,但是,当我将详细信息发送到 API 时,订单将保存为以下内容:

(这些价格是在不征税的情况下保存的,税率为 25%)

1 件 T 恤 16.51

1x 运费 100

1x 折扣 -14

税后订单总额:128.14

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

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

还值得一提的是,当没有折扣时,代码可以正常工作。

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

4

1 回答 1

1

他们计算的总数确实是(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%由于我从他们存储的税收价值中对价值进行了逆向工程,它可能会因四舍五入到小数点后两位而失真。

然后,要获得正确的结果,请将折扣替换为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 中的错误

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

上面的一种解决方法现在可以使用,但如果它是一个得到修复的错误并且您使用第一个,您将再次计费错误的金额。

于 2015-01-19T12:45:50.613 回答