On this page
The short answer
BR-AE-01 fails when category AE is used on a line, a document-level allowance or a document-level charge and the root cac:TaxTotal does not hold exactly one cac:TaxSubtotal in category AE. The recorded invoice has a Standard rated line and a reverse-charge line of 40.00 but only a Standard rated breakdown; add the AE breakdown with 40.00 taxable, 0.00 tax, a rate of 0 and the reverse-charge reason.
A breakdown that adds nothing to the VAT total is still required. Leaving it out also takes away the figure on which the buyer accounts for the VAT itself.
What the rule checks
The rule looks for AE under the VAT scheme in any cac:ClassifiedTaxCategory or cac:TaxCategory of the document, then counts the AE breakdowns directly under the root cac:TaxTotal. When tried, a Standard rated invoice whose only reverse-charge item was a freight charge of 4.00 reported this rule alone while it had no AE breakdown.
Two AE breakdowns fail as well. When tried, the 40.00 split into breakdowns of 25.00 and 15.00 reported this rule and BR-AE-08 for each half, and giving the second half the code VATEX-EU-AE instead of the text changed nothing.
The reverse-charge amount has to be in a breakdown of its own category. When tried, turning the AE breakdown into a second S breakdown at 0 reported this rule and BR-S-08.
A stray AE breakdown goes unnoticed, since its own category counts as reverse-charge content. When tried, an AE breakdown of 0.00 added to an invoice with only a Standard rated line passed every layer.
| Term | Meaning | UBL element |
|---|---|---|
| BG-23 | VAT breakdown | cac:TaxTotal/cac:TaxSubtotal |
| BT-118 | VAT category code | cac:TaxTotal/cac:TaxSubtotal/cac:TaxCategory/cbc:ID |
| BT-151 | Invoiced item VAT category code | cac:InvoiceLine/cac:Item/cac:ClassifiedTaxCategory/cbc:ID (cac:CreditNoteLine/cac:Item/cac:ClassifiedTaxCategory/cbc:ID in a credit note) |
| BT-95 | Document level allowance VAT category code | cac:AllowanceCharge[cbc:ChargeIndicator = false]/cac:TaxCategory/cbc:ID |
| BT-102 | Document level charge VAT category code | cac:AllowanceCharge[cbc:ChargeIndicator = true]/cac:TaxCategory/cbc:ID |
How an integration ends up here
Possible causes, from the shape of the rule rather than from measured usage:
- The breakdown is built only for categories that carry tax, so the reverse-charge amount, with no tax on it, is skipped.
- Reverse-charge lines are mixed with Standard rated lines on one invoice, and the export was written for one category per document.
- The breakdown is grouped by rate alone, so the reverse-charge amount at 0 is merged with other amounts at 0 or lost.
- A separate
AEbreakdown is produced for each reverse-charge line or reason.
How to fix it
- Add up the reverse-charge content: the
cbc:LineExtensionAmountof lines inAE, plusAEdocument charges, minusAEdocument allowances. In the recorded example it is the 40.00 of line 2. - Emit a single
cac:TaxSubtotalwith that figure ascbc:TaxableAmount, acbc:TaxAmountof0.00, and acac:TaxCategorywithcbc:IDofAE,cbc:Percentof0and the reason textReverse chargeor the codeVATEX-EU-AE. - Place it in the same
cac:TaxTotalas the other breakdowns. The VAT total does not change, 5.00 in the recorded example, because the new breakdown carries no tax. - Where
AEbreakdowns were split, merge them into one whose taxable amount is their sum.
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: a reverse-charge line of 40.00, and a VAT breakdown with only the Standard rated entry
<cac:TaxTotal>
<cbc:TaxAmount currencyID="GBP">5.00</cbc:TaxAmount>
<cac:TaxSubtotal>
<cbc:TaxableAmount currencyID="GBP">25.00</cbc:TaxableAmount>
<cbc:TaxAmount currencyID="GBP">5.00</cbc:TaxAmount>
<cac:TaxCategory>
<cbc:ID>S</cbc:ID>
<cbc:Percent>20</cbc:Percent>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:TaxCategory>
</cac:TaxSubtotal>
</cac:TaxTotal>
<!-- line 1 omitted from this fragment: Standard rated, 25.00 at 20 -->
<cac:InvoiceLine>
<cbc:ID>2</cbc:ID>
<cbc:InvoicedQuantity unitCode="C62">1</cbc:InvoicedQuantity>
<cbc:LineExtensionAmount currencyID="GBP">40.00</cbc:LineExtensionAmount>
<cac:Item>
<cbc:Name>Example installation work</cbc:Name>
<cac:ClassifiedTaxCategory>
<cbc:ID>AE</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: a reverse-charge breakdown of 40.00 beside the Standard rated one
<cac:TaxTotal>
<cbc:TaxAmount currencyID="GBP">5.00</cbc:TaxAmount>
<cac:TaxSubtotal>
<cbc:TaxableAmount currencyID="GBP">25.00</cbc:TaxableAmount>
<cbc:TaxAmount currencyID="GBP">5.00</cbc:TaxAmount>
<cac:TaxCategory>
<cbc:ID>S</cbc:ID>
<cbc:Percent>20</cbc:Percent>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:TaxCategory>
</cac:TaxSubtotal>
<cac:TaxSubtotal>
<cbc:TaxableAmount currencyID="GBP">40.00</cbc:TaxableAmount>
<cbc:TaxAmount currencyID="GBP">0.00</cbc:TaxAmount>
<cac:TaxCategory>
<cbc:ID>AE</cbc:ID>
<cbc:Percent>0</cbc:Percent>
<cbc:TaxExemptionReason>Reverse charge</cbc:TaxExemptionReason>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:TaxCategory>
</cac:TaxSubtotal>
</cac:TaxTotal>The corrected invoice has a second cac:TaxSubtotal, 40.00 taxable and 0.00 tax in category AE with the reason Reverse charge; the failing invoice has only the Standard rated breakdown of 25.00. The failing document reports only BR-AE-01. The missing breakdown carried no tax, so the VAT total of 5.00 still matches the breakdowns, and the totals of 65.00 without VAT and 70.00 with VAT are the same in both documents.
What the validator reported
- The failing invoice reports BR-AE-01. 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. The mixed credit note without itsAEbreakdown reported the same rule when tried. - Reported by the EN 16931 layer as one fatal finding at the document root.
- Exempt and Zero rated content have the same exactly-one rule,
BR-E-01andBR-Z-01, whileBR-S-01lets Standard rated content have one breakdown per rate. - Once the breakdown exists,
BR-AE-08checks its taxable amount,BR-AE-09its zero tax andBR-AE-10its reason.
Related rules
- BR-AE-08 checks the taxable amount of the single reverse-charge breakdown
- BR-E-01 is the same exactly-one rule for the exempt breakdown
- BR-AE-10 requires the reverse-charge reason in the breakdown this rule asks for
- BR-S-01 is the Standard rated breakdown rule, which allows one breakdown per rate
- 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-28.1: source checked 2026-09-28, explanation last updated 2026-09-28.
The official definition of BR-AE-01 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.

