BR-CO – Conditions and calculations
BR-CO-21: document level allowance (BG-20) without a reason
ErrorEN 16931 business rule (CEN)
Official message
[BR-CO-21]-Each Document level allowance (BG-20) shall contain a Document level allowance reason (BT-97) or a Document level allowance reason code (BT-98), or both.Source: CEN EN 16931, version 1.3.16
What the message means
Your invoice contains an allowance at invoice level, but without any justification: neither a reason text nor a reason code is given. The norm requires at least one of the two, so that the recipient understands why the amount is deducted and can book the allowance correctly. An amount without a reason looks like an error and is rejected. The reason can be a short text such as volume discount or a code from the code list UNTDID 5189.
Common causes
- The allowance was captured as a plain amount, the reason field stayed empty.
- The software transfers the reason only into the invoice text, not into the allowance group.
- A discount was booked as an invoice level allowance instead of a line discount, without a reason.
How to fix it
Add to the allowance cbc:AllowanceChargeReason with a short text or cbc:AllowanceChargeReasonCode with a code from UNTDID 5189, preferably both. In CII they are ram:Reason and ram:ReasonCode of the SpecifiedTradeAllowanceCharge.
<cac:AllowanceCharge>
<cbc:ChargeIndicator>false</cbc:ChargeIndicator>
<cbc:Amount currencyID="EUR">50.00</cbc:Amount>
<cac:TaxCategory>
<cbc:ID>S</cbc:ID>
<cbc:Percent>19</cbc:Percent>
<cac:TaxScheme><cbc:ID>VAT</cbc:ID></cac:TaxScheme>
</cac:TaxCategory>
</cac:AllowanceCharge><cac:AllowanceCharge>
<cbc:ChargeIndicator>false</cbc:ChargeIndicator>
<cbc:AllowanceChargeReasonCode>95</cbc:AllowanceChargeReasonCode>
<cbc:AllowanceChargeReason>Volume discount</cbc:AllowanceChargeReason>
<cbc:Amount currencyID="EUR">50.00</cbc:Amount>
<cac:TaxCategory>
<cbc:ID>S</cbc:ID>
<cbc:Percent>19</cbc:Percent>
<cac:TaxScheme><cbc:ID>VAT</cbc:ID></cac:TaxScheme>
</cac:TaxCategory>
</cac:AllowanceCharge>Frequently asked
Is the code alone enough, without text?
Yes. The norm requires text or code; a code from UNTDID 5189 is sufficient. A short text next to it helps recipients who do not know the code list.
Does the rule also apply to line allowances?
Line allowances have BR-CO-23: “Each Invoice line allowance (BG-27) shall contain an Invoice line allowance reason (BT-139) or an Invoice line allowance reason code (BT-140), or both.” BR-CO-21 concerns only allowances at invoice level.
Fields concerned
- BG-20
- BT-97
- BT-98
Related rules
- BR-33
- BR-CO-05
- BR-31
Check your invoice
The EN 16931 validator reports this rule with the line number and location – right in your browser, without upload.
Technical details
- UBL · Context (XPath)
/ubl:Invoice/cac:AllowanceCharge[cbc:ChargeIndicator = false()] | /cn:CreditNote/cac:AllowanceCharge[cbc:ChargeIndicator = false()]- UBL · Schematron test
exists(cbc:AllowanceChargeReason) or exists(cbc:AllowanceChargeReasonCode)- CII · Context (XPath)
//ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ChargeIndicator[udt:Indicator='false']- CII · Schematron test
(../ram:Reason) or (../ram:ReasonCode)
Explanation written on 14 September 2026