# BR-Z-04: Add a seller VAT identifier when a document charge is Zero rated

A document-level charge in VAT category `Z`, such as delivery, calls for a seller tax identifier or a tax representative with a VAT number.

- 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-04/
- Explanation last updated: 2026-09-28

## The short answer

`BR-Z-04` fails when a charge has a `cac:TaxCategory` with `cbc:ID` of `Z` under the `VAT` scheme and neither a seller tax identifier, under any scheme, nor a tax representative VAT identifier is given. Give the seller party its `cac:PartyTaxScheme` with the VAT number, as the corrected invoice does with `GB123456789`.

The delivery charge in the recorded example is zero rated like the line it accompanies. The rule asks for the seller's tax registration to be visible wherever that treatment is used.

## What the rule checks

A `cac:AllowanceCharge` with `cbc:ChargeIndicator` of `true` and a Zero rated `cac:TaxCategory` under the `VAT` scheme brings the seller identification into question; the amount and rate of the charge play no part.

The seller's scheme is not examined: when tried, the delivery invoice with its seller `cac:PartyTaxScheme` under `TAX` instead of `VAT` passed every layer. A tax representative with `GB987654321` under `VAT`, in place of any seller identifier, also made the failing invoice valid.

Charges inside a line are included when they carry a category. When tried, a Zero rated line charge in an invoice without a seller identifier reported this rule and `BR-Z-02`, and the warning `UBL-CR-558`.

| Term | Meaning | UBL element |
|---|---|---|
| BT-102 | Document level charge VAT category code | `cac:AllowanceCharge[cbc:ChargeIndicator = true]/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:

- Delivery is added at dispatch by a logistics system that copies the Zero rated category from the goods but has no access to the seller's VAT details.
- The seller's VAT number is left off Zero rated documents because they carry no VAT to report.
- The seller is represented for VAT, and `cac:TaxRepresentativeParty` is sent without its tax scheme.
- Several legal entities share one export, and the one raising this document has no VAT number configured.

## How to fix it

1. Read the seller's VAT number, with its country prefix, from the seller record.
2. Add it to the seller party as `cac:PartyTaxScheme/cbc:CompanyID` under the `VAT` tax scheme, in the UBL position after `cac:PostalAddress` and before `cac:PartyLegalEntity`.
3. Where a tax representative handles the VAT, send its number in `cac:TaxRepresentativeParty/cac:PartyTaxScheme/cbc:CompanyID` with the `VAT` scheme.
4. With the identifier in place, check the charge itself: `BR-Z-07` requires its rate to be 0, and `BR-Z-08` requires the Zero rated taxable amount to include it.

## 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 delivery charge, 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>true</cbc:ChargeIndicator>
  <cbc:AllowanceChargeReasonCode>DL</cbc:AllowanceChargeReasonCode>
  <cbc:AllowanceChargeReason>Delivery</cbc:AllowanceChargeReason>
  <cbc:Amount currencyID="GBP">4.00</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 party with its VAT identifier

```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 carries the seller `cac:PartyTaxScheme` with `GB123456789` under the `VAT` scheme, absent from the failing invoice; nothing else differs. The failing document also reports `BR-Z-02`, since its line is Zero rated too. The delivery charge of 4.00 and the Zero rated breakdown of 29.00 are unchanged.

### What the validator reported

- The failing invoice reports [BR-Z-02](https://ironfang.com/docs/finance/rules/BR-Z-02.md) and **BR-Z-04**. The corrected document passes every layer with no findings.
  - [Download the failing XML](https://ironfang.com/finance/rule-examples/BR-Z-04-invalid.xml)
  - [Download the corrected XML](https://ironfang.com/finance/rule-examples/zero-rated-charge-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 version of the recorded example reported `BR-Z-02` and `BR-Z-04` when tried.
- Reported by the EN 16931 layer as a fatal finding on the document root.
- Zero rated allowances are covered by `BR-Z-03` and Standard rated charges by `BR-S-04`; the same seller identifier answers each.

## Related rules

- [BR-Z-02 reports the missing identifier for the Zero rated lines as well](https://ironfang.com/docs/finance/rules/BR-Z-02.md)
- [BR-Z-07 requires the Zero rated charge to carry a rate of 0](https://ironfang.com/docs/finance/rules/BR-Z-07.md)
- [BR-S-04 is the Standard rated version for document-level charges](https://ironfang.com/docs/finance/rules/BR-S-04.md)
- [BR-Z-08 adds Zero rated charges to the Zero rated taxable amount](https://ironfang.com/docs/finance/rules/BR-Z-08.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-04](https://docs.peppol.eu/poacc/billing/3.0/rules/ubl-tc434/BR-Z-04/) 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-04)
- [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
