# BR-CL-13: Use a UNTDID 7143 code in the classification listID

The `listID` on an item classification code must be a UNTDID 7143 code, such as `TST` for UNSPSC or `STI` for CPV, not the name of the scheme.

- Layer: EN 16931
- Severity: fatal (the document is invalid)
- Topics: Code lists, Lines and prices
- Official definition: https://docs.peppol.eu/poacc/billing/3.0/rules/ubl-tc434/BR-CL-13/
- Explanation last updated: 2026-09-24

## The short answer

`BR-CL-13` fails when the `listID` on `cac:CommodityClassification/cbc:ItemClassificationCode` is not a code from the UNTDID 7143 list. The recorded example writes the scheme name, `UNSPSC`. Replace it with the list code for the scheme: `TST` for UNSPSC, `STI` for CPV, `HS` for the Harmonised System.

The corrected example keeps the code 80111600 and changes only how its scheme is written. The validator never checks the code against the classification, so the scheme you declare has to be the one the code really comes from.

## What the rule checks

The rule reads the `listID` of each `cbc:ItemClassificationCode` that has one and looks it up in the UNTDID 7143 codes bundled with the validation artefacts. A classification code without `listID` is outside its scope and is reported by `BR-65`.

Spaces at either end are ignored, but otherwise the match is exact and case-sensitive. When tried, `listID=" TST "` passed, while `tst` and the scheme names `UNSPSC` and `CPV` failed. An empty `listID=""` failed as well.

Only the scheme is validated, never the classification code inside the element. When tried, `listID="TST"` around the text `NOT-A-CODE` passed every layer.

`ZZZ`, which the list defines as mutually defined, is accepted and passed when tried. It says only that the two parties agreed the scheme between themselves.

| Term | Meaning | UBL element |
|---|---|---|
| BT-158 | Item classification identifier: its scheme identifier attribute | `cac:InvoiceLine/cac:Item/cac:CommodityClassification/cbc:ItemClassificationCode/@listID (under cac:CreditNoteLine in a credit note)` |
| BT-158 | Item classification identifier | `cac:InvoiceLine/cac:Item/cac:CommodityClassification/cbc:ItemClassificationCode` |

## How an integration ends up here

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

- The mapping copies the scheme name held in the product data, such as `UNSPSC` or `CPV`, straight into `listID`.
- The 7143 codes do not spell the scheme names, so `STI` for CPV and `TST` for UNSPSC are easy to swap or to guess.
- Codes pass through a normalisation step that lower-cases them.
- A default `listID` taken from another trading partner guide or format is written for every classification.

## How to fix it

1. Find out which classification scheme the code in the element comes from.
2. Look the scheme up in the UNTDID 7143 list as published with the Peppol BIS code lists and copy its code exactly, in upper case. UNSPSC is `TST`; CPV is `STI`; the Harmonised System is `HS`.
3. Keep the translation as a table from your scheme names to 7143 codes, and fail the export for a scheme with no entry instead of writing the name.
4. Use `ZZZ` only when no listed code fits and the scheme really has been agreed with the buyer.

## Before and after

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

Fragment of the failing invoice: listID holds the scheme name UNSPSC

```xml
<cac:CommodityClassification>
  <cbc:ItemClassificationCode listID="UNSPSC">80111600</cbc:ItemClassificationCode>
</cac:CommodityClassification>
```

Fragment of the corrected invoice: listID holds TST, the UNTDID 7143 code for UNSPSC

```xml
<cac:CommodityClassification>
  <cbc:ItemClassificationCode listID="TST">80111600</cbc:ItemClassificationCode>
</cac:CommodityClassification>
```

Only the `listID` value differs: the scheme name `UNSPSC` in the failing invoice, its UNTDID 7143 code `TST` in the corrected one. The classification and the code 80111600 stay the same; only the way the scheme is identified changes. The failing document reports only `BR-CL-13`.

### What the validator reported

- The failing invoice reports **BR-CL-13**. The corrected document passes every layer with no findings.
  - [Download the failing XML](https://ironfang.uk/finance/rule-examples/BR-CL-13-invalid.xml)
  - [Download the corrected XML](https://ironfang.uk/finance/rule-examples/item-details-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 `cac:InvoiceLine` in an `Invoice` and `cac:CreditNoteLine` in a `CreditNote`. When tried, a credit note with `listID="UNSPSC"` reported this rule alone.
- The item standard identifier is checked against a different list. Its `schemeID` must be an ISO 6523 ICD code, which `BR-CL-21` tests; a 7143 code is not valid there.
- The `listVersionID` attribute is not read by this rule.

## Related rules

- [BR-65 requires the listID attribute whose value this rule checks](https://ironfang.uk/docs/finance/rules/BR-65.md)
- [BR-CL-21 is the code list check for the scheme of the item standard identifier](https://ironfang.uk/docs/finance/rules/BR-CL-21.md)
- [BR-CL-23 checks the unit code on the same line against its own code list](https://ironfang.uk/docs/finance/rules/BR-CL-23.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-24.1: source checked 2026-09-24, explanation last updated 2026-09-24.

[The official definition of BR-CL-13](https://docs.peppol.eu/poacc/billing/3.0/rules/ubl-tc434/BR-CL-13/) 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.uk/docs/finance/rules/BR-CL-13)
- [Free Peppol invoice validator](https://ironfang.uk/tools/peppol-validator)
- [Rule index](https://ironfang.uk/docs/finance/rules.md)
- [Ironfang Finance API docs](https://ironfang.uk/docs/finance)
- The same rule is available to MCP clients as the tool `finance.rule.get` on https://mcp.ironfang.uk/mcp
