Skip to content

Ironfang Finance - Rule reference

BR-G-05: Set the VAT rate of an export line to 0

An invoice line in category G, export outside the EU, must carry a VAT rate of exactly 0 in its item tax category.

EN 16931Fatal: the document is invalidVATLines and prices

On this page

The short answer

BR-G-05 fails when an item cac:ClassifiedTaxCategory has cbc:ID of G and a cbc:Percent that is not zero. The recorded export line says G at 20; change the rate to 0.

An export outside the EU is zero rated, so the domestic rate the item would carry in a home sale does not apply to it.

What the rule checks

Each G item category under the VAT scheme, on an invoice or credit note line, is checked on its own, and the finding points at that cac:ClassifiedTaxCategory.

The rate is compared with zero as a decimal. When tried, 0.00 on the export line passed, like the original 0.

A missing rate fails as well. When tried, the export line with its cbc:Percent removed reported this rule and nothing else; an empty cbc:Percent failed the XSD layer instead, so the business rules never ran.

Nothing else in the document notices the stray rate. The failing invoice still has a G breakdown at 0 with 0.00 of tax, and BR-G-08 totals line amounts by category alone, so this rule is the only finding.

TermMeaningUBL element
BT-151Invoiced item VAT category codecac:InvoiceLine/cac:Item/cac:ClassifiedTaxCategory/cbc:ID (cac:CreditNoteLine/cac:Item/cac:ClassifiedTaxCategory/cbc:ID in a credit note)
BT-152Invoiced item VAT ratecac:InvoiceLine/cac:Item/cac:ClassifiedTaxCategory/cbc:Percent (cac:CreditNoteLine/cac:Item/cac:ClassifiedTaxCategory/cbc:Percent in a credit note)

How an integration ends up here

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

  • The line rate is copied from the item master, which holds the domestic rate of 20, while the category is set from the destination.
  • The category and the rate come from two tax-code tables that were not updated together.
  • An export tax code was created as a copy of the Standard rated code, and its rate was never changed.

How to fix it

  1. Set cbc:Percent to 0 in every item cac:ClassifiedTaxCategory whose cbc:ID is G.
  2. Fix the tax code at source, so that the export code yields a rate of 0 wherever the line rate is taken from.
  3. If the item really is taxable at 20, the line is not an export in G: give it S at that rate and put it in a Standard rated breakdown instead.

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: an export line in category G at a rate of 20

<cac:InvoiceLine>
  <cbc:ID>1</cbc:ID>
  <cbc:InvoicedQuantity unitCode="C62">2</cbc:InvoicedQuantity>
  <cbc:LineExtensionAmount currencyID="GBP">25.00</cbc:LineExtensionAmount>
  <cac:Item>
    <cbc:Name>Example service</cbc:Name>
    <cac:ClassifiedTaxCategory>
      <cbc:ID>G</cbc:ID>
      <cbc:Percent>20</cbc:Percent>
      <cac:TaxScheme>
        <cbc:ID>VAT</cbc:ID>
      </cac:TaxScheme>
    </cac:ClassifiedTaxCategory>
  </cac:Item>
  <!-- price omitted from this fragment -->
</cac:InvoiceLine>

Fragment of the corrected invoice: the export line at a rate of 0

<cac:InvoiceLine>
  <cbc:ID>1</cbc:ID>
  <cbc:InvoicedQuantity unitCode="C62">2</cbc:InvoicedQuantity>
  <cbc:LineExtensionAmount currencyID="GBP">25.00</cbc:LineExtensionAmount>
  <cac:Item>
    <cbc:Name>Example service</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>
  <!-- price omitted from this fragment -->
</cac:InvoiceLine>

Only the item rate differs: 20 in the failing invoice, 0 in the corrected one. BR-G-05 is the only finding, because the breakdown, the tax amounts and the totals are the same in both documents and none of them depends on the line rate.

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. As a credit note, with the rate on a cac:CreditNoteLine, the failing invoice reported the same finding when tried.
  • Reported by the EN 16931 layer as a fatal finding at the item cac:ClassifiedTaxCategory.
  • Allowances and charges in G have their own rate checks, BR-G-06 and BR-G-07. Zero rated and reverse-charge lines follow BR-Z-05 and BR-AE-05.

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-05 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.