Skip to content

Ironfang Finance - Rule reference

BR-G-09: Set the tax amount of the export VAT breakdown to zero

Goods exported outside the EU are invoiced without VAT, so a VAT breakdown in category G must show a tax amount of exactly 0.

EN 16931Fatal: the document is invalidVATTotals

On this page

The short answer

BR-G-09 fails when the cbc:TaxAmount of a cac:TaxSubtotal in category G is anything but zero. The recorded export charges 5.80, 20% of the 29.00 of goods and freight; set the breakdown tax amount to 0.00 and remove the 5.80 from the VAT total, the total with VAT and the amount due.

An export in G is invoiced net: the amount due is the 29.00 of goods and freight, and any taxes at the destination are settled outside this invoice.

What the rule checks

For every G cac:TaxCategory under the VAT scheme in the root cac:TaxTotal, the neighbouring cbc:TaxAmount has to be zero as a number; the finding is placed on the category.

Changing the breakdown rate does not help. When tried, the same 5.80 with the breakdown rate also set to 20 reported this rule alone: BR-CO-17 then saw a consistent 20% of 29.00, and none of the export rules reads the breakdown rate.

Small amounts fail as well. When tried, 0.30 of tax in the export breakdown, with the totals following it, reported only this rule.

The VAT total is compared elsewhere. When tried, 5.80 in the export breakdown with cac:TaxTotal/cbc:TaxAmount left at 0.00 brought BR-CO-14 as well as this rule and BR-CO-17.

TermMeaningUBL element
BT-117VAT category tax amountcac:TaxTotal/cac:TaxSubtotal/cbc:TaxAmount
BT-118VAT category codecac:TaxTotal/cac:TaxSubtotal/cac:TaxCategory/cbc:ID
BT-110Invoice total VAT amountcac:TaxTotal/cbc:TaxAmount

How an integration ends up here

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

  • VAT is calculated for every breakdown at the seller's domestic rate, 20 in the recorded example, whatever the category.
  • The delivery address was changed to New York after the order had been priced with VAT, and the stored tax amount was kept.
  • Export status is decided after pricing, for example once proof of export arrives, and the invoice keeps the tax calculated before.

How to fix it

  1. Confirm that the goods leave the EU and that the supply is an export in G.
  2. Set cbc:TaxAmount in the G cac:TaxSubtotal to 0.00, and make sure its cbc:Percent is 0.
  3. Recalculate cac:TaxTotal/cbc:TaxAmount, cbc:TaxInclusiveAmount and cbc:PayableAmount. In the recorded example they return to 0.00, 29.00 and 29.00.
  4. If VAT is due because the goods do not in fact leave, the supply is not an export: use the category and rate that apply on the line, the freight charge and the breakdown.

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: 5.80 of VAT in the export breakdown, carried into the totals

<cac:TaxTotal>
  <cbc:TaxAmount currencyID="GBP">5.80</cbc:TaxAmount>
  <cac:TaxSubtotal>
    <cbc:TaxableAmount currencyID="GBP">29.00</cbc:TaxableAmount>
    <cbc:TaxAmount currencyID="GBP">5.80</cbc:TaxAmount>
    <cac:TaxCategory>
      <cbc:ID>G</cbc:ID>
      <cbc:Percent>0</cbc:Percent>
      <!-- reason VATEX-EU-G, reason text and tax scheme omitted from this fragment -->
    </cac:TaxCategory>
  </cac:TaxSubtotal>
</cac:TaxTotal>
<cac:LegalMonetaryTotal>
  <cbc:LineExtensionAmount currencyID="GBP">25.00</cbc:LineExtensionAmount>
  <cbc:TaxExclusiveAmount currencyID="GBP">29.00</cbc:TaxExclusiveAmount>
  <cbc:TaxInclusiveAmount currencyID="GBP">34.80</cbc:TaxInclusiveAmount>
  <!-- allowance, charge of 4.00, prepaid and rounding amounts omitted from this fragment -->
  <cbc:PayableAmount currencyID="GBP">34.80</cbc:PayableAmount>
</cac:LegalMonetaryTotal>

Fragment of the corrected invoice: no tax in the export breakdown, and the totals without it

<cac:TaxTotal>
  <cbc:TaxAmount currencyID="GBP">0.00</cbc:TaxAmount>
  <cac:TaxSubtotal>
    <cbc:TaxableAmount currencyID="GBP">29.00</cbc:TaxableAmount>
    <cbc:TaxAmount currencyID="GBP">0.00</cbc:TaxAmount>
    <cac:TaxCategory>
      <cbc:ID>G</cbc:ID>
      <cbc:Percent>0</cbc:Percent>
      <!-- reason VATEX-EU-G, reason text and tax scheme omitted from this fragment -->
    </cac:TaxCategory>
  </cac:TaxSubtotal>
</cac:TaxTotal>
<cac:LegalMonetaryTotal>
  <cbc:LineExtensionAmount currencyID="GBP">25.00</cbc:LineExtensionAmount>
  <cbc:TaxExclusiveAmount currencyID="GBP">29.00</cbc:TaxExclusiveAmount>
  <cbc:TaxInclusiveAmount currencyID="GBP">29.00</cbc:TaxInclusiveAmount>
  <!-- allowance, charge of 4.00, prepaid and rounding amounts omitted from this fragment -->
  <cbc:PayableAmount currencyID="GBP">29.00</cbc:PayableAmount>
</cac:LegalMonetaryTotal>

The failing invoice puts 5.80 of VAT in the export breakdown and carries it into a VAT total of 5.80 and a total with VAT and amount due of 34.80 each; the corrected invoice has 0.00, 29.00 and 29.00. The failing document also reports BR-CO-17: its export breakdown keeps a rate of 0, and 5.80 does not round to zero.

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 this rule and BR-CO-17 when tried.
  • Reported by the EN 16931 layer as a fatal finding at the export breakdown's cac:TaxCategory.
  • The intra-community breakdown in category K has the same requirement under BR-IC-09, and the exempt one under BR-E-09.

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