Skip to content

Ironfang Finance - Rule reference

BR-20: Add the country code to the tax representative address

The tax representative cac:PostalAddress needs cac:Country/cbc:IdentificationCode with a value such as GB. Street, city and postcode are not enough.

EN 16931Fatal: the document is invalidParties and addresses

On this page

The short answer

BR-20 fails when the postal address of the cac:TaxRepresentativeParty has no country code, or a blank one. End that address with cac:Country/cbc:IdentificationCode holding the ISO 3166-1 alpha-2 code of the country the representative address is in.

Street, city and postcode are optional as far as the rules go, but the country is not. The recorded example has all three and still fails, because the country code is the one element this rule reads.

What the rule checks

The rule runs inside each representative cac:PostalAddress and reports at it. The text of cac:Country/cbc:IdentificationCode is trimmed, and an empty result fails.

An empty code element counts as missing. When tried, an empty cbc:IdentificationCode in the representative address reported BR-20, BR-CL-14 and PEPPOL-EN16931-R008 together.

The name of the country does not stand in for the code. When tried, cac:Country/cbc:Name holding United Kingdom reported BR-20 and the warning UBL-CR-323, which marks that element as outside the model.

Only presence is tested here. When tried, UK passed this rule and failed BR-CL-14, while DE, a genuine code that differs from the seller country, passed every layer.

TermMeaningUBL element
BT-69Tax representative country codecac:TaxRepresentativeParty/cac:PostalAddress/cac:Country/cbc:IdentificationCode
BG-12Seller tax representative postal addresscac:TaxRepresentativeParty/cac:PostalAddress

How an integration ends up here

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

  • The representative address comes from a registration table that stores the country as a name, or not at all.
  • A shared address mapper fills in the country only for the seller and the buyer, for whom a default country is configured.
  • The country code lookup runs on the seller record, and the representative address is written without one.

How to fix it

  1. Find the country of the representative address in its appointment or registration record.
  2. Write its upper-case two-letter code as cac:Country/cbc:IdentificationCode, the last child of cac:TaxRepresentativeParty/cac:PostalAddress.
  3. Do not copy the seller country by default. A representative can be established in a different country from the seller, and the code must describe the representative address.
  4. Remove any cac:Country/cbc:Name; it draws a warning and does not satisfy this rule.

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: the representative address has a street, city and postcode but no country

<cac:TaxRepresentativeParty>
  <!-- name omitted from this fragment -->
  <cac:PostalAddress>
    <cbc:StreetName>4 Example Street</cbc:StreetName>
    <cbc:CityName>London</cbc:CityName>
    <cbc:PostalZone>SW1A 4AA</cbc:PostalZone>
  </cac:PostalAddress>
  <!-- tax scheme omitted from this fragment -->
</cac:TaxRepresentativeParty>

Fragment of the corrected invoice: country code GB closes the representative address

<cac:TaxRepresentativeParty>
  <!-- name omitted from this fragment -->
  <cac:PostalAddress>
    <cbc:StreetName>4 Example Street</cbc:StreetName>
    <cbc:CityName>London</cbc:CityName>
    <cbc:PostalZone>SW1A 4AA</cbc:PostalZone>
    <cac:Country>
      <cbc:IdentificationCode>GB</cbc:IdentificationCode>
    </cac:Country>
  </cac:PostalAddress>
  <!-- tax scheme omitted from this fragment -->
</cac:TaxRepresentativeParty>

The only difference is cac:Country with the code GB at the end of the representative address in the corrected invoice. The failing document reports BR-20 alone: the seller and buyer addresses keep their country codes, and BR-19 is satisfied because the representative still has an address.

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 Invoice and CreditNote. When tried, a credit note with the same representative address and no country reported BR-20 at cac:TaxRepresentativeParty/cac:PostalAddress.
  • Reported in the EN 16931 layer. The Peppol layer passed the recorded failing invoice.
  • The rule needs an address to run in. With no representative address at all, BR-19 is reported instead.

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