BR-KSA-86: Buyer email should follow the XXX@YYY.ZZ format
Describes the format of cac:AccountingCustomerParty/cac:Party/cac:Contact/cbc:ElectronicMail (BT-58): a local part and domain of letters, digits, dots and hyphens (plus underscores in the local part) that start and end alphanumeric, and a 2-3 letter extension. In the SDK 3.4.8 schematron this check is commented out, so the validator does not run it.
How to fix it
Use a plain address such as <cbc:ElectronicMail>name@example.com</cbc:ElectronicMail>; per the message, separate several addresses with ';'.
ZATCA's official text
[BR-KSA-86]- Buyer's Contact Email Address (BT-58) shall follow the following format ** XXX@YYY.ZZ where: The [XXX] should consist of alphanumeric characters (a-z, A-Z, 0-9), dots ('.'), underscores ('_'), or hyphens ('-'). It must start and end with an alphanumeric character. The [YYY] should consist of alphanumeric characters (a-z, A-Z, 0-9), hyphens ('-'), and dots ('.'). It must start and end with an alphanumeric character. The [ZZ] should be a valid extension with a maximum 3 and a minimum 2 alphabets (a-z, A-Z), If exist. Multiple emails can be provided using semicolon ';' separator.
Source: ZATCA SDK 3.4.8 · ZATCA KSA rules
Fails when (the condition ZATCA's SDK runs)
string-length(//cac:AccountingCustomerParty/cac:Party/cac:Contact/cbc:ElectronicMail) > 0 and not(exists(//cac:AccountingCustomerParty/cac:Party/cac:Contact/cbc:ElectronicMail) and matches(//cac:AccountingCustomerParty/cac:Party/cac:Contact/cbc:ElectronicMail, '^(?:[a-zA-Z0-9](?:[_a-zA-Z0-9.-]*[a-zA-Z0-9_])?@(?:[a-zA-Z0-9]([-.\w]*[a-zA-Z0-9])+\.)+[a-zA-Z]{2,3}(?:;|$))+$'))
Related rules
- BR-KSA-83 · Exemption reason code in the VAT breakdown needs a reason text
- BR-KSA-84 · Standard-rated (S) VAT rate must be 15 or 5
- BR-KSA-85 · Buyer phone must start with 0 or + followed by 4 to 15 digits
- BR-KSA-87 · Tax exchange rate needs source currency, target currency and rate
- BR-KSA-88 · Exchange-rate source currency must equal the invoice currency
- BR-KSA-89 · Exchange-rate target currency must equal the tax currency
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