InvoiceValidator.eu

PEPPOL-EN16931-CL002

fatalPeppol BIS Billing 3.0profileCIIUBL

Reason code MUST be according to subset of UNCL 5189 D.16B.

Why it fails

An allowance reason code is not in the UNCL 5189 D.16B subset.

How to fix it

Use a D.16B code — 95 discount, 100 special rebate, 102 fixed long-term, 104 special agreement, 41 bonus for work ahead of schedule. Or send only the reason text.

What the validator checks

CII — context ram:SpecifiedTradeAllowanceCharge[normalize-space(ram:ChargeIndicator/udt:Indicator) = 'false']/ram:ReasonCode

some $code in $UNCL5189 satisfies normalize-space(text()) = $code

UBL — context cac:AllowanceCharge[cbc:ChargeIndicator = 'false']/cbc:AllowanceChargeReasonCode

some $code in $UNCL5189 satisfies normalize-space(text()) = $code

Related rules

Part of PEPPOL-EN16931 — Peppol BIS Billing 3.0.

Check your own invoice against PEPPOL-EN16931-CL002

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

This is a Peppol BIS Billing 3.0 rule: an invoice can be perfectly valid EN 16931 and still be rejected by it.