# BR-Z-05: Set the VAT rate of a Zero rated line to 0

A line in VAT category `Z` must have a VAT rate of exactly 0. Any other rate on the line, or no rate element at all, fails.

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

## The short answer

`BR-Z-05` fails on each line whose `cac:Item/cac:ClassifiedTaxCategory` has `cbc:ID` of `Z` and a `cbc:Percent` other than 0. If the item is zero rated, set `cbc:Percent` to `0`. If a positive rate really applies, as the 5 in the recorded example might suggest, the item is not zero rated and the category is the value to change.

The category and the rate contradict each other, and only the tax code in the source system says which one is right. Fix that one rather than whichever is easier to edit.

## What the rule checks

Each item tax category with `cbc:ID` of `Z` under the `VAT` scheme is checked, in `cac:InvoiceLine` or `cac:CreditNoteLine`, and a failure is reported at that `cac:ClassifiedTaxCategory`.

The rate is compared with zero as a number, so `0` and `0.00` both pass. Any other value fails, whether positive or negative.

An absent rate is not read as zero. When tried, a Zero rated line with its `cbc:Percent` removed reported this rule.

Document-level allowances and charges have separate rules. When tried, a Zero rated document charge at 5 was reported as `BR-Z-07`, and a Zero rated document allowance at 5 as `BR-Z-06`.

| 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 comes from the product record while the category comes from a separate tax code table, and the two disagree for this item.
- An item moved between a reduced rate and zero rating, and only one of the two fields was updated.
- The category is chosen from a zero-rated flag on the item, but the rate is copied from a country default.
- An empty rate is serialised by omitting `cbc:Percent` instead of writing `0`.

## How to fix it

1. Look up the item's tax code in the source system to establish whether the supply is zero rated.
2. If it is, set `cbc:Percent` in the line's `cac:ClassifiedTaxCategory` to `0`. Nothing else has to move, because the line already sits in the Zero rated breakdown.
3. If VAT is due at a positive rate, reduced or not, change the line category to `S` with that rate. Move its net amount out of the Zero rated breakdown into a Standard rated breakdown for that rate, calculate the tax, and update the VAT total, the total with VAT and the amount due.
4. Make the export take category and rate from the same tax code, so they cannot drift apart again.

## Before and after

These are fragments, not complete documents. The complete synthetic documents they come from are linked below.

Fragment of the failing invoice: line 2 is in category Z with a rate of 5

```xml
<cac:InvoiceLine>
  <cbc:ID>2</cbc:ID>
  <cbc:InvoicedQuantity unitCode="C62">2</cbc:InvoicedQuantity>
  <cbc:LineExtensionAmount currencyID="GBP">10.00</cbc:LineExtensionAmount>
  <cac:Item>
    <cbc:Name>Example zero-rated item</cbc:Name>
    <cac:ClassifiedTaxCategory>
      <cbc:ID>Z</cbc:ID>
      <cbc:Percent>5</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 Zero rated line at 0

```xml
<cac:InvoiceLine>
  <cbc:ID>2</cbc:ID>
  <cbc:InvoicedQuantity unitCode="C62">2</cbc:InvoicedQuantity>
  <cbc:LineExtensionAmount currencyID="GBP">10.00</cbc:LineExtensionAmount>
  <cac:Item>
    <cbc:Name>Example zero-rated item</cbc:Name>
    <cac:ClassifiedTaxCategory>
      <cbc:ID>Z</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 `cbc:Percent` of line 2 differs: `5` in the failing invoice, `0` in the corrected one. The failing document reports only `BR-Z-05`. Its Zero rated breakdown of 10.00 still matches, because the Zero rated taxable amount rule, `BR-Z-08`, totals every line in category `Z` without grouping them by rate.

### What the validator reported

- The failing invoice reports **BR-Z-05**. The corrected document passes every layer with no findings.
  - [Download the failing XML](https://ironfang.uk/finance/rule-examples/BR-Z-05-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 Zero rated `cac:CreditNoteLine` at 5 reported the same rule when tried.
- Reported by the EN 16931 layer as a fatal finding for each offending line.
- Reverse-charge lines carry the same requirement under `BR-AE-05`. Standard rated lines need the opposite, a rate above zero, under `BR-S-05`.
- The Zero rated breakdown has rules of its own: `BR-Z-01` requires exactly one, and `BR-Z-10` forbids an exemption reason in it.

## Related rules

- [BR-S-05 is the Standard rated line rule, which requires a rate above zero](https://ironfang.uk/docs/finance/rules/BR-S-05.md)
- [BR-AE-05 requires the same rate of 0 on reverse-charge lines](https://ironfang.uk/docs/finance/rules/BR-AE-05.md)
- [BR-Z-01 requires one Zero rated breakdown for the Zero rated lines](https://ironfang.uk/docs/finance/rules/BR-Z-01.md)
- [BR-Z-10 keeps exemption reasons out of the Zero rated breakdown](https://ironfang.uk/docs/finance/rules/BR-Z-10.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-05](https://docs.peppol.eu/poacc/billing/3.0/rules/ubl-tc434/BR-Z-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.

## Links

- [This rule as a web page](https://ironfang.uk/docs/finance/rules/BR-Z-05)
- [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
