Zaokrouhlovací rozdíly v UBL fakturách předcházet a správně řešit: PayableRoundingAmount, zaokrouhlení DPH a ceny včetně DPH.
Jednou z nejfrustrujícějších chybových hlášení při odesílání e-faktur je zaokrouhlovací rozdíl. Částky DPH nesouhlasí s částkami řádků nebo celkový součet faktury se odchyluje o cent od vypočítané částky. Výsledek: faktura je při validaci zamítnuta. Tento článek vysvětluje, odkud zaokrouhlovací rozdíly pocházejí a jak jim předcházet nebo je řešit.
Zaokrouhlovací rozdíly vznikají kombinací tří faktorů: násobení, dělení a zaokrouhlení na dvě desetinná místa. Několik příkladů:
Jednotková cena s mnoha desetinnými místy. Cena 3,333... eura za kus x 3 kusy = 9,999 eura. Zaokrouhleno je to 10,00 eur. Pokud ale nejprve zaokrouhlíte jednotkovou cenu na 3,33 a pak vynásobíte: 3,33 x 3 = 9,99. Rozdíl jednoho centu.
DPH na řádek versus DPH na celkový součet. Pokud vypočítáte DPH na každý řádek faktury a zaokrouhlíte, a poté sečtete, součet se může odchýlit od DPH vypočítané z celkového součtu. Při 21 % DPH z 33,33 eura je to 7,00 eur (zaokrouhleno). Ale 21 % z 3 x 33,33 = 21 % z 99,99 = 21,00 eur. Zatímco 3 x 7,00 = 21,00 eur také. V tomto případě to souhlasí, ale u jiných částek ne.
Ceny včetně DPH. Některé sektory (maloobchod, pohostinství) pracují s cenami včetně DPH. Čistá částka musí být pak přepočítána zpět, což přináší další moment zaokrouhlování.
EN 16931-1:2017 (aktuální produkční verze) stanoví, že všechny částky se zaokrouhlují na 2 desetinná místa, bez ohledu na měnu.
Revize EN 16931-1:2026 (schválení CEN 13. března 2026, urn:cen.eu:en16931:2026) toto nahrazuje počtem desetinných míst závislým na měně: počet desetinných míst = sloupec „minor unit" z ISO 4217 pro použitou měnu. Implementace v Peppolu prostřednictvím OpenPeppol se očekává jako BIS Billing 4.0 (orientačně 2027). Do té doby platí stávající pravidlo 2 desetinných míst.
Výjimky v roce 2026 (pevné, bez ohledu na měnu):
Dopad na eConnect: odchozí faktury jsou vždy v eurech (minor unit 2) — bez změny. Příchozí faktury mohou obsahovat měny s minor unit až do 4 — zpracování musí zvládnout až 4 desetinná místa. Viz také EN 16931-1:2026 hlavní změny pro úplný přehled.
UBL standard zná speciální element pro zaokrouhlovací rozdíly: PayableRoundingAmount v bloku LegalMonetaryTotal. Tento element zachycuje malé zaokrouhlovací rozdíly, takže PayableAmount může být kulatá částka:
<cac:LegalMonetaryTotal>
<cbc:LineExtensionAmount currencyID="EUR">99.99</cbc:LineExtensionAmount>
<cbc:TaxExclusiveAmount currencyID="EUR">99.99</cbc:TaxExclusiveAmount>
<cbc:TaxInclusiveAmount currencyID="EUR">120.99</cbc:TaxInclusiveAmount>
<cbc:PayableRoundingAmount currencyID="EUR">0.01</cbc:PayableRoundingAmount>
<cbc:PayableAmount currencyID="EUR">121.00</cbc:PayableAmount>
</cac:LegalMonetaryTotal>
Rozdíl 0,01 eura je explicitně pojmenován. Validační pravidla povolují PayableRoundingAmount, pokud je rozdíl dostatečně malý (obvykle maximálně 1 euro, v závislosti na profilu).
XPath: Invoice/LegalMonetaryTotal/PayableRoundingAmount.
Příklad 1 (zaokrouhlení nahoru): TaxInclusiveAmount je 9,99 eura, pożadovaná částka k zaplacení je 10,00 eura. Pak PayableRoundingAmount = 0,01 eura a PayableAmount = 10,00 eura.
Příklad 2 (bez změny PayableAmount): při výpočtu ceny se 4 desetinnými místy můże vzniknout submikrorozdíl, např. 8,2646 × 1,21 = 10,000166. V takovém případě PayableAmount zů stává nezměněn a PayableRoundingAmount není potřeba.
Výpočet DPH v UBL faktuře funguje podle sazby DPH, ne podle řádku. Všechny částky řádků se stejnou sazbou DPH se sečtou do základu (TaxableAmount) a z něj se vypočítá DPH. To předchází zaokrouhlování na řádek a následnému kumulativnímu zaokrouhlovacímu rozdílu.
Vzorec je:
TaxableAmount = součet LineExtensionAmount podle kategorie DPH
- AllowanceTotalAmount podle kategorie DPH
+ ChargeTotalAmount podle kategorie DPH
TaxAmount = TaxableAmount × Percent / 100 (zaokrouhleno na 2 desetinná místa)
Důležité: DPH vždy počítejte z celkového základu podle sazby, ne z řádku. Výpočet DPH na řádek je nejčastější příčinou zaokrouhlovacích rozdílů.
U cen včetně DPH musí být čistá částka přepočítána zpět. Standardní postup je:
brutto / (1 + sazba DPH/100)LineExtensionAmount je tato čistá částkaPayableRoundingAmount<!-- Cena včetně DPH: 12,10 € za kus, 3 kusy -->
<cac:InvoiceLine>
<cbc:ID>1</cbc:ID>
<cbc:InvoicedQuantity unitCode="EA">3</cbc:InvoicedQuantity>
<cbc:LineExtensionAmount currencyID="EUR">30.00</cbc:LineExtensionAmount>
<cac:Price>
<cbc:PriceAmount currencyID="EUR">10.00</cbc:PriceAmount>
</cac:Price>
</cac:InvoiceLine>
V tomto příkladu je cena včetně DPH 12,10 eura. Čistá částka je 10,00 eur za kus (12,10 / 1,21). Krát 3 = 30,00 eur. DPH: 21 % z 30,00 = 6,30 eura. Celkem: 36,30 eura. To přesně odpovídá 3 x 12,10 eura. Ale u cen, které nejsou pěkně dělitelné, vznikne rozdíl.
eConnect validuje každou fakturu na vnitřní konzistentnost. Pokud je malý zaokrouhlovací rozdíl v rámci tolerance, faktura je akceptována. U větších odchylek dostanete jasné chybové hlášení, které ukazuje, kde se rozdíl nachází.
Automatická funkce opravy XML v eConnect může v některých případech přidat chybějící PayableRoundingAmount, pokud je rozdíl menší než hranice tolerance. Je však vždy lepší zaokrouhlení správně řešit ve vlastním softwaru.
TaxExclusiveAmount + TaxAmount se musí rovnat TaxInclusiveAmount. A TaxInclusiveAmount mínus PrepaidAmount plus PayableRoundingAmount se musí rovnat PayableAmount.Počítejte DPH podle sazby (ne podle řádku), pracujte interně s více než dvěma desetinnými místy a zaokrouhlujte až při plnění XML elementů. Pokud navzdory správnému zaokrouhlení zůstane malý rozdíl, zachyťte ho elementem PayableRoundingAmount.
Je to speciální UBL element, který zachycuje malé zaokrouhlovací rozdíly v celkových součtech faktury. Rozdíl je explicitně pojmenován, takže faktura přesto projde validací. Většina profilů povoluje maximum 1 euro.
V některých případech může automatická funkce opravy XML přidat chybějící PayableRoundingAmount, pokud je rozdíl v rámci hranice tolerance. Je však vždy lepší zaokrouhlení správně řešit ve vlastním softwaru.
Zkontrolovat fakturu