Menge mal Preis ergibt nicht den Positionsbetrag (MUSTANG-ARITHMETIC)
Diese Meldung kommt nicht aus dem EN-16931-Regelwerk, sondern aus einer zusätzlichen Überschlagsrechnung der Prüf-Engine. Sie rechnet Menge mal ausgewiesenem Einzelpreis nach — und fast immer liegt die Abweichung an einem Einzelpreis, der für die Ausgabe gerundet wurde.
Was bedeutet dieser Fehler?
Regeltext der Prüf-Engine
Arithmetical issue: Payable total in XML is 2221.97, but calculated total is 2225.30 with tax basis 1870.00 and with positions 1870.00
Die Engine multipliziert die Menge (BT-129) mit dem ausgewiesenen Einzelpreis (BT-146) und vergleicht das Ergebnis mit dem Positionsbetrag (BT-131) und den Gesamtsummen.
Der typische Fall: Die Software rechnet intern mit 1,8672 € je Stück, gibt in BT-146 aber 1,87 € aus und bildet den Positionsbetrag aus dem ungerundeten Wert. 356,51 × 1,867 ergibt 665,60 € — ausgewiesen sind 665,68 €. Die Summe der Rechnung stimmt, sie lässt sich aus den Zahlen in der XML nur nicht nachvollziehen.
Bis Mustang 2.24 gab es hier einen bekannten Fehlalarm: Die Summenprobe ließ Zu- und Abschläge auf Dokumentebene aus. Seit Fassung 2.26 rechnet sie diese mit — erscheint die Meldung heute, geht die Rechnung tatsächlich nicht auf.
Bei XRechnung erscheint derselbe Sachverhalt zusätzlich als harter Fehler PEPPOL-EN16931-R120. Bei reiner EN 16931 und bei ZUGFeRD bleibt es bei dieser Warnung, weil das EN-16931-Regelwerk gar keine Regel für den Zeilenbetrag kennt.
Betroffene Felder
- BT-146 — Einzelpreis der Position — hier ist die Rundung zulässig zu vermeiden cac:Price/cbc:PriceAmount (UBL) · ram:NetPriceProductTradePrice/ram:ChargeAmount (CII)
- BT-149 — Preisbasismenge, etwa „je 100 Stück" — die elegantere Lösung cac:Price/cbc:BaseQuantity (UBL) · ram:BasisQuantity (CII)
- BT-131 — Positionsbetrag, auf zwei Nachkommastellen festgelegt cbc:LineExtensionAmount (UBL) · ram:LineTotalAmount (CII)
Beispiel
❌ FEHLERHAFT
<cbc:InvoicedQuantity>356.51</cbc:InvoicedQuantity> <cbc:LineExtensionAmount>665.68</cbc:LineExtensionAmount> <cac:Price><cbc:PriceAmount>1.87</cbc:PriceAmount></cac:Price>
356,51 × 1,87 = 666,67. Ausgewiesen sind 665,68 — der Betrag stammt aus dem ungerundeten Preis 1,8672.
✓ KORREKT
<cbc:InvoicedQuantity>356.51</cbc:InvoicedQuantity> <cbc:LineExtensionAmount>665.68</cbc:LineExtensionAmount> <cac:Price><cbc:PriceAmount>1.8672</cbc:PriceAmount></cac:Price>
Der Einzelpreis in voller Genauigkeit. Die EN 16931 begrenzt BT-146 nicht auf zwei Nachkommastellen — nachgemessen mit vier und mit sechs Stellen, beides läuft ohne Befund durch.
Häufige Ursachen
- Der Einzelpreis wird für die Ausgabe auf zwei Nachkommastellen gerundet, der Positionsbetrag aber aus dem ungerundeten Wert gebildet. Mit Abstand der häufigste Fall, typisch bei Mengen mit Nachkommastellen — Liter, Kilogramm, Stunden.
- Ein Rabatt auf Positionsebene wurde im Betrag berücksichtigt, aber nicht im Einzelpreis ausgewiesen.
- Die Menge wurde gerundet, nicht der Preis.
- Bei mehreren Positionen: Es wurde je Position gerundet und danach summiert, statt erst zu summieren.
So behebst du den Fehler
Schritt 1: Den Einzelpreis in voller Genauigkeit ausgeben
Die EN 16931 legt nur die Beträge auf zwei Nachkommastellen fest, nicht den Einzelpreis. Gib BT-146 mit so vielen Stellen aus, wie deine Kalkulation hergibt — vier Stellen reichen fast immer. Das ist die kleinste Änderung und behebt den Befund vollständig.
Schritt 2: Oder die Preisbasismenge nutzen
Statt 1,87 € je Stück schreibst du 186,72 € je 100 Stück: Einzelpreis in BT-146, die Basismenge 100 in BT-149. Das ist die von der Norm vorgesehene Lösung für kleine Stückpreise und bleibt bei zwei Nachkommastellen.
Schritt 3: Nachrechnen, bevor du etwas änderst
Teile den ausgewiesenen Positionsbetrag durch die Menge. Kommt dabei ein Preis mit mehr Nachkommastellen heraus als in der Rechnung steht, ist die Ursache gefunden. Ergibt sich ein ganz anderer Wert, liegt ein echter Rechenfehler vor — dann stimmen auch die Gesamtsummen nicht.
Schritt 4: Nicht: den Positionsbetrag anpassen
Man kann den Befund auch beseitigen, indem man den Positionsbetrag an den gerundeten Preis angleicht. Das geht durch, verschiebt den Rundungsverlust aber auf den Rechnungsempfänger und ändert den Rechnungsbetrag. Nur sinnvoll, wenn das auch buchhalterisch so gewollt ist.
Fehler behoben? Jetzt erneut validieren
Prüfe deine korrigierte XRechnung oder ZUGFeRD-Datei kostenlos mit dem KoSIT-Validator.