BR-KSA-19: Each document-level charge needs a reason code

Explained by Matheel from ZATCA's rule text and the condition SDK 3.4.8 executes · Updated

Warning: accepted with a warningConditional, see belowFields: BG-21, BT-105

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

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