BR-CO-10: Summe der Positionsnettobeträge (BT-106) weicht ab
Die „Summe aller Positionen“ (BT-106) muss genau der Summe der Nettobeträge aller Rechnungspositionen (BT-131) entsprechen. Schon ein Cent Abweichung führt zum Fehler.
[BR-CO-10]-Sum of Invoice line net amount (BT-106) = Σ Invoice line net amount (BT-131).
Betroffen:BT-106BT-131
Was die Regel prüft
Auf Deutsch: Summe der Nettobeträge der Rechnungspositionen (BT-106) = Σ Nettobetrag der Rechnungsposition (BT-131). Die Regel gehört zum europäischen Kern der EN 16931 und hat die Stufe „fatal“; sie gilt für XRechnung ebenso wie für andere Formate nach der Norm.
| Syntax | BT-106 | BT-131 (je Position) |
|---|---|---|
| UBL | cac:LegalMonetaryTotal/cbc:LineExtensionAmount | cac:InvoiceLine/cbc:LineExtensionAmount bzw. cac:CreditNoteLine/cbc:LineExtensionAmount |
| CII | ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:LineTotalAmount | ram:IncludedSupplyChainTradeLineItem/…/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:LineTotalAmount |
BT-106 = round(Σ BT-131 × 100) ÷ 100Der Validator addiert die BT-131-Werte so, wie sie in der Datei stehen, rundet die Summe auf zwei Nachkommastellen und vergleicht exakt mit BT-106. Mengen und Preise der Positionen spielen für BR-CO-10 keine Rolle.
Nachlässe und Zuschläge auf Belegebene (BT-92, BT-99) gehören nicht in BT-106, sie wirken erst auf den Nettogesamtbetrag BT-109 (Regel BR-CO-13). Nachlässe und Zuschläge auf Positionsebene sind dagegen schon in BT-131 enthalten.
Typische Ursachen
- BT-106 wird aus ungerundeten Produkten Menge × Preis summiert, während BT-131 gerundet ausgegeben wird. Bei Preisen mit vier oder mehr Nachkommastellen oder vielen Positionen entstehen so Cent-Differenzen; das Beispiel unten zeigt einen solchen Fall.
- Ein Rabatt auf die ganze Rechnung wird von BT-106 abgezogen. Richtig bleibt BT-106 die reine Positionssumme, der Rabatt gehört als Nachlass auf Belegebene (BG-20) in die Rechnung.
- Positionsrabatte werden doppelt berücksichtigt: einmal im BT-131 der Position und noch einmal bei der Summenbildung.
- Positionen mit negativem Betrag, etwa Rücknahmen, werden beim Export weggelassen oder mit positivem Vorzeichen summiert. Testdatei 02.06a zeigt eine gültige Rechnung mit einer Position über −19,00 €.
- Text- oder Zwischensummenzeilen der Druckvorlage fließen in die Summe ein, werden aber nicht als Position exportiert, oder umgekehrt.
Beispiel aus der KoSIT-Testsuite
Testdatei 03.05a ist eine Energierechnung mit drei Positionen, darunter ein Messpreis von 386,52 € je 366 Tage, abgerechnet für 31 Tage. Die Summen stehen in UBL und CII so in der Datei:
<cac:LegalMonetaryTotal>
<cbc:LineExtensionAmount currencyID="EUR">44682.01</cbc:LineExtensionAmount>
<cbc:TaxExclusiveAmount currencyID="EUR">44682.01</cbc:TaxExclusiveAmount>
<cbc:TaxInclusiveAmount currencyID="EUR">53171.59</cbc:TaxInclusiveAmount>
<cbc:PayableAmount currencyID="EUR">53171.59</cbc:PayableAmount>
</cac:LegalMonetaryTotal>Quelle: KoSIT XRechnung-Testsuite 2026-08-31, Datei instances/standard/03.05a-INVOICE_ubl.xml (Apache 2.0)
<ram:SpecifiedTradeSettlementHeaderMonetarySummation>
<ram:LineTotalAmount>44682.01</ram:LineTotalAmount>
<ram:TaxBasisTotalAmount>44682.01</ram:TaxBasisTotalAmount>
<ram:TaxTotalAmount currencyID="EUR">8489.58</ram:TaxTotalAmount>
<ram:GrandTotalAmount>53171.59</ram:GrandTotalAmount>
<ram:DuePayableAmount>53171.59</ram:DuePayableAmount>
</ram:SpecifiedTradeSettlementHeaderMonetarySummation>Quelle: KoSIT XRechnung-Testsuite 2026-08-31, Datei instances/standard/03.05a-INVOICE_uncefact.xml (Apache 2.0)
<ram:SpecifiedLineTradeAgreement>
<ram:NetPriceProductTradePrice>
<ram:ChargeAmount>386.52</ram:ChargeAmount>
<ram:BasisQuantity unitCode="DAY">366</ram:BasisQuantity>
</ram:NetPriceProductTradePrice>
</ram:SpecifiedLineTradeAgreement>
<ram:SpecifiedLineTradeDelivery>
<ram:BilledQuantity unitCode="DAY">31</ram:BilledQuantity>
</ram:SpecifiedLineTradeDelivery>Quelle: KoSIT XRechnung-Testsuite 2026-08-31, Datei instances/standard/03.05a-INVOICE_uncefact.xml (Apache 2.0)
| Position | Menge × Preis ÷ Basismenge | Ergebnis ungerundet | BT-131 in der Datei |
|---|---|---|---|
| 1 Messpreis | 31 × 386,52 € ÷ 366 | 32,738032… | 32,74 |
| 2 Grundpreis | 2.100 × 3,2916 € | 6.912,36 | 6.912,37 |
| 3 Arbeitspreis | 616.290 × 0,061232374 € | 37.736,899772… | 37.736,90 |
| Summe | 44.681,997805… (gerundet 44.682,00) | 44.682,01 |
BR-CO-10 rechnet mit der rechten Spalte: 32,74 + 6.912,37 + 37.736,90 = 44.682,01. Genau dieser Wert steht in BT-106, die Datei ist gültig. Hätte die Software BT-106 aus den ungerundeten Produkten gebildet, stünde dort 44.682,00, und BR-CO-10 würde einen Fehler melden, obwohl jede Position für sich plausibel aussieht.
Position 2 weicht in der Testdatei um einen Cent vom Produkt ab. Das prüft nicht BR-CO-10, sondern die Warnregel PEPPOL-EN16931-R120 im XRechnung-Schematron, die je Position eine Toleranz von 0,02 zulässt.
Lösung
In der Rechnungssoftware
- Stellen Sie ein, dass jeder Positionsbetrag auf zwei Nachkommastellen gerundet wird und BT-106 aus genau diesen gerundeten Beträgen entsteht.
- Erfassen Sie Rabatte auf die gesamte Rechnung als Nachlass auf Belegebene, nicht als Kürzung der Positionssumme.
- Prüfen Sie, ob Zwischensummen- oder Textzeilen der Vorlage als Positionen gezählt werden.
Im XML
- UBL:
cbc:LineExtensionAmountincac:LegalMonetaryTotal= Summe dercbc:LineExtensionAmountallercac:InvoiceLinebzw.cac:CreditNoteLine. - CII:
ram:LineTotalAmountinram:SpecifiedTradeSettlementHeaderMonetarySummation= Summe derram:LineTotalAmountaller Positionen. - Rechnen Sie danach BT-109 und BT-112 neu, denn beide bauen auf BT-106 auf; sonst folgt BR-CO-15.
- Prüfen Sie das Ergebnis mit E-Rechnung prüfen; die Regel ist für XRechnung und ZUGFeRD dieselbe.
Quellen
- EN16931 Validation artefacts v1.3.16 (CEN-Schematron)ConnectingEurope, eInvoicing-EN16931 (GitHub), 13. April 2026 · geprüft am 7. November 2026
- Validator-Konfiguration XRechnung 2026-08-31 (Release v2026-08-31, verwendet CEN-Schematron 1.3.16)KoSIT (GitHub itplr-kosit), 2. September 2026 · geprüft am 7. November 2026
- XRechnung-Testsuite 2026-08-31 (Release v2026-08-31)KoSIT (GitHub itplr-kosit), 2. September 2026 · geprüft am 7. November 2026