Skip to content

BR-AE-10Add the reverse-charge reason to the VAT breakdown

A reverse-charge VAT breakdown must state why no VAT is charged, as exemption reason text, a reason code, or both.

EN 16931Fatal: the document is invalidVAT

The short answer

BR-AE-10 fails when a VAT breakdown with category AE has neither cbc:TaxExemptionReason nor cbc:TaxExemptionReasonCode in its cac:TaxCategory. Add the reason: the text Reverse charge, or the equivalent standard wording in the language of the invoice, or the reason code that means reverse charge, VATEX-EU-AE. Sending both is allowed.

The category is not the problem. If the supply is under reverse charge, AE stays and the missing statement is added.

What the rule checks

The rule selects each cac:TaxCategory with cbc:ID of AE under the VAT tax scheme, inside cac:TaxTotal/cac:TaxSubtotal beneath the document root. It passes when that element has a cbc:TaxExemptionReason child, a cbc:TaxExemptionReasonCode child, or both.

A code on its own is enough. The valid reverse-charge fixture with its text replaced by a cbc:TaxExemptionReasonCode of VATEX-EU-AE passes every layer.

Only presence is tested, not meaning. Arbitrary text passes, and so did an unrelated code from the same list, VATEX-EU-132, on a reverse-charge breakdown. A clean result is therefore no evidence that the stated reason is the right one; that remains your responsibility.

A code must still come from the VATEX code list. One that is not on the list satisfies this rule but is rejected by BR-CL-22.

An empty cbc:TaxExemptionReason element counts as present here, and is then rejected by PEPPOL-EN16931-R008, which forbids empty elements.

The rule reads the VAT breakdown only. The category on a line or on a document-level allowance or charge is not where this reason is looked for.

TermMeaningUBL element
BT-118VAT category codecac:TaxTotal/cac:TaxSubtotal/cac:TaxCategory/cbc:ID
BT-120VAT exemption reason textcac:TaxTotal/cac:TaxSubtotal/cac:TaxCategory/cbc:TaxExemptionReason
BT-121VAT exemption reason codecac:TaxTotal/cac:TaxSubtotal/cac:TaxCategory/cbc:TaxExemptionReasonCode

How an integration ends up here

Possible causes, from the shape of the rule rather than from measured usage:

  • The source system prints the reverse-charge statement as a footer on the PDF, and nothing maps it into the structured tax data.
  • The reason is held on the tax code and the export reads only category and rate.
  • The mapping writes exemption reasons for category E and was never extended to AE.
  • Empty strings are stripped before serialising, and the reason field was blank for this tax code.
  • The reason was written somewhere other than the VAT breakdown.

How to fix it

  1. Establish from the tax determination that the supply really is under reverse charge. If it is, keep category AE. Changing the category to make the finding go away would misstate the transaction.
  2. In the cac:TaxCategory of the AE breakdown, add cbc:TaxExemptionReason with the reverse-charge wording, or cbc:TaxExemptionReasonCode with VATEX-EU-AE, or both.
  3. Keep the UBL order inside cac:TaxCategory: cbc:ID, cbc:Percent, cbc:TaxExemptionReasonCode, cbc:TaxExemptionReason, then cac:TaxScheme. With the text placed before the code, the XSD layer rejects the document and the EN 16931 and Peppol layers do not run.
  4. Hold the reason against the tax code in the source system so that every reverse-charge document gets it, rather than patching single invoices.

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 breakdown with no reason

<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>
    <cac:TaxScheme>
      <cbc:ID>VAT</cbc:ID>
    </cac:TaxScheme>
  </cac:TaxCategory>
</cac:TaxSubtotal>

Fragment of the corrected invoice: the reason text sits between the rate and the tax scheme

<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>

The corrected invoice has cbc:TaxExemptionReason with the text Reverse charge in the AE tax category; the failing one has no reason element at all. Nothing else differs, and the failing document reports only BR-AE-10.

What the validator reported

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 Invoice and CreditNote. A reverse-charge credit note without the reason reports the same rule.
  • Only category AE under the VAT tax scheme is in scope. Exempt breakdowns have the parallel rule BR-E-10.
  • The other reverse-charge rules still apply: BR-AE-09 fires when the breakdown carries a tax amount, and BR-AE-02 fires when the seller VAT identifier is missing. Adding the reason does not settle those.

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-20.1: source checked 2026-09-20, explanation last updated 2026-09-20.

The official definition of BR-AE-10 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.