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 中的错误
更新到最新版本,查找他们的错误跟踪器或联系他们。如果没有,请提交一份报告。
上面的解决方法之一暂时有效,但如果它是一个已修复的错误并且您使用第一个,您将再次计费错误的金额。
我正在构建一个 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 中的错误
更新到最新版本,查找他们的错误跟踪器或联系他们。如果没有,请提交一份报告。
上面的解决方法之一暂时有效,但如果它是一个已修复的错误并且您使用第一个,您将再次计费错误的金额。