BR-TMP-CVD-01Das Bildungsschema für […] "Item classification identifier" (BT-158) ist aus der Codeliste UNTDID 7143 zu wählen.

Official rule text

In a CVD invoice every item classification identifier (BT-158) on the invoice lines must carry a scheme from the UNTDID 7143 code list — or CVD, which the list does not contain. A missing or empty listID gets through the expression, though: the variable puts CVD with its surrounding spaces in front of the list, and the double space at the join matches an empty value. A missing attribute is rejected by BR-65, an empty listID="" only in CII — in UBL, BR-65 merely checks that the attribute exists.

Severity
Error
Applies to
CII, UBL
Rule set
v2026-08-31
Checked on

Written and checked against the official KoSIT rule set by Dmytro Yalanskyi, NormAPI.

Why does BR-TMP-CVD-01 happen?

The scheme is an in-house abbreviation or a variant spelling — "cvd" in lower case, say, or the name of a register instead of its code. Every classification on the lines is checked, not only the vehicle category. In an ordinary XRechnung BR-CL-13 reports this; in the CVD variant the KoSIT validator configuration downgrades BR-CL-13 to a notice, because that rule does not know CVD, and BR-TMP-CVD-01 takes over the check as an error.

What the validator checks

The expression the official KoSIT rule set evaluates — not paraphrased, but read from the Schematron file it ships. UBL and CII address different document trees, so the same rule reads differently in each.

UBL
((not(contains(normalize-space(@listID), ' ')) and contains($UNTDID-7143-CVD-CODES, concat(' ', normalize-space(@listID), ' '))))

Variables in it

$UNTDID-7143-CVD-CODES
concat($CVD-CODE, $UNTDID-7143-CODES)
$CVD-CODE
' CVD '
$UNTDID-7143-CODES
'AA AB AC AD AE AF AG AH AI AJ …'185 values
CII
((not(contains(normalize-space(@listID), ' ')) and contains($UNTDID-7143-CVD-CODES, concat(' ', normalize-space(@listID), ' '))))

Variables in it

$UNTDID-7143-CVD-CODES
concat($CVD-CODE, $UNTDID-7143-CODES)
$CVD-CODE
' CVD '
$UNTDID-7143-CODES
'AA AB AC AD AE AF AG AH AI AJ …'185 values

Source: rule set v2026-08-31

How do you fix BR-TMP-CVD-01?

Use either CVD — for the vehicle category only — or a code from UNTDID 7143 as listID, spelled exactly as listed: on cac:CommodityClassification/cbc:ItemClassificationCode in UBL, on ram:DesignatedProductClassification/ram:ClassCode in CII. Make sure yourself that the attribute is never empty, because in UBL the rule set does not catch that case. BR-CL-13 still appearing for the code CVD in a valid CVD invoice is not a fault in the document.

In the XML

A UBL fragment. The CII path is named above — same change, different element names.

Fails
<cac:Item>
  <cbc:Name>Gelenkbus 18 m, batterieelektrisch</cbc:Name>
  <cac:CommodityClassification>
    <cbc:ItemClassificationCode listID="cvd">M3</cbc:ItemClassificationCode>
  </cac:CommodityClassification>
  <cac:ClassifiedTaxCategory>
    <cbc:ID>S</cbc:ID>
    <cbc:Percent>19</cbc:Percent>
    <cac:TaxScheme><cbc:ID>VAT</cbc:ID></cac:TaxScheme>
  </cac:ClassifiedTaxCategory>
  <cac:AdditionalItemProperty>
    <cbc:Name>cva</cbc:Name>
    <cbc:Value>zero-emission</cbc:Value>
  </cac:AdditionalItemProperty>
</cac:Item>
Fixed
<cac:Item>
  <cbc:Name>Gelenkbus 18 m, batterieelektrisch</cbc:Name>
  <cac:CommodityClassification>
    <cbc:ItemClassificationCode listID="CVD">M3</cbc:ItemClassificationCode>
  </cac:CommodityClassification>
  <cac:ClassifiedTaxCategory>
    <cbc:ID>S</cbc:ID>
    <cbc:Percent>19</cbc:Percent>
    <cac:TaxScheme><cbc:ID>VAT</cbc:ID></cac:TaxScheme>
  </cac:ClassifiedTaxCategory>
  <cac:AdditionalItemProperty>
    <cbc:Name>cva</cbc:Name>
    <cbc:Value>zero-emission</cbc:Value>
  </cac:AdditionalItemProperty>
</cac:Item>

Related rules

NormAPI provides technical validation, not tax or legal advice.