BR-CO – Conditions and calculations
BR-CO-06: charge reason and reason code (BT-104, BT-105) do not match
ErrorEN 16931 business rule (CEN)
The rule's own wording
[BR-CO-06]-Document level charge reason code (BT-105) and Document level charge reason (BT-104) shall indicate the same type of charge.Source: CEN EN 16931, version 1.3.16
The fix in the XML
Choose the code from UNTDID 7161 that describes the charge, for example FC for freight, and word the text to match, or give only one of the two. In UBL they stand in cbc:AllowanceChargeReasonCode and cbc:AllowanceChargeReason of the charge.
<cac:AllowanceCharge>
<cbc:ChargeIndicator>true</cbc:ChargeIndicator>
<cbc:AllowanceChargeReasonCode>AAB</cbc:AllowanceChargeReasonCode>
<cbc:AllowanceChargeReason>Shipping costs</cbc:AllowanceChargeReason>
<cbc:Amount currencyID="EUR">12.90</cbc:Amount>
</cac:AllowanceCharge><cac:AllowanceCharge>
<cbc:ChargeIndicator>true</cbc:ChargeIndicator>
<cbc:AllowanceChargeReasonCode>FC</cbc:AllowanceChargeReasonCode>
<cbc:AllowanceChargeReason>Shipping costs</cbc:AllowanceChargeReason>
<cbc:Amount currencyID="EUR">12.90</cbc:Amount>
</cac:AllowanceCharge>Meaning of the rule
A charge on the invoice as a whole may carry its reason as text and as a code from the code list UNTDID 7161. Both details must mean the same kind of charge. The norm states this as a rule, but a validator cannot compare the meaning of a free text with a code; in a validation it therefore always counts as satisfied. Contradictory details are noticed by the recipient and lead to questions or deductions.
What usually goes wrong
- The template writes the same code for every charge while the text is chosen freely per invoice.
- The code was chosen from the allowance list UNTDID 5189 instead of UNTDID 7161.
- Text and code come from different sources of the order.
Questions and answers
Which code list applies to charges?
UNTDID 7161, with values such as FC for freight, ABK for packaging or ADR for other services. The allowance list UNTDID 5189 is not meant for charges.
Why does the validator not report a contradictory reason?
BR-CO-06 is not checked automatically, because free text cannot be compared with a code by machine. The code itself is checked by BR-CL-20: “Coded charge reasons MUST belong to the UNCL 7161 code list”; an unknown code is caught there.
EN 16931 fields
- BT-104
- BT-105
- BG-21
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)
/ubl:Invoice/cac:AllowanceCharge[cbc:ChargeIndicator = true()] | /cn:CreditNote/cac:AllowanceCharge[cbc:ChargeIndicator = true()]- UBL · Schematron test
true()- CII · Context (XPath)
//ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ChargeIndicator[udt:Indicator='true']- CII · Schematron test
true()
Explanation written on 14 September 2026