BR-KSA-14: Buyer ID must use an allowed scheme ID

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

Error: the invoice is rejectedConditional, see belowFields: BT-46, BT-46-1

Applies to each cac:AccountingCustomerParty/cac:Party/cac:PartyIdentification/cbc:ID (BT-46): its @schemeID (BT-46-1) must be one of TIN, CRN, MOM, MLS, 700, SAG, NAT, GCC, IQA, PAS, OTH. The executed check verifies only the scheme; the 'alphanumeric only' part appears in the listed test text but is not enforced.

How to fix it

Give the buyer ID a valid scheme, e.g. <cac:PartyIdentification><cbc:ID schemeID="NAT">1234567890</cbc:ID></cac:PartyIdentification>, using letters and digits only as the official text requires.

ZATCA's official text

[BR-KSA-14]-The buyer identification (BT-46), required only if buyer is not VAT registered, then the buyer identification (BT-46) must be provided with one of the scheme IDs (BT-46-1) (TIN, CRN, MOM, MLS, 700, SAG, NAT, GCC, IQA, PAS, OTH) and must contain only alphanumeric characters. Tax Identification Number "TIN" as schemeID ;Commercial registration number with "CRN" as schemeID ;MOMRAH license with "MOM" as schemeID ;MHRSD license with "MLS" as schemeID ;700 Number with "700" as schemeID ;MISA license with "SAG" as schemeID ;National ID with "NAT" as schemeID ;GCC ID with "GCC" as schemeID ;Iqama Number with "IQA" as schemeID ;Passport ID with "PAS" as schemeID ;Other ID with "OTH" as schemeID. ;In case of multiple commercial registrations, the seller should fill the commercial registration of the branch in respect of which the Tax Invoice is being issued. In case multiple IDs exist then one of the above must be entered following the sequence specified above
Source: ZATCA SDK 3.4.8 · ZATCA KSA rules

Fails when (the condition ZATCA's SDK runs)

not( string-length(normalize-space( ./@schemeID)) > 2 and contains('TIN NAT IQA PAS CRN MOM MLS 700 SAG GCC OTH', normalize-space(./@schemeID)))

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