BR-CO – Conditions and calculations
BR-CO-24: invoice line charge (BG-28) without a reason
ErrorEN 16931 business rule (CEN)
The rule's own wording
[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.Source: CEN EN 16931, version 1.3.16
Meaning of the rule
A line of your invoice contains a charge, for example for custom work or express delivery, without a reason text and without a reason code. The norm requires at least one of the two, so that the recipient can understand the surcharge on the line. An unexplained charge is rejected even when the amount is right. The reason is a short text or a code from the code list UNTDID 7161.
What usually goes wrong
- The charge was captured as a surcharge without a label.
- The software writes line charges without reason fields.
- The reason stands in the item description, not in the charge group.
The fix in the XML
Add to the line charge cbc:AllowanceChargeReason or cbc:AllowanceChargeReasonCode from UNTDID 7161, for example ABK for packaging or ADR for other services. In CII in the line's SpecifiedTradeAllowanceCharge with indicator true.
<cac:InvoiceLine>
<cbc:ID>2</cbc:ID>
<cac:AllowanceCharge>
<cbc:ChargeIndicator>true</cbc:ChargeIndicator>
<cbc:Amount currencyID="EUR">8.00</cbc:Amount>
</cac:AllowanceCharge>
</cac:InvoiceLine><cac:InvoiceLine>
<cbc:ID>2</cbc:ID>
<cac:AllowanceCharge>
<cbc:ChargeIndicator>true</cbc:ChargeIndicator>
<cbc:AllowanceChargeReasonCode>ABK</cbc:AllowanceChargeReasonCode>
<cbc:AllowanceChargeReason>Special packaging</cbc:AllowanceChargeReason>
<cbc:Amount currencyID="EUR">8.00</cbc:Amount>
</cac:AllowanceCharge>
</cac:InvoiceLine>Questions and answers
Is a charge of zero euros allowed?
Yes, but it needs a reason as well. It is more sensible to leave out charges without an amount.
Can I justify a charge with an allowance code?
No. Charges use the code list UNTDID 7161; an allowance code from UNTDID 5189 triggers the code list check.
EN 16931 fields
- BG-28
- BT-144
- BT-145
- BG-25
See also
Check your invoice
The EN 16931 validator reports this rule with the line number and location – right in your browser, without upload.
The rule in detail
- UBL · Context (XPath)
//cac:InvoiceLine/cac:AllowanceCharge[cbc:ChargeIndicator = true()] | //cac:CreditNoteLine/cac:AllowanceCharge[cbc:ChargeIndicator = true()]- UBL · Schematron test
exists(cbc:AllowanceChargeReason) or exists(cbc:AllowanceChargeReasonCode)- CII · Context (XPath)
//ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ChargeIndicator[udt:Indicator = 'true']- CII · Schematron test
(../ram:Reason) or (../ram:ReasonCode)
Explanation written on 14 September 2026