Automation MCP Server Features Blog Pricing Contact
Validation rule EN 16931 core

BR-AE-10

Reverse charge means the buyer owes the VAT, and the invoice has to say so explicitly. BR-AE-10 fails when a VAT breakdown with category code AE carries no exemption reason code or text, one of the most common real-world VAT findings in cross-border B2B invoicing.

What BR-AE-10 checks

BR-AE-10 requires that a VAT breakdown group (BG-23) with category code AE, reverse charge, contain a VAT exemption reason code (BT-121) or a VAT exemption reason text (BT-120). Reverse charge shifts the tax liability to the buyer, and tax authorities require the invoice to state the mechanism explicitly rather than just showing 0% VAT. The declaration lives in the breakdown group: cac:TaxCategory inside the subtotal in UBL, ram:ApplicableTradeTax in CII.

Layer and formats

The rule fires in the en16931 core layer for every syntax and profile. Its immediate family polices the rest of the reverse charge picture: BR-AE-05 pins category AE lines to a 0% rate, BR-AE-09 pins the group's tax amount to zero, and BR-E-10 is the analogous reason requirement for the exempt category.

Why it fails in practice

  • The rate is mapped, the reason is not. The ERP knows the transaction is reverse charge and emits 0%, but its export has no field for exemption reasons.
  • The reason sits on the PDF, not in the data. The visible document prints "Steuerschuldnerschaft des Leistungsempfängers", while the XML breakdown stays silent.
  • Free-text in the wrong place. The phrase lands in a general invoice note (BT-22) instead of the breakdown group's BT-120, where the rule looks.

How to fix it

Declare the reason inside the AE breakdown group, ideally by code:

<cac:TaxCategory>
  <cbc:ID>AE</cbc:ID>
  <cbc:Percent>0</cbc:Percent>
  <cbc:TaxExemptionReasonCode>VATEX-EU-AE</cbc:TaxExemptionReasonCode>
  <cac:TaxScheme><cbc:ID>VAT</cbc:ID></cac:TaxScheme>
</cac:TaxCategory>

In an InvoiceXML create request the breakdown group is an entry in invoice.vatBreakdowns with exemptionReasonCode (or exemptionReasonText) next to the category and rate; if you let the API build the breakdown from the lines, supply the reason there and it is carried into the group.

The raw rejection vs the InvoiceXML finding

The Schematron report quotes the full rule prose:

<svrl:failed-assert id="BR-AE-10" flag="fatal"
    location="/*:Invoice[namespace-uri()='...']/cac:TaxTotal[1]/cac:TaxSubtotal[1]">
  <svrl:text>[BR-AE-10]-A VAT breakdown (BG-23) with VAT Category code
    (BT-118) "Reverse charge" shall have a VAT exemption reason code
    (BT-121), meaning "Reverse charge" or the VAT exemption reason text
    (BT-120) "Reverse charge" (or the equivalent standard text in
    another language).</svrl:text>
</svrl:failed-assert>

The InvoiceXML finding for the same failure:

{
  "rule": "BR-AE-10",
  "layer": "en16931",
  "line": null,
  "message": "The Reverse charge VAT breakdown is missing a required exemption reason. Add exemption reason code VATEX-EU-AE or the text \"Reverse charge\".",
  "btCodes": ["BT-120", "BT-121"],
  "fields": null,
  "raw": "[BR-AE-10] EN16931: A VAT breakdown (BG-23) with VAT Category code (BT-118) \"Reverse charge\" shall have a VAT exemption reason code (BT-121), meaning \"Reverse charge\" or the VAT exemption reason text (BT-120) \"Reverse charge\" (or the equivalent standard text in another language)."
}

The message already tells your user exactly what to add, naming VATEX-EU-AE, and the BT codes anchor the finding to the breakdown fields. No parsing of rule prose, and clients can localize by the stable rule key.

Check or generate reverse charge invoices

Validate a document in the UBL validator or the XRechnung validator to see every VAT finding at once. Generating via POST /v1/create/ubl or POST /v1/create/facturx keeps the AE package consistent, and each document is validated against the full rule set before delivery. The VAT category model is part of EN 16931 explained.

  • BR-E-10, the same reason requirement for the exempt category (E)
  • BR-CO-14, the rule tying the VAT breakdown to the invoice's VAT total
  • BR-AE-05 and BR-AE-09, the rate and amount constraints of the reverse charge package

Frequently asked questions

What is the correct exemption reason for reverse charge?

The cleanest declaration is the code VATEX-EU-AE in BT-121, from the EU's VATEX code list. Alternatively (or additionally) BT-120 can carry the text "Reverse charge" or its standard equivalent in another language. One of the two must be present in the AE breakdown group.

What else does a reverse charge invoice need?

Category AE lines must have a 0% VAT rate (BR-AE-05), the AE breakdown's tax amount must be 0 (BR-AE-09), and the invoice must carry both the seller's and the buyer's VAT identifiers (BR-AE-02 and its siblings). BR-AE-10 is just the reason-declaration piece of that package.

Is this the same as an exempt invoice?

No. Exempt (category E) means no VAT is due at all and is policed by the BR-E rules, including the analogous BR-E-10. Reverse charge (AE) means VAT is due but shifts to the buyer. The categories, reason codes and downstream accounting differ.

Which layer and formats does BR-AE-10 apply to?

It is an en16931 core layer rule: every format and profile inherits it, from plain UBL and CII through XRechnung, Peppol BIS and hybrid PDFs. The finding appears wherever an AE breakdown lacks its reason.