# BR-Z-03: Add a seller VAT identifier when a document allowance is Zero rated

A document-level allowance in VAT category `Z` needs a seller tax identifier in the seller party or a tax representative VAT identifier.

- Layer: EN 16931
- Severity: fatal (the document is invalid)
- Topics: VAT, Parties and addresses, Allowances and charges
- Official definition: https://docs.peppol.eu/poacc/billing/3.0/rules/ubl-tc434/BR-Z-03/
- Explanation last updated: 2026-09-28

## The short answer

`BR-Z-03` fails when an allowance carries a `cac:TaxCategory` with `cbc:ID` of `Z` under the `VAT` scheme and the document has neither a seller tax identifier, under any scheme, nor a tax representative VAT identifier. Restore the seller's `cac:PartyTaxScheme` with its VAT number, or add the representative that accounts for the VAT.

In the recorded example the volume discount of 2.50 reduces Zero rated supplies, and the Zero rated line beside it raises `BR-Z-02` for the same missing identifier. One seller `cac:PartyTaxScheme` clears both.

## What the rule checks

The rule looks for an allowance, meaning `cbc:ChargeIndicator` of `false`, whose `cac:TaxCategory` has `cbc:ID` of `Z` and a tax scheme that reads as `VAT` once trimmed and upper-cased. When tried, the discount with its scheme written as `vat` still reported this rule, with `BR-Z-02`.

On the seller side, a `cbc:CompanyID` in any seller `cac:PartyTaxScheme` satisfies it, and so does a `cac:TaxRepresentativeParty/cac:PartyTaxScheme/cbc:CompanyID` under `VAT`. When tried, adding a representative with `GB987654321` under `VAT` to the failing invoice made it valid.

A representative under another scheme does not count. With `TAX` as the representative's scheme, the discount invoice reported this rule, `BR-Z-02` and `BR-56`.

The allowance does not have to sit at document level. When tried, a Zero rated invoice without a seller identifier, whose only Zero rated allowance was inside its line, reported this rule and `BR-Z-02`, with the warning `UBL-CR-558`.

| Term | Meaning | UBL element |
|---|---|---|
| BT-95 | Document level allowance VAT category code | `cac:AllowanceCharge[cbc:ChargeIndicator = false]/cac:TaxCategory/cbc:ID` |
| BT-31 | Seller VAT identifier | `cac:AccountingSupplierParty/cac:Party/cac:PartyTaxScheme/cbc:CompanyID (tax scheme VAT)` |
| BT-32 | Seller tax registration identifier | `cac:AccountingSupplierParty/cac:Party/cac:PartyTaxScheme/cbc:CompanyID (a tax scheme other than VAT)` |
| BT-63 | Seller tax representative VAT identifier | `cac:TaxRepresentativeParty/cac:PartyTaxScheme/cbc:CompanyID` |

## How an integration ends up here

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

- The seller party is written from a record with no VAT number, and on a Zero rated invoice nothing in the totals draws attention to the gap.
- A volume or trade discount is added by a separate pricing step that copies the Zero rated category from the lines, while the seller details come from an incomplete template.
- The tax representative's VAT number is sent under a local scheme name.
- The seller VAT number is placed in `cac:PartyLegalEntity/cbc:CompanyID` rather than in `cac:PartyTaxScheme`.

## How to fix it

1. Confirm the seller's VAT registration and take the number, with its country prefix, from the seller record.
2. Add a `cac:PartyTaxScheme` to the seller party with that `cbc:CompanyID` and a `cac:TaxScheme/cbc:ID` of `VAT`, between `cac:PostalAddress` and `cac:PartyLegalEntity`.
3. If a representative accounts for the VAT, send `cac:TaxRepresentativeParty` with its name, postal address and a `cac:PartyTaxScheme` under the `VAT` scheme.
4. Validate again: the same change clears `BR-Z-02` for the Zero rated lines, and `BR-Z-04` if the document also has a Zero rated charge.

## 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 Zero rated volume discount, and a seller party with no PartyTaxScheme

```xml
<cac:AccountingSupplierParty>
  <cac:Party>
    <cbc:EndpointID schemeID="0088">7300010000001</cbc:EndpointID>
    <!-- postal address omitted from this fragment -->
    <cac:PartyLegalEntity>
      <cbc:RegistrationName>Example Supplier Ltd</cbc:RegistrationName>
      <cbc:CompanyID>12345678</cbc:CompanyID>
    </cac:PartyLegalEntity>
  </cac:Party>
</cac:AccountingSupplierParty>

<cac:AllowanceCharge>
  <cbc:ChargeIndicator>false</cbc:ChargeIndicator>
  <cbc:AllowanceChargeReasonCode>95</cbc:AllowanceChargeReasonCode>
  <cbc:AllowanceChargeReason>Volume discount</cbc:AllowanceChargeReason>
  <cbc:Amount currencyID="GBP">2.50</cbc:Amount>
  <cac:TaxCategory>
    <cbc:ID>Z</cbc:ID>
    <cbc:Percent>0</cbc:Percent>
    <cac:TaxScheme>
      <cbc:ID>VAT</cbc:ID>
    </cac:TaxScheme>
  </cac:TaxCategory>
</cac:AllowanceCharge>
```

Fragment of the corrected invoice: the seller VAT identifier restored in the seller party

```xml
<cac:AccountingSupplierParty>
  <cac:Party>
    <cbc:EndpointID schemeID="0088">7300010000001</cbc:EndpointID>
    <!-- postal address omitted from this fragment -->
    <cac:PartyTaxScheme>
      <cbc:CompanyID>GB123456789</cbc:CompanyID>
      <cac:TaxScheme>
        <cbc:ID>VAT</cbc:ID>
      </cac:TaxScheme>
    </cac:PartyTaxScheme>
    <cac:PartyLegalEntity>
      <cbc:RegistrationName>Example Supplier Ltd</cbc:RegistrationName>
      <cbc:CompanyID>12345678</cbc:CompanyID>
    </cac:PartyLegalEntity>
  </cac:Party>
</cac:AccountingSupplierParty>
```

The corrected invoice has a seller `cac:PartyTaxScheme` with `GB123456789` under the `VAT` scheme, which the failing invoice lacks; nothing else differs. The failing document also reports `BR-Z-02` for its Zero rated line. The discount, the Zero rated breakdown of 22.50 and the totals are the same in both documents.

### What the validator reported

- The failing invoice reports [BR-Z-02](https://ironfang.com/docs/finance/rules/BR-Z-02.md) and **BR-Z-03**. The corrected document passes every layer with no findings.
  - [Download the failing XML](https://ironfang.com/finance/rule-examples/BR-Z-03-invalid.xml)
  - [Download the corrected XML](https://ironfang.com/finance/rule-examples/zero-rated-allowance-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`. The credit note built from the recorded example reported `BR-Z-02` and `BR-Z-03` when tried.
- Reported by the EN 16931 layer as a fatal finding at the document root.
- Charges are covered by `BR-Z-04`, and Standard rated allowances by `BR-S-03`.
- The rate of the allowance is a separate check: a Zero rated allowance must be at 0 under `BR-Z-06`.

## Related rules

- [BR-Z-02 reports the same missing identifier for the Zero rated lines](https://ironfang.com/docs/finance/rules/BR-Z-02.md)
- [BR-Z-06 requires the Zero rated allowance itself to be at a rate of 0](https://ironfang.com/docs/finance/rules/BR-Z-06.md)
- [BR-S-03 is the Standard rated counterpart for document-level allowances](https://ironfang.com/docs/finance/rules/BR-S-03.md)
- [BR-56 requires a tax representative, once sent, to carry a VAT identifier](https://ironfang.com/docs/finance/rules/BR-56.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-28.1: source checked 2026-09-28, explanation last updated 2026-09-28.

[The official definition of BR-Z-03](https://docs.peppol.eu/poacc/billing/3.0/rules/ubl-tc434/BR-Z-03/) 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.com/docs/finance/rules/BR-Z-03)
- [Free Peppol invoice validator](https://ironfang.com/tools/peppol-validator)
- [Rule index](https://ironfang.com/docs/finance/rules.md)
- [Ironfang Finance API docs](https://ironfang.com/docs/finance)
- The same rule is available to MCP clients as the tool `finance.rule.get` on https://mcp.ironfang.com/mcp
