# BR-E-01: Use exactly one exempt VAT breakdown for all exempt content

When a line, document allowance or document charge is exempt, the VAT breakdown needs exactly one entry in category `E`: not none, and not one per reason.

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

## The short answer

`BR-E-01` fails when category `E` appears on a line, a document-level allowance or a document-level charge, and `cac:TaxTotal` does not hold exactly one `cac:TaxSubtotal` whose `cac:TaxCategory/cbc:ID` is `E`. Emit a single exempt breakdown that covers all the exempt content, adding it if it is missing and merging it if it is split.

Different exemption reasons are no ground for separate breakdowns. The breakdown is grouped by category and rate, the exempt category has only the rate 0, and so the document has room for one exempt breakdown with one reason.

## What the rule checks

First the rule looks for exempt content: any `cac:ClassifiedTaxCategory` or `cac:TaxCategory` in the document with `cbc:ID` of `E` under the `VAT` scheme. If there is some, it counts the exempt `cac:TaxCategory` elements in `cac:TaxSubtotal` under the root `cac:TaxTotal`, and that count has to be exactly 1.

None fails, and so does more than one. When tried, a mixed invoice with an exempt line and no exempt breakdown reported this rule alone, as did an invoice whose only exempt item was a document-level charge.

Matching reasons change nothing. When tried, repeating the recorded split with the same reason text in both halves gave the same three findings.

Because the breakdown's own category counts as exempt content, the rule does not catch an exempt breakdown with nothing exempt behind it. When tried, an `E` breakdown of 0.00 added to an invoice with only Standard rated lines left the document valid.

Stacking reasons inside the single breakdown is no way out either. When tried, two `cbc:TaxExemptionReason` elements in one exempt breakdown were rejected by `UBL-SR-32`.

| Term | Meaning | UBL element |
|---|---|---|
| BG-23 | VAT breakdown | `cac:TaxTotal/cac:TaxSubtotal` |
| BT-118 | VAT category code | `cac:TaxTotal/cac:TaxSubtotal/cac:TaxCategory/cbc:ID` |
| 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-95 | Document level allowance VAT category code | `cac:AllowanceCharge[cbc:ChargeIndicator = false]/cac:TaxCategory/cbc:ID` |
| BT-102 | Document level charge VAT category code | `cac:AllowanceCharge[cbc:ChargeIndicator = true]/cac:TaxCategory/cbc:ID` |

## How an integration ends up here

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

- The breakdown is grouped by internal tax code instead of by category and rate, and two exempt tax codes produce two `E` entries.
- The exemption reason is part of the grouping key, so each distinct reason gets a breakdown of its own.
- Breakdowns are emitted only where tax is charged, so nothing appears for the exempt amounts.
- An exempt document-level charge is added after the breakdown was built from the lines.

## How to fix it

1. Collect the exempt items: lines by `cac:Item/cac:ClassifiedTaxCategory/cbc:ID`, and root-level `cac:AllowanceCharge` elements by `cac:TaxCategory/cbc:ID`.
2. Emit one `cac:TaxSubtotal` for category `E`, with `cbc:TaxableAmount` equal to the exempt lines plus exempt charges minus exempt allowances, `cbc:TaxAmount` of `0.00` and `cbc:Percent` of `0`.
3. Give it one exemption reason, as text, as a VATEX code, or both. If the exempt supplies rest on different grounds, take wording from your tax determination that covers them all; if each ground must be stated on its own, those supplies need separate invoices.
4. Where the breakdown was split, delete the extra `E` entries rather than adding to them. The VAT total stays the same, since each carried 0.00.

## Before and after

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

Fragment of the failing invoice: the one exempt line of 25.00 is spread over two exempt breakdowns

```xml
<cac:TaxTotal>
  <cbc:TaxAmount currencyID="GBP">0.00</cbc:TaxAmount>
  <cac:TaxSubtotal>
    <cbc:TaxableAmount currencyID="GBP">15.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:TaxSubtotal>
    <cbc:TaxableAmount currencyID="GBP">10.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 financial service</cbc:TaxExemptionReason>
      <cac:TaxScheme>
        <cbc:ID>VAT</cbc:ID>
      </cac:TaxScheme>
    </cac:TaxCategory>
  </cac:TaxSubtotal>
</cac:TaxTotal>

<!-- the only line: LineExtensionAmount 25.00, category E at 0 -->
```

Fragment of the corrected invoice: one exempt breakdown of 25.00 with a single reason

```xml
<cac:TaxTotal>
  <cbc:TaxAmount currencyID="GBP">0.00</cbc:TaxAmount>
  <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>
</cac:TaxTotal>
```

The failing invoice has two exempt breakdowns, 15.00 with `Exempt from VAT` and 10.00 with `Exempt financial service`; the corrected invoice has a single breakdown of 25.00. The failing document also reports `BR-E-08` twice, once per exempt breakdown, because that rule compares each exempt taxable amount with all the exempt lines together, 25.00, and neither 15.00 nor 10.00 matches. Merging the two clears all three findings.

### What the validator reported

- The failing invoice reports **BR-E-01** and [BR-E-08](https://ironfang.uk/docs/finance/rules/BR-E-08.md). The corrected document passes every layer with no findings.
  - [Download the failing XML](https://ironfang.uk/finance/rule-examples/BR-E-01-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`. An exempt credit note split the same way reported this rule and `BR-E-08` twice when tried.
- Reported by the EN 16931 layer as a single fatal finding at the document root.
- Only category `E` under the `VAT` scheme counts. Zero rated content has the equivalent rule `BR-Z-01`, while Standard rated content may have one breakdown per rate under `BR-S-01`.
- The one exempt breakdown still has to carry a reason under `BR-E-10`, match the exempt content under `BR-E-08` and show no tax under `BR-E-09`.

## Related rules

- [BR-E-08 fails on each extra exempt breakdown, because each is compared with all the exempt content](https://ironfang.uk/docs/finance/rules/BR-E-08.md)
- [BR-E-10 requires the exemption reason on the single exempt breakdown](https://ironfang.uk/docs/finance/rules/BR-E-10.md)
- [BR-Z-01 applies the same exactly-one rule to Zero rated breakdowns](https://ironfang.uk/docs/finance/rules/BR-Z-01.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-01](https://docs.peppol.eu/poacc/billing/3.0/rules/ubl-tc434/BR-E-01/) 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-01)
- [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
