On this page
The short answer
BR-Z-06 fails on each allowance whose cac:TaxCategory has cbc:ID of Z under the VAT scheme and a cbc:Percent that is not 0. If the discount reduces Zero rated supplies, set its rate to 0; the volume discount in the recorded example had been given the standard rate of 20.
A rate above zero says the discount reduces taxed supplies. If that is so, the allowance belongs in the category of those supplies, not in Z.
What the rule checks
Each Zero rated cac:TaxCategory under the VAT scheme inside an allowance is checked, whether the allowance is at document level or inside a line. When tried, a Zero rated line allowance at 20 reported this rule at the line's cac:AllowanceCharge, plus the warning UBL-CR-558.
The discount rate is compared with zero as a decimal number. When tried, 0.00 passed, and 5 failed just as the recorded 20 does.
A missing rate fails as well. With cbc:Percent removed from the volume discount, the invoice reported this rule and nothing else when tried.
The wrong rate does not disturb the Zero rated taxable amount. BR-Z-08 deducts every Zero rated allowance whatever its rate, which is why the recorded example reports this rule alone.
| Term | Meaning | UBL element |
|---|---|---|
| BT-95 | Document level allowance VAT category code | cac:AllowanceCharge[cbc:ChargeIndicator = false]/cac:TaxCategory/cbc:ID |
| BT-96 | Document level allowance VAT rate | cac:AllowanceCharge[cbc:ChargeIndicator = false]/cac:TaxCategory/cbc:Percent |
How an integration ends up here
Possible causes, from the shape of the rule rather than from measured usage:
- The rate for document-level allowances is taken from a default tax setting, the standard 20, instead of from the category of the discounted supplies.
- The discount was first created as Standard rated and moved to
Zlater, with only the category updated. - The rate is looked up per item, and a document-level discount has no item, so the export falls back to a country default or leaves the element out.
- A discount spanning Standard rated and Zero rated goods is written as one allowance with the category of one group and the rate of the other.
How to fix it
- Confirm which supplies the allowance reduces. If they are Zero rated, the allowance is Zero rated too.
- Set
cbc:Percentin the allowance'scac:TaxCategoryto0, keepingcbc:IDofZand theVATscheme. - If it reduces taxed supplies instead, change the category to theirs, such as
Swith its rate, move the amount to that breakdown, and recalculate the Zero rated taxable amount without it. - If the discount covers both kinds of supply, split it into one allowance per category and rate.
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: the Zero rated volume discount at 20
<cac:AllowanceCharge>
<cbc:ChargeIndicator>false</cbc:ChargeIndicator>
<cbc:AllowanceChargeReasonCode>95</cbc:AllowanceChargeReasonCode>
<cbc:AllowanceChargeReason>Volume discount</cbc:AllowanceChargeReason>
<cbc:Amount currencyID="GBP">2.50</cbc:Amount>
<cac:TaxCategory>
<cbc:ID>Z</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 Zero rated volume discount at 0
<cac:AllowanceCharge>
<cbc:ChargeIndicator>false</cbc:ChargeIndicator>
<cbc:AllowanceChargeReasonCode>95</cbc:AllowanceChargeReasonCode>
<cbc:AllowanceChargeReason>Volume discount</cbc:AllowanceChargeReason>
<cbc:Amount currencyID="GBP">2.50</cbc:Amount>
<cac:TaxCategory>
<cbc:ID>Z</cbc:ID>
<cbc:Percent>0</cbc:Percent>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:TaxCategory>
</cac:AllowanceCharge>Only the cbc:Percent of the volume discount differs: 20 in the failing invoice, 0 in the corrected one. The failing document reports only BR-Z-06. The Zero rated breakdown of 22.50 is right in both, because the Zero rated taxable amount deducts every Zero rated allowance without looking at its rate.
What the validator reported
- The failing invoice reports BR-Z-06. 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 credit note form of the recorded example reported this rule alone when tried. - Reported by the EN 16931 layer as a fatal finding at the allowance's
cac:TaxCategory, one per allowance. - Charges have the same requirement under
BR-Z-07, and Zero rated lines underBR-Z-05. A Standard rated allowance needs the opposite, a rate above zero, underBR-S-06.
Related rules
- BR-Z-07 requires a rate of 0 on Zero rated document-level charges
- BR-Z-05 requires a rate of 0 on Zero rated lines
- BR-S-06 requires a Standard rated allowance to have a rate above zero
- BR-Z-08 deducts Zero rated allowances from the Zero rated 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-Z-06 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.

