On this page
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
- Set
cbc:Percentto0in every itemcac:ClassifiedTaxCategorywhosecbc:IDisG. - Fix the tax code at source, so that the export code yields a rate of 0 wherever the line rate is taken from.
- If the item really is taxable at 20, the line is not an export in
G: give itSat that rate and put it in a Standard rated breakdown instead.
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: an export line in category G at a rate of 20
<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
<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 XMLDownload the corrected 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
InvoiceandCreditNote. As a credit note, with the rate on acac: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
Ghave their own rate checks,BR-G-06andBR-G-07. Zero rated and reverse-charge lines followBR-Z-05andBR-AE-05.
Related rules
- BR-G-06 applies the same zero rate to a document-level allowance in G
- BR-G-01 requires the single export breakdown the corrected line belongs to
- BR-Z-05 is the rate check for Zero rated lines
- BR-AE-05 is the rate check for reverse-charge lines
- Browse every rule in the reference
- Background: Understanding EN 16931 validation errors
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 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.

