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

- Layer: EN 16931
- Severity: fatal (the document is invalid)
- Topics: Parties and addresses
- Official definition: https://docs.peppol.eu/poacc/billing/3.0/rules/ubl-tc434/BR-20/
- Explanation last updated: 2026-09-28

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

| Term | Meaning | UBL element |
|---|---|---|
| BT-69 | Tax representative country code | `cac:TaxRepresentativeParty/cac:PostalAddress/cac:Country/cbc:IdentificationCode` |
| BG-12 | Seller tax representative postal address | `cac: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.

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

```xml
<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

```xml
<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

- The failing invoice reports **BR-20**. The corrected document passes every layer with no findings.
  - [Download the failing XML](https://ironfang.com/finance/rule-examples/BR-20-invalid.xml)
  - [Download the corrected XML](https://ironfang.com/finance/rule-examples/tax-representative-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 `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.

## Related rules

- [BR-19 requires the representative postal address that holds this code](https://ironfang.com/docs/finance/rules/BR-19.md)
- [BR-09 is the same country code check for the seller address](https://ironfang.com/docs/finance/rules/BR-09.md)
- [BR-CL-14 rejects a representative country code that is not on the ISO 3166-1 list](https://ironfang.com/docs/finance/rules/BR-CL-14.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-20](https://docs.peppol.eu/poacc/billing/3.0/rules/ubl-tc434/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.

## Links

- [This rule as a web page](https://ironfang.com/docs/finance/rules/BR-20)
- [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
