SchemaGuard by Ironbark Digital · EN 16931 / Peppol / XRechnung Reference
← All 294 EN 16931 / Peppol Rules & Live Validator
FATAL Official EN 16931 / Peppol / CIUS Rule BT/BG Fields: BT-98

BR-CL-19 — E-Invoice Validation Rule & Fix

Fixture ID: allowanceBadReasonCode · XPath: /ubl:Invoice/cac:AllowanceCharge[1]/cbc:AllowanceChargeReasonCode

1. Why This Rule Triggers (Diagnostic Message)

The document level allowance at allowances[0] carries the reason code "FC", which is not in UNCL 5189, the list BR-CL-19 admits for allowance reason codes. It *is* in the charge list — and that is the trap this rule exists to catch. EN 16931 uses two different code lists for the two directions: allowance reason codes come from UNCL 5189, charge reason codes from UNCL 7161. Moving an entry between the allowances and charges arrays without changing its code turns a valid document into a rejected one, because the same string means something else in the other list. The whole list is short enough to read: "41", "42", "60", "62", "63", "64", "65", "66", "67", "68", "70", "71", "88", "95", "100", "102", "103", "104", "105" — nineteen codes, and none of them is a free-text escape hatch.

2. How to Fix BR-CL-19

Either set allowances[0].reasonCode to a UNCL 5189 code, or remove it and describe the allowance in allowances[0].reason instead — free text on its own satisfies BR-33 and BR-CO-21, and is better than a code that means the wrong thing.

3. Valid Code / Payload Example

"allowances": [{ "amount": 15.00, "vatCategory": "S", "vatRate": 19, "reasonCode": "95", "reason": "Discount" }]
Test & Validate XML / JSON in Live SchemaGuard Validator →