On this page
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-Ito 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
- Decide which relief applies to the sale. Under the margin scheme the invoice shows no VAT and the category is
EwithVATEX-EU-I; if the work is exported and the export exemption is claimed, the category isGwithVATEX-EU-G. - For the margin scheme, set
Eon the breakdown and on the lines of the work, keep the rate0, and keepVATEX-EU-I, as the corrected example does. - For an export, keep
Gand change the code toVATEX-EU-G, or give reason text instead, whichBR-G-10also accepts.
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 painting sold under the margin scheme, coded as an export, G
<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
<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 XMLDownload the corrected 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
InvoiceandCreditNote. When tried, a credit note withVATEX-EU-Iin aGbreakdown 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
- PEPPOL-EN16931-P0111 holds the antiques margin scheme code VATEX-EU-J to category E
- BR-G-10 requires a reason on the export breakdown if the sale turns out to be an export
- BR-E-10 requires a reason on the exempt breakdown, which VATEX-EU-I provides
- Browse every rule in the reference
- Background: How Peppol invoice validation actually works
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 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.

