AllowanceCharge v UBL faktúrach: rozdiel medzi úrovňou faktúry a riadku, výpočet DPH a XML príklady.
Prakticky každá organizácia pracuje so zľavami alebo prirážkami na faktúrach. Objemová zľava, prepravné náklady, zľava za skoré objednanie, environmentálne poplatky: to všetko sú sumy, ktoré ovplyvňujú konečný celkový súčet faktúry. V UBL faktúre sa zaznamenávajú cez element AllowanceCharge, a to na dvoch úrovniach. Rozdiel medzi týmito úrovňami je podstatný pre správnosť výpočtu faktúry.
UBL pozná prirážky a zľavy na dvoch miestach:
Úroveň faktúry: element AllowanceCharge sa nachádza priamo pod koreňovým elementom faktúry, pred sumami DPH. Faktúrové zľavy znižujú celkovú sumu faktúry. Faktúrové prirážky ju zvyšujú. Sú zahrnuté do výpočtu DPH.
Úroveň riadku: element AllowanceCharge sa nachádza v rámci InvoiceLine. Riadkové zľavy a prirážky sú už spracované v LineExtensionAmount daného riadku. Ovplyvňujú cenu riadku, nie celkový súčet faktúry ako taký.
Rozdiel je jemný, ale dôležitý. Zľava na úrovni faktúry je viditeľná samostatne v celkových sumách faktúry (v AllowanceTotalAmount). Zľava na úrovni riadku je spracovaná v sume riadku a preto neviditeľná v celkových sumách.
Každá faktúrová zľava alebo prirážka obsahuje minimálne tieto elementy:
<cac:AllowanceCharge>
<cbc:ChargeIndicator>false</cbc:ChargeIndicator>
<cbc:AllowanceChargeReasonCode>95</cbc:AllowanceChargeReasonCode>
<cbc:AllowanceChargeReason>Volumekorting 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>
ChargeIndicator určuje, či ide o prirážku (true) alebo zľavu (false). AllowanceChargeReasonCode je kód zo zoznamu UNCL5189 (pre zľavy) alebo UNCL7161 (pre prirážky). Často používané kódy sú:
Tip: Ak žiadny zo štandardných kódov presne nezodpovedá, použite kód 95 (zľava) alebo najrelevantnejší kód prirážky a dôvod opíšte v
AllowanceChargeReason.
Faktúrové zľavy a prirážky sa premietnu do 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>
Výpočet: 1 000 (súčet riadkov) mínus 150 (zľava) = 850 bez DPH. Plus 178,50 DPH (21% z 850) = 1 028,50 vrátane DPH.
Na úrovni riadku to funguje inak. Zľava alebo prirážka je už spracovaná v LineExtensionAmount. Element AllowanceCharge na riadku slúži ako vysvetlenie:
<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>Staffelkorting</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 standaard</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>
LineExtensionAmount je tu 850 eur: 100 kusov x 10 eur = 1 000 eur, mínus 150 eur množstevná zľava. BaseAmount v AllowanceCharge ukazuje pôvodnú sumu pred zľavou. PriceAmount (8,50) je efektívna cena za kus po zľave.
Pozor:
LineExtensionAmountmusí byť vždy čistá suma po zľave/prirážke. AllowanceCharge na riadku je informatívny. Neodpočítavajte ho znova od sumy riadku, pretože inak nebude faktúra správna.
Ak faktúra obsahuje riadkové aj faktúrové zľavy, základy DPH sa vypočítajú nasledovne:
LineExtensionAmount (už vrátane riadkových zliav)TaxableAmount v TaxSubtotalDPH sa počíta z tohto čistého základu. Preto je nevyhnutné, aby každá faktúrová zľava a prirážka mala kategóriu DPH: systém musí vedieť, ku ktorej sadzbe zľava patrí.
Keď sa AllowanceCharge na úrovni dokumentu vzťahuje na faktúru s riadkami v rôznych sadzbách DPH (napríklad 9% a 21%), suma zľavy alebo prirážky musí byť pomerným rozdelením rozdelená medzi kategórie DPH. To znamená: úmerne k podielu každej kategórie na celkových zdaniteľných sumách.
Predpokladajme, že faktúra obsahuje 2 000 eur riadkov s 21% DPH a 1 000 eur riadkov s 9% DPH. Faktúrová zľava 300 eur musí byť potom zahrnutá ako dva samostatné elementy AllowanceCharge: 200 eur pri 21% (dve tretiny) a 100 eur pri 9% (jedna tretina). Základ DPH za kategóriu sa potom správne vypočíta.
Okrem úrovne faktúry a riadku pozná UBL tretie miesto pre zľavy: v rámci elementu Price riadku faktúry. Tento mechanizmus zobrazuje rozdiel medzi hrubou cenou a čistou jednotkovou cenou.
<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>
V tomto príklade je hrubá cena (BaseAmount) 10,00 eur. Po odpočítaní 1,50 eur zľavy zostáva čistá jednotková cena (PriceAmount) 8,50 eur.
Na úrovni ceny je povolený výhradne ChargeIndicator=false (zľava). Prirážky (ChargeIndicator=true) tu nie sú možné. Okrem toho platí validačné pravidlo BR-28: hrubá cena (BaseAmount) nesmie byť záporná. Ak chcete uplatniť prirážku na jednotkovú cenu, spracujte ju ako AllowanceCharge na úrovni riadku alebo zvýšenú cenu zadajte priamo ako PriceAmount.
Špeciálny prípad nastáva, keď riadková zľava (AllowanceCharge na úrovni riadku) presahuje cenu položky. Peppol validačné pravidlo R120 kontroluje, či LineExtensionAmount = (Quantity × PriceAmount ÷ BaseQuantity) + prirážky − zľavy. R120 výslovne nezakazuje záporné sumy; validácia zlyhá, keď tento výpočet nesedí. Pri zľave vyššej ako cena je veľká pravdepodobnosť, že výpočet nebude správny.
Tento scenár sa v praxi vyskytuje pri dobropisoch s vysokými zľavami. Riešenie: použite čistú kreditnú sumu (rozdiel medzi cenou a zľavou) priamo ako PriceAmount a element AllowanceCharge na riadku vynechajte. Pôvodnú cenu a uplatnenú zľavu môžete pre referenciu uviesť v poli Item/Name alebo v elemente Note na riadku faktúry.
Pozor: Toto riešenie je určené pre situácie, keď zľava presahuje cenu. Pri bežných zľavách, ktoré zostávajú pod cenou, normálne použijete element AllowanceCharge na riadku.
Platobná zľava (skonto) je niečo úplne iné ako faktúrová zľava. Faktúrová zľava cez AllowanceCharge je nepodmienená a priamo znižuje sumu faktúry. Platobná zľava je podmienená (závislá od platobnej lehoty) a nezapracováva sa do sumy faktúry. Pozrite článok o platobnej zľave pre podrobnosti.
Tip: Ak si nie ste istí, či je Váš AllowanceCharge správne zahrnutý, pošlite faktúru cez bezplatný eConnect Validátor. Ten skontroluje, či sú základy DPH správne vypočítané po odpočítaní zliav a prirážok.
Validujte Vašu faktúru