Skip to content

Ironfang Finance - Rule reference

BR-G-04: Register the seller under the VAT scheme on an export invoice with a charge in category G

A document-level charge in category G, such as freight on an export, needs a seller or tax representative VAT identifier under the VAT scheme.

EN 16931Fatal: the document is invalidVATParties and addressesAllowances and charges

On this page

The short answer

BR-G-04 fails when a cac:AllowanceCharge with cbc:ChargeIndicator of true is in category G and there is no VAT identifier for the seller or its tax representative. The recorded seller does send GB123456789, but under the tax scheme TAX, which does not count; change the scheme to VAT.

The freight charge of 4.00 and the export line share one seller, so BR-G-02 reports the same shortfall for the line.

What the rule checks

A charge in G sets the rule off with no export line at all. When tried, a freight charge of 4.00 in G on an invoice whose only line was Standard rated at 20%, with the seller registered only under TAX, reported this rule alone. A charge inside a line counts as well: when tried, a charge of 0.00 in G placed in that Standard rated line, again with the seller only under TAX, reported this rule and the warning UBL-CR-558.

The seller identifier must sit in a cac:PartyTaxScheme whose cac:TaxScheme/cbc:ID is VAT. The scheme is the whole difference between the failing and corrected invoices: the same GB123456789 under TAX fails.

A tax representative is an alternative. When tried, the freight invoice with no seller VAT identifier but a cac:TaxRepresentativeParty holding GB987654321 under VAT passed every layer.

An empty identifier is not reported here. When tried, a seller cbc:CompanyID with no content under VAT got past this rule and BR-G-02, and failed only PEPPOL-EN16931-R008.

TermMeaningUBL element
BT-102Document level charge VAT category codecac:AllowanceCharge[cbc:ChargeIndicator = true]/cac:TaxCategory/cbc:ID
BT-31Seller VAT identifiercac:AccountingSupplierParty/cac:Party/cac:PartyTaxScheme/cbc:CompanyID
BT-63Seller tax representative VAT identifiercac:TaxRepresentativeParty/cac:PartyTaxScheme/cbc:CompanyID

How an integration ends up here

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

  • Tax registrations are exported with one generic scheme code, TAX, whatever kind of registration they are.
  • The seller VAT section is suppressed for buyers outside the EU, on the reasoning that no VAT is charged.
  • Freight is added as a separate charge by a logistics module that assigns G from the destination, while the seller party comes from a profile with no VAT registration.

How to fix it

  1. Find where the seller cac:PartyTaxScheme is written, and give it a cac:TaxScheme/cbc:ID of VAT when its cbc:CompanyID is the VAT registration number.
  2. If the seller also has a tax registration that is not for VAT, it can go in a second cac:PartyTaxScheme under another scheme; the VAT one must still be there.
  3. Where a tax representative accounts for VAT on the seller's behalf, add cac:TaxRepresentativeParty with its own VAT cac:PartyTaxScheme instead.
  4. Leave the freight charge in G at a rate of 0 if it is part of the export supply.

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 freight charge in category G, and the seller registration under TAX

<cac:AccountingSupplierParty>
  <cac:Party>
    <!-- endpoint and postal address in London, GB, omitted from this fragment -->
    <cac:PartyTaxScheme>
      <cbc:CompanyID>GB123456789</cbc:CompanyID>
      <cac:TaxScheme>
        <cbc:ID>TAX</cbc:ID>
      </cac:TaxScheme>
    </cac:PartyTaxScheme>
    <!-- legal entity omitted from this fragment -->
  </cac:Party>
</cac:AccountingSupplierParty>
<!-- buyer in New York, US, omitted from this fragment -->
<cac:AllowanceCharge>
  <cbc:ChargeIndicator>true</cbc:ChargeIndicator>
  <cbc:AllowanceChargeReasonCode>FC</cbc:AllowanceChargeReasonCode>
  <cbc:AllowanceChargeReason>Freight to New York</cbc:AllowanceChargeReason>
  <cbc:Amount currencyID="GBP">4.00</cbc:Amount>
  <cac:TaxCategory>
    <cbc:ID>G</cbc:ID>
    <cbc:Percent>0</cbc:Percent>
    <!-- tax scheme VAT omitted from this fragment -->
  </cac:TaxCategory>
</cac:AllowanceCharge>

Fragment of the corrected invoice: the same registration under the VAT scheme

<cac:AccountingSupplierParty>
  <cac:Party>
    <!-- endpoint and postal address in London, GB, omitted from this fragment -->
    <cac:PartyTaxScheme>
      <cbc:CompanyID>GB123456789</cbc:CompanyID>
      <cac:TaxScheme>
        <cbc:ID>VAT</cbc:ID>
      </cac:TaxScheme>
    </cac:PartyTaxScheme>
    <!-- legal entity omitted from this fragment -->
  </cac:Party>
</cac:AccountingSupplierParty>
<!-- buyer and the freight charge of 4.00 in G omitted from this fragment -->

Only the seller tax scheme differs: TAX in the failing invoice, VAT in the corrected one, both around GB123456789. The freight charge of 4.00 in G is unchanged. The failing document also reports BR-G-02, since its export line needs the same seller VAT identifier.

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. The failing invoice as a credit note reported BR-G-02 and this rule when tried.
  • Allowances in G are checked the same way by BR-G-03. The charge's own rate must be 0 under BR-G-07, and its amount counts towards the export taxable amount checked by BR-G-08.
  • BR-CO-09 reads only identifiers under the VAT scheme, so moving GB123456789 to VAT also brings its country prefix under that check.

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 BR-G-04 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.