InvoiceValidator.eu

BR-CO-21

fatalEN 16931EN 16931 business ruleCIIUBLBG-20BT-97BT-98

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 it fails

A document level allowance (BG-20) has neither a reason text (BT-97) nor a reason code (BT-98).

How to fix it

Add a reason. A free-text BT-97 such as 'Volume discount' is enough and is the safer choice; add BT-98 (UNTDID 5189, e.g. 95 = Discount) only if you are sure the code matches the text - see BR-CO-05.

What the validator checks

CII — context $Document_level_allowances

(../ram:Reason) or (../ram:ReasonCode)

UBL — context cac:AllowanceCharge[cbc:ChargeIndicator = false()]

exists(cbc:AllowanceChargeReason) or exists(cbc:AllowanceChargeReasonCode)

Related rules

Part of BR-CO — Calculation rules.

Check your own invoice against BR-CO-21

…or paste the XML instead

Nothing is stored, and the whole invoice is checked, not just this rule. A PDF only works if it is Factur-X / ZUGFeRD — a PDF with the invoice XML inside it.