Skip to content

Ironfang Finance - Rule reference

BR-G-08: Make the export taxable amount equal its lines, charges and allowances

The taxable amount of the G breakdown must equal the export line net amounts plus G charges minus G allowances, with no tolerance.

EN 16931Fatal: the document is invalidVATTotalsAllowances and charges

On this page

The short answer

BR-G-08 fails when the cbc:TaxableAmount of the G breakdown differs from the net export content: the cbc:LineExtensionAmount of every line whose item is G, plus root-level charges in G, minus root-level allowances in G. The recorded breakdown says 25.00, the line alone, and forgets the volume discount of 2.50; the figure should be 22.50.

Because an export carries no tax, a wrong taxable amount leaves every VAT total intact, and this rule can be the only finding that shows it.

What the rule checks

For each cac:TaxCategory with cbc:ID of G under the VAT scheme in the root cac:TaxTotal, the rule compares the breakdown taxable amount with a sum over the whole document, and reports at that category.

The allowance must be subtracted, neither ignored nor added. When tried, 25.00 and 27.50 both failed against the expected 22.50, and a forgotten freight charge failed the same way, 25.00 against 29.00 in the charge example.

The comparison is exact. When tried, 22.51 failed, while 22.5 passed because it is the same number.

Only lines and root-level allowances and charges in G enter the sum. The category of each item or allowance decides; rates are not read.

Every G breakdown is compared with the full sum, so two copies of the right figure both pass here, which leaves a duplicate to BR-G-01.

TermMeaningUBL element
BT-116VAT category taxable amountcac:TaxTotal/cac:TaxSubtotal/cbc:TaxableAmount
BT-131Invoice line net amountcac:InvoiceLine/cbc:LineExtensionAmount (cac:CreditNoteLine/cbc:LineExtensionAmount in a credit note)
BT-99Document level charge amountcac:AllowanceCharge[cbc:ChargeIndicator = true]/cbc:Amount
BT-92Document level allowance amountcac:AllowanceCharge[cbc:ChargeIndicator = false]/cbc:Amount

How an integration ends up here

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

  • The breakdown is built from the line totals before document-level discounts are applied.
  • The allowance is added instead of subtracted because its amount is stored as a positive number.
  • An export freight charge is invoiced in G, but the breakdown builder only reads lines.
  • The taxable amount is copied from cbc:LineExtensionAmount in cac:LegalMonetaryTotal, which never includes document-level allowances or charges.

How to fix it

  1. Add up the cbc:LineExtensionAmount of every line whose cac:Item/cac:ClassifiedTaxCategory/cbc:ID is G, keeping signs.
  2. Add the cbc:Amount of root-level cac:AllowanceCharge elements in G with cbc:ChargeIndicator of true, and subtract those with false.
  3. Write the result, with two decimals, as the cbc:TaxableAmount of the one G cac:TaxSubtotal, leaving its tax amount at 0.00.
  4. Check that cbc:TaxExclusiveAmount in cac:LegalMonetaryTotal agrees. In the recorded example it is already 22.50, and BR-CO-13 compares it with the lines, allowances and charges.

The recorded example has one export line and a document-level volume discount, both in category G.

Export line net amount: 25.00
Document-level charges in G: 0.00
Document-level allowance in G: - 2.50
Expected export taxable amount: 25.00 + 0.00 - 2.50 = 22.50
Sent: 25.00, which leaves the allowance out, so the rule fails

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: 25.00 taxable in G, although the G discount of 2.50 brings the export content to 22.50

<cac:AllowanceCharge>
  <cbc:ChargeIndicator>false</cbc:ChargeIndicator>
  <!-- reason code 95 and reason omitted from this fragment -->
  <cbc:Amount currencyID="GBP">2.50</cbc:Amount>
  <!-- tax category G at 0 omitted from this fragment -->
</cac:AllowanceCharge>
<cac:TaxTotal>
  <cbc:TaxAmount currencyID="GBP">0.00</cbc:TaxAmount>
  <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>
      <!-- rate 0, reason VATEX-EU-G, reason text and tax scheme omitted from this fragment -->
    </cac:TaxCategory>
  </cac:TaxSubtotal>
</cac:TaxTotal>

<!-- export line in G: LineExtensionAmount 25.00 -->

Fragment of the corrected invoice: 25.00 - 2.50 = 22.50

<cac:TaxSubtotal>
  <cbc:TaxableAmount currencyID="GBP">22.50</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-G</cbc:TaxExemptionReasonCode>
    <cbc:TaxExemptionReason>Export outside the EU</cbc:TaxExemptionReason>
    <cac:TaxScheme>
      <cbc:ID>VAT</cbc:ID>
    </cac:TaxScheme>
  </cac:TaxCategory>
</cac:TaxSubtotal>

Only the export cbc:TaxableAmount differs: 25.00 in the failing invoice, 22.50 in the corrected one. The failing document reports only BR-G-08. Its cac:LegalMonetaryTotal already deducts the discount, so the totals rules are satisfied, and the breakdown tax amount is 0.00 in both.

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, summing cac:CreditNoteLine in a credit note. The failing invoice as a credit note reported this rule at the same breakdown when tried.
  • Exempt and intra-community breakdowns have the same exact check under BR-E-08 and BR-IC-08. The Standard rated BR-S-08 groups by rate and allows a difference below 1.00.
  • The export breakdown must also exist once (BR-G-01), carry no tax (BR-G-09) and state its reason (BR-G-10).

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