Zero-Rated and Exempt Supplies on an Oman E-Invoice
A zero-rated or exempt line on an Oman e-invoice needs a reason code, or rule IBR-069-OM rejects it. All 28 codes and where each goes in the file.
A zero-rated or exempt line on an Oman e-invoice must carry a reason code, or rule
IBR-069-OM rejects the invoice. Zero-rated lines (category Z) take one of sixteen
VATZR-OM codes. Exempt lines (category E) take one of twelve VATEX-OM codes. The
category on its own is never enough.
This page lists the four VAT categories, all 28 codes, where the code goes in the file and what each kind of mistake triggers. It does not say whether a supply qualifies. That is a tax question, and the last section says where to take it.
Which VAT categories does an Oman e-invoice use?
Four, from the code list CL-04-OM: S, Z, E and O. A rule fails any document that
uses another value for a line, a document-level allowance or charge, or a VAT breakdown.
| Code | Meaning | Rate carried | Reason code |
|---|---|---|---|
S |
Standard rate | 5 | Must not have one |
Z |
Zero-rated | 0 | Required, from VATZR-OM-01 to -16 |
E |
Exempt | Not carried | Required, from VATEX-OM-01 to -12 |
O |
Out of scope | Not carried | Must not have one |
The rate for S is fixed at 5, because the pack tests the accounting-currency breakdown
against it (IBR-053-OM). A zero-rated category must carry rate 0 and E and O carry
no rate. These come from the Oman data dictionary's rules BR-OM-100 to BR-OM-104,
which the data dictionary article explains.
What does IBR-069-OM check?
It checks that a VAT breakdown for category E or Z has a reason code. The rule text in
the pack we run is: "A VAT breakdown (IBG-23) with VAT Category code (IBT-118) "E" and/or
"Z" must have a VAT exemption reason code (IBT-121)."
Four more rules finish the picture:
IBR-070-OMrejects a breakdown for categoryOthat has a reason code.ALIGNED-IBRP-S-10-OMrejects a breakdown for categorySthat has a reason code or reason text.CL-10-OMchecks that a reason code on aZcategory is one of the sixteenVATZR-OMvalues.CL-05-OMchecks that a reason code on anEcategory is one of the twelveVATEX-OMvalues.
The same pair applies to document-level discounts and charges. IBR-062-OM and
IBR-064-OM require a reason code on an allowance or a charge whose category is E or
Z.
Which reason codes can a zero-rated line carry?
Sixteen, in the wording the Peppol Authority for Oman publishes for CL-10-OM.
| Code | Meaning |
|---|---|
VATZR-OM-01 |
Qualifying supply of food items specified by a decision from the Chairman |
VATZR-OM-02 |
Qualifying supply of medicines and medical equipment |
VATZR-OM-03 |
Supply of investment gold, silver and platinum |
VATZR-OM-04 |
Supplies of international and intra-GCC transport of goods or passengers |
VATZR-OM-05 |
Supply of services related to international and intra-GCC transportation of goods or passengers |
VATZR-OM-06 |
Supply of qualifying air, sea and land means of transport |
VATZR-OM-07 |
Supply of rescue planes, and rescue and assistance boats |
VATZR-OM-08 |
Supply of oil, oil derivatives and natural gas |
VATZR-OM-09 |
Export of service |
VATZR-OM-10 |
Direct export of goods |
VATZR-OM-11 |
Indirect export of goods |
VATZR-OM-12 |
Re-export of goods |
VATZR-OM-13 |
Supply from a special zone to a special zone, or within a special zone |
VATZR-OM-14 |
Supply from mainland to special zone |
VATZR-OM-15 |
Customs duty suspension statuses to a special zone |
VATZR-OM-16 |
Special zone to customs duty suspension statuses |
Note the first and second entries. VATZR-OM-01 is food and VATZR-OM-02 is medicines. It
is easy to pick the wrong neighbour from a drop-down list, and the rules cannot catch it.
Which reason codes can an exempt line carry?
Twelve, for CL-05-OM.
| Code | Meaning |
|---|---|
VATEX-OM-01 |
Qualifying financial services |
VATEX-OM-02 |
Educational services and related goods and services |
VATEX-OM-03 |
Healthcare services and related goods and services |
VATEX-OM-04 |
Rental of properties for residential purposes |
VATEX-OM-05 |
Local passenger transport |
VATEX-OM-06 |
Undeveloped land (bare land) |
VATEX-OM-07 |
Resale of residential properties |
VATEX-OM-08 |
Imported goods supplied to diplomatic and consular bodies, international organisations, and the heads and members of diplomatic and consular bodies |
VATEX-OM-09 |
Imports for the Armed Forces and Internal Security Forces |
VATEX-OM-10 |
Imported supplies for non-profit charities |
VATEX-OM-11 |
Import of returned goods |
VATEX-OM-12 |
Imported goods where the supply is exempt from tax, or taxed at zero percent, at the final destination point of entry |
The code goes in as a single value. Both list checks refuse a value that contains a space, so two codes in one field, or a code followed by text, fail.
Where does the reason code go in the file?
In cbc:TaxExemptionReasonCode, in two places that both have to agree.
<cac:TaxCategory>
<cbc:ID>Z</cbc:ID>
<cbc:Percent>0</cbc:Percent>
<cbc:TaxExemptionReasonCode>VATZR-OM-09</cbc:TaxExemptionReasonCode>
<cbc:TaxExemptionReason>Export of service</cbc:TaxExemptionReason>
<cac:TaxScheme><cbc:ID>VAT</cbc:ID></cac:TaxScheme>
</cac:TaxCategory>
- On the VAT breakdown, in
cac:TaxTotal/cac:TaxSubtotal/cac:TaxCategory. This is business termBT-121, andIBR-069-OMreads it. - On each line, in
cac:Item/cac:ClassifiedTaxCategory. This is the Oman termBT-OM-90, with a text twin inBT-OM-89.
The list rules read both places, so a wrong code fails whichever one holds it. The reason text is optional, and the code is what is checked.
What do the export codes need alongside them?
Four codes describe nothing but an export, and two of them pull other fields in. These are rules in the pack:
VATZR-OM-09, export of service.IBR-012-OMrejects the invoice if the deliver-to country isOMon an export invoice, andIBR-155-OMrequires a service type from the listCL-12-OMon the line.VATZR-OM-12, re-export of goods.IBR-013-OMrequires a supporting document reference and its UUID.VATZR-OM-10and-11, direct and indirect export of goods, need no extra field, but they describe an export, so the document must be marked as one in its transaction type (BT-OM-1).
That last point is a GoRoute check and not a Schematron rule. Our API refuses a line
carrying one of the four export codes on a document that is not marked as an export, with
validation error BUS_029, because the schematron does not catch it and the document
would otherwise be filed as a domestic supply zero-rated as an export. The transaction
types are in the format article.
What happens when a 0% line has no code?
The invoice is rejected with IBR-069-OM, and no part of it is sent. The same is true of
a code from the wrong list, of two codes in one field, and of a reason code on an S or
O line.
The mistake that is not rejected is the worst one. Every code on both lists is valid, so a valid code that does not describe the supply goes through. The invoice is accepted and a misdeclared exemption is filed. No rule can protect you from that. It is why most accounting integrations treat the reason code as a field that a person chooses on the tax rate, rather than one the software infers. The Xero guide and the TallyPrime guide cover how those two systems hold it.
To see a rejection before you send anything, validate a real document: how to test an Oman e-invoice before you send it. For every other rejection, by identifier, see why Oman e-invoices get rejected.
What is not settled here
Whether a supply qualifies. The lists are the Authority's. Which of your supplies fall under which code is for your tax adviser and the Oman Tax Authority, working from the VAT Law (Royal Decree 121/2020) and the Authority's decisions. Nothing here says that a given supply is zero-rated or exempt.
The wording of the codes. The meanings above are copied from the code lists we ship. Lists change with the specification, and the version history is tracked here.
What to do with this
If you hold your tax rates in an ERP, check that every zero-rated and exempt rate has a reason code attached, and that the code is chosen by someone who knows the supply. Then validate a batch of real invoices.
GoRoute's API takes the reason code as a field on each line and validates it before anything is sent. The Oman e-invoicing page sets out the service, and the documentation has the field names. The tutorials show a full run. To walk through your own tax rates with us, book a demo.
GoRoute is accredited by the Oman Tax Authority on 29 July 2026 through Union Digital Technologies SPC, and is a certified Peppol Access Point (POP000991).
Primary sources: Oman Tax Authority — the authority that publishes the Oman e-invoicing rules and the VAT Law, Royal Decree 121/2020; Peppol technical documentation — the PINT specification this profile extends.
Frequently asked questions
- Does a zero-rated line on an Oman e-invoice need a reason code?
- Yes. Rule IBR-069-OM rejects a VAT breakdown with category Z or E that has no VAT exemption reason code. For category Z the code must be one of the sixteen VATZR-OM codes (list CL-10-OM).
- Which VAT category codes does Oman use?
- Four: S for the standard rate, which is 5%, Z for zero-rated, E for exempt and O for out of scope. Document-level allowances and charges, the VAT breakdown and each invoice line must all use one of these four (list CL-04-OM).
- What is the difference between VATZR-OM and VATEX-OM codes?
- VATZR-OM codes explain why a line is zero-rated, and there are sixteen. VATEX-OM codes explain why a line is exempt, and there are twelve. A Z line with a VATEX code, or an E line with a VATZR code, fails the list check.
- Does an out-of-scope line need a reason code?
- No, and it must not have one. Rule IBR-070-OM rejects a VAT breakdown with category O that carries a reason code. A standard-rated line must not carry one either (ALIGNED-IBRP-S-10-OM).
- Will the rules tell me if I chose the wrong code?
- No. Every code on the lists is valid, so a valid code that does not describe the supply is accepted. Choosing the right one is a tax decision, and the Oman Tax Authority is the place to ask when no code fits.
- Where does the reason code go in the XML?
- On the VAT breakdown, in cac:TaxCategory under cac:TaxSubtotal, as cbc:TaxExemptionReasonCode, and on each line, in cac:ClassifiedTaxCategory under cac:Item. Document-level allowances and charges carry their own.
Building on Peppol?
GoRoute is a certified Peppol Access Point & SMP. Book a demo or read the docs to get started.