# BR-G-07: Set the VAT rate of an export charge to 0

A document-level charge in category `G`, such as freight billed with an export, must carry a VAT rate of 0 in its tax category.

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

## The short answer

`BR-G-07` fails when a `cac:AllowanceCharge` with `cbc:ChargeIndicator` of `true` has category `G` and a `cbc:Percent` other than zero. The recorded freight charge of 4.00 is `G` at `20`; set the rate to `0`.

A charge in `G` is part of the export supply and follows its zero rate. If the freight is really taxable at 20, it is the category that is wrong, not the rate.

## What the rule checks

The rule reads the `cbc:Percent` of each charge `cac:TaxCategory` whose `cbc:ID` is `G` under the `VAT` scheme, as a decimal, and reports at that element. A charge inside a line is read too: when tried, one of 0.00 at `20` in `G` within a Standard rated line reported this rule at the line, with the warning `UBL-CR-558`.

A charge with no `cbc:Percent` fails too. When tried, removing the rate from the freight charge reported only this rule.

The comparison is numeric rather than textual: when tried, a charge rate written as `-0` passed, since it equals zero.

The tax amount is not what sets it off. The failing invoice charges no VAT anywhere, 0.00 in the breakdown and in the totals, and still fails on the rate alone.

| Term | Meaning | UBL element |
|---|---|---|
| BT-102 | Document level charge VAT category code | `cac:AllowanceCharge[cbc:ChargeIndicator = true]/cac:TaxCategory/cbc:ID` |
| BT-103 | Document level charge VAT rate | `cac:AllowanceCharge[cbc:ChargeIndicator = true]/cac:TaxCategory/cbc:Percent` |

## How an integration ends up here

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

- Freight is set up in the logistics module with the domestic rate of 20, and only the category follows the destination.
- The charge copies its category from the export lines but its rate from a default tax code.
- A shipping service that is taxable in its own right is filed under `G` together with the goods, so category and rate contradict each other.

## How to fix it

1. Set `cbc:Percent` to `0` in the `cac:TaxCategory` of every root-level charge whose category is `G`.
2. Configure the export freight charge with category `G` and rate 0 together, so that neither is filled from a default.
3. If the charge is a separate service taxable at 20, move it to category `S` with that rate and a Standard rated breakdown, and take its 4.00 out of the `G` taxable amount.

## Before and after

These are fragments, not complete documents. The complete synthetic documents they come from are linked below.

Fragment of the failing invoice: freight of 4.00 in category G at a rate of 20

```xml
<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>20</cbc:Percent>
    <cac:TaxScheme>
      <cbc:ID>VAT</cbc:ID>
    </cac:TaxScheme>
  </cac:TaxCategory>
</cac:AllowanceCharge>
```

Fragment of the corrected invoice: the freight charge at a rate of 0

```xml
<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>
    <cac:TaxScheme>
      <cbc:ID>VAT</cbc:ID>
    </cac:TaxScheme>
  </cac:TaxCategory>
</cac:AllowanceCharge>
```

Only the charge rate differs: `20` in the failing invoice, `0` in the corrected one. The failing document reports only `BR-G-07`; the export breakdown of 29.00 and its 0.00 of tax are identical in both, and that taxable amount is built from the charge amount, not its rate.

### What the validator reported

- The failing invoice reports **BR-G-07**. The corrected document passes every layer with no findings.
  - [Download the failing XML](https://ironfang.com/finance/rule-examples/BR-G-07-invalid.xml)
  - [Download the corrected XML](https://ironfang.com/finance/rule-examples/export-charge-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`; the failing invoice as a credit note gave the same finding when tried.
- Allowances in `G` are held to a rate of 0 by `BR-G-06`, and export lines by `BR-G-05`.
- A document with a `G` charge also needs a seller VAT identifier (`BR-G-04`), and the charge is added into the export taxable amount (`BR-G-08`).

## Related rules

- [BR-G-06 applies the same rule to a document-level allowance in G](https://ironfang.com/docs/finance/rules/BR-G-06.md)
- [BR-G-04 requires the seller VAT identifier on documents with a G charge](https://ironfang.com/docs/finance/rules/BR-G-04.md)
- [BR-G-08 adds the G charge into the export taxable amount](https://ironfang.com/docs/finance/rules/BR-G-08.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-07](https://docs.peppol.eu/poacc/billing/3.0/rules/ubl-tc434/BR-G-07/) 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-07)
- [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
