A VAT breakdown (BG-23) with VAT Category code (BT-118) 'Exempt from VAT' shall have a VAT exemption reason code (BT-121).
What does this mean?
The place being checked is the document's VAT breakdown (BG-23): every cac:TaxTotal/cac:TaxSubtotal/cac:TaxCategory whose cbc:ID (BT-118) is E. Inside it, cbc:TaxExemptionReasonCode (BT-121) must be present and must not be empty once spaces are trimmed. The check runs per breakdown, on tax invoices, simplified invoices and their notes alike.
The executable test in the compiled schematron the Authority ships with its SDK asks about presence only. The test text printed beside the message names the three codes and upper-cases the value, but the condition that actually runs compares nothing: an element present, with a value in it. Matching the value against its category's list is the job of BR-KSA-CL-04, also a warning — and that one compares the value as written, so lower case does not pass it.
The list is short and closed, with the wording of paragraph 11.2.4 of the XML implementation standard: VATEX-SA-29, Financial services mentioned in Article 29 of the VAT Regulations; VATEX-SA-29-7, Life insurance services mentioned in Article 29 of the VAT Regulations; and VATEX-SA-30, Real estate transactions mentioned in Article 30 of the VAT Regulations. Exemption in this specification is narrower than in everyday speech: medicines, exports, and education and healthcare for citizens have their codes on the zero-rated Z list, not here, and the difference between the two letters is covered in BR-KSA-18.
The code brings its text with it: wherever it is present, cbc:TaxExemptionReason (BT-120) must sit beside it, or BR-KSA-83 warns. A word-for-word match against the Authority's wording is written into the schematron but commented out; writing its English wording exactly is still the safe choice.
It is a warning: the invoice is cleared or reported, and the code comes back with the acceptance in warningMessages. In our tests on the Authority's sandbox, an exempt document without the element came back with this code alone. The European specification is satisfied here by a code or a text, through rule BR-E-10; the Authority's copy drops that rule and puts this one in its place, so text alone is no longer enough. Prepayment lines have a twin of this rule, BR-KSA-94.
Why does it happen?
Ordered from the most common to the least — your cause is most likely the first or the second.
-
Text without a code: Exempt, or the article wording, in
cbc:TaxExemptionReasonwith nocbc:TaxExemptionReasonCode— which satisfies the European ruleBR-E-10and not this one. -
The reason written only on the line, in
cac:Item/cac:ClassifiedTaxCategory, while the rule reads nothing except the document-level VAT breakdown. -
The letter
Eused to mean no VAT for anything not taxed: an export, a medicine, a fee collected for someone else, a discount. The missing code is a symptom here: none of the three codes describes the sale because the sale is not exempt. -
A zero-rated code on an exempt breakdown —
VATEX-SA-35for medicines underE, for instance — which passes this rule and draws aBR-KSA-CL-04warning, and the letter itself is wrong. -
A lease or a property sale entered as exempt without
VATEX-SA-30, because the office system knows the word exempt and not the code. - The code element written empty or holding spaces when the template does not know the value, and to this rule empty is the same as absent.
How to fix it
4 steps, then send the invoice again.
-
1
Write one of the three codes and its text in the VAT breakdown
Inside every
cac:TaxSubtotal/cac:TaxCategorywhose category isE, straight aftercbc:Percent:<cbc:TaxExemptionReasonCode>VATEX-SA-30</cbc:TaxExemptionReasonCode>, then<cbc:TaxExemptionReason>Real estate transactions mentioned in Article 30 of the VAT Regulations</cbc:TaxExemptionReason>, thencac:TaxScheme. The code in capitals exactly as listed. -
2
Check the letter before hunting for a code
If none of the three codes describes what you sold, the line is probably not exempt: it may be zero-rated
Zwith its longer list of codes, outside the scope of VATO, or standard-ratedS. The difference is not cosmetic: exempt supplies block the deduction of input VAT and zero-rated ones do not, so the wrong letter changes your return even when it leaves the invoice total alone. Which treatment applies to your supply is a regulatory question for your tax adviser and zatca.gov.sa, not for us. -
3
In real estate, the conditions come before the code
VATEX-SA-30is the code for the real estate transactions referred to in Article 30, and not everything that passes through a property office falls under it: a commission, for instance, is a service with its own treatment. Whether your case qualifies is for your adviser to decide. -
4
An accepted invoice is not edited
The warning means the document was recorded as it stands, so do not resend it or change it. Fix the mapping for the documents that follow. If it turns out the category itself was wrong, the correction is a credit note followed by a new invoice under the right treatment, once your adviser confirms it; the steps are in credit and debit notes in Saudi e-invoicing.
This code does not block acceptance, so the invoice you have is compliant. Correct the data so the warnings disappear from future invoices.
Does ZATCA Tools prevent it?
No, and that is a decision rather than an oversight: in ZATCA Tools the reason is optional and never guessed, because a guessed reason tells the Authority a legal basis the merchant never gave. On the invoice form a VAT treatment list appears once the establishment adds exempt in its establishment profile, and beside it a reason list with the three codes whose first option is Not specified; it suggests the establishment's default reason or the last one it used for exempt. The first exempt invoice with no history starts without a reason unless the merchant picks one, and it is issued and accepted with this warning. Over the API, tax_reason_code is optional. A line that names none takes the reason the other lines of its category name on the same document, when they all name one; when they name two it stays without one, since picking either would be a guess, and the response comes back with status warnings carrying this code. When no line names a reason, it takes the establishment's default for that category, then the last reason used for it on its issued documents, and otherwise goes out without one, with the same warning. A code our list does not know, a zero-rated code on an exempt line, or a code on a standard-rated line is refused before signing with invalid_lines. The Shopify integration never issues an exempt line at all: an order is standard-rated, or zero-rated with the export code. A credit or debit note inherits the category and the reason of the invoice it adjusts, so a note on an exempt invoice without a reason returns the same warning. The code is written with its English text in the document-level VAT breakdown only, and each reason gets its own breakdown: an API document mixing two exemption reasons goes out with two, each with its own amount, which ZATCA accepts with warning BR-E-08; a full credit or debit note gives each reason back its own share.
Related codes
BR-KSA-CL-04
Warning
BR-KSA-83
Warning
BR-KSA-69
Warning
BR-KSA-24
Warning
BR-KSA-18
Rejects the invoice
Frequently asked questions
Was my invoice rejected because of this code? +
errorMessages, which reject, from warningMessages, which are only recorded. More in ZATCA error codes explained.I wrote Exempt in the reason text — is that not enough? +
cbc:TaxExemptionReasonCode; the text (BT-120) is a separate field that comes with the code, not instead of it. Take the text from the Authority's list in English as it stands, not a description of your own.My medicines are exempt — why is there no code for them under E? +
VATEX-SA-35 for medicines and medical equipment, under the letter Z. Putting it under E passes this rule and draws a BR-KSA-CL-04 warning, and more importantly it changes how the line sits in your return. Whether zero rating applies to what you sell is a question for your adviser.Residential rent is exempt — which code do I write? +
VATEX-SA-30, and its wording refers to Article 30 of the VAT Regulations. Whether your lease meets the conditions for the exemption is a regulatory matter for zatca.gov.sa and your adviser.What is the difference between this rule and BR-KSA-CL-04? +
BR-KSA-CL-04 asks whether the code is one of the three. So a zero-rated code on an exempt breakdown satisfies this rule and fails that one. Both are warnings.ZATCA Tools builds the signature, the PIH, the counter and the encoding for you, and validates your data before it is sent. Start free, with no credit card.
Start for free