Метод налогообложения цены за единицу со скидкой: ошибка или особенность?


Magento CE 1.7. Скажем, у меня есть продукт стоимостью 1799,99 доллара США (включая налог в размере 8,25%) и купон на скидку 10% (сумма скидки - 180,00 долларов США). Параметр "Применить налог с клиентов" установлен в значение После скидки, и я использую метод расчета налога "Цена за единицу". Во время отладки я остановился на этом коде, который вычисляет общую сумму налога:

case Mage_Tax_Model_Calculation::CALC_TAX_AFTER_DISCOUNT_ON_INCL:
    $discountAmount     = $item->getDiscountAmount() / $qty;
    $baseDiscountAmount = $item->getBaseDiscountAmount() / $qty;

    $unitTax = $this->_calculator->calcTaxAmount($price, $rate, $inclTax);
    $discountRate = ($unitTax/$price) * 100;
    $unitTaxDiscount = $this->_calculator->calcTaxAmount($discountAmount, $discountRate, $inclTax, false);
    $unitTax = max($unitTax - $unitTaxDiscount, 0);
    $baseUnitTax = $this->_calculator->calcTaxAmount($basePrice, $rate, $inclTax);
    $baseDiscountRate = ($baseUnitTax/$basePrice) * 100;
    $baseUnitTaxDiscount = $this->_calculator
        ->calcTaxAmount($baseDiscountAmount, $baseDiscountRate, $inclTax, false);
    $baseUnitTax = max($baseUnitTax - $baseUnitTaxDiscount, 0);

App/code/core/Mage/Tax/Model/Sales/Total/Quote/Tax.php, строка 379

Обратите внимание, как получается скидка в размере $: вместо использования налоговой ставки применяемый для расчета налога на единицу, он вычисляет свою собственную стоимость, которая может быть выражена в виде ставки в долларах США в виде дисконтирования = ставка в долларах США / (1 + ставка в долларах США), или, учитывая ставку в долларах США = 8.25% (0.0825): 0.0825 / 1.0825 = 0.0762. Налог на скидку, рассчитанный по этой ставке, составляет тогда 12,75 доллара США и приводит к общей сумме налога в размере $137.18 - $12.75 = $124.43.

Интересно то, что в той же процедуре несколькими строками ниже скрытый налог (т.Е. налог на сумму скидки) рассчитывается с использованием значения ставки в долларах США (0,0825 в моем пример):

if ($inclTax && $discountAmount > 0) {
    $hiddenTax      = $this->_calculator->calcTaxAmount($discountAmount, $rate, $inclTax, false);
    $baseHiddenTax  = $this->_calculator->calcTaxAmount($baseDiscountAmount, $rate, $inclTax, false);
    $this->_hiddenTaxes[] = array(
        'rate_key'   => $rateKey,
        'qty'        => $qty,
        'item'       => $item,
        'value'      => $hiddenTax,
        'base_value' => $baseHiddenTax,
        'incl_tax'   => $inclTax,
    );

App/code/core/Mage/Tax/Model/Sales/Total/Quote/Tax.php, строка 393

Эта сумма "скрытого налога" (в моем примере: $180 - $180 / (100 + 8.25%) / 100 = $13.72) позже используется для расчета общей суммы, как в сумме чистого промежуточного итога, налога и скрытого налога, за вычетом скидки: $1662.81 + $124.43 + $13.72 - $180.00 = $1,620.96. Проблема здесь в том, что при расчете общей суммы налога система использовала две разные ставки на одну и ту же сумму скидки! Это ошибка или особенность?

Author: Oleg Ishenko, 2013-10-25

1 answers

По-видимому, проблема была решена в версии CE 1.8.0.0 - странная переменная $discounttrate исчезла, и как единичный налог, так и скрытый налог используют одну и ту же ставку.

 2
Author: Oleg Ishenko, 2013-10-28 20:39:42