Skip to content

BR-Z-01Add exactly one Zero rated VAT breakdown when the document has Zero rated content

A document with a Zero rated line, document allowance or document charge needs exactly one Zero rated VAT breakdown: not none, and not two.

EN 16931Fatal: the document is invalidVAT

The short answer

BR-Z-01 fails when VAT category Z appears on a line, a document-level allowance or a document-level charge, and cac:TaxTotal does not contain exactly one cac:TaxSubtotal with category Z. A breakdown is still required when its tax amount is nil. Add a single Zero rated breakdown that covers all the Zero rated content.

What the rule checks

The rule looks for cbc:ID of Z, under the VAT tax scheme, in any cac:ClassifiedTaxCategory or cac:TaxCategory in the document. If there is one, the number of Zero rated cac:TaxSubtotal elements in cac:TaxTotal under the document root must be exactly one.

Two Zero rated breakdowns fail just as none does. This differs from BR-S-01, which accepts several Standard rated breakdowns because Standard rates vary; the zero rate is a single rate, so one entry holds all of it.

The reverse case is not caught here. A Zero rated breakdown of 0.00 in an invoice with no Zero rated line, allowance or charge passes this rule, and passed the whole validation when we tried it.

Amounts are not examined. BR-Z-08 checks the Zero rated taxable amount and BR-Z-09 requires the tax amount to be zero.

TermMeaningUBL element
BG-23VAT breakdowncac:TaxTotal/cac:TaxSubtotal
BT-118VAT category codecac:TaxTotal/cac:TaxSubtotal/cac:TaxCategory/cbc:ID
BT-151Invoiced item VAT category codecac:InvoiceLine/cac:Item/cac:ClassifiedTaxCategory/cbc:ID
BT-95Document level allowance VAT category codecac:AllowanceCharge[cbc:ChargeIndicator = false]/cac:TaxCategory/cbc:ID
BT-102Document level charge VAT category codecac: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:

  • Breakdowns are generated only for categories with a non-zero tax amount, so the Zero rated one never appears.
  • The tax summary is taken from VAT postings in the ledger, and zero-rated sales produce no posting.
  • One breakdown is written per line or per tax code, and two internal codes both map to Z.
  • A Zero rated line was added late, for example a delivery item, after the breakdown had been built.
  • A line carries Z through a mapping default when the supply is really in another category. If so, the category is what needs correcting, at its source.

How to fix it

  1. Confirm from the source data that the items marked Z are genuinely zero-rated supplies. The category describes the transaction and is not something to alter to silence the rule.
  2. Sum the Zero rated content into one figure. In the recorded invoice that is the single Zero rated line of 10.00.
  3. Emit one cac:TaxSubtotal with that cbc:TaxableAmount, a cbc:TaxAmount of 0.00, and a cac:TaxCategory with cbc:ID of Z, cbc:Percent of 0 and the VAT tax scheme.
  4. If the generator emitted several Zero rated breakdowns, merge them into that one rather than adding another.

Validate your corrected invoice

Before and after

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

Fragment of the failing invoice: line 2 is Zero rated, and the VAT breakdown has only a Standard rated entry

<cac:TaxTotal>
  <cbc:TaxAmount currencyID="GBP">11.70</cbc:TaxAmount>
  <cac:TaxSubtotal>
    <cbc:TaxableAmount currencyID="GBP">58.50</cbc:TaxableAmount>
    <cbc:TaxAmount currencyID="GBP">11.70</cbc:TaxAmount>
    <cac:TaxCategory>
      <cbc:ID>S</cbc:ID>
      <cbc:Percent>20</cbc:Percent>
      <cac:TaxScheme>
        <cbc:ID>VAT</cbc:ID>
      </cac:TaxScheme>
    </cac:TaxCategory>
  </cac:TaxSubtotal>
</cac:TaxTotal>

<cac:InvoiceLine>
  <cbc:ID>2</cbc:ID>
  <!-- quantity omitted from this fragment -->
  <cbc:LineExtensionAmount currencyID="GBP">10.00</cbc:LineExtensionAmount>
  <cac:Item>
    <cbc:Name>Example zero-rated item</cbc:Name>
    <cac:ClassifiedTaxCategory>
      <cbc:ID>Z</cbc:ID>
      <cbc:Percent>0</cbc:Percent>
      <cac:TaxScheme>
        <cbc:ID>VAT</cbc:ID>
      </cac:TaxScheme>
    </cac:ClassifiedTaxCategory>
  </cac:Item>
  <!-- price omitted from this fragment -->
</cac:InvoiceLine>

Fragment of the corrected invoice: one Zero rated breakdown for the 10.00 line

<cac:TaxTotal>
  <cbc:TaxAmount currencyID="GBP">11.70</cbc:TaxAmount>
  <!-- Standard rated breakdown unchanged, omitted from this fragment -->
  <cac:TaxSubtotal>
    <cbc:TaxableAmount currencyID="GBP">10.00</cbc:TaxableAmount>
    <cbc:TaxAmount currencyID="GBP">0.00</cbc:TaxAmount>
    <cac:TaxCategory>
      <cbc:ID>Z</cbc:ID>
      <cbc:Percent>0</cbc:Percent>
      <cac:TaxScheme>
        <cbc:ID>VAT</cbc:ID>
      </cac:TaxScheme>
    </cac:TaxCategory>
  </cac:TaxSubtotal>
</cac:TaxTotal>

The corrected invoice contains the Zero rated cac:TaxSubtotal (10.00 taxable, 0.00 tax, Z at 0) that the failing one lacks; nothing else differs. The failing document reports only BR-Z-01. The missing breakdown carried no tax, so the VAT total of 11.70 still equals the sum of the remaining breakdowns and the totals rules stay quiet.

What the validator reported

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, evaluated at the document root. A credit note with its Zero rated breakdown removed reports the same single rule.
  • Only category Z under the VAT tax scheme counts. Exempt, reverse-charge and other nil-tax categories have their own rules and are not interchangeable with Zero rated.

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-20.1: source checked 2026-09-20, explanation last updated 2026-09-20.

The official definition of BR-Z-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.