Skip to content

BR-CL-19: Allowance reason code not from UNCL 5189

Official message

[BR-CL-19] Coded allowance reasons MUST belong to the UNCL 5189 code list

EN 16931 (CII) · Error · Message language: English · Version: xrechnung-3.0.2-validator-configuration-2026-08-31

[BR-CL-19] Coded allowance reasons MUST belong to the UNCL 5189 code list

EN 16931 (UBL) · Error · Message language: English · Version: xrechnung-3.0.2-validator-configuration-2026-08-31
Severity
Error The invoice is invalid and may be rejected by the recipient.
Applies to
EN 16931 (CII), EN 16931 (UBL)

What does this mean?

Coded allowance reasons must belong to the UNCL 5189 code list as restricted for EN 16931, e.g. 95 (discount). This applies to document level allowances (document level allowance reason code, BT-98) and line level allowances (invoice line allowance reason code, BT-140). The value given is not in that list.
Only allowances (ChargeIndicator false) are checked. Charges use a different list (UNCL 7161, BR-CL-20).

Typical causes

A charge code from UNCL 7161 (e.g. FC) was used for an allowance.
Free text ("discount") instead of the code.
The ChargeIndicator is wrong: a charge was marked as allowance.

How to fix the error

State the reason code with a code from the list permitted for allowances, or omit it and give the reason as text (BT-97 or BT-139).
Check whether ChargeIndicator matches the case (false for allowance, true for charge).
CII: ram:SpecifiedTradeAllowanceCharge/ram:ReasonCode, UBL: cac:AllowanceCharge/cbc:AllowanceChargeReasonCode.
Generate and validate the invoice again.

In E-Rechnungsfreund

In the invoice form, "Experte" view, section "Zu-/Abschläge auf Dokumentenebene (BG-20/BG-21)" (document level allowances and charges), choose "Abschlag (BG-20)" (allowance) as "Typ" and select an entry from the list in the field "Code", or leave "– –" and fill in "Begründung" (reason). For lines the same applies on the tab "Zu-/Abschläge (BG-27/28)" of the line.

Example

Wrong

<ram:SpecifiedTradeAllowanceCharge>
  <ram:ChargeIndicator>
    <udt:Indicator>false</udt:Indicator>
  </ram:ChargeIndicator>
  <ram:ActualAmount>10.00</ram:ActualAmount>
  <ram:ReasonCode>FC</ram:ReasonCode>
  ...
</ram:SpecifiedTradeAllowanceCharge>

Correct

<ram:SpecifiedTradeAllowanceCharge>
  <ram:ChargeIndicator>
    <udt:Indicator>false</udt:Indicator>
  </ram:ChargeIndicator>
  <ram:ActualAmount>10.00</ram:ActualAmount>
  <ram:ReasonCode>95</ram:ReasonCode>
  <ram:Reason>Discount</ram:Reason>
  ...
</ram:SpecifiedTradeAllowanceCharge>
For developers: test expression per syntax

EN 16931 (CII) (CII)

Context: ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator = false()]/ram:ReasonCode

((not(contains(normalize-space(.), ' ')) and contains(' 41 42 60 62 63 64 65 66 67 68 70 71 88 95 100 102 103 104 105 ', concat(' ', normalize-space(.), ' '))))

EN 16931 (UBL) (UBL)

Context: cac:AllowanceCharge[cbc:ChargeIndicator = false()]/cbc:AllowanceChargeReasonCode

((not(contains(normalize-space(.), ' ')) and contains(' 41 42 60 62 63 64 65 66 67 68 70 71 88 95 100 102 103 104 105 ', concat(' ', normalize-space(.), ' '))))

Related validation rules

  • BR-CL-01: Invoice type code (BT-3) not from UNTDID 1001
  • BR-CL-03: Currency attribute currencyID not according to ISO 4217
  • BR-CL-04: Invoice currency code (BT-5) not according to ISO 4217
  • BR-CL-05: VAT accounting currency code (BT-6) not according to ISO 4217
  • BR-CL-06: Value added tax point date code (BT-8) not permitted
  • BR-CL-07: Object identifier scheme (BT-18-1, BT-128-1) not from UNTDID 1153

Last updated:
Explanation of the validation rule, not legal or tax advice.