BR-KSA-22: Each invoice line charge needs a charge reason text (BT-144)
Applies only when a line has a charge (BG-28): every cac:InvoiceLine/cac:AllowanceCharge with cbc:ChargeIndicator = true must contain a non-blank cbc:AllowanceChargeReason (BT-144).
How to fix it
Add a reason text to every line-level charge, for example <cbc:AllowanceChargeReason>Installation</cbc:AllowanceChargeReason> inside the line's cac:AllowanceCharge whose cbc:ChargeIndicator is true.
ZATCA's official text
[BR-KSA-22]- Each Invoice line charge (BG-28) shall have a Reason for invoice line charge (BT-144).
Source: ZATCA SDK 3.4.8 · ZATCA KSA rules
Fails when (the condition ZATCA's SDK runs)
not( exists(cbc:AllowanceChargeReason)and normalize-space(cbc:AllowanceChargeReason )!='' )
Related rules
- BR-43 · Each line-level charge needs an amount (BT-141)
- BR-KSA-20 · Each invoice line charge needs a reason code
- BR-KSA-19 · Each document-level charge needs a reason code
- BR-KSA-21 · Each document-level charge needs a charge reason text (BT-104)
- BR-KSA-23 · VAT-exempt (E) breakdown needs an exemption reason code (BT-121)
- BR-KSA-24 · Not-subject-to-VAT (O) breakdown needs a reason code (BT-121)
Validate your invoice against ZATCA's rules
Paste the XML and see every error and warning. It runs in your browser; the invoice goes nowhere.
Validate an invoice or try Matheel