# PEPPOL-EN16931-P0111: Keep antiques sold under the margin scheme in category E, not reverse charge

The margin scheme code for collectors items and antiques, `VATEX-EU-J`, is valid only in category `E`. The recorded antique clock was coded `AE`.

- Layer: Peppol BIS Billing
- Severity: fatal (the document is invalid)
- Topics: VAT, Code lists
- Official definition: https://docs.peppol.eu/poacc/billing/3.0/rules/ubl-peppol/PEPPOL-EN16931-P0111/
- Explanation last updated: 2026-09-28

## The short answer

`PEPPOL-EN16931-P0111` fails for each `cac:TaxCategory` that carries `VATEX-EU-J` while its `cbc:ID` is not `E`. `VATEX-EU-J` says the sale falls under the margin scheme for collectors items and antiques, and Peppol accepts it only with the exempt category.

The recorded example sells an antique clock to a buyer with the VAT identifier `DE123456789` and codes the breakdown and the line `AE`, as if the buyer accounted for the VAT. Under the margin scheme the seller accounts for VAT on its margin, so the reverse charge does not describe the sale.

## What the rule checks

The exemption code is upper-cased and compared with `VATEX-EU-J`; a match needs the category `E`, trimmed. Spaces around the code are not removed: when tried, the code with a leading space in the `AE` breakdown passed every layer, although `BR-CL-22` still accepted it as a VATEX code.

The buyer VAT identifier plays no part in the rule. When tried, the corrected exempt invoice with the buyer VAT identifier removed passed every layer as well, so it can be kept or dropped without affecting the pairing.

With the category left at `AE`, only the code can change. When tried, `VATEX-EU-AE` in place of `VATEX-EU-J` made the recorded example pass every layer; that is correct only if the sale is not made under the margin scheme.

| Term | Meaning | UBL element |
|---|---|---|
| BT-121 | VAT exemption reason code | `cac:TaxTotal/cac:TaxSubtotal/cac:TaxCategory/cbc:TaxExemptionReasonCode` |
| BT-118 | VAT category code | `cac:TaxTotal/cac:TaxSubtotal/cac:TaxCategory/cbc:ID` |
| BT-48 | Buyer VAT identifier | `cac:AccountingCustomerParty/cac:Party/cac:PartyTaxScheme/cbc:CompanyID` |

## How an integration ends up here

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

- The reverse charge is applied automatically whenever the buyer gives a VAT identifier from another member state, and the margin scheme only sets the exemption code.
- Antiques sold to other dealers are treated as trade sales and routed through the business-to-business tax rules.
- The label on the code list, "Intra-Community acquisition of collectors items and antiques", is read as a description of a cross-border trade sale.

## How to fix it

1. Establish whether the antique is sold under the margin scheme. If it is, the category is `E` and `VATEX-EU-J` stays; the buyer does not account for the VAT.
2. Set `cbc:ID` to `E` on the breakdown and on the line of each item sold under the scheme, with the rate `0`, as in the corrected example.
3. If the sale is not under the margin scheme, pick the category from the real treatment, for example `K` with `VATEX-EU-IC` for goods dispatched to a VAT-registered buyer in another member state, and drop `VATEX-EU-J`.

## 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 antique sold under the margin scheme, coded reverse charge, AE

```xml
<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:TaxExemptionReasonCode>VATEX-EU-J</cbc:TaxExemptionReasonCode>
    <cbc:TaxExemptionReason>Margin scheme - Collectors items and antiques</cbc:TaxExemptionReason>
    <cac:TaxScheme>
      <cbc:ID>VAT</cbc:ID>
    </cac:TaxScheme>
  </cac:TaxCategory>
</cac:TaxSubtotal>
<!-- totals and the start of the invoice line omitted from this fragment -->
<cac:Item>
  <cbc:Name>Antique clock</cbc:Name>
  <cac:ClassifiedTaxCategory>
    <cbc:ID>AE</cbc:ID>
    <cbc:Percent>0</cbc:Percent>
    <cac:TaxScheme>
      <cbc:ID>VAT</cbc:ID>
    </cac:TaxScheme>
  </cac:ClassifiedTaxCategory>
</cac:Item>
```

Fragment of the corrected invoice: the antique clock is exempt, E, under the same code

```xml
<cac:TaxSubtotal>
  <cbc:TaxableAmount currencyID="GBP">25.00</cbc:TaxableAmount>
  <cbc:TaxAmount currencyID="GBP">0.00</cbc:TaxAmount>
  <cac:TaxCategory>
    <cbc:ID>E</cbc:ID>
    <cbc:Percent>0</cbc:Percent>
    <cbc:TaxExemptionReasonCode>VATEX-EU-J</cbc:TaxExemptionReasonCode>
    <cbc:TaxExemptionReason>Margin scheme - Collectors items and antiques</cbc:TaxExemptionReason>
    <cac:TaxScheme>
      <cbc:ID>VAT</cbc:ID>
    </cac:TaxScheme>
  </cac:TaxCategory>
</cac:TaxSubtotal>
<!-- totals and the start of the invoice line omitted from this fragment -->
<cac:Item>
  <cbc:Name>Antique clock</cbc:Name>
  <cac:ClassifiedTaxCategory>
    <cbc:ID>E</cbc:ID>
    <cbc:Percent>0</cbc:Percent>
    <cac:TaxScheme>
      <cbc:ID>VAT</cbc:ID>
    </cac:TaxScheme>
  </cac:ClassifiedTaxCategory>
</cac:Item>
```

The failing invoice has `AE` where the corrected one has `E`, in the breakdown and on the antique clock line; `VATEX-EU-J`, the reason text and the buyer VAT identifier stay the same. The failing document reports only this rule: its `AE` breakdown has the reason and both VAT identifiers that EN 16931 asks of a reverse charge.

### What the validator reported

- The failing invoice reports **PEPPOL-EN16931-P0111**. The corrected document passes every layer with no findings.
  - [Download the failing XML](https://ironfang.com/finance/rule-examples/PEPPOL-EN16931-P0111-invalid.xml)
  - [Download the corrected XML](https://ironfang.com/finance/rule-examples/margin-antiques-valid.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 `Invoice` and `CreditNote`. When tried, a credit note with `VATEX-EU-J` in a `G` breakdown reported this rule.
- The pairing is checked on the Peppol layer only. `BR-CL-22`, on the EN 16931 layer, accepts `VATEX-EU-J` next to any category.
- An exempt margin scheme line needs a seller tax identifier under `BR-E-02`, such as the seller VAT identifier; the buyer VAT identifier is optional.

## Related rules

- [PEPPOL-EN16931-P0110 applies the same pairing to the works of art code VATEX-EU-I](https://ironfang.com/docs/finance/rules/PEPPOL-EN16931-P0110.md)
- [PEPPOL-EN16931-P0109 applies it to the second-hand goods code VATEX-EU-F](https://ironfang.com/docs/finance/rules/PEPPOL-EN16931-P0109.md)
- [BR-AE-02 lists the identifiers a genuine reverse-charge invoice needs](https://ironfang.com/docs/finance/rules/BR-AE-02.md)
- [BR-E-10 requires a reason on the exempt breakdown, which VATEX-EU-J supplies](https://ironfang.com/docs/finance/rules/BR-E-10.md)

## 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-P0111](https://docs.peppol.eu/poacc/billing/3.0/rules/ubl-peppol/PEPPOL-EN16931-P0111/) 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.

## Links

- [This rule as a web page](https://ironfang.com/docs/finance/rules/PEPPOL-EN16931-P0111)
- [Free Peppol invoice validator](https://ironfang.com/tools/peppol-validator)
- [Rule index](https://ironfang.com/docs/finance/rules.md)
- [Ironfang Finance API docs](https://ironfang.com/docs/finance)
- The same rule is available to MCP clients as the tool `finance.rule.get` on https://mcp.ironfang.com/mcp
