Rundungsdifferenzen

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.

Warum entstehen Rundungsdifferenzen?

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.

Wie UBL mit Rundungsdifferenzen umgeht
Dezimalstellen: aktuelle und zukünftige Regeln

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

  • BT-129 Invoiced quantity: 4 Dezimalstellen.
  • BT-146 Item net price, BT-147 Item price discount, BT-148 Item gross price: ISO 4217 minor unit + 2 zusätzliche Dezimalstellen.
  • BT-149 Item price base quantity: 2 Dezimalstellen.
  • Prozentfelder (u. a. BT-138 Nachlassanteil, BT-152 MwSt.-Satz): 2 Dezimalstellen.

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.

PayableRoundingAmount

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.

MwSt.-Rundung pro Steuersatz

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.

Bruttopreise (Preise inklusive MwSt.)

Bei Preisen inklusive MwSt. muss der Nettobetrag zurückgerechnet werden. Der Standardansatz ist:

  1. Nettobetrag pro Position berechnen: Brutto / (1 + MwSt.-Prozentsatz/100)
  2. Auf 2 Dezimalstellen runden
  3. Der LineExtensionAmount ist dieser Nettobetrag
  4. Die Differenz zwischen der Summe aller Nettopositionsbeträge und der Bruttosumme minus MwSt. kann eine Rundungsdifferenz ergeben
  5. Diese mit PayableRoundingAmount 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.

Wie eConnect damit umgeht

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.

Praktische Faustregeln
  1. MwSt. pro Steuersatz berechnen, nicht pro Position. Addieren Sie erst alle Positionsbeträge pro MwSt.-Satz, berechnen Sie dann die MwSt. auf diese Summe.
  2. Erst am Ende runden. Arbeiten Sie intern mit mehr als zwei Dezimalstellen und runden Sie erst beim Befüllen der XML-Elemente.
  3. PayableRoundingAmount für den letzten Cent verwenden. Wenn trotz guter Rundung eine kleine Differenz verbleibt, fangen Sie diese mit diesem Element auf.
  4. Summe prüfen. TaxExclusiveAmount + TaxAmount muss TaxInclusiveAmount ergeben. Und TaxInclusiveAmount minus PrepaidAmount plus PayableRoundingAmount muss PayableAmount ergeben.
  5. Mit dem eConnect Validator testen. Schicken Sie Ihre Rechnung vor dem Versand durch den Validator. Dieser prüft alle Rechenregeln.
Häufig gestellte Fragen
Wie verhindere ich Rundungsdifferenzen in meiner Rechnung?

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.

Was ist PayableRoundingAmount?

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.

Kann eConnect Rundungsdifferenzen automatisch beheben?

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