Skip to content

Ironfang Finance - Rule reference

BR-S-04: Add a seller VAT identifier when a document charge is Standard rated

A document-level charge in VAT category S, such as freight, requires a seller 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-04 fails when a cac:AllowanceCharge flagged as a charge has a cac:TaxCategory of S under the VAT scheme, and the document gives neither a seller tax identifier, under any scheme, nor a tax representative VAT identifier. Add the seller's VAT number in a cac:PartyTaxScheme of the seller party or, when the seller is represented for VAT, the representative's number in cac:TaxRepresentativeParty.

Charging Standard rated VAT on freight or packing presupposes a VAT registered seller. The validator only asks that the registration be stated where it can see it.

What the rule checks

Any charge with cbc:ChargeIndicator of true and a Standard rated category under the VAT scheme brings the rule into play. The seller condition is met by any cbc:CompanyID in a seller cac:PartyTaxScheme, or by a tax representative cbc:CompanyID whose tax scheme is VAT.

The tax representative route works on its own. When tried, the freight invoice without a seller cac:PartyTaxScheme but with a cac:TaxRepresentativeParty holding GB987654321 under VAT passed every layer.

The representative's scheme is checked. Changed to GST, the same invoice reported this rule and BR-S-02 again, plus BR-56 because the representative then had no VAT identifier.

The finding is per document, not per charge. When tried, adding a second Standard rated charge, for packing, to the failing invoice still produced a single BR-S-04, reported at the root element.

TermMeaningUBL element
BT-102Document level charge VAT category codecac:AllowanceCharge[cbc:ChargeIndicator = true]/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:

  • Freight is added by a shipping or carrier module that applies the Standard rated tax code automatically, while the seller party comes from a record without a VAT number.
  • The export includes cac:PartyTaxScheme in the seller party only for some document types, and this document was produced along a different route.
  • The seller's VAT number is stored per branch or per country, and the branch that raised the document has none.
  • A tax representative is used, and its VAT number is sent under a local tax scheme name instead of VAT.

How to fix it

  1. Establish whether the seller is VAT registered for the supply. If so, take the number, with its country prefix, from the seller record: GB123456789 in the recorded example.
  2. Write it into the seller party as cac:PartyTaxScheme/cbc:CompanyID with cac:TaxScheme/cbc:ID of VAT, between cac:PostalAddress and cac:PartyLegalEntity.
  3. Where a tax representative accounts for the VAT, give cac:TaxRepresentativeParty a cac:PartyTaxScheme with the representative's number under the VAT scheme.
  4. If there is no registration to state, the Standard rated category on the charge and on the lines is what needs reviewing, with whoever owns the tax setup, before anything in the XML changes.

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 freight charge, 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>true</cbc:ChargeIndicator>
  <cbc:AllowanceChargeReasonCode>FC</cbc:AllowanceChargeReasonCode>
  <cbc:AllowanceChargeReason>Freight</cbc:AllowanceChargeReason>
  <cbc:Amount currencyID="GBP">7.50</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 PartyTaxScheme with its VAT number

<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 is missing from the failing invoice; nothing else differs. BR-S-02 is reported as well, because the invoice line is Standard rated at 20 and needs the same identifier. The freight charge of 7.50 and the breakdown of 32.50 taxable and 6.50 VAT are unchanged between the two.

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. The credit note version of the recorded example reported BR-S-02 and BR-S-04 when tried.
  • Reported by the EN 16931 layer as a fatal finding at the root of the document.
  • Allowances have their own version, BR-S-03, and Zero rated charges theirs, BR-Z-04. One seller VAT identifier satisfies every one of these rules.
  • The number itself is not validated here; BR-CO-09 checks its country prefix.

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