Exempt VAT breakdown gives no exemption reason
Reported asexemption_reason_missingno exemption reason
What is wrong
Only rule packs before 2.0.0 report this: SDK 3.4.8, which rule pack 2.0.0 reads, removed BR-E-10. Its successor, BR-KSA-23, asks an exempt breakdown for a reason code, at warning (KSA:2581), and BR-KSA-CL-04 accepts VATEX-SA-29, VATEX-SA-29-7 or VATEX-SA-30 there; a report produced under 2.0.0 never carries this note. What follows is the rule as SDK 3.0.8 ran it. A cac:TaxSubtotal directly under the invoice's own cac:TaxTotal is coded E - exempt - under the VAT tax scheme, and its cac:TaxCategory carries neither a cbc:TaxExemptionReason nor a cbc:TaxExemptionReasonCode. EN 16931 rule BR-E-10, which ZATCA ran, required one or the other. The test was for the presence of the element and not for its content, so an element written with no text in it satisfies this particular rule - which is not true of the equivalent rule for the out-of-scope category, BR-O-10, where an empty reason fails. Under SDK 3.0.8 this rule and BR-S-10 could not both be satisfied on an invoice that also carried standard-rated supplies; SDK 3.4.8 fixed BR-S-10, and its note explains how.
What to check in your ERP
The reason belongs in cac:TaxSubtotal/cac:TaxCategory, as cbc:TaxExemptionReason for the text or cbc:TaxExemptionReasonCode for the code, and it is a property of the breakdown rather than of the line. Most systems hold it against the tax code as an exemption or non-taxability reason, and the field is left blank when the code is created by copying a taxed one. Since the breakdown is a single block per category, your export needs one reason for the whole exempt group, so decide which reason it carries when an invoice has exempt supplies of more than one kind. Under SDK 3.4.8 what the exempt breakdown needs is the reason code: VATEX-SA-29, VATEX-SA-29-7 or VATEX-SA-30.