BR-21
Every invoice line (BG-25) must carry a line identifier (BT-126). It is the anchor the recipient uses to discuss or dispute a single row.
- Severity
- Error
- Applies to
- CII, UBL
- Rule set
- v2026-01-31
Official rule text
Each Invoice line (BG-25) shall have an Invoice line identifier (BT-126).
Why does BR-21 happen?
Lines are built as a list whose order implicitly is the number. The index is not written out when serialising, because it was never a field on the source object.
How do you fix BR-21?
Assign an identifier unique within the invoice in BT-126: cbc:ID inside cac:InvoiceLine in UBL, ram:AssociatedDocumentLineDocument/ram:LineID in CII. A counter from 1 is enough.
In the XML
A UBL fragment. The CII path is named above — same change, different element names.
<cac:InvoiceLine>
<cbc:InvoicedQuantity unitCode="C62">10</cbc:InvoicedQuantity>
<cbc:LineExtensionAmount currencyID="EUR">1000.00</cbc:LineExtensionAmount>
<cac:Item>
<cbc:Name>Beratungsleistung</cbc:Name>
</cac:Item>
<cac:Price>
<cbc:PriceAmount currencyID="EUR">100.00</cbc:PriceAmount>
</cac:Price>
</cac:InvoiceLine><cac:InvoiceLine>
<cbc:ID>1</cbc:ID>
<cbc:InvoicedQuantity unitCode="C62">10</cbc:InvoicedQuantity>
<cbc:LineExtensionAmount currencyID="EUR">1000.00</cbc:LineExtensionAmount>
<cac:Item>
<cbc:Name>Beratungsleistung</cbc:Name>
</cac:Item>
<cac:Price>
<cbc:PriceAmount currencyID="EUR">100.00</cbc:PriceAmount>
</cac:Price>
</cac:InvoiceLine>NormAPI provides technical validation, not tax or legal advice.