Zum Inhalt springen

BR-CO – Bedingungen und Berechnungen

BR-CO-13: Nettogesamtbetrag (BT-109) geht nicht auf

FehlerGeschäftsregel EN 16931 (CEN)

Originaltext der Regel

[BR-CO-13]-Invoice total amount without VAT (BT-109) = Σ Invoice line net amount (BT-131) - Sum of allowances on document level (BT-107) + Sum of charges on document level (BT-108).

Quelle: CEN EN 16931, Version 1.3.16

Bedeutung der Regel

Der Nettogesamtbetrag Ihrer Rechnung geht nicht auf. Die Norm rechnet ihn so nach: Summe aller Positionsnettobeträge, minus Summe der Nachlässe auf Rechnungsebene, plus Summe der Zuschläge auf Rechnungsebene, auf zwei Nachkommastellen gerundet. Weicht der angegebene Betrag auch nur um einen Cent ab, wird die Rechnung abgewiesen. Häufig rundet die Software erst am Ende, während die Norm mit den bereits gerundeten Einzelbeträgen rechnet, oder ein Positionsbetrag wurde nach der Summenbildung geändert.

Korrektur im XML

Setzen Sie BT-109 in cbc:TaxExclusiveAmount auf Positionssumme minus BT-107 plus BT-108, jeweils mit den in der Rechnung ausgewiesenen, gerundeten Werten. Prüfen Sie zuerst BT-106, BT-107 und BT-108 einzeln, dann den Gesamtbetrag.

Vorher – fehlerhaft
<cac:LegalMonetaryTotal>
  <cbc:LineExtensionAmount currencyID="EUR">1000.00</cbc:LineExtensionAmount>
  <cbc:TaxExclusiveAmount currencyID="EUR">1000.00</cbc:TaxExclusiveAmount>
  <cbc:AllowanceTotalAmount currencyID="EUR">75.50</cbc:AllowanceTotalAmount>
  <cbc:ChargeTotalAmount currencyID="EUR">12.90</cbc:ChargeTotalAmount>
</cac:LegalMonetaryTotal>
Nachher – korrigiert
<cac:LegalMonetaryTotal>
  <cbc:LineExtensionAmount currencyID="EUR">1000.00</cbc:LineExtensionAmount>
  <cbc:TaxExclusiveAmount currencyID="EUR">937.40</cbc:TaxExclusiveAmount>
  <cbc:AllowanceTotalAmount currencyID="EUR">75.50</cbc:AllowanceTotalAmount>
  <cbc:ChargeTotalAmount currencyID="EUR">12.90</cbc:ChargeTotalAmount>
</cac:LegalMonetaryTotal>

Fragen und Antworten

Warum stimmt der Betrag im PDF, aber nicht im XML?

Weil das PDF oft mit anderen Rundungsregeln erzeugt wird als das XML. Maßgeblich für die Prüfung ist allein das XML; beide sollten aus denselben gerundeten Werten entstehen.

Gehört die Umsatzsteuer in BT-109?

Nein. BT-109 ist der Betrag ohne Umsatzsteuer; der Bruttobetrag steht in BT-112.

Weitere typische Ursachen

  • Die Software rechnet mit ungerundeten Positionsbeträgen und rundet nur den Gesamtbetrag.
  • Ein Positionsbetrag, Nachlass oder Zuschlag wurde nach der Summenbildung geändert.
  • Positionsrabatte wurden doppelt abgezogen, in der Position und auf Rechnungsebene.

Felder der EN 16931

  • BT-109
  • BT-106
  • BT-107
  • BT-108
  • BG-22

Siehe auch

Rechnung prüfen

Der XRechnung-Validator meldet diese Regel mit Zeilennummer und Fundstelle – direkt in Ihrem Browser, ohne Upload.

Zum XRechnung-Validator

Die Regel im Detail
UBL · Kontext (XPath)
cac:LegalMonetaryTotal
UBL · Schematron-Test
((cbc:ChargeTotalAmount) and (cbc:AllowanceTotalAmount) and (xs:decimal(cbc:TaxExclusiveAmount) = round((xs:decimal(cbc:LineExtensionAmount) + xs:decimal(cbc:ChargeTotalAmount) - xs:decimal(cbc:AllowanceTotalAmount)) * 10 * 10) div 100 )) or (not(cbc:ChargeTotalAmount) and (cbc:AllowanceTotalAmount) and (xs:decimal(cbc:TaxExclusiveAmount) = round((xs:decimal(cbc:LineExtensionAmount) - xs:decimal(cbc:AllowanceTotalAmount)) * 10 * 10 ) div 100)) or ((cbc:ChargeTotalAmount) and not(cbc:AllowanceTotalAmount) and (xs:decimal(cbc:TaxExclusiveAmount) = round((xs:decimal(cbc:LineExtensionAmount) + xs:decimal(cbc:ChargeTotalAmount)) * 10 * 10 ) div 100)) or (not(cbc:ChargeTotalAmount) and not(cbc:AllowanceTotalAmount) and (xs:decimal(cbc:TaxExclusiveAmount) = xs:decimal(cbc:LineExtensionAmount)))
CII · Kontext (XPath)
//ram:SpecifiedTradeSettlementHeaderMonetarySummation
CII · Schematron-Test
(xs:decimal(ram:TaxBasisTotalAmount[1]) = round((xs:decimal(ram:LineTotalAmount[1]) - xs:decimal(ram:AllowanceTotalAmount[1]) + xs:decimal(ram:ChargeTotalAmount[1])) * 10 * 10) div 100) or ((xs:decimal(ram:TaxBasisTotalAmount[1]) = round((xs:decimal(ram:LineTotalAmount[1]) - xs:decimal(ram:AllowanceTotalAmount[1])) * 10 * 10) div 100) and not(ram:ChargeTotalAmount)) or ((xs:decimal(ram:TaxBasisTotalAmount[1]) = round((xs:decimal(ram:LineTotalAmount[1]) + xs:decimal(ram:ChargeTotalAmount[1])) * 10 * 10) div 100) and not(ram:AllowanceTotalAmount)) or ((xs:decimal(ram:TaxBasisTotalAmount[1]) = round((xs:decimal(ram:LineTotalAmount[1])) * 10 * 10) div 100) and not(ram:ChargeTotalAmount) and not(ram:AllowanceTotalAmount))
CII · Kontext (XPath)
//ram:SpecifiedTradeSettlementHeaderMonetarySummation
CII · Schematron-Test
(xs:decimal(ram:TaxBasisTotalAmount) = round((xs:decimal(ram:LineTotalAmount) - xs:decimal(ram:AllowanceTotalAmount) + xs:decimal(ram:ChargeTotalAmount)) *10 * 10) div 100) or ((xs:decimal(ram:TaxBasisTotalAmount) = round((xs:decimal(ram:LineTotalAmount) - xs:decimal(ram:AllowanceTotalAmount)) *10 * 10) div 100) and not (ram:ChargeTotalAmount)) or ((xs:decimal(ram:TaxBasisTotalAmount) = round((xs:decimal(ram:LineTotalAmount) + xs:decimal(ram:ChargeTotalAmount)) *10 * 10) div 100) and not (ram:AllowanceTotalAmount)) or ((xs:decimal(ram:TaxBasisTotalAmount) = round((xs:decimal(ram:LineTotalAmount)) *10 * 10) div 100) and not (ram:ChargeTotalAmount) and not (ram:AllowanceTotalAmount))

Erklärung erstellt am 14.09.2026