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

- Layer: EN 16931
- Severity: fatal (the document is invalid)
- Topics: VAT
- Official definition: https://docs.peppol.eu/poacc/billing/3.0/rules/ubl-tc434/BR-Z-10/
- Explanation last updated: 2026-09-24

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

| Term | Meaning | UBL element |
|---|---|---|
| BT-118 | VAT category code | `cac:TaxTotal/cac:TaxSubtotal/cac:TaxCategory/cbc:ID` |
| BT-120 | VAT exemption reason text | `cac:TaxTotal/cac:TaxSubtotal/cac:TaxCategory/cbc:TaxExemptionReason` |
| BT-121 | VAT exemption reason code | `cac: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.

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

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

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

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

## Related rules

- [BR-S-10 forbids exemption reasons on Standard rated breakdowns in the same way](https://ironfang.uk/docs/finance/rules/BR-S-10.md)
- [BR-E-10 requires a reason on an exempt breakdown, the category to use if the supply is exempt](https://ironfang.uk/docs/finance/rules/BR-E-10.md)
- [BR-Z-01 requires exactly one Zero rated breakdown when Zero rated content exists](https://ironfang.uk/docs/finance/rules/BR-Z-01.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-24.1: source checked 2026-09-24, explanation last updated 2026-09-24.

[The official definition of BR-Z-10](https://docs.peppol.eu/poacc/billing/3.0/rules/ubl-tc434/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.

## Links

- [This rule as a web page](https://ironfang.uk/docs/finance/rules/BR-Z-10)
- [Free Peppol invoice validator](https://ironfang.uk/tools/peppol-validator)
- [Rule index](https://ironfang.uk/docs/finance/rules.md)
- [Ironfang Finance API docs](https://ironfang.uk/docs/finance)
- The same rule is available to MCP clients as the tool `finance.rule.get` on https://mcp.ironfang.uk/mcp
