BR-KSA-08: Seller ID needs a valid scheme (CRN, MOM, MLS, SAG, OTH, 700)

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

Warning: accepted with a warningAll invoicesFields: BT-29, BT-29-1

cac:AccountingSupplierParty/cac:Party/cac:PartyIdentification/cbc:ID (BT-29) must exist with a @schemeID (BT-29-1) of CRN, MOM, MLS, SAG, OTH or 700. The executed check only verifies the ID exists and the scheme; it does not check the 'alphanumeric only' or 'only once' parts of the official text.

How to fix it

Add the seller identifier with its scheme, e.g. <cac:PartyIdentification><cbc:ID schemeID="CRN">1010010000</cbc:ID></cac:PartyIdentification>, using letters and digits only and the first applicable scheme in the order CRN, MOM, MLS, SAG, OTH, 700 per the official text.

ZATCA's official text

[BR-KSA-08]-The seller identification (BT-29) must exist only once with one of the scheme ID (BT-29-1) (CRN, MOM, MLS, SAG, OTH, 700) and must contain only alphanumeric characters. 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. Other OD 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( exists(cac:AccountingSupplierParty/cac:Party/cac:PartyIdentification/cbc:ID) and string-length(cac:AccountingSupplierParty/cac:Party/cac:PartyIdentification/cbc:ID/normalize-space(@schemeID)) > 2 and contains('CRN MOM MLS SAG OTH 700', normalize-space(cac:AccountingSupplierParty/cac:Party/cac:PartyIdentification/cbc:ID/@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