# BR-O-13

Quoted from a public specification. This page is not a validator, and it is not tax, legal, or accounting advice.

- Country: EU
- Syntax: UBL
- Severity: fatal
- Statement language: en
- Last verified: 2026-10-18

## Official statement

> An Invoice that contains a VAT breakdown group (BG-23) with a VAT category code (BT-118) "Not subject to VAT" shall not contain Document level allowances (BG-20) where Document level allowance VAT category code (BT-95) is not "Not subject to VAT".

Source: https://docs.peppol.eu/poacc/billing/3.0/rules/ubl-tc434/BR-O-13/

Peppol BIS Billing 3.0, May 2026 release, EN 16931 model bound to UBL

Severity note: fatal, from the Flag column of the Peppol BIS Billing 3.0 UBL rules index retrieved 2026-10-18.

## Plain-language reading

If a VAT breakdown uses the category "Not subject to VAT", the invoice must not contain document-level allowances (BG-20) whose VAT category code (BT-95) is not "Not subject to VAT". The official message says "Document level allowances" in the plural and omits "the" before "Document level allowance VAT category code". It says "shall not contain" those allowances. It does not say the allowance shall not contain a VAT rate, and it does not name BT-31, BT-63, or BT-48. The quoted category name has no space after the opening quote. The published test passes when no O VAT breakdown exists. The negative branch is not(...) and does not call exists. When an O breakdown exists, the count of allowance tax categories whose code is not O must be 0. The count selects AllowanceCharge where ChargeIndicator=false() with no space before =. The positive branch calls exists.

## What to change

When a VAT breakdown is category O, set every document-level allowance VAT category to O, or remove the allowance that uses another category.

## Illustration

Illustration of the condition in the official statement. Not an example published by the source.

**Fails the stated condition.** An O VAT breakdown is present and a document-level allowance uses a tax category that is not O.

**Passes the stated condition.** Every document-level allowance uses O, or the invoice has no O breakdown.

## Published context and test

Copied from the source. Not reimplemented on this page.

```
/ubl:Invoice | /cn:CreditNote
```

```
(exists(cac:TaxTotal/cac:TaxSubtotal/cac:TaxCategory[cac:TaxScheme/normalize-space(upper-case(cbc:ID))='VAT']/cbc:ID[normalize-space(.) = 'O']) and count(//cac:AllowanceCharge[cbc:ChargeIndicator=false()]/cac:TaxCategory[normalize-space(cbc:ID) != 'O'][cac:TaxScheme/normalize-space(upper-case(cbc:ID))='VAT']) = 0) or not(cac:TaxTotal/cac:TaxSubtotal/cac:TaxCategory[cac:TaxScheme/normalize-space(upper-case(cbc:ID))='VAT']/cbc:ID[normalize-space(.) = 'O'])
```

[All rule notes](https://einvoicegoblin.com/rules/index.md) · [JSON](https://einvoicegoblin.com/rules/BR-O-13.json) · [HTML](https://einvoicegoblin.com/rules/BR-O-13/) · [llms.txt](https://einvoicegoblin.com/llms.txt) · [Invoice page](https://einvoicegoblin.com/) · [Privacy](https://einvoicegoblin.com/privacy.html)
