# BR-O-08

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

> In a VAT breakdown (BG-23) where the VAT category code (BT-118) is " Not subject to VAT" the VAT category taxable amount (BT-116) shall equal the sum of Invoice line net amounts (BT-131) minus the sum of Document level allowance amounts (BT-92) plus the sum of Document level charge amounts (BT-99) where the VAT category codes (BT-151, BT-95, BT-102) are "Not subject to VAT".

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

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

In a VAT breakdown whose category code is quoted as " Not subject to VAT", the taxable amount (BT-116) must equal the sum of invoice line net amounts (BT-131) minus document-level allowance amounts (BT-92) plus document-level charge amounts (BT-99) for that category. The official message has a single space after the opening quote of the first category name and no space after the quote of the second, "Not subject to VAT". It includes "the" before "VAT category code" and says "net amounts" in the plural. There is no comma before "the VAT category taxable amount". The context writes cbc:ID) = 'O' with spaces around = and cbc:ID)='VAT' with no space before =. The test writes cbc:ID)='O' with no space before =, adds the O charges and subtracts the O allowances from the O line net amounts, and requires the taxable amount to equal that sum. It does not allow a difference of less than 1. Each branch also requires an invoice line or a credit note line to exist.

## What to change

Set BT-116 on the O breakdown to the O line net amounts, minus the O allowances, plus the O charges.

## Illustration

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

**Fails the stated condition.** O lines net to 100, there is an O allowance of 10, and the O breakdown taxable amount is 100.

**Passes the stated condition.** O lines net to 100, there is an O allowance of 10, and the O breakdown taxable amount is 90.

## Published context and test

Copied from the source. Not reimplemented on this page.

```
/*/cac:TaxTotal/cac:TaxSubtotal/cac:TaxCategory[normalize-space(cbc:ID) = 'O'][cac:TaxScheme/normalize-space(upper-case(cbc:ID))='VAT']
```

```
(exists(//cac:InvoiceLine) and (xs:decimal(../cbc:TaxableAmount) = (sum(../../../cac:InvoiceLine[cac:Item/cac:ClassifiedTaxCategory/normalize-space(cbc:ID)='O']/xs:decimal(cbc:LineExtensionAmount)) + sum(../../../cac:AllowanceCharge[cbc:ChargeIndicator=true()][cac:TaxCategory/normalize-space(cbc:ID)='O']/xs:decimal(cbc:Amount)) - sum(../../../cac:AllowanceCharge[cbc:ChargeIndicator=false()][cac:TaxCategory/normalize-space(cbc:ID)='O']/xs:decimal(cbc:Amount))))) or (exists(//cac:CreditNoteLine) and (xs:decimal(../cbc:TaxableAmount) = (sum(../../../cac:CreditNoteLine[cac:Item/cac:ClassifiedTaxCategory/normalize-space(cbc:ID)='O']/xs:decimal(cbc:LineExtensionAmount)) + sum(../../../cac:AllowanceCharge[cbc:ChargeIndicator=true()][cac:TaxCategory/normalize-space(cbc:ID)='O']/xs:decimal(cbc:Amount)) - sum(../../../cac:AllowanceCharge[cbc:ChargeIndicator=false()][cac:TaxCategory/normalize-space(cbc:ID)='O']/xs:decimal(cbc:Amount)))))
```

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