Skip to content

BR-CO – Conditions and calculations

BR-CO-23: invoice line allowance (BG-27) without a reason

ErrorEN 16931 business rule (CEN)

The rule's own wording

[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.

Source: CEN EN 16931, version 1.3.16

The fix in the XML

Add to the line allowance cbc:AllowanceChargeReason or cbc:AllowanceChargeReasonCode from UNTDID 5189, for example 95 for volume discount. In CII in the line's SpecifiedTradeAllowanceCharge with ram:Reason or ram:ReasonCode.

Before – invalid
<cac:InvoiceLine>
  <cbc:ID>1</cbc:ID>
  <cac:AllowanceCharge>
    <cbc:ChargeIndicator>false</cbc:ChargeIndicator>
    <cbc:Amount currencyID="EUR">5.00</cbc:Amount>
  </cac:AllowanceCharge>
</cac:InvoiceLine>
After – corrected
<cac:InvoiceLine>
  <cbc:ID>1</cbc:ID>
  <cac:AllowanceCharge>
    <cbc:ChargeIndicator>false</cbc:ChargeIndicator>
    <cbc:AllowanceChargeReasonCode>95</cbc:AllowanceChargeReasonCode>
    <cbc:AllowanceChargeReason>Volume discount</cbc:AllowanceChargeReason>
    <cbc:Amount currencyID="EUR">5.00</cbc:Amount>
  </cac:AllowanceCharge>
</cac:InvoiceLine>

Meaning of the rule

A line of your invoice contains an allowance without a justification: both the reason text and the reason code are missing. The norm requires at least one of the two, also for allowances at line level, so that the recipient can understand the reduced price. With discounts granted per item the error is common, because the software knows the discount percentage but stores no reason with it.

What usually goes wrong

  • The line discount is produced from a percentage field that knows no reason.
  • The reason stands only in the item description.
  • A template writes the allowance group without reason fields.

Questions and answers

Can I simply calculate the discount into the price?

Yes. A reduced net price in the line needs no allowance group. The group pays off when the customer should see the list price and the deduction.

Must the reason text be in the recipient's language?

The norm does not prescribe that. A code from UNTDID 5189 is language-independent and therefore the better choice for international recipients.

EN 16931 fields

  • BG-27
  • BT-139
  • BT-140
  • 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.

Open the EN 16931 validator

The rule in detail
UBL · Context (XPath)
//cac:InvoiceLine/cac:AllowanceCharge[cbc:ChargeIndicator = false()] | //cac:CreditNoteLine/cac:AllowanceCharge[cbc:ChargeIndicator = false()]
UBL · Schematron test
exists(cbc:AllowanceChargeReason) or exists(cbc:AllowanceChargeReasonCode)
CII · Context (XPath)
//ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ChargeIndicator[udt:Indicator = 'false']
CII · Schematron test
(../ram:Reason) or (../ram:ReasonCode)

Explanation written on 14 September 2026