Rundungsdifferenzen in UBL-Rechnungen vermeiden und korrekt handhaben: PayableRoundingAmount, MwSt.-Rundung und Bruttopreise.
Eine der frustrierendsten Fehlermeldungen beim Versand von E-Rechnungen ist eine Rundungsdifferenz. Die MwSt.-Summen stimmen nicht mit den Positionsbeträgen überein, oder die Rechnungssumme weicht um einen Cent von der berechneten Summe ab. Das Ergebnis: Die Rechnung wird bei der Validierung abgelehnt. Dieser Artikel erklärt, woher Rundungsdifferenzen kommen und wie Sie sie vermeiden oder beheben können.
Rundungsdifferenzen entstehen durch die Kombination von drei Faktoren: Multiplikation, Division und Rundung auf zwei Dezimalstellen. Einige Beispiele:
Stückpreis mit vielen Dezimalstellen. Ein Preis von 3,333... Euro pro Stück x 3 Stück = 9,999 Euro. Gerundet sind das 10,00 Euro. Aber wenn Sie den Stückpreis erst auf 3,33 runden und dann multiplizieren: 3,33 x 3 = 9,99. Ein Cent Differenz.
MwSt. pro Position versus MwSt. pro Summe. Wenn Sie die MwSt. pro Rechnungsposition berechnen und runden und dann addieren, kann die Summe von der MwSt. über den Gesamtbetrag abweichen. Bei 21 % MwSt. auf 33,33 Euro sind das 7,00 Euro (gerundet). Aber 21 % von 3 x 33,33 = 21 % von 99,99 = 21,00 Euro. Während 3 x 7,00 = 21,00 Euro ebenfalls. In diesem Fall stimmt es, aber bei anderen Beträgen nicht.
Bruttopreise. Einige Branchen (Einzelhandel, Gastronomie) arbeiten mit Preisen inklusive MwSt. Der Nettobetrag muss dann zurückgerechnet werden, was einen zusätzlichen Rundungsschritt einführt.
EN 16931-1:2017 (aktuelle Produktionsversion) schreibt vor, dass alle Beträge auf 2 Dezimalstellen gerundet werden, unabhängig von der Währung.
Die Revision EN 16931-1:2026 (CEN-Zustimmung 13. März 2026, urn:cen.eu:en16931:2026) ersetzt dies durch eine währungsabhängige Anzahl von Dezimalstellen: Die Anzahl der Dezimalstellen = die Spalte "minor unit" von ISO 4217 für die verwendete Währung. Die Peppol-Implementierung über OpenPeppol wird als BIS Billing 4.0 erwartet (voraussichtlich 2027). Bis diese Version in Produktion ist, gilt die aktuelle 2-Dezimalstellen-Regel.
Ausnahmen in 2026 (fest, unabhängig von der Währung):
Auswirkungen auf eConnect: Outbound-Rechnungen werden immer in Euro (minor unit 2) versendet — keine Änderung. Inbound-Rechnungen können Währungen mit minor unit bis zu 4 enthalten — die Verarbeitung muss bis zu 4 Dezimalstellen verarbeiten können. Siehe auch EN 16931-1:2026 wesentliche Änderungen für die vollständige Übersicht.
Der UBL-Standard kennt ein spezielles Element für Rundungsdifferenzen: PayableRoundingAmount im LegalMonetaryTotal-Block. Dieses Element fängt kleine Rundungsdifferenzen auf, sodass der PayableAmount ein runder Betrag sein kann:
<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>
Die Differenz von 0,01 Euro wird explizit benannt. Die Validierungsregeln erlauben einen PayableRoundingAmount, sofern die Differenz klein genug ist (typischerweise maximal 1 Euro, je nach Profil).
XPath: Invoice/LegalMonetaryTotal/PayableRoundingAmount.
Beispiel 1 (Aufrunden): TaxInclusiveAmount beträgt 9,99 Euro, der gewünschte Zahlungsbetrag ist 10,00 Euro. Dann gilt PayableRoundingAmount = 0,01 Euro und PayableAmount = 10,00 Euro.
Beispiel 2 (keine Änderung des PayableAmount): Bei einer Preisberechnung mit 4 Dezimalstellen kann eine Subdifferenz entstehen, z. B. 8,2646 × 1,21 = 10,000166. In diesem Fall bleibt PayableAmount unverändert und kein PayableRoundingAmount ist erforderlich.
Die MwSt.-Berechnung in einer UBL-Rechnung funktioniert pro MwSt.-Satz, nicht pro Position. Alle Positionsbeträge mit demselben MwSt.-Satz werden zur Bemessungsgrundlage (TaxableAmount) addiert, und darauf wird die MwSt. berechnet. Dies verhindert, dass Sie pro Position runden und anschließend eine kumulative Rundungsdifferenz erhalten.
Die Formel lautet:
TaxableAmount = Summe des LineExtensionAmount pro MwSt.-Kategorie
- AllowanceTotalAmount pro MwSt.-Kategorie
+ ChargeTotalAmount pro MwSt.-Kategorie
TaxAmount = TaxableAmount x Percent / 100 (gerundet auf 2 Dezimalstellen)
Wichtig: Berechnen Sie die MwSt. immer auf der Gesamtbemessungsgrundlage pro Steuersatz, nicht pro Position. Die MwSt.-Berechnung pro Position ist die häufigste Ursache für Rundungsdifferenzen.
Bei Preisen inklusive MwSt. muss der Nettobetrag zurückgerechnet werden. Der Standardansatz ist:
Brutto / (1 + MwSt.-Prozentsatz/100)LineExtensionAmount ist dieser NettobetragPayableRoundingAmount auffangen<!-- Preis inklusive MwSt.: 12,10 EUR pro Stück, 3 Stück -->
<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>
In diesem Beispiel beträgt der Bruttopreis 12,10 Euro. Der Nettobetrag ist 10,00 Euro pro Stück (12,10 / 1,21). Mal 3 = 30,00 Euro. MwSt.: 21 % von 30,00 = 6,30 Euro. Gesamt: 36,30 Euro. Das stimmt genau mit 3 x 12,10 Euro überein. Aber bei Preisen, die sich nicht sauber teilen lassen, entsteht eine Differenz.
eConnect validiert jede Rechnung auf interne Konsistenz. Wenn eine kleine Rundungsdifferenz innerhalb der Toleranz liegt, wird die Rechnung akzeptiert. Bei größeren Abweichungen erhalten Sie eine klare Fehlermeldung, die anzeigt, wo die Differenz liegt.
Die automatische XML-Reparaturfunktion von eConnect kann in einigen Fällen einen fehlenden PayableRoundingAmount hinzufügen, wenn die Differenz kleiner als die Toleranzgrenze ist. Es ist aber immer besser, die Rundung in Ihrer eigenen Software korrekt zu handhaben.
TaxExclusiveAmount + TaxAmount muss TaxInclusiveAmount ergeben. Und TaxInclusiveAmount minus PrepaidAmount plus PayableRoundingAmount muss PayableAmount ergeben.Berechnen Sie die MwSt. pro Steuersatz (nicht pro Position), arbeiten Sie intern mit mehr als zwei Dezimalstellen und runden Sie erst beim Befüllen der XML-Elemente. Wenn trotz guter Rundung eine kleine Differenz verbleibt, fangen Sie diese mit dem PayableRoundingAmount-Element auf.
Es ist ein spezielles UBL-Element, das kleine Rundungsdifferenzen in den Rechnungssummen auffängt. Die Differenz wird explizit benannt, sodass die Rechnung trotzdem validiert. Die meisten Profile erlauben maximal 1 Euro.
In einigen Fällen kann die automatische XML-Reparaturfunktion einen fehlenden PayableRoundingAmount hinzufügen, wenn die Differenz innerhalb der Toleranzgrenze liegt. Es ist aber immer besser, die Rundung in Ihrer eigenen Software korrekt zu handhaben.
Rechnung prüfen