Skip to content

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.

EN 16931Fatal: the document is invalidCode listsLines and prices

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.

TermMeaningUBL element
BT-158Item classification identifier: its scheme identifier attributecac:InvoiceLine/cac:Item/cac:CommodityClassification/cbc:ItemClassificationCode/@listID (under cac:CreditNoteLine in a credit note)
BT-158Item classification identifiercac: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.

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: listID holds the scheme name UNSPSC

<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

<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

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.

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