BR-O-10Out-of-scope VAT breakdown gives no reason

This rule was retired in rule pack 2.0.0: ZATCA's SDK 3.4.8 no longer includes the assertion it mirrored, so Mutabiq no longer reports it. Reports produced by earlier rule packs may still name it; the explanations below are kept for them.

What Mutabiq reports

One entry for each way this rule can be reported.

Reported as
What kind of value was found — empty, not_15_digits and the like — never the value itself.

Out-of-scope VAT breakdown gives no 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-O-10. Its successor, BR-KSA-24, asks an out-of-scope breakdown for a reason code, at warning (KSA:2570), and BR-KSA-CL-04 accepts only VATEX-SA-OOS 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 O - out of scope - under the VAT tax scheme, and its cac:TaxCategory carries neither a cbc:TaxExemptionReason nor a cbc:TaxExemptionReasonCode. EN 16931 rule BR-O-10, which ZATCA ran, required one of them and required it to have a value. It was stricter than the equivalent rule for the exempt category: BR-E-10, removed in SDK 3.4.8 as well, tested only that one of the two elements was present and was satisfied by an element with nothing in it, while this rule tested presence and content together. The two sat next to each other in the published rule files and differ by exactly that one condition, which is what shows the difference is deliberate rather than an oversight.

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 a line. Most systems hold it against the tax code as an exemption or non-taxability reason, and it is left blank when a tax code is created by copying a taxed one. Under SDK 3.4.8 the value to write is the reason code VATEX-SA-OOS, which BR-KSA-24 asks for and BR-KSA-CL-04 checks.

Out-of-scope VAT breakdown's reason is written but empty

Reported asexemption_reason_emptythe exemption reason is present but empty

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-O-10. Its successor, BR-KSA-24, asks an out-of-scope breakdown for a reason code, at warning (KSA:2570), and BR-KSA-CL-04 accepts only VATEX-SA-OOS 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 O - out of scope - under the VAT tax scheme, its cac:TaxCategory carries a cbc:TaxExemptionReason or a cbc:TaxExemptionReasonCode, and every one of those elements is empty. EN 16931 rule BR-O-10, which ZATCA ran, is written as two conditions on each element - it must exist, and its value must not be the empty string - and this is the second one failing. That second condition is exactly what the exempt category's rule does not have: an empty cbc:TaxExemptionReason satisfied BR-E-10, also removed in SDK 3.4.8, and failed this rule, so adding an empty element to clear the exempt rule will not clear this one. The comparison is made on the raw text with no whitespace normalisation, so a reason consisting of a single space does satisfy BR-O-10.

What to check in your ERP

The element is being written and the value is not, which points at the value the mapping reads rather than at the template. Look for an exemption reason held as an empty string rather than as nothing on the tax code, for a formatting step that returns empty text when it is handed a null, and for a reason field filled on the exempt tax codes and left blank on the out-of-scope one. Do not fix this by writing a space into the field: it happens to satisfy this particular rule, and it is not a reason anyone reading the invoice can use. Under SDK 3.4.8 write the reason code VATEX-SA-OOS, which BR-KSA-24 asks for and BR-KSA-CL-04 checks.

© 2026 Hayatiq AI Solutions F.Z.E. All rights reserved.