# BR-CO-21

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

Checked against Peppol BIS Billing 3.0 2026.5

Canonical: https://einvoicecheck.eu/rules/br-co-21

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

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

## 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>.
```
