# BR-O-05: Remove the VAT rate from a line that is not subject to VAT

A line in category `O` must not have a `cbc:Percent` in its classified tax category, not even `0`. Leave the rate out entirely.

- 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-O-05/
- Explanation last updated: 2026-09-24

## The short answer

`BR-O-05` fails when an item classified `O` has a `cbc:Percent` in its `cac:Item/cac:ClassifiedTaxCategory`; in the recorded example the line says `0`. Delete the `cbc:Percent` element from that category and keep `cbc:ID` and `cac:TaxScheme`.

A rate of 0 is still a rate. A line that is not subject to VAT has no rate at all, and that absence is what tells it apart from a Zero rated line.

## What the rule checks

The rule runs on each item category with `cbc:ID` of `O` under the `VAT` scheme, on `cac:InvoiceLine` and `cac:CreditNoteLine` alike, and reports at that `cac:ClassifiedTaxCategory`. Two `O` lines with a rate gave two findings when tried.

Whether `cbc:Percent` exists is all it asks. The value makes no difference: `0` fails, and so did `20` when tried.

An empty `cbc:Percent` is no way round it. The schema needs a number in that element, and an empty one failed the XSD layer when tried, so the EN 16931 rules never ran.

The VAT breakdown is outside this rule. When tried, a rate of `0` on the `O` breakdown, with none on the line, passed every layer; leaving the breakdown rate out is also allowed, because `BR-48` does not require one for `O`.

Document-level allowances and charges have their own equivalents. An `O` allowance with a rate of `0` reported `BR-O-06`, not this rule, when tried.

| 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 serialiser writes `cbc:Percent` from a rate field on every line, and untaxed items hold a rate of zero.
- One template builds the classified tax category for all categories, with the rate element always present.
- The source system cannot hold an absent rate and stores 0, which fits Zero rated lines but not `O`.
- The line was moved to `O` from `Z` or `E` in the mapping without its rate being dropped.

## How to fix it

1. Check that the line is genuinely not subject to VAT. If it is really Zero rated or exempt, the category is the defect, and `Z` or `E` keep their rate of 0.
2. For `O` lines, omit `cbc:Percent` from `cac:Item/cac:ClassifiedTaxCategory` altogether rather than writing it empty or as 0.
3. Make the omission depend on the category in the serialiser, so the rate is written for every other category and never for `O`.
4. Leave the amounts alone. The line net amount and the breakdown taxable amount do not change when the rate element goes.

## Before and after

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

Fragment of the failing invoice: a category O item that states a rate of 0

```xml
<cac:Item>
  <cbc:Name>Example service</cbc:Name>
  <cac:ClassifiedTaxCategory>
    <cbc:ID>O</cbc:ID>
    <cbc:Percent>0</cbc:Percent>
    <cac:TaxScheme>
      <cbc:ID>VAT</cbc:ID>
    </cac:TaxScheme>
  </cac:ClassifiedTaxCategory>
</cac:Item>
```

Fragment of the corrected invoice: the category O item has no rate element

```xml
<cac:Item>
  <cbc:Name>Example service</cbc:Name>
  <cac:ClassifiedTaxCategory>
    <cbc:ID>O</cbc:ID>
    <cac:TaxScheme>
      <cbc:ID>VAT</cbc:ID>
    </cac:TaxScheme>
  </cac:ClassifiedTaxCategory>
</cac:Item>
```

The failing invoice has `cbc:Percent` `0` in the line `cac:ClassifiedTaxCategory`; the corrected invoice has no rate element there, and the `O` breakdown has none in either document. The failing document reports only `BR-O-05`, located at the classified tax category of line 1.

### What the validator reported

- The failing invoice reports **BR-O-05**. The corrected document passes every layer with no findings.
  - [Download the failing XML](https://ironfang.uk/finance/rule-examples/BR-O-05-invalid.xml)
  - [Download the corrected XML](https://ironfang.uk/finance/rule-examples/not-subject-valid.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`. In a credit note the category sits in `cac:CreditNoteLine/cac:Item`, and the failing invoice rewritten that way reported the same finding when tried.
- Zero rated lines work the other way round: `BR-Z-05` requires a rate of 0 on them, so a mapping that moves a line between `Z` and `O` has to add or drop the element.
- An `O` line brings the other `O` rules with it: no VAT identifiers under `BR-O-02`, a reason on the breakdown under `BR-O-10`, and no other categories under `BR-O-11`.

## Related rules

- [BR-Z-05 is the opposite case, requiring a rate of 0 on Zero rated lines](https://ironfang.uk/docs/finance/rules/BR-Z-05.md)
- [BR-48 requires a rate in every VAT breakdown except one that is not subject to VAT](https://ironfang.uk/docs/finance/rules/BR-48.md)
- [BR-O-02 applies to the same document once it has an O line, and forbids VAT identifiers](https://ironfang.uk/docs/finance/rules/BR-O-02.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-O-05](https://docs.peppol.eu/poacc/billing/3.0/rules/ubl-tc434/BR-O-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-O-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
