# BR-E-08: Make the exempt taxable amount equal the exempt lines, charges and allowances

The exempt VAT breakdown taxable amount must equal exempt line net amounts plus exempt document charges minus exempt document allowances, exactly.

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

## The short answer

`BR-E-08` fails when the `cbc:TaxableAmount` of a VAT breakdown with category `E` is not the net exempt content of the document: the `cbc:LineExtensionAmount` of every line in category `E`, plus root-level charges in category `E`, minus root-level allowances in category `E`. Work that figure out and write it as the taxable amount.

There is no tolerance. The Standard rated equivalent lets a difference under 1.00 through; here a single penny fails.

## What the rule checks

The rule runs for each `cac:TaxCategory` with `cbc:ID` of `E` under the `VAT` scheme in the root `cac:TaxTotal`, and compares that breakdown's taxable amount with a sum built from the whole document.

The sum takes the net amounts of lines whose item category is `E`, adds the `cbc:Amount` of root-level `cac:AllowanceCharge` elements in category `E` with `cbc:ChargeIndicator` of `true`, and subtracts those with `false`. When tried, an exempt document allowance of 5.00 beside an exempt line of 25.00 validated with a taxable amount of 20.00 and failed this rule with 25.00.

Line-level allowances and charges are not added again, because each line net amount already contains them.

The two figures are compared exactly, as decimal numbers. When tried, a taxable amount of 25.01 against exempt lines of 25.00 failed. The notation does not matter, so `25` equals `25.00`.

Nothing is grouped by rate. If the document has more than one exempt breakdown, each is compared with the full sum and each fails, which is the pattern `BR-E-01` produces.

| Term | Meaning | UBL element |
|---|---|---|
| BT-116 | VAT category taxable amount | `cac:TaxTotal/cac:TaxSubtotal/cbc:TaxableAmount` |
| BT-118 | VAT category code | `cac:TaxTotal/cac:TaxSubtotal/cac:TaxCategory/cbc:ID` |
| BT-131 | Invoice line net amount | `cac:InvoiceLine/cbc:LineExtensionAmount (cac:CreditNoteLine/cbc:LineExtensionAmount in a credit note)` |
| BT-99 | Document level charge amount | `cac:AllowanceCharge[cbc:ChargeIndicator = true]/cbc:Amount` |
| BT-92 | Document level allowance amount | `cac:AllowanceCharge[cbc:ChargeIndicator = false]/cbc:Amount` |

## How an integration ends up here

Possible causes, from the shape of the rule rather than from measured usage:

- The taxable amount comes from a stored tax summary that was not refreshed after an exempt line was edited or removed.
- An exempt document-level allowance or charge is left out of the breakdown, or applied with the wrong sign.
- Zero rated or out-of-scope amounts are added into the exempt figure because all three carry no tax.
- The figure is recomputed from quantity times price instead of adding the line net amounts written in the document, and rounding moves it by a penny.
- Exempt content is spread over several `E` breakdowns, each holding a share of the total.

## How to fix it

1. Take every line with `cac:Item/cac:ClassifiedTaxCategory/cbc:ID` of `E` and add up its `cbc:LineExtensionAmount` exactly as written, keeping the sign of negative lines.
2. Add root-level `cac:AllowanceCharge` amounts in category `E` where `cbc:ChargeIndicator` is `true`, and subtract those where it is `false`.
3. Write the result, with two decimals, as the `cbc:TaxableAmount` of the single exempt `cac:TaxSubtotal`. Its tax amount stays `0.00`.
4. If a line or allowance changed category while you investigated, rebuild the breakdown it left as well.

The recorded example has one exempt line and no document-level allowances or charges.

```text
Exempt line net amount: 25.00
Exempt document charges: 0.00; exempt document allowances: 0.00
Expected exempt taxable amount: 25.00 + 0.00 - 0.00 = 25.00
Sent: 30.00, which is 5.00 out, so the rule fails
```

## Before and after

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

Fragment of the failing invoice: an exempt taxable amount of 30.00 for an exempt line of 25.00

```xml
<cac:TaxSubtotal>
  <cbc:TaxableAmount currencyID="GBP">30.00</cbc:TaxableAmount>
  <cbc:TaxAmount currencyID="GBP">0.00</cbc:TaxAmount>
  <cac:TaxCategory>
    <cbc:ID>E</cbc:ID>
    <cbc:Percent>0</cbc:Percent>
    <cbc:TaxExemptionReason>Exempt from VAT</cbc:TaxExemptionReason>
    <cac:TaxScheme>
      <cbc:ID>VAT</cbc:ID>
    </cac:TaxScheme>
  </cac:TaxCategory>
</cac:TaxSubtotal>

<cac:InvoiceLine>
  <cbc:ID>1</cbc:ID>
  <cbc:InvoicedQuantity unitCode="C62">2</cbc:InvoicedQuantity>
  <cbc:LineExtensionAmount currencyID="GBP">25.00</cbc:LineExtensionAmount>
  <cac:Item>
    <cbc:Name>Example service</cbc:Name>
    <cac:ClassifiedTaxCategory>
      <cbc:ID>E</cbc:ID>
      <cbc:Percent>0</cbc:Percent>
      <!-- tax scheme omitted from this fragment -->
    </cac:ClassifiedTaxCategory>
  </cac:Item>
  <!-- price omitted from this fragment -->
</cac:InvoiceLine>
```

Fragment of the corrected invoice: the exempt taxable amount is the 25.00 of the exempt line

```xml
<cac:TaxSubtotal>
  <cbc:TaxableAmount currencyID="GBP">25.00</cbc:TaxableAmount>
  <cbc:TaxAmount currencyID="GBP">0.00</cbc:TaxAmount>
  <cac:TaxCategory>
    <cbc:ID>E</cbc:ID>
    <cbc:Percent>0</cbc:Percent>
    <cbc:TaxExemptionReason>Exempt from VAT</cbc:TaxExemptionReason>
    <cac:TaxScheme>
      <cbc:ID>VAT</cbc:ID>
    </cac:TaxScheme>
  </cac:TaxCategory>
</cac:TaxSubtotal>
```

Only the exempt `cbc:TaxableAmount` differs: 30.00 in the failing invoice, 25.00 in the corrected one. The failing document reports only `BR-E-08`. Its monetary totals are built from the line and agree with one another, and the breakdown tax amount is 0.00 in both documents, so none of the totals rules is triggered by the wrong taxable amount.

### What the validator reported

- The failing invoice reports **BR-E-08**. The corrected document passes every layer with no findings.
  - [Download the failing XML](https://ironfang.uk/finance/rule-examples/BR-E-08-invalid.xml)
  - [Download the corrected XML](https://ironfang.uk/finance/rule-examples/exempt-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 rule adds up `cac:CreditNoteLine` elements. An exempt credit note with 30.00 taxable against a 25.00 line reported this rule when tried.
- Reported by the EN 16931 layer as a fatal finding at each exempt breakdown's `cac:TaxCategory`.
- Standard rated breakdowns are checked by `BR-S-08`, which groups by rate and tolerates a difference under 1.00. Nothing of the kind applies to the exempt figure.
- The exempt breakdown must also appear exactly once (`BR-E-01`), carry a reason (`BR-E-10`) and show no tax (`BR-E-09`).

## Related rules

- [BR-E-01 requires the single exempt breakdown whose taxable amount this rule checks](https://ironfang.uk/docs/finance/rules/BR-E-01.md)
- [BR-S-08 is the Standard rated version of this check, grouped by rate and with a tolerance](https://ironfang.uk/docs/finance/rules/BR-S-08.md)
- [BR-E-09 requires the tax amount of the same exempt breakdown to be zero](https://ironfang.uk/docs/finance/rules/BR-E-09.md)
- [BR-45 requires the taxable amount that this rule compares with the exempt content](https://ironfang.uk/docs/finance/rules/BR-45.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-E-08](https://docs.peppol.eu/poacc/billing/3.0/rules/ubl-tc434/BR-E-08/) 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-E-08)
- [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
