Maggiorazioni e sconti

AllowanceCharge nelle fatture UBL: la differenza tra livello documento e livello riga, calcolo dell'IVA ed esempi XML.

Praticamente ogni organizzazione utilizza sconti o maggiorazioni sulle fatture. Uno sconto quantità, costi di trasporto, uno sconto per prenotazione anticipata, costi ambientali: sono tutti importi che influenzano il totale finale della fattura. In una fattura UBL vengono registrati tramite l'elemento AllowanceCharge, utilizzabile su due livelli. La differenza tra questi livelli è essenziale per mantenere corretto il calcolo della fattura.

Due livelli: documento e riga

UBL prevede maggiorazioni e sconti in due posizioni:

Livello documento: l'elemento AllowanceCharge si trova direttamente sotto l'elemento radice della fattura, prima dei totali IVA. Gli sconti a livello documento riducono l'importo totale della fattura. Le maggiorazioni a livello documento lo aumentano. Entrambi vengono inclusi nel calcolo dell'IVA.

Livello riga: l'elemento AllowanceCharge si trova all'interno di un InvoiceLine. Gli sconti e le maggiorazioni a livello riga sono già incorporati nel LineExtensionAmount di quella riga. Influenzano il prezzo della riga, non il totale della fattura in quanto tale.

La differenza è sottile ma importante. Uno sconto a livello documento viene mostrato separatamente nei totali della fattura (in AllowanceTotalAmount). Uno sconto a livello riga è incorporato nell'importo della riga e quindi invisibile nei totali.

AllowanceCharge a livello documento

Ogni sconto o maggiorazione a livello documento contiene almeno questi elementi:

<cac:AllowanceCharge>
  <cbc:ChargeIndicator>false</cbc:ChargeIndicator>
  <cbc:AllowanceChargeReasonCode>95</cbc:AllowanceChargeReasonCode>
  <cbc:AllowanceChargeReason>Sconto quantità Q1 2026</cbc:AllowanceChargeReason>
  <cbc:Amount currencyID="EUR">150.00</cbc:Amount>
  <cac:TaxCategory>
    <cbc:ID>S</cbc:ID>
    <cbc:Percent>21.00</cbc:Percent>
    <cac:TaxScheme>
      <cbc:ID>VAT</cbc:ID>
    </cac:TaxScheme>
  </cac:TaxCategory>
</cac:AllowanceCharge>

Il ChargeIndicator determina se si tratta di una maggiorazione (true) o di uno sconto (false). L'AllowanceChargeReasonCode è un codice della lista UNCL5189 (per gli sconti) o UNCL7161 (per le maggiorazioni). I codici più utilizzati sono:

CodiceTipoSignificato41ScontoBonus per pagamento anticipato42ScontoSconto introduttivo60ScontoSconto produttore95ScontoSconto100ScontoAccordo specialeABLMaggiorazioneCosti di imballaggioFCMaggiorazioneCosti di trasportoAEWMaggiorazioneSupplemento ambientale

Suggerimento: se nessuno dei codici standard corrisponde esattamente, utilizzi il codice 95 (sconto) o il codice di maggiorazione più pertinente, e descriva il motivo in AllowanceChargeReason.

Effetto sui totali della fattura

Gli sconti e le maggiorazioni a livello documento si riflettono nel LegalMonetaryTotal:

<cac:LegalMonetaryTotal>
  <cbc:LineExtensionAmount currencyID="EUR">1000.00</cbc:LineExtensionAmount>
  <cbc:AllowanceTotalAmount currencyID="EUR">150.00</cbc:AllowanceTotalAmount>
  <cbc:TaxExclusiveAmount currencyID="EUR">850.00</cbc:TaxExclusiveAmount>
  <cbc:TaxInclusiveAmount currencyID="EUR">1028.50</cbc:TaxInclusiveAmount>
  <cbc:PayableAmount currencyID="EUR">1028.50</cbc:PayableAmount>
</cac:LegalMonetaryTotal>

Il calcolo: 1.000 (totale righe) meno 150 (sconto) = 850 IVA esclusa. Più 178,50 IVA (21% di 850) = 1.028,50 IVA inclusa.

AllowanceCharge a livello riga

A livello riga il funzionamento è diverso. Lo sconto o la maggiorazione è già incorporato nel LineExtensionAmount. L'elemento AllowanceCharge sulla riga serve come informazione esplicativa:

<cac:InvoiceLine>
  <cbc:ID>1</cbc:ID>
  <cbc:InvoicedQuantity unitCode="EA">100</cbc:InvoicedQuantity>
  <cbc:LineExtensionAmount currencyID="EUR">850.00</cbc:LineExtensionAmount>
  <cac:AllowanceCharge>
    <cbc:ChargeIndicator>false</cbc:ChargeIndicator>
    <cbc:AllowanceChargeReasonCode>95</cbc:AllowanceChargeReasonCode>
    <cbc:AllowanceChargeReason>Sconto a scaglioni</cbc:AllowanceChargeReason>
    <cbc:Amount currencyID="EUR">150.00</cbc:Amount>
    <cbc:BaseAmount currencyID="EUR">1000.00</cbc:BaseAmount>
  </cac:AllowanceCharge>
  <cac:Item>
    <cbc:Name>Widget standard</cbc:Name>
    <cac:ClassifiedTaxCategory>
      <cbc:ID>S</cbc:ID>
      <cbc:Percent>21.00</cbc:Percent>
      <cac:TaxScheme>
        <cbc:ID>VAT</cbc:ID>
      </cac:TaxScheme>
    </cac:ClassifiedTaxCategory>
  </cac:Item>
  <cac:Price>
    <cbc:PriceAmount currencyID="EUR">8.50</cbc:PriceAmount>
  </cac:Price>
</cac:InvoiceLine>

Il LineExtensionAmount è 850 euro: 100 pezzi x 10 euro = 1.000 euro, meno 150 euro di sconto a scaglioni. Il BaseAmount nell'AllowanceCharge mostra l'importo originale prima dello sconto. Il PriceAmount (8,50) è il prezzo effettivo per unità dopo lo sconto.

Attenzione: il LineExtensionAmount deve sempre corrispondere all'importo netto dopo lo sconto/maggiorazione. L'AllowanceCharge sulla riga è informativo. Non lo sottragga nuovamente dall'importo della riga, altrimenti la fattura non torna più.

Calcolo IVA con sconti multipli

Se una fattura contiene sia sconti a livello riga sia sconti a livello documento, le basi imponibili IVA vengono calcolate come segue:

  1. Per ogni riga: il LineExtensionAmount (già comprensivo degli sconti a livello riga)
  2. Per ogni categoria IVA: somma di tutti gli importi delle righe in quella categoria
  3. Meno gli sconti a livello documento nella stessa categoria
  4. Più le maggiorazioni a livello documento nella stessa categoria
  5. Il risultato è il TaxableAmount nel TaxSubtotal

L'IVA viene calcolata su questa base imponibile netta. Per questo è essenziale che ogni sconto e maggiorazione a livello documento abbia una categoria IVA associata: il sistema deve sapere a quale aliquota corrisponde lo sconto.

Ripartizione pro-rata con aliquote IVA multiple

Quando un AllowanceCharge a livello documento si applica a una fattura con righe in diverse aliquote IVA (ad esempio 9% e 21%), l'importo dello sconto o della maggiorazione deve essere ripartito pro-rata tra le categorie IVA. Ciò significa: proporzionalmente alla quota di ciascuna categoria sul totale degli importi imponibili.

Supponiamo che una fattura contenga 2.000 euro di righe al 21% di IVA e 1.000 euro di righe al 9% di IVA. Uno sconto a livello documento di 300 euro deve essere suddiviso in due elementi AllowanceCharge separati: 200 euro al 21% (due terzi) e 100 euro al 9% (un terzo). La base imponibile per categoria viene quindi calcolata correttamente.

AllowanceCharge a livello prezzo

Oltre al livello documento e riga, UBL prevede una terza posizione per gli sconti: all'interno dell'elemento Price di una riga fattura. Questo meccanismo mostra la differenza tra il prezzo lordo e il prezzo unitario netto.

<cac:Price>
  <cbc:PriceAmount currencyID="EUR">8.50</cbc:PriceAmount>
  <cbc:BaseQuantity unitCode="EA">1</cbc:BaseQuantity>
  <cac:AllowanceCharge>
    <cbc:ChargeIndicator>false</cbc:ChargeIndicator>
    <cbc:Amount currencyID="EUR">1.50</cbc:Amount>
    <cbc:BaseAmount currencyID="EUR">10.00</cbc:BaseAmount>
  </cac:AllowanceCharge>
</cac:Price>

In questo esempio il prezzo lordo (BaseAmount) è 10,00 euro. Dopo la detrazione di 1,50 euro di sconto, il prezzo unitario netto (PriceAmount) risulta 8,50 euro.

A livello prezzo è consentito esclusivamente ChargeIndicator=false (sconto). Le maggiorazioni (ChargeIndicator=true) non sono ammesse in questa posizione. Inoltre, la regola di validazione BR-28 stabilisce che il prezzo lordo (BaseAmount) non può essere negativo. Se si desidera applicare una maggiorazione al prezzo unitario, la si inserisca come AllowanceCharge a livello riga oppure si indichi direttamente il prezzo maggiorato come PriceAmount.

Sconto superiore al prezzo dell'articolo

Un caso particolare si verifica quando uno sconto a livello riga (AllowanceCharge sulla riga) supera il prezzo dell'articolo. La regola di validazione Peppol R120 verifica se LineExtensionAmount = (Quantity × PriceAmount ÷ BaseQuantity) + maggiorazioni − sconti. R120 non vieta esplicitamente gli importi negativi; la validazione fallisce quando questo calcolo non è bilanciato. Quando lo sconto supera il prezzo, è molto probabile che il calcolo non torni.

Questo scenario si verifica nella pratica con le note di credito con sconti elevati. La soluzione: si utilizzi l'importo netto del credito (la differenza tra prezzo e sconto) direttamente come PriceAmount e si ometta l'elemento AllowanceCharge sulla riga. Il prezzo originale e lo sconto applicato possono essere indicati a titolo informativo nel campo Item/Name o in un elemento Note sulla riga della fattura.

Attenzione: questa soluzione alternativa è pensata per situazioni in cui lo sconto supera il prezzo. Per gli sconti regolari che rimangono al di sotto del prezzo, si utilizzi normalmente l'elemento AllowanceCharge sulla riga.

Combinazione con lo sconto per pagamento anticipato

Lo sconto per pagamento anticipato (skonto) è qualcosa di completamente diverso da uno sconto in fattura. Uno sconto in fattura tramite AllowanceCharge è incondizionato e riduce direttamente l'importo della fattura. Lo sconto per pagamento anticipato è condizionale (dipende dal termine di pagamento) e non viene incorporato nell'importo della fattura. Per i dettagli, consulti l'articolo sullo sconto per pagamento anticipato.

Suggerimento: se ha dubbi sulla corretta compilazione dell'AllowanceCharge, invii la fattura tramite il Validatore eConnect gratuito. Questo verifica che le basi imponibili IVA vengano calcolate correttamente dopo la detrazione di sconti e maggiorazioni.


Valida la fattura

Correlati