The short answer
BR-AE-09 fails when the cbc:TaxAmount of a cac:TaxSubtotal in category AE is not zero. Set it to 0.00, and take the same amount out of the VAT total, the total with VAT and the amount due, so the invoice asks only for the net amount of the reverse-charge supply.
The buyer accounts for the VAT on a reverse-charge supply, so none of it belongs in the seller's tax amounts.
What the rule checks
The rule reads the cbc:TaxAmount beside each cac:TaxCategory with cbc:ID of AE under the VAT scheme in the root cac:TaxTotal, and requires it to be zero as a number.
Small amounts are not forgiven. When tried, 0.40 of tax in the reverse-charge breakdown, with the totals following it, failed this rule alone; BR-CO-17 accepted it, since at a rate of 0 that rule only looks at the amount rounded to a whole number.
The VAT total is not compared here. When tried, 5.00 in the reverse-charge breakdown with the VAT total left at 0.00 reported BR-CO-14 together with this rule and BR-CO-17.
| Term | Meaning | UBL element |
|---|---|---|
| BT-117 | VAT category tax amount | cac:TaxTotal/cac:TaxSubtotal/cbc:TaxAmount |
| BT-118 | VAT category code | cac:TaxTotal/cac:TaxSubtotal/cac:TaxCategory/cbc:ID |
| BT-110 | Invoice total VAT amount | cac:TaxTotal/cbc:TaxAmount |
How an integration ends up here
Possible causes, from the shape of the rule rather than from measured usage:
- The breakdown tax amount is calculated at the domestic rate for every category, and the reverse-charge breakdown gets one too.
- The VAT the buyer has to account for is calculated for information and written into the breakdown tax amount.
- The customer was switched to reverse charge after the order had been priced with VAT, and the stored tax amount was reused.
How to fix it
- Confirm from the tax determination that the supply is under reverse charge.
- Set
cbc:TaxAmountin theAEcac:TaxSubtotalto0.00. - Recalculate
cac:TaxTotal/cbc:TaxAmountfrom the breakdowns, thencbc:TaxInclusiveAmountandcbc:PayableAmount. In the recorded example they go back to 0.00, 25.00 and 25.00. - If the amount was meant to show the buyer how much VAT to account for, keep it out of the tax amounts altogether; the VAT breakdown has no field for self-accounted VAT.
- If the seller is supposed to charge the VAT, the supply is not reverse charge. Move it to
Swith its rate, on the lines and in the breakdown.
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: 5.00 of VAT in the reverse-charge breakdown, carried into the totals
<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>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>
<cac:LegalMonetaryTotal>
<cbc:LineExtensionAmount currencyID="GBP">25.00</cbc:LineExtensionAmount>
<cbc:TaxExclusiveAmount currencyID="GBP">25.00</cbc:TaxExclusiveAmount>
<cbc:TaxInclusiveAmount currencyID="GBP">30.00</cbc:TaxInclusiveAmount>
<!-- allowance, charge, prepaid and rounding amounts omitted from this fragment -->
<cbc:PayableAmount currencyID="GBP">30.00</cbc:PayableAmount>
</cac:LegalMonetaryTotal>Fragment of the corrected invoice: no tax in the reverse-charge breakdown, and the totals without it
<cac:TaxTotal>
<cbc:TaxAmount currencyID="GBP">0.00</cbc:TaxAmount>
<cac:TaxSubtotal>
<cbc:TaxableAmount currencyID="GBP">25.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>
<cac:LegalMonetaryTotal>
<cbc:LineExtensionAmount currencyID="GBP">25.00</cbc:LineExtensionAmount>
<cbc:TaxExclusiveAmount currencyID="GBP">25.00</cbc:TaxExclusiveAmount>
<cbc:TaxInclusiveAmount currencyID="GBP">25.00</cbc:TaxInclusiveAmount>
<!-- allowance, charge, prepaid and rounding amounts omitted from this fragment -->
<cbc:PayableAmount currencyID="GBP">25.00</cbc:PayableAmount>
</cac:LegalMonetaryTotal>The failing invoice puts 5.00 of VAT in the reverse-charge breakdown and carries it into a VAT total of 5.00 and a total with VAT and amount due of 30.00 each; the corrected invoice has 0.00, 25.00 and 25.00. The failing document also reports BR-CO-17, since a breakdown at a rate of 0 needs a tax amount that rounds to zero. With the totals consistent with one another, no totals rule is reported.
What the validator reported
- The failing invoice reports BR-AE-09 and BR-CO-17. 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. A reverse-charge credit note with 5.00 of tax in its breakdown reported this rule andBR-CO-17when tried. - Reported by the EN 16931 layer as a fatal finding at the reverse-charge breakdown's
cac:TaxCategory. - Exempt breakdowns carry the same requirement under
BR-E-09. The reverse-charge lines themselves must have a rate of 0 underBR-AE-05.
Related rules
- BR-CO-17 is reported beside this rule when the reverse-charge tax amount does not round to zero
- BR-E-09 is the same requirement for the exempt breakdown
- BR-AE-05 requires a rate of 0 on the reverse-charge lines behind this breakdown
- BR-AE-10 requires the reverse-charge reason in the same breakdown
- 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-AE-09 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.
