Skip to content

Ironfang Finance - Rule reference

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.

Peppol BIS BillingFatal: the document is invalidVATCode lists

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.

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
BT-151Invoiced item VAT category codecac: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.

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

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.

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.