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

- Layer: EN 16931
- Severity: fatal (the document is invalid)
- Topics: VAT, Totals, Allowances and charges
- Official definition: https://docs.peppol.eu/poacc/billing/3.0/rules/ubl-tc434/BR-G-08/
- Explanation last updated: 2026-09-28

## 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`.

| Term | Meaning | UBL element |
|---|---|---|
| BT-116 | VAT category taxable amount | `cac:TaxTotal/cac:TaxSubtotal/cbc:TaxableAmount` |
| BT-131 | Invoice line net amount | `cac:InvoiceLine/cbc:LineExtensionAmount (cac:CreditNoteLine/cbc:LineExtensionAmount in a credit note)` |
| BT-99 | Document level charge amount | `cac:AllowanceCharge[cbc:ChargeIndicator = true]/cbc:Amount` |
| BT-92 | Document level allowance amount | `cac: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.

```text
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
```

## 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

```xml
<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

```xml
<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

- The failing invoice reports **BR-G-08**. The corrected document passes every layer with no findings.
  - [Download the failing XML](https://ironfang.com/finance/rule-examples/BR-G-08-invalid.xml)
  - [Download the corrected XML](https://ironfang.com/finance/rule-examples/export-allowance-valid.xml)

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`).

## Related rules

- [BR-G-01 makes sure there is one export breakdown for this rule to check](https://ironfang.com/docs/finance/rules/BR-G-01.md)
- [BR-G-09 requires the tax amount of the same export breakdown to be zero](https://ironfang.com/docs/finance/rules/BR-G-09.md)
- [BR-E-08 is the same exact check for the exempt taxable amount](https://ironfang.com/docs/finance/rules/BR-E-08.md)
- [BR-CO-13 checks the total without VAT built from the same lines, allowances and charges](https://ironfang.com/docs/finance/rules/BR-CO-13.md)

## 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](https://docs.peppol.eu/poacc/billing/3.0/rules/ubl-tc434/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.

## Links

- [This rule as a web page](https://ironfang.com/docs/finance/rules/BR-G-08)
- [Free Peppol invoice validator](https://ironfang.com/tools/peppol-validator)
- [Rule index](https://ironfang.com/docs/finance/rules.md)
- [Ironfang Finance API docs](https://ironfang.com/docs/finance)
- The same rule is available to MCP clients as the tool `finance.rule.get` on https://mcp.ironfang.com/mcp
