BR-CO – Conditions and calculations
BR-CO-07: line allowance reason and reason code do not match
ErrorEN 16931 business rule (CEN)
The rule's own wording
[BR-CO-07]-Invoice line allowance reason code (BT-140) and Invoice line allowance reason (BT-139) shall indicate the same type of allowance reason.Source: CEN EN 16931, version 1.3.16
Meaning of the rule
An allowance in an invoice line may carry a reason as text and as a code from UNTDID 5189; both must name the same kind of allowance, for example promotional discount and code 66. The norm makes this requirement but leaves compliance to the issuer, because no program can check the meaning of a text. The rule therefore does not appear in validation reports. Mind it anyway: line discounts are often checked one by one by the recipient.
The fix in the XML
Set per line allowance the fitting code from UNTDID 5189 and a matching text, or only one of the two. In UBL they stand in cac:InvoiceLine/cac:AllowanceCharge in cbc:AllowanceChargeReasonCode and cbc:AllowanceChargeReason.
<cac:InvoiceLine>
<cbc:ID>1</cbc:ID>
<cac:AllowanceCharge>
<cbc:ChargeIndicator>false</cbc:ChargeIndicator>
<cbc:AllowanceChargeReasonCode>100</cbc:AllowanceChargeReasonCode>
<cbc:AllowanceChargeReason>Promotional discount</cbc:AllowanceChargeReason>
<cbc:Amount currencyID="EUR">5.00</cbc:Amount>
</cac:AllowanceCharge>
</cac:InvoiceLine><cac:InvoiceLine>
<cbc:ID>1</cbc:ID>
<cac:AllowanceCharge>
<cbc:ChargeIndicator>false</cbc:ChargeIndicator>
<cbc:AllowanceChargeReasonCode>66</cbc:AllowanceChargeReasonCode>
<cbc:AllowanceChargeReason>Promotional discount</cbc:AllowanceChargeReason>
<cbc:Amount currencyID="EUR">5.00</cbc:Amount>
</cac:AllowanceCharge>
</cac:InvoiceLine>Questions and answers
Which codes from UNTDID 5189 are common?
95 for volume discount, 66 for promotional or special discount, 100 for special agreement and 88 for material surcharge deduction; the code list carries the full set.
Does the rule apply when I give only the code?
Then nothing can contradict: the rule concerns only the case where text and code are both present.
Other typical causes
- The reason code is taken from one preset for all lines.
- The reason text comes from the item description, not from the discount reason.
- The old code stayed in place when a line was copied.
EN 16931 fields
- BT-139
- BT-140
- BG-27
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 = false()] | //cac:CreditNoteLine/cac:AllowanceCharge[cbc:ChargeIndicator = false()]- UBL · Schematron test
true()- CII · Context (XPath)
//ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ChargeIndicator[udt:Indicator = 'false']- CII · Schematron test
true()
Explanation written on 14 September 2026