AllowanceCharge v UBL fakturách: rozdíl mezi úrovní faktury a řádku, výpočet DPH a XML příklady.
Prakticky každá organizace pracuje se slevami nebo příplatky na fakturách. Objemová sleva, přepravné náklady, sleva za včasné objednání, environmentální poplatky: to vše jsou částky, které ovlivňují konečný celkový součet faktury. V UBL faktuře se zaznamenávají přes element AllowanceCharge, a to na dvou úrovních. Rozdíl mezi těmito úrovněmi je podstatný pro správnost výpočtu faktury.
UBL zná příplatky a slevy na dvou místech:
Úroveň faktury: element AllowanceCharge se nachází přímo pod kořenovým elementem faktury, před souhrny DPH. Fakturové slevy snižují celkovou částku faktury. Fakturové příplatky ji zvyšují. Jsou zahrnuty do výpočtu DPH.
Úroveň řádku: element AllowanceCharge se nachází v rámci InvoiceLine. Řádkové slevy a příplatky jsou již zpracovány v LineExtensionAmount daného řádku. Ovlivňují cenu řádku, ne celkový součet faktury jako takový.
Rozdíl je jemný, ale důležitý. Sleva na úrovni faktury je viditelná samostatně v celkových částkách faktury (v AllowanceTotalAmount). Sleva na úrovni řádku je zpracována v částce řádku a proto neviditelná v celkových částkách.
Každá fakturová sleva nebo příplatek obsahuje minimálně tyto 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, zda jde o příplatek (true) nebo slevu (false). AllowanceChargeReasonCode je kód z číselníku UNCL5189 (pro slevy) nebo UNCL7161 (pro příplatky). Často používané kódy jsou:
Tip: Pokud žádný ze standardních kódů přesně neodpovídá, použijte kód 95 (sleva) nebo nejrelevantnější kód příplatku a důvod popište v
AllowanceChargeReason.
Fakturové slevy a příplatky se promítnou 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 (součet řádků) mínus 150 (sleva) = 850 bez DPH. Plus 178,50 DPH (21% z 850) = 1 028,50 včetně DPH.
Na úrovni řádku to funguje jinak. Sleva nebo příplatek je již zpracován v LineExtensionAmount. Element AllowanceCharge na řádku slouží jako vysvětlení:
<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 zde 850 eur: 100 kusů x 10 eur = 1 000 eur, mínus 150 eur množstevní sleva. BaseAmount v AllowanceCharge ukazuje původní částku před slevou. PriceAmount (8,50) je efektivní cena za kus po slevě.
Pozor:
LineExtensionAmountmusí být vždy čistá částka po slevě/příplatku. AllowanceCharge na řádku je informativní. Neodečítejte ho znovu od částky řádku, protože jinak nebude faktura správná.
Pokud faktura obsahuje řádkové i fakturové slevy, základy DPH se vypočítají následovně:
LineExtensionAmount (již včetně řádkových slev)TaxableAmount v TaxSubtotalDPH se počítá z tohoto čistého základu. Proto je nezbytné, aby každá fakturová sleva a příplatek měla kategorii DPH: systém musí vědět, ke které sazbě sleva patří.
Když se AllowanceCharge na úrovni dokumentu vztahuje na fakturu s řádky v různých sazbách DPH (například 9% a 21%), částka slevy nebo příplatku musí být poměrným rozdělením rozdělena mezi kategorie DPH. To znamená: úměrně k podílu každé kategorie na celkových zdanitelných částkách.
Předpokládejme, že faktura obsahuje 2 000 eur řádků s 21% DPH a 1 000 eur řádků s 9% DPH. Fakturová sleva 300 eur musí být pak zahrnuta jako dva samostatné elementy AllowanceCharge: 200 eur u 21% (dvě třetiny) a 100 eur u 9% (jedna třetina). Základ DPH za kategorii se pak správně vypočítá.
Kromě úrovně faktury a řádku zná UBL třetí místo pro slevy: v rámci elementu Price řádku faktury. Tento mechanismus zobrazuje rozdíl mezi 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 příkladu je hrubá cena (BaseAmount) 10,00 eur. Po odečtení 1,50 eur slevy zůstává čistá jednotková cena (PriceAmount) 8,50 eur.
Na úrovni ceny je povolen výhradně ChargeIndicator=false (sleva). Příplatky (ChargeIndicator=true) zde nejsou možné. Kromě toho platí validační pravidlo BR-28: hrubá cena (BaseAmount) nesmí být záporná. Pokud chcete uplatnit příplatek na jednotkovou cenu, zpracujte ho jako AllowanceCharge na úrovni řádku nebo zvýšenou cenu zadejte přímo jako PriceAmount.
Zvláštní případ nastává, když řádková sleva (AllowanceCharge na úrovni řádku) přesahuje cenu položky. Peppol validační pravidlo R120 kontroluje, zda LineExtensionAmount = (Quantity × PriceAmount ÷ BaseQuantity) + příplatky − slevy. R120 výslovně nezakazuje záporné částky; validace selže, když tento výpočet nesedí. Při slevě vyšší než cena je vysoká pravděpodobnost, že výpočet nebude správný.
Tento scénář se v praxi vyskytuje u dobropisů s vysokými slevami. Řešení: použijte čistou kreditní částku (rozdíl mezi cenou a slevou) přímo jako PriceAmount a element AllowanceCharge na řádku vynechte. Původní cenu a uplatněnou slevu můžete pro referenci uvést v poli Item/Name nebo v elementu Note na řádku faktury.
Pozor: Toto řešení je určeno pro situace, kdy sleva přesahuje cenu. U běžných slev, které zůstávají pod cenou, normálně použijete element AllowanceCharge na řádku.
Platební sleva (skonto) je něco zcela jiného než fakturová sleva. Fakturová sleva přes AllowanceCharge je nepodmíněná a přímo snižuje částku faktury. Platební sleva je podmíněná (závislá na platební lhůtě) a nezapracovává se do částky faktury. Podívejte se na článek o platební slevě pro podrobnosti.
Tip: Pokud si nejste jisti, zda je Váš AllowanceCharge správně zahrnut, pošlete fakturu přes bezplatný eConnect Validátor. Ten zkontroluje, zda jsou základy DPH správně vypočítány po odečtení slev a příplatků.
Validujte Vaši fakturu