BR-38: Document level charge reason (BT-104/BT-105) is missing
Official message
[BR-38] Each Document level charge (BG-21) shall have a Document level charge reason (BT-104) or a Document level charge reason code (BT-105).
[BR-38] Each Document level charge (BG-21) shall have a Document level charge reason (BT-104) or a Document level charge reason code (BT-105).
[BR-38] Each Document level charge (BG-21) shall have a Document level charge reason (BT-104) or a Document level charge reason code (BT-105).
- Severity
- Error The invoice is invalid and may be rejected by the recipient.
- Applies to
- EN 16931 (CII), EN 16931 (UBL), Factur-X / ZUGFeRD EN 16931
- Affected fields
- BG-21, BT-104, BT-105
What does this mean?
Every document level charge (BG-21) must have a reason: as text (Document level charge reason, BT-104) or as a code (Document level charge reason code, BT-105). Both are missing for at least one charge.
Typical causes
The charge was output with amount and VAT category only.
The reason only appears in an invoice note, not on the charge itself.
How to fix the error
State a reason as text for every charge, e.g. "Shipping costs", and/or a code from the UNTDID 7161 list. If both are given, they must have the same meaning.
CII: ram:SpecifiedTradeAllowanceCharge/ram:Reason or ram:ReasonCode, UBL: cac:AllowanceCharge/cbc:AllowanceChargeReason or 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), fill in the field "Begründung" (reason) and/or select a reason in the field "Code" for every entry of type "Zuschlag (BG-21)" (charge).
Example
Wrong
<ram:SpecifiedTradeAllowanceCharge>
<ram:ChargeIndicator>
<udt:Indicator>true</udt:Indicator>
</ram:ChargeIndicator>
<ram:ActualAmount>9.90</ram:ActualAmount>
<ram:CategoryTradeTax>
...
</ram:CategoryTradeTax>
</ram:SpecifiedTradeAllowanceCharge>
Correct
<ram:SpecifiedTradeAllowanceCharge>
<ram:ChargeIndicator>
<udt:Indicator>true</udt:Indicator>
</ram:ChargeIndicator>
<ram:ActualAmount>9.90</ram:ActualAmount>
<ram:Reason>Shipping costs</ram:Reason>
<ram:CategoryTradeTax>
...
</ram:CategoryTradeTax>
</ram:SpecifiedTradeAllowanceCharge>
For developers: test expression per syntax
EN 16931 (CII) (CII)
Context: //ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ChargeIndicator[udt:Indicator='true']
(../ram:Reason) or (../ram:ReasonCode)
EN 16931 (UBL) (UBL)
Context: /ubl:Invoice/cac:AllowanceCharge[cbc:ChargeIndicator = true()] | /cn:CreditNote/cac:AllowanceCharge[cbc:ChargeIndicator = true()]
exists(cbc:AllowanceChargeReason) or exists(cbc:AllowanceChargeReasonCode)
Factur-X / ZUGFeRD EN 16931 (CII)
Technical ID in the source: FX-SCH-A-000070
Context: //ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ChargeIndicator[udt:Indicator='true']
(../ram:Reason) or (../ram:ReasonCode)
Related validation rules
Last updated:
Explanation of the validation rule, not legal or tax advice.