BR-CO-21
EN 16931-1 layer: en16931
Checked against Peppol BIS Billing 3.0 2026.5
What does BR-CO-21 mean? 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.
Why did my invoice fail BR-CO-21?
Each document-level allowance (BG-20) must state a reason as free text (BT-97) or a coded reason (BT-98), or both. This ensures every deduction from the invoice total is justified and machine- or human-readable.
Official rule text
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.
Common causes
- Document-level cac:AllowanceCharge (ChargeIndicator=false) with an amount but no AllowanceChargeReason and no AllowanceChargeReasonCode.
- Reason text mapped to an internal field that isn't serialized into the UBL.
- Reason code left empty ('') which counts as absent.
- Allowance created programmatically from a discount amount only.
How do I fix it?
Add a reason to the allowance, e.g. <cac:AllowanceCharge><cbc:ChargeIndicator>false</cbc:ChargeIndicator><cbc:AllowanceChargeReasonCode>95</cbc:AllowanceChargeReasonCode><cbc:AllowanceChargeReason>Discount</cbc:AllowanceChargeReason>...</cac:AllowanceCharge>.
Related rules
BR-CO-03 · BR-CO-04 · BR-CO-05 · BR-CO-06 · BR-CO-07 · BR-CO-08 · BR-CO-09 · BR-CO-10
Check your invoice against this rule
Paste it into the live demo, or call POST /v1/validate. See the quickstart.