EN 16931 core rules
BR-38: Document level charge reason (BT-104) is required
What this rule requires
Document level charge reason (BT-104) is required.
ExampleEN 16931 (UBL)
An invoice built like a valid one, except for this:
<cac:AllowanceCharge>
<cbc:ChargeIndicator>true</cbc:ChargeIndicator>
<cbc:Amount currencyID="EUR">0.00</cbc:Amount>
<cac:TaxCategory>
<cbc:ID>S</cbc:ID>
<cbc:Percent>19.00</cbc:Percent>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:TaxCategory>
</cac:AllowanceCharge>The validator says: Document level charge reason (BT-104) is required and the document does not contain it.
Official validation message
This is the official EN 16931 validation message for this rule, quoted verbatim in English from the validation artefacts below. It is not translated: a translation would no longer be the official text.
[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).Quoted verbatim and unmodified from the official EN 16931 validation artefacts published by CEN/TC 434, release validation-1.3.16 of April 13, 2026, licensed under the European Union Public Licence v. 1.2. Provided without warranty of any kind, including as to accuracy. Source and licence →
How to fix it
Add Document level charge reason to the invoice.
Frequently asked questions
- What does BR-38 mean?
- Document level charge reason (BT-104) is required. The rule runs under EN 16931 (UBL), Peppol BIS 3.0, and XRechnung 3.0 (UBL).
- How do I fix BR-38?
- Add Document level charge reason to the invoice. In UBL the element is /Invoice/cac:AllowanceCharge[cbc:ChargeIndicator=true]/cbc:AllowanceChargeReason.
Runs under these profiles
- EN 16931 (UBL)
- Peppol BIS 3.0
- XRechnung 3.0 (UBL)
Element path
- Document level charge reason (BT-104)UBL /
Invoice/ cac:AllowanceCharge[cbc:ChargeIndicator=true]/ cbc:AllowanceChargeReasonCII / CrossIndustryInvoice/ SupplyChainTradeTransaction/ ApplicableHeaderTradeSettlement/ SpecifiedTradeAllowanceCharge[ChargeIndicator/ Indicator=true]/ ReasonRead from what WorkAlio's CII parser accepts — there is no CII writer yet, so this path is not independently verified the way the UBL path is.