BR-KSA-19: Each document-level charge needs a reason code
Applies to each document-level cac:AllowanceCharge with cbc:ChargeIndicator = true: it must have a non-empty cbc:AllowanceChargeReasonCode (BT-105). A text cbc:AllowanceChargeReason alone does not satisfy the executed check; the listed test text expresses this differently.
How to fix it
Add a reason code to each document-level charge, e.g. <cbc:AllowanceChargeReasonCode>…</cbc:AllowanceChargeReasonCode>.
ZATCA's official text
[BR-KSA-19]-Each Document level charge (BG-21) shall have a code for the reason for document level charge (BT-105).
Source: ZATCA SDK 3.4.8 · ZATCA KSA rules
Fails when (the condition ZATCA's SDK runs)
not (exists(cbc:AllowanceChargeReasonCode) and normalize-space(cbc:AllowanceChargeReasonCode )!='' )
Related rules
- BR-36 · Each document-level charge needs an amount (BT-99)
- BR-37 · Each document-level charge needs a VAT category code (BT-102)
- BR-E-01 · Exempt (E) items need an 'E' VAT breakdown
- BR-E-07 · Exempt (E) document charges must have a VAT rate of 0
- BR-KSA-13 · 'Not subject to VAT' (O) charges must have a VAT rate of 0 if given
- BR-KSA-21 · Each document-level charge needs a charge reason text (BT-104)
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