Проблем с изчисляването на данъка за приставка за 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%

Проверете документацията си преди магазина, местните закони или каквото и да е, за да разберете дали това е реално и дали стойността е например 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