On this page
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
Gtogether with the goods, so category and rate contradict each other.
How to fix it
- Set
cbc:Percentto0in thecac:TaxCategoryof every root-level charge whose category isG. - Configure the export freight charge with category
Gand rate 0 together, so that neither is filled from a default. - If the charge is a separate service taxable at 20, move it to category
Swith that rate and a Standard rated breakdown, and take its 4.00 out of theGtaxable amount.
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: freight of 4.00 in category G at a rate of 20
<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
<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 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; the failing invoice as a credit note gave the same finding when tried. - Allowances in
Gare held to a rate of 0 byBR-G-06, and export lines byBR-G-05. - A document with a
Gcharge 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
- BR-G-04 requires the seller VAT identifier on documents with a G charge
- BR-G-08 adds the G charge into the export taxable amount
- 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-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.

