08 Dic 2014
Inserito da: Andrea Lanfranchi in: Internet, Programmazione
Tra 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.
Un commento
Francesco
17-Mar-2015 1ciao,
ho provato ad applicarlo su magento 1.7 ma sembra non funzionare.