BR-S-08: Standard VAT taxable base must match the lines
Standard VAT taxable base must match the lines; sum standard-rated line amounts and charges minus allowances for the same rate.
What the rule says
[BR-S-08]-For each different value of VAT category rate (BT-119) where the VAT category code (BT-118) is "Standard rated", the VAT category taxable amount (BT-116) in a VAT breakdown (BG-23) shall equal the sum of Invoice line net amounts (BT-131) plus the sum of document level charge amounts (BT-99) minus the sum of document level allowance amounts (BT-92) where the VAT category code (BT-151, BT-102, BT-95) is "Standard rated" and the VAT rate (BT-152, BT-103, BT-96) equals the VAT category rate (BT-119).
Official en16931 source, version 1.3.16. EUPL 1.2; sources, licences and notices. Syntax and business checks are separate; this is not certification.
Standard VAT taxable base must match the lines
Standard VAT taxable base must match the lines. The controlled example changes the specific field or group named by this rule. Set only /*/cac:TaxTotal/cac:TaxSubtotal[1]/cbc:TaxableAmount to '102.00'.
Business terms: BT-102, BT-103, BT-116, BT-118, BT-119, BT-131, BT-151, BT-152, BT-92, BT-95, BT-96, BT-99.
Sum standard-rated line amounts and charges minus allowances for the same rate.
Reproduced failure and correction
Tested on 2 November 2026 with the production SaxonC-HE 13.1 / saxonche 13.1.1 engine, en16931 mode, UBL. The XSD passes; the report then contains BR-S-08. Restoring this fragment makes the complete original invoice pass the selected checks.
[BR-S-08]-For each different value of VAT category rate (BT-119) where the VAT category code (BT-118) is "Standard rated", the VAT category taxable amount (BT-116) in a VAT breakdown (BG-23) shall equal the sum of Invoice line net amounts (BT-131) plus the sum of document level charge amounts (BT-99) minus the sum of document level allowance amounts (BT-92) where the VAT category code (BT-151, BT-102, BT-95) is "Standard rated" and the VAT rate (BT-152, BT-103, BT-96) equals the VAT category rate (BT-119).Additional triggered rules: 0. None. Counts include distinct error and warning codes; the target code is excluded.
Precise mutated XPath: /*/cac:TaxTotal/cac:TaxSubtotal[1]/cbc:TaxableAmount.
Calculation using this invoice
Taxable base shown: 102.00 EUR. Expected: line net 100.00 + document charges 0.00 − document allowances 0.00 = 100.00 EUR for category S at 21%. Difference: 2.00 EUR. Amounts are shown to two decimal places; this example exceeds the pinned rule’s tolerance.
Before: triggers this rule
<cac:TaxSubtotal xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2" xmlns:ubl="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2" xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2">
<cbc:TaxableAmount currencyID="EUR">102.00</cbc:TaxableAmount>
<cbc:TaxAmount currencyID="EUR">21.00</cbc:TaxAmount>
<cac:TaxCategory>
<cbc:ID>S</cbc:ID>
<cbc:Percent>21</cbc:Percent>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:TaxCategory>
</cac:TaxSubtotal>
After: passes
<cac:TaxSubtotal xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2" xmlns:ubl="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2" xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2">
<cbc:TaxableAmount currencyID="EUR">100.00</cbc:TaxableAmount>
<cbc:TaxAmount currencyID="EUR">21.00</cbc:TaxAmount>
<cac:TaxCategory>
<cbc:ID>S</cbc:ID>
<cbc:Percent>21</cbc:Percent>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:TaxCategory>
</cac:TaxSubtotal>
The context shown is part of a complete invoice; it is not a standalone invoice. Mutation: value at /*/cac:TaxTotal/cac:TaxSubtotal[1]/cbc:TaxableAmount. The passing baseline is validated with the selected pinned package. UBL examples use a controlled single-line adaptation of the official XRechnung example; the CII example uses the official EN 16931 baseline.
Download complete failing invoice · Download complete passing invoice
Check the rest of the invoice
Repair the source data and exporter, then validate the complete invoice again with the same package. Review every remaining error and warning; a passing rule is not a guarantee of recipient acceptance.
EN 16931 syntax and business checks · XRechnung profile requirements · Pro/Team batch checks.