MagentoTra i problemi (ce ne sono a decine) che affliggono molti commercianti che hanno adottato Magento come propria piattaforma, ce ne è uno che riguarda il modo in cui vengono effettuati i calcoli di applicazione dell’IVA nel caso in cui lo store presenta i prezzi comprensivi di IVA. Se i volumi sono importanti fate attenzione che si può incorrere in sanzioni causa evasione di imposta.

L’arcano sta  nel modo in cui Magento scorpora l’IVA: è abbastanza comune l’errore per il quale l’estrazione dell’IVA, da un prezzo (lordo) che la comprende, sia ottenuta come differenza tra l’imponibile (ottenuto dalla divisione del lordo per 1+aliquota) ed il lordo stesso. Un esempio può aiutare a capire: se ho un prezzo lordo (comprensivo di IVA al 22%) pari a € 15,11 l’imponibile sarà 15,11 / (1 + 0,22) = 12,3852459 che, arrotondato al secondo decimale, porta a 12,39. A questo punto Magento assume che l’imposta (l’IVA) sia data da 15,11 – 12,39 = 2,72. Purtroppo questo valore, anche se aritmeticamente può sembrare corretto, è sbagliato per la legge italiana. Quest’ultima infatti stabilisce che l’importo dell’IVA a debito del venditore sia sempre da calcolarsi come maggiorazione dell’aliquota sulla base imponibile ovvero, riprendendo il nostro esempio, come  12,39 * 0,22 = 2,7258 che arrotondato al secondo decimale = 2,73 (Legge 633/72 Art 27 comma 4 e successive modificazioni che hanno assunto il metodo matematico come unico applicabile). Se noi accettassimo per buono il valore proposto da Magento avremmo evaso IVA per 1 €/cent.

Il tutto si compie nella funzione calcTaxAmount all’interno del file app/code/core/Mage/Tax/Model/Calculation.php che dovrete correggere come segue:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
    public function calcTaxAmount($price, $taxRate, $priceIncludeTax = false, $round = true)
    {
        $taxRate = $taxRate / 100;
 
        if ($priceIncludeTax) {
 
			// $amount = $price * (1 - 1 / (1 + $taxRate));
			// MOD-CORE 
			// Gestione corretta dello scorporo IVA secondo il metodo matematico
			// Art. 27 Comma 4 DPR 633/72
			$priceWithoutTax = $this->round($price / ( 1 + $taxRate));
			$amount = $priceWithoutTax * ($taxRate);
 
        } else {
            $amount = $price * $taxRate;
        }
 
        if ($round) {
            return $this->round($amount);
        }
 
        return $amount;
    }

 
Attenzione ! Questa correzione va a toccare funzionalità core di Magento. Editate il file dopo averlo sposato nel code pool local oppure tenete traccia delle modifiche per riapplicarle poi in seguito ad eventuali aggiornamenti.