Zaokrouhlovací rozdíly v UBL fakturách

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.

Proč vznikají zaokrouhlovací rozdíly?

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í.

Jak UBL řeší zaokrouhlovací rozdíly
Počet desetinných míst: aktuální a budoucí pravidlo

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):

  • BT-129 Invoiced quantity: 4 desetinná místa.
  • BT-146 Item net price, BT-147 Item price discount, BT-148 Item gross price: ISO 4217 minor unit + 2 extra desetinná místa.
  • BT-149 Item price base quantity: 2 desetinná místa.
  • Procentuální pole (mimo jiné BT-138 procento slevy, BT-152 sazba DPH): 2 desetinná místa.

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.

PayableRoundingAmount

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.

Zaokrouhlení DPH podle sazby

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ů.

Ceny včetně DPH

U cen včetně DPH musí být čistá částka přepočítána zpět. Standardní postup je:

  1. Vypočítejte čistou částku na řádek: brutto / (1 + sazba DPH/100)
  2. Zaokrouhlujte na 2 desetinná místa
  3. LineExtensionAmount je tato čistá částka
  4. Rozdíl mezi součtem všech čistých částek řádků a hrubým celkem mínus DPH může vést k zaokrouhlovacímu rozdílu
  5. Zachyťte ho pomocí PayableRoundingAmount
<!-- 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.

Jak s tím pracuje eConnect

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.

Praktická pravidla
  1. Počítejte DPH podle sazby, ne podle řádku. Nejprve sečtěte všechny částky řádků podle sazby DPH, pak vypočítejte DPH z tohoto celku.
  2. Zaokrouhlujte až nakonec. Pracujte interně s více než dvěma desetinnými místy a zaokrouhlujte až při plnění XML elementů.
  3. Použijte PayableRoundingAmount pro poslední cent. Pokud navzdory správnému zaokrouhlení zůstane malý rozdíl, zachyťte ho tímto elementem.
  4. Zkontrolujte součet. TaxExclusiveAmount + TaxAmount se musí rovnat TaxInclusiveAmount. A TaxInclusiveAmount mínus PrepaidAmount plus PayableRoundingAmount se musí rovnat PayableAmount.
  5. Otestujte s eConnect Validátorem. Pošlete fakturu přes validátor před odesláním. Ten zkontroluje všechna výpočetní pravidla.
Nejčastější dotazy
Jak předejít zaokrouhlovacím rozdílům ve faktuře?

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.

Co je 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.

Může eConnect automaticky opravit zaokrouhlovací rozdíly?

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