The short answer
BR-E-08 fails when the cbc:TaxableAmount of a VAT breakdown with category E is not the net exempt content of the document: the cbc:LineExtensionAmount of every line in category E, plus root-level charges in category E, minus root-level allowances in category E. Work that figure out and write it as the taxable amount.
There is no tolerance. The Standard rated equivalent lets a difference under 1.00 through; here a single penny fails.
What the rule checks
The rule runs for each cac:TaxCategory with cbc:ID of E under the VAT scheme in the root cac:TaxTotal, and compares that breakdown's taxable amount with a sum built from the whole document.
The sum takes the net amounts of lines whose item category is E, adds the cbc:Amount of root-level cac:AllowanceCharge elements in category E with cbc:ChargeIndicator of true, and subtracts those with false. When tried, an exempt document allowance of 5.00 beside an exempt line of 25.00 validated with a taxable amount of 20.00 and failed this rule with 25.00.
Line-level allowances and charges are not added again, because each line net amount already contains them.
The two figures are compared exactly, as decimal numbers. When tried, a taxable amount of 25.01 against exempt lines of 25.00 failed. The notation does not matter, so 25 equals 25.00.
Nothing is grouped by rate. If the document has more than one exempt breakdown, each is compared with the full sum and each fails, which is the pattern BR-E-01 produces.
| Term | Meaning | UBL element |
|---|---|---|
| BT-116 | VAT category taxable amount | cac:TaxTotal/cac:TaxSubtotal/cbc:TaxableAmount |
| BT-118 | VAT category code | cac:TaxTotal/cac:TaxSubtotal/cac:TaxCategory/cbc:ID |
| BT-131 | Invoice line net amount | cac:InvoiceLine/cbc:LineExtensionAmount (cac:CreditNoteLine/cbc:LineExtensionAmount in a credit note) |
| BT-99 | Document level charge amount | cac:AllowanceCharge[cbc:ChargeIndicator = true]/cbc:Amount |
| BT-92 | Document level allowance amount | cac:AllowanceCharge[cbc:ChargeIndicator = false]/cbc:Amount |
How an integration ends up here
Possible causes, from the shape of the rule rather than from measured usage:
- The taxable amount comes from a stored tax summary that was not refreshed after an exempt line was edited or removed.
- An exempt document-level allowance or charge is left out of the breakdown, or applied with the wrong sign.
- Zero rated or out-of-scope amounts are added into the exempt figure because all three carry no tax.
- The figure is recomputed from quantity times price instead of adding the line net amounts written in the document, and rounding moves it by a penny.
- Exempt content is spread over several
Ebreakdowns, each holding a share of the total.
How to fix it
- Take every line with
cac:Item/cac:ClassifiedTaxCategory/cbc:IDofEand add up itscbc:LineExtensionAmountexactly as written, keeping the sign of negative lines. - Add root-level
cac:AllowanceChargeamounts in categoryEwherecbc:ChargeIndicatoristrue, and subtract those where it isfalse. - Write the result, with two decimals, as the
cbc:TaxableAmountof the single exemptcac:TaxSubtotal. Its tax amount stays0.00. - If a line or allowance changed category while you investigated, rebuild the breakdown it left as well.
The recorded example has one exempt line and no document-level allowances or charges.
Exempt line net amount: 25.00 Exempt document charges: 0.00; exempt document allowances: 0.00 Expected exempt taxable amount: 25.00 + 0.00 - 0.00 = 25.00 Sent: 30.00, which is 5.00 out, so the rule fails
Validate your corrected invoice
Before and after
These are fragments, not complete documents. The complete synthetic documents they come from are linked below.
Fragment of the failing invoice: an exempt taxable amount of 30.00 for an exempt line of 25.00
<cac:TaxSubtotal>
<cbc:TaxableAmount currencyID="GBP">30.00</cbc:TaxableAmount>
<cbc:TaxAmount currencyID="GBP">0.00</cbc:TaxAmount>
<cac:TaxCategory>
<cbc:ID>E</cbc:ID>
<cbc:Percent>0</cbc:Percent>
<cbc:TaxExemptionReason>Exempt from VAT</cbc:TaxExemptionReason>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:TaxCategory>
</cac:TaxSubtotal>
<cac:InvoiceLine>
<cbc:ID>1</cbc:ID>
<cbc:InvoicedQuantity unitCode="C62">2</cbc:InvoicedQuantity>
<cbc:LineExtensionAmount currencyID="GBP">25.00</cbc:LineExtensionAmount>
<cac:Item>
<cbc:Name>Example service</cbc:Name>
<cac:ClassifiedTaxCategory>
<cbc:ID>E</cbc:ID>
<cbc:Percent>0</cbc:Percent>
<!-- tax scheme omitted from this fragment -->
</cac:ClassifiedTaxCategory>
</cac:Item>
<!-- price omitted from this fragment -->
</cac:InvoiceLine>Fragment of the corrected invoice: the exempt taxable amount is the 25.00 of the exempt line
<cac:TaxSubtotal>
<cbc:TaxableAmount currencyID="GBP">25.00</cbc:TaxableAmount>
<cbc:TaxAmount currencyID="GBP">0.00</cbc:TaxAmount>
<cac:TaxCategory>
<cbc:ID>E</cbc:ID>
<cbc:Percent>0</cbc:Percent>
<cbc:TaxExemptionReason>Exempt from VAT</cbc:TaxExemptionReason>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:TaxCategory>
</cac:TaxSubtotal>Only the exempt cbc:TaxableAmount differs: 30.00 in the failing invoice, 25.00 in the corrected one. The failing document reports only BR-E-08. Its monetary totals are built from the line and agree with one another, and the breakdown tax amount is 0.00 in both documents, so none of the totals rules is triggered by the wrong taxable amount.
What the validator reported
- The failing invoice reports BR-E-08. The corrected document passes every layer with no findings.Download the failing XMLDownload the corrected XML
Recorded on phive 12.1.0 / phive-rules-peppol 4.5.6 / Saxon-HE 12.10, the engine behind the free validator, using synthetic data. A recorded result is regression evidence for these documents; it is not a certification.
Where it applies
- Applies to UBL
InvoiceandCreditNote; in a credit note the rule adds upcac:CreditNoteLineelements. An exempt credit note with 30.00 taxable against a 25.00 line reported this rule when tried. - Reported by the EN 16931 layer as a fatal finding at each exempt breakdown's
cac:TaxCategory. - Standard rated breakdowns are checked by
BR-S-08, which groups by rate and tolerates a difference under 1.00. Nothing of the kind applies to the exempt figure. - The exempt breakdown must also appear exactly once (
BR-E-01), carry a reason (BR-E-10) and show no tax (BR-E-09).
Related rules
- BR-E-01 requires the single exempt breakdown whose taxable amount this rule checks
- BR-S-08 is the Standard rated version of this check, grouped by rate and with a tolerance
- BR-E-09 requires the tax amount of the same exempt breakdown to be zero
- BR-45 requires the taxable amount that this rule compares with the exempt content
- Browse every rule in the reference
- Background: Understanding EN 16931 validation errors
Scope and source
Written for Peppol BIS Billing 3.0.21 (May 2026), EN 16931 1.3.16, as applied to UBL 2.1 Invoice and CreditNote documents. Other profiles, syntaxes and releases can define this identifier differently. Guidance version 2026-09-24.1: source checked 2026-09-24, explanation last updated 2026-09-24.
The official definition of BR-E-08 carries the normative wording and test. This page is our explanation of it, not a copy.
Guidance does not change the engine verdict. Fixing this finding does not mean the document passes every layer, and validation does not certify legal or tax compliance or transmit a document over Peppol.
