BR-CO-24
Each Invoice line charge (BG-28) shall contain an Invoice line charge reason (BT-144) or an Invoice line charge reason code (BT-145), or both.
What does this rule mean?
An invoice line charge (BG-28) has neither a reason (BT-144) nor a reason code (BT-145).
Without a reason the buyer can neither understand nor book the charge.
- BG-28
- Invoice line charges (group)
- BT-144
- Invoice line charge reason
- BT-145
- Invoice line charge reason code
Official rule message (standard)
Each Invoice line charge (BG-28) shall contain an Invoice line charge reason (BT-144) or an Invoice line charge reason code (BT-145), or both.
Where the rule applies
Syntax: CII · UBL
The same rule, expressed twice: UBL and CII name the same fields with different paths. Running a CII file against the UBL rules is why you get errors that mean nothing.
UBL
//cac:InvoiceLine/cac:AllowanceCharge[cbc:ChargeIndicator = true()] | //cac:CreditNoteLine/cac:AllowanceCharge[cbc:ChargeIndicator = true()]
CII
//ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ChargeIndicator[udt:Indicator = 'true']
Technical test
The rule passes when this Schematron expression holds true:
(../ram:Reason) or (../ram:ReasonCode)How to fix it
Touches amounts, VAT or IBAN. We never change these automatically — correct them in your source data.
Add a reason as text or a code from UNCL 7161 (e.g. FC = freight).
Correct the affected entry in your XML, then re-check the invoice. Validation runs locally in your browser — your file never leaves your machine.
Check an e-invoice here
Drop an XML or ZUGFeRD PDF file here. Validation runs locally in your browser against EN 16931 — your file never leaves your machine.