# PEPPOL-EN16931-P0110: Pair the works of art margin scheme code VATEX-EU-I with category E

Peppol accepts `VATEX-EU-I`, the margin scheme code for works of art, only in category `E`. The recorded painting, sold to a US buyer, was coded `G`.

- 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-P0110/
- Explanation last updated: 2026-09-28

## The short answer

`PEPPOL-EN16931-P0110` fails for each `cac:TaxCategory` that carries `VATEX-EU-I` while its `cbc:ID` is not `E`. The code says the sale is made under the margin scheme for works of art, and the VATEX list, which Peppol enforces here, pairs it with the exempt category.

In the recorded example an oil painting is sold to a buyer in New York, and the breakdown and the line are coded `G` because the buyer is abroad. The margin scheme and the export exemption are different reliefs with different codes: a margin sale is `E` with `VATEX-EU-I`, an export is `G` with `VATEX-EU-G`.

## What the rule checks

The rule selects categories by their upper-cased exemption code and requires the trimmed category `E` for `VATEX-EU-I`. Allowances and charges at document level are included: when tried, the code on an allowance in category `G` was reported by this rule, with the warning `UBL-CR-480`, which advises against exemption codes on allowances.

Line categories are outside the rule. When tried, `VATEX-EU-I` in the `cac:ClassifiedTaxCategory` of an export line produced only the warning `UBL-CR-600`, and nothing from this rule.

Which code fits a `G` breakdown is the business of `PEPPOL-EN16931-P0104`. When tried, the failing document with `VATEX-EU-G` in place of `VATEX-EU-I` passed every layer, which is the right outcome only if the painting is exported rather than sold 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-151 | Invoiced item VAT category code | `cac:InvoiceLine/cac:Item/cac:ClassifiedTaxCategory/cbc:ID` |

## How an integration ends up here

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

- The category is derived from the buyer country, so every sale to a customer outside the EU becomes `G`, while a margin scheme flag on the stock item sets the exemption code.
- A gallery applies `VATEX-EU-I` to its whole margin scheme stock, including pieces it also handles as exports.
- The margin scheme is presented as an export or as zero rating because neither shows VAT on the invoice.

## How to fix it

1. Decide which relief applies to the sale. Under the margin scheme the invoice shows no VAT and the category is `E` with `VATEX-EU-I`; if the work is exported and the export exemption is claimed, the category is `G` with `VATEX-EU-G`.
2. For the margin scheme, set `E` on the breakdown and on the lines of the work, keep the rate `0`, and keep `VATEX-EU-I`, as the corrected example does.
3. For an export, keep `G` and change the code to `VATEX-EU-G`, or give reason text instead, which `BR-G-10` also accepts.

## 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 painting sold under the margin scheme, coded as an export, G

```xml
<cac:TaxSubtotal>
  <cbc:TaxableAmount currencyID="GBP">25.00</cbc:TaxableAmount>
  <cbc:TaxAmount currencyID="GBP">0.00</cbc:TaxAmount>
  <cac:TaxCategory>
    <cbc:ID>G</cbc:ID>
    <cbc:Percent>0</cbc:Percent>
    <cbc:TaxExemptionReasonCode>VATEX-EU-I</cbc:TaxExemptionReasonCode>
    <cbc:TaxExemptionReason>Margin scheme - Works of art</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>Oil painting</cbc:Name>
  <cac:ClassifiedTaxCategory>
    <cbc:ID>G</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 margin scheme sale is exempt, E

```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-I</cbc:TaxExemptionReasonCode>
    <cbc:TaxExemptionReason>Margin scheme - Works of art</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>Oil painting</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 `G` where the corrected one has `E`, in the breakdown and on the painting line; `VATEX-EU-I`, the reason text and the buyer address in the United States are unchanged. The failing document reports only this rule, because a `G` breakdown with a reason, a zero rate and a seller VAT identifier satisfies the EN 16931 layer.

### What the validator reported

- The failing invoice reports **PEPPOL-EN16931-P0110**. The corrected document passes every layer with no findings.
  - [Download the failing XML](https://ironfang.com/finance/rule-examples/PEPPOL-EN16931-P0110-invalid.xml)
  - [Download the corrected XML](https://ironfang.com/finance/rule-examples/margin-art-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-I` in a `G` breakdown reported this rule.
- A buyer outside the EU does not stop a margin scheme sale from being category `E`: the corrected example keeps the New York address and passed every layer.
- Only the Peppol layer compares the code with the category; `BR-CL-22`, on the EN 16931 layer, checks that the code is listed.

## Related rules

- [PEPPOL-EN16931-P0104 requires category G wherever the export code VATEX-EU-G is used](https://ironfang.com/docs/finance/rules/PEPPOL-EN16931-P0104.md)
- [PEPPOL-EN16931-P0111 holds the antiques margin scheme code VATEX-EU-J to category E](https://ironfang.com/docs/finance/rules/PEPPOL-EN16931-P0111.md)
- [BR-G-10 requires a reason on the export breakdown if the sale turns out to be an export](https://ironfang.com/docs/finance/rules/BR-G-10.md)
- [BR-E-10 requires a reason on the exempt breakdown, which VATEX-EU-I provides](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-P0110](https://docs.peppol.eu/poacc/billing/3.0/rules/ubl-peppol/PEPPOL-EN16931-P0110/) 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-P0110)
- [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
