Skip to content

BR-Z-10: Remove the exemption reason from a Zero rated VAT breakdown

A Zero rated VAT breakdown must carry neither exemption reason text nor an exemption reason code. The category Z says all that is needed.

EN 16931Fatal: the document is invalidVAT

The short answer

BR-Z-10 fails when the cac:TaxCategory of a VAT breakdown with category Z holds cbc:TaxExemptionReason or cbc:TaxExemptionReasonCode. Take the element out; the Zero rated breakdown needs only its category, a rate of 0 and the VAT scheme.

Zero rating and exemption are separate treatments. If the supply is really exempt, it belongs in category E, where a reason is required instead of forbidden.

What the rule checks

The rule reads each cac:TaxCategory with cbc:ID of Z under the VAT scheme in a cac:TaxSubtotal of the root cac:TaxTotal, and fails when either reason element appears in it.

A code without text fails as well. When tried, a Zero rated breakdown carrying only a cbc:TaxExemptionReasonCode of VATEX-EU-132 was reported by this rule.

The wording is never read. Zero rated, which merely repeats the category, is enough to fail it.

Item categories on the lines are outside this rule. When tried, a reason inside a Zero rated line's cac:ClassifiedTaxCategory left the document valid, with only the warning UBL-CR-601.

TermMeaningUBL element
BT-118VAT category codecac:TaxTotal/cac:TaxSubtotal/cac:TaxCategory/cbc:ID
BT-120VAT exemption reason textcac:TaxTotal/cac:TaxSubtotal/cac:TaxCategory/cbc:TaxExemptionReason
BT-121VAT exemption reason codecac:TaxTotal/cac:TaxSubtotal/cac:TaxCategory/cbc:TaxExemptionReasonCode

How an integration ends up here

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

  • The export writes a description for every breakdown, and the zero-rate tax code in the source system has one, such as Zero rated.
  • Zero-rated and exempt supplies share one tax code, and the exemption wording attached to it reaches both.
  • A breakdown was switched from E to Z and its reason element came along.
  • The reason field is mapped for all nil-VAT categories together, without separating those that need it from Z, which forbids it.

How to fix it

  1. Remove cbc:TaxExemptionReason and cbc:TaxExemptionReasonCode from the cac:TaxCategory of the Zero rated breakdown.
  2. Read what the reason said before discarding it. If it describes an exemption rather than zero rating, the supply belongs in category E on the lines and in the breakdown, and the reason moves with it.
  3. Stop the export from writing reason elements for Z breakdowns, whatever the tax code holds.

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: reason text inside the Zero rated tax category

<cac:TaxSubtotal>
  <cbc:TaxableAmount currencyID="GBP">10.00</cbc:TaxableAmount>
  <cbc:TaxAmount currencyID="GBP">0.00</cbc:TaxAmount>
  <cac:TaxCategory>
    <cbc:ID>Z</cbc:ID>
    <cbc:Percent>0</cbc:Percent>
    <cbc:TaxExemptionReason>Zero rated</cbc:TaxExemptionReason>
    <cac:TaxScheme>
      <cbc:ID>VAT</cbc:ID>
    </cac:TaxScheme>
  </cac:TaxCategory>
</cac:TaxSubtotal>

Fragment of the corrected invoice: the Zero rated breakdown without a reason

<cac:TaxSubtotal>
  <cbc:TaxableAmount currencyID="GBP">10.00</cbc:TaxableAmount>
  <cbc:TaxAmount currencyID="GBP">0.00</cbc:TaxAmount>
  <cac:TaxCategory>
    <cbc:ID>Z</cbc:ID>
    <cbc:Percent>0</cbc:Percent>
    <cac:TaxScheme>
      <cbc:ID>VAT</cbc:ID>
    </cac:TaxScheme>
  </cac:TaxCategory>
</cac:TaxSubtotal>

The failing invoice has cbc:TaxExemptionReason with the text Zero rated in its Zero rated breakdown, the second cac:TaxSubtotal, and the corrected invoice has no reason there. That is the only difference, and the failing document reports only BR-Z-10.

What the validator reported

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. A credit note with the same text in its Zero rated breakdown reported this rule when tried.
  • Reported by the EN 16931 layer as a fatal finding at the Zero rated breakdown's cac:TaxCategory.
  • Standard rated breakdowns are under the same ban through BR-S-10. Exempt breakdowns work the other way round and need a reason under BR-E-10.

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-24.1: source checked 2026-09-24, explanation last updated 2026-09-24.

The official definition of BR-Z-10 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.