Skip to content

Ironfang Finance - Rule reference

PEPPOL-EN16931-P0107: Use VATEX-EU-AE only on a reverse-charge breakdown in category AE

The reverse-charge code VATEX-EU-AE must sit in tax category AE. The recorded intra-community supply used it in place of VATEX-EU-IC in its K breakdown.

Peppol BIS BillingFatal: the document is invalidVATCode lists

On this page

The short answer

PEPPOL-EN16931-P0107 fails for each cac:TaxCategory carrying VATEX-EU-AE whose cbc:ID is not AE. The code says the customer accounts for the VAT under the reverse charge, and AE is the only category with that meaning.

The recorded example sells to a buyer in Germany with both VAT identifiers, a delivery date and a deliver-to country, in category K: an intra-community supply. Such a sale is often called a reverse charge, yet it has a code of its own, VATEX-EU-IC, and restoring that code is the correction.

What the rule checks

Every cac:TaxCategory whose exemption code upper-cases to VATEX-EU-AE is tested, and it passes only with the category AE. The category is trimmed but the code is not: when tried, a trailing space after VATEX-EU-AE hid it from this rule, while BR-CL-22 still accepted it.

A domestic reverse charge left at the standard rate is caught twice. When tried, VATEX-EU-AE in a Standard rated breakdown at 20 percent was reported by this rule and by BR-S-10.

The rest of the invoice is not examined. When tried, the recorded example with its breakdown and line switched to AE, still carrying VATEX-EU-AE, passed every layer, because it already had the seller and buyer VAT identifiers that BR-AE-02 needs. Whether AE or K is right is a VAT question the validator cannot answer.

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

How an integration ends up here

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

  • Every sale without VAT to a VAT-registered business in another member state is labelled reverse charge, whether goods or services are supplied.
  • The exemption code comes from a reverse-charge flag on the customer, while the category comes from the kind of supply.
  • A domestic reverse charge for particular goods or services is marked by the code alone, and the category stays S.

How to fix it

  1. Tell the two treatments apart. Goods dispatched to a VAT-registered buyer in another member state are an intra-community supply, K with VATEX-EU-IC; a supply on which the buyer accounts for the VAT in another way, such as many cross-border services, is AE with VATEX-EU-AE.
  2. For an intra-community supply, as in the example, keep K and write VATEX-EU-IC. BR-IC-10 needs a reason on that breakdown, and the text would do on its own.
  3. For a reverse charge, change the breakdown and its lines to AE, with the rate 0 and no VAT amount, and make sure the VAT identifiers are present.
  4. For a domestic reverse charge coded S by mistake, the category has to change too: a Standard rated breakdown may carry no exemption reason at all.

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 intra-community breakdown with the reverse-charge code

<cac:TaxSubtotal>
  <cbc:TaxableAmount currencyID="GBP">25.00</cbc:TaxableAmount>
  <cbc:TaxAmount currencyID="GBP">0.00</cbc:TaxAmount>
  <cac:TaxCategory>
    <cbc:ID>K</cbc:ID>
    <cbc:Percent>0</cbc:Percent>
    <cbc:TaxExemptionReasonCode>VATEX-EU-AE</cbc:TaxExemptionReasonCode>
    <cbc:TaxExemptionReason>Intra-community supply</cbc:TaxExemptionReason>
    <cac:TaxScheme>
      <cbc:ID>VAT</cbc:ID>
    </cac:TaxScheme>
  </cac:TaxCategory>
</cac:TaxSubtotal>

Fragment of the corrected invoice: the intra-community breakdown carries VATEX-EU-IC

<cac:TaxSubtotal>
  <cbc:TaxableAmount currencyID="GBP">25.00</cbc:TaxableAmount>
  <cbc:TaxAmount currencyID="GBP">0.00</cbc:TaxAmount>
  <cac:TaxCategory>
    <cbc:ID>K</cbc:ID>
    <cbc:Percent>0</cbc:Percent>
    <cbc:TaxExemptionReasonCode>VATEX-EU-IC</cbc:TaxExemptionReasonCode>
    <cbc:TaxExemptionReason>Intra-community supply</cbc:TaxExemptionReason>
    <cac:TaxScheme>
      <cbc:ID>VAT</cbc:ID>
    </cac:TaxScheme>
  </cac:TaxCategory>
</cac:TaxSubtotal>

Only the exemption code differs: VATEX-EU-AE in the failing invoice, VATEX-EU-IC in the corrected one; the category K, the reason text and the amounts are unchanged. The failing document reports this rule and nothing else, because the text satisfies BR-IC-10 and no EN 16931 rule compares a code with its category.

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. When tried, VATEX-EU-AE in the breakdown of an exempt credit note reported this rule.
  • A rule of the Peppol layer. On the EN 16931 layer, BR-CL-22 accepts VATEX-EU-AE as a listed code in any category.
  • Category AE brings requirements of its own, among them the VAT identifiers of BR-AE-02 and a reason under BR-AE-10.

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 PEPPOL-EN16931-P0107 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.