Skip to content

Ironfang Finance - Rule reference

BR-S-03: Add a seller VAT identifier when a document allowance is Standard rated

A document-level allowance in VAT category S requires the seller to be identified for VAT, by its own tax identifier or a tax representative VAT identifier.

EN 16931Fatal: the document is invalidVATParties and addressesAllowances and charges

On this page

The short answer

BR-S-03 fails when the document carries an allowance whose cac:TaxCategory is S under the VAT scheme, and the document has neither a seller tax identifier, under any scheme, nor a tax representative VAT identifier. Put the seller's VAT number in cac:AccountingSupplierParty/cac:Party/cac:PartyTaxScheme/cbc:CompanyID under the VAT scheme: GB123456789 in the recorded example.

A discount taken off Standard rated supplies reduces the VAT a registered seller charges. The Standard rated line that the loyalty rebate applies to raises BR-S-02 for the same gap, and one correction clears both.

What the rule checks

The rule starts from the document root and looks for any cac:AllowanceCharge with cbc:ChargeIndicator of false whose cac:TaxCategory has cbc:ID of S and a VAT tax scheme. If one exists, the seller must have a cac:PartyTaxScheme/cbc:CompanyID, or cac:TaxRepresentativeParty must have one under the VAT scheme.

The seller's own tax scheme is not examined. When tried on the rebate invoice, a seller cac:PartyTaxScheme carrying GB123456789 under scheme TAX passed every layer, which is how a seller tax registration identifier (BT-32) satisfies the rule.

The search is not limited to document-level allowances. When tried, an allowance inside an invoice line that carried its own S category, in a Zero rated invoice with no seller identifier, reported this rule next to BR-Z-02 and BR-S-01, plus the warning UBL-CR-558 for a category on a line allowance.

Only the presence of cbc:CompanyID is tested. An empty seller cbc:CompanyID on the rebate invoice cleared both BR-S-02 and this rule when tried, and the Peppol layer rejected it as PEPPOL-EN16931-R008 instead.

TermMeaningUBL element
BT-95Document level allowance VAT category codecac:AllowanceCharge[cbc:ChargeIndicator = false]/cac:TaxCategory/cbc:ID
BT-31Seller VAT identifiercac:AccountingSupplierParty/cac:Party/cac:PartyTaxScheme/cbc:CompanyID (tax scheme VAT)
BT-32Seller tax registration identifiercac:AccountingSupplierParty/cac:Party/cac:PartyTaxScheme/cbc:CompanyID (a tax scheme other than VAT)
BT-63Seller tax representative VAT identifiercac: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 built from a company record whose VAT number is empty for this trading entity, so cac:PartyTaxScheme is left out.
  • The export writes the VAT number into cac:PartyLegalEntity/cbc:CompanyID or cac:PartyIdentification, neither of which the rule accepts.
  • A seller represented for VAT sends cac:TaxRepresentativeParty with a name and address but no cac:PartyTaxScheme, or with a scheme other than VAT.
  • A rebate or loyalty credit is booked under a Standard rated tax code by default, even though the seller is not VAT registered and nothing on the document should carry category S.

How to fix it

  1. Look up the seller's VAT registration number, with its country prefix, in the seller's company record.
  2. Write it to cac:AccountingSupplierParty/cac:Party/cac:PartyTaxScheme/cbc:CompanyID with cac:TaxScheme/cbc:ID of VAT, placing cac:PartyTaxScheme after cac:PostalAddress and before cac:PartyLegalEntity.
  3. If the seller is represented for VAT, send the representative's VAT number in cac:TaxRepresentativeParty/cac:PartyTaxScheme/cbc:CompanyID under the VAT scheme instead.
  4. If the seller has no VAT registration at all, a Standard rated allowance is itself wrong. Settle the VAT treatment of the discount, and of the lines it reduces, with whoever owns the tax setup rather than borrowing another identifier.

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: a Standard rated loyalty rebate, and a seller party with no PartyTaxScheme

<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>100</cbc:AllowanceChargeReasonCode>
  <cbc:AllowanceChargeReason>Loyalty rebate</cbc:AllowanceChargeReason>
  <cbc:Amount currencyID="GBP">5.00</cbc:Amount>
  <cac:TaxCategory>
    <cbc:ID>S</cbc:ID>
    <cbc:Percent>20</cbc:Percent>
    <cac:TaxScheme>
      <cbc:ID>VAT</cbc:ID>
    </cac:TaxScheme>
  </cac:TaxCategory>
</cac:AllowanceCharge>

Fragment of the corrected invoice: the seller VAT identifier between the postal address and the legal entity

<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 holding GB123456789 under the VAT scheme; the failing invoice has none, and nothing else differs. The failing document also reports BR-S-02, because its one line is Standard rated at 20 and needs the same identifier. The loyalty rebate of 5.00 and the Standard rated breakdown of 20.00 taxable and 4.00 VAT are identical in both documents.

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. A credit note built from the recorded example reported BR-S-02 and BR-S-03 when tried.
  • Reported by the EN 16931 layer as a fatal finding at the document root.
  • Charges have the matching rule BR-S-04, and Zero rated allowances BR-Z-03. A single seller VAT identifier answers all of them.
  • Whether the allowance has a rate above zero is a separate question, answered by BR-S-06.

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-S-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.