fatal CII UBL auto-fix
A rule for standard-rated VAT (category S): the lines, allowances, charges and the VAT breakdown with category S must agree with each other, the rate must be above 0, and a seller VAT or tax registration identifier must be present. This is an error: the invoice is rejected until it is fixed.
Automatic fix: 9 € per file (excl. VAT where applicable). The standard-rate VAT breakdown tax amount (BT-117) is recalculated from BT-116 × rate. 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.
[BR-S-09]-The VAT category tax amount (BT-117) in a VAT breakdown (BG-23) where VAT category code (BT-118) is "Standard rated" shall equal the VAT category taxable amount (BT-116) multiplied by the VAT category rate (BT-119).
The standard-rate VAT breakdown tax amount (BT-117) is recalculated from BT-116 × rate.
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.
| Syntax | Severity | Context (XPath) | Test (XPath) |
|---|---|---|---|
| EN16931-UBL | fatal | /*/cac:TaxTotal/cac:TaxSubtotal/cac:TaxCategory[normalize-space(cbc:ID) = 'S'][cac:TaxScheme/normalize-space(upper-case(cbc:ID))='VAT'] | (abs(xs:decimal(../cbc:TaxAmount)) - 1 < round((abs(xs:decimal(../cbc:TaxableAmount)) * (xs:decimal(cbc:Percent) div 100)) * 10 * 10) div 100 ) and (abs(xs:decimal(../cbc:TaxAmount)) + 1 > round((abs(xs:decimal(../cbc:TaxableAmount)) * (xs:decimal(cbc:Percent) div 100)) * 10 * 10) div 100 ) |
| EN16931-CII | fatal | //ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode[.='S'] | (abs(xs:decimal(../ram:CalculatedAmount)) - 1 < round(abs(xs:decimal(../ram:BasisAmount)) * xs:decimal(../ram:RateApplicablePercent)) div 100 ) and (abs(xs:decimal(../ram:CalculatedAmount)) + 1 > round(abs(xs:decimal(../ram:BasisAmount)) * xs:decimal(../ram:RateApplicablePercent)) div 100 ) |
BT-117, BG-23, BT-118, BT-116, BT-119
BR-CO-14, BR-46, BR-CO-17, BR-DEC-20, BR-AE-09, BR-E-09, BR-G-09, BR-IC-09, BR-IG-09, BR-IP-09, BR-O-09, BR-Z-09
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).