EN16931 / XRechnung / Peppol BIS 3 Validator

BR-CO-12: Sum of charges on document level (BT-108) = Σ Document level charge amount…

fatal CII UBL auto-fix

What this error means and how to fix it

An EN 16931 calculation or consistency rule: an amount or condition does not match the other values in the invoice — most often the totals chain (line net amounts → total without VAT → VAT → total with VAT → amount due). This is an error: the invoice is rejected until it is fixed.

Check your invoice against BR-CO-12 — free

Runs the KoSIT validator 1.6.3, unmodified · result in seconds · the file is not stored · No file at hand? Try a sample invoice

Automatic fix: 9 € per file (excl. VAT where applicable). Sum of charges on document level (BT-108) is recalculated from the document-level charges (BT-99). The result page shows which errors the repair removes and whether the corrected file then passes — before you pay. Many files? Pilot and Repair API.

Rule text

[BR-CO-12]-Sum of charges on document level (BT-108) = Σ Document level charge amount (BT-99).

Automatic repair

Sum of charges on document level (BT-108) is recalculated from the document-level charges (BT-99).

This rule is in the deterministic set of our repair engine (UBL 2.1; measured 2026-10-23: XRechnung 15 broken test invoices accepted after repair, 45 valid invoices unchanged; Peppol BIS Billing 3: 10 official examples unchanged, 40 mutated invoices: 36 accepted after repair, 4 rejected as expected — one documented limit, two with the repair parameter switched off, one where no address could be derived; profile conversion of 33 XRechnung test invoices to Peppol: 30 accepted). For UN/CEFACT CII (Factur-X / ZUGFeRD EN 16931 XML, XRechnung CII) the engine repairs the totals chain, VAT breakdown, rounding, decimals and element order (measured 2026-10-24: 53 valid CEN and XRechnung CII invoices unchanged; 28 broken invoices: 27 accepted after repair, 1 rejected as expected because a VAT exemption reason cannot be derived). Single files: 9 € on the result page; many files: the Repair API — see Pricing.

Where the rule is checked (XPath context and test)
SyntaxSeverityContext (XPath)Test (XPath)
EN16931-UBLfatalcac:LegalMonetaryTotalxs:decimal(cbc:ChargeTotalAmount) = (round(sum(../cac:AllowanceCharge[cbc:ChargeIndicator=true()]/xs:decimal(cbc:Amount)) * 10 * 10) div 100) or (not(cbc:ChargeTotalAmount) and not(../cac:AllowanceCharge[cbc:ChargeIndicator=true()]))
EN16931-CIIfatal//ram:SpecifiedTradeSettlementHeaderMonetarySummation(not(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=true()])and not (ram:ChargeTotalAmount)) or ram:ChargeTotalAmount = (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=true()]/ram:ActualAmount[1]/xs:decimal(.))* 10 * 10 ) div 100)

Business terms referenced

BT-108, BT-99

Related rules

BR-CO-13, BR-DEC-11, BR-36, BR-DEC-05, BR-AE-08, BR-E-08, BR-G-08, BR-IC-08, BR-IG-08, BR-IP-08, BR-O-08, BR-S-08

Source: EN 16931-1 Schematron, UN/CEFACT CII syntax binding (ConnectingEurope/eInvoicing-EN16931, EUPL-1.2).

Source: EN 16931-1 Schematron, UBL syntax binding (ConnectingEurope/eInvoicing-EN16931, EUPL-1.2).

Check your invoice against this rule