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

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

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

| Term | Meaning | UBL element |
|---|---|---|
| BT-151 | Invoiced item VAT category code | `cac:InvoiceLine/cac:Item/cac:ClassifiedTaxCategory/cbc:ID (cac:CreditNoteLine/cac:Item/cac:ClassifiedTaxCategory/cbc:ID in a credit note)` |
| BT-152 | Invoiced item VAT rate | `cac: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.

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

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

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

- The failing invoice reports **BR-G-05**. The corrected document passes every layer with no findings.
  - [Download the failing XML](https://ironfang.com/finance/rule-examples/BR-G-05-invalid.xml)
  - [Download the corrected XML](https://ironfang.com/finance/rule-examples/export-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`. 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`.

## Related rules

- [BR-G-06 applies the same zero rate to a document-level allowance in G](https://ironfang.com/docs/finance/rules/BR-G-06.md)
- [BR-G-01 requires the single export breakdown the corrected line belongs to](https://ironfang.com/docs/finance/rules/BR-G-01.md)
- [BR-Z-05 is the rate check for Zero rated lines](https://ironfang.com/docs/finance/rules/BR-Z-05.md)
- [BR-AE-05 is the rate check for reverse-charge lines](https://ironfang.com/docs/finance/rules/BR-AE-05.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-05](https://docs.peppol.eu/poacc/billing/3.0/rules/ubl-tc434/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.

## Links

- [This rule as a web page](https://ironfang.com/docs/finance/rules/BR-G-05)
- [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
