Проблема с расчетом налогов для плагина Prestashop

Я создаю плагин для Prestashop, и я наткнулся на эту проблему расчета налогов.

Последовательность выполнения программы выглядит следующим образом:

Человек размещает заказ на веб-сайте электронной коммерции, заказ принимается, детали заказа, такие как товары, цены, налоги, скидки и т. Д., Отправляются во внешнюю службу API счетов.

Примером заказа может быть:

(Эти цены включают налоги)

1x футболка 20,64

1x Доставка 125

1x скидка -18,58 (в этом конкретном тестовом примере скидка составляет 90% от продукта, математика проста 20,64 * 0,90 = 18,58)

Сумма заказа после учета налогов: 127.06

Все в порядке, но когда я отправляю детали в API, порядок сохраняется следующим образом:

(Эти цены сохранены без применения налога, ставка налога составляет 25%)

1x футболка 16,51

1x Доставка 100

1x Скидка -14

Сумма заказа после учета налогов: 128,14

Как видите, общая сумма заказов не соответствует разнице, разница составляет 1,08, я думаю, это проблема скидок и налогов.

Стоит отметить, что внешний сайт выполняет свои собственные вычисления для отправленных значений, например, продуктов, налогов и т. Д. Я не могу повлиять на то, как внешний сайт выставления счетов выполняет свои вычисления. Я думаю, что проблема возникает в том порядке, в котором операции выполняются на разных платформах.

Также стоит отметить, что код отлично работает без скидки.

Что я могу сделать перед отправкой значений, чтобы в обоих местах были одинаковые значения.


person Community    schedule 19.01.2015    source источник


Ответы (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% Поскольку я реконструировал значение из сохраненного налогового значения, оно могло быть искажено округлением до 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

Обновитесь до последней версии, поищите в их системе отслеживания ошибок или свяжитесь с ними. Отправьте отчет, если его нет.

На данный момент будет работать один из описанных выше обходных путей, но если это ошибка, которая будет исправлена, и вы используете первый, вы снова будете выставлять неправильные суммы.

person Cimbali    schedule 19.01.2015