Why Oman E-Invoices Get Rejected
Oman e-invoice rejections come from named rules, not opinions. What each identifier means, and why a rule worded should can still refuse the document outright.
An Oman e-invoice is refused because one named rule failed, and the response tells you which one. Four layers can refuse it: well-formedness, the UBL 2.1 schema, the shared Peppol PINT rule set of 170 rules, and Oman's own jurisdiction pack of 155, of which exactly two are warnings. Severity comes from the rule file, not from how the sentence reads — three Oman rules are worded "should" and are flagged fatal, so a rule that sounds like advice can still stop the document.
This page is for the moment you are holding a failed document and want the rejection to become a lookup instead of a hunt. Every count and every identifier below was read out of the packs we ship on 22 August 2026.
Why was my Oman e-invoice rejected?
Because a rule fired, and the rule has a name.
An Oman document is judged in order. First it must parse. Then it must match the UBL 2.1 schema for an Invoice or a Credit Note. Then the shared Peppol PINT rules run — 170 of them, all fatal, the same set every PINT country uses. Then Oman's own jurisdiction pack runs: 155 rules, 152 fatal, two warnings and one informational note.
A failure at the parse stage is a file problem, and no rule identifier comes back at all because nothing could be evaluated. A failure at any later stage comes back as an identifier, a severity, a message and a location. Read the identifier first. It is stable across pack revisions and across providers; the message is prose and can be rewritten.
The very first thing Oman's pack checks is that it was given the right kind of document at
all. BTOM-PRE-001 requires the root element to be a UBL 2.1 Invoice or CreditNote in the
correct namespace, and reports what it found instead. If that one fires, nothing else in
the pack means anything yet.
What does the identifier prefix tell you?
The prefix says which rule set refused the document, and therefore who owns the fix.
- Lower-case
ibr-with no country suffix — the shared PINT layer. A mandatory element is missing, or a cardinality is wrong. These are not Oman's rules and the fix is usually generic. - Anything ending
-OM— Oman's jurisdiction pack. 109 of the 155 carryIBR-…identifiers and 30 more areALIGNED-…rules that adapt a shared rule for Oman. CL-…-OM— a code-list check, 14 of them. The value is well formed but is not on the list Oman publishes for that field.ibr-tdd-…— not the invoice at all. That is the tax data document, a separate document with its own pack of 66 rules, every one fatal. Its first rule,ibr-tdd-01, requires the specification identifierurn:peppol:taxdata:om-1.
One thing surprises people who arrive from European e-invoicing: a PINT document does not run the CEN EN 16931 or Peppol BIS 3.0 rule sets. The PINT layer already carries the applicable EN 16931 rules adapted for the PINT context, so running both would enforce the same family twice. If a tool reports EN 16931 rule numbers against an Oman document, it is validating against the wrong thing. The generic Peppol and EN 16931 error families are a different subject, and they have their own page: invoice validation errors you can prevent.
Can a rule worded "should" still reject the document?
Yes, and this is the single most useful thing to know about Oman validation.
Schematron rules carry a severity flag in the rule file, and the flag is what the validator
acts on. The sentence a human reads is a description. In the Oman jurisdiction pack we
ship, counted on 22 August 2026, exactly three rules are worded "should" and flagged
fatal:
IBR-005-OM— "Currency exchange rate (BTOM-003) should contain the values till maximum of 7 decimal places when the VAT accounting currency (IBT-006) is set to OMR and the invoice currency code (IBT-005) differs from OMR." Flagged fatal.IBR-082-OM— when the invoice transaction type is a profit margin invoice or a profit margin self-invoice, the total amount due "should be provided and is mandatory" and must equal the total including VAT. Flagged fatal.IBR-174-OM— an item classification identifier "should be provided from the Harmonized System (HS) Code list published by the Royal Oman Police (Directorate General of Customs)" when the goods-or-services indicator isG. Flagged fatal.
And the converse holds in the same pack: no rule worded "should" is a warning. The two warning-flagged rules do not hedge at all — both open with the words "ACCEPTED WITH WARNING". So the wording is not a weak signal of severity; it is no signal at all.
The practical consequence is small and saves a great deal of time: when a rule fires, do not argue with the sentence. Look at the flag. If your provider's response does not tell you the severity of each finding separately from the overall verdict, that is a gap in the tooling rather than in the rules.
Which rejections are not rejections?
Two, and only two.
The Oman jurisdiction pack contains 155 assertions: 152 fatal, 2 warning, 1 informational. Both warnings are rounding tolerances, and they exist because the rial divides into 1,000 baisa:
IBR-168-OM-WARN— the VAT amount on a line does not exactly equal the line's net amount times the VAT rate, but the difference is inside ±0.001 rial for that line. The pack's own message: "ACCEPTED WITH WARNING … The invoice line is accepted; confirm the rounding is intentional."ALIGNED-IBRP-S-09-OM-WARN— the same idea one level up. A VAT category's tax amount does not exactly equal the sum of its line VAT amounts, adjusted for charges and allowances, but sits inside that tolerance multiplied by the number of lines.
The informational entry is BTOM-META-001. It is not a finding about your document at all
— it stamps [PINT-OM-META] Ruleset version 1.0.1 - Authority: Tax Authority Oman into
every result. Keep it. It is the only thing that lets you prove months later which rules a
document was judged against.
So correct handling is three-way. Fatal stops the document. A warning is accepted, logged, and read by a person once — if your system rounds to two decimal places anywhere, these two rules are how you find out before a customer does. A clean run means neither fired.
Which Oman rules fire most often during integration?
These are Oman-specific requirements a generic UBL pipeline will not satisfy by accident. Each is quoted from the rule it belongs to.
| Rule | What it requires | Where it usually goes wrong |
|---|---|---|
IBR-001-OM |
Invoice transaction type must be a 20-character string of only 1 and 0 |
A shorter string, or a human-readable label instead of the flag string |
IBR-002-OM |
The document UUID must be a valid version 5 UUID | A version 4 random UUID, which is what most libraries return by default |
IBR-003-OM |
Seller, buyer and third-party VATIN must be 12 characters: OM followed by exactly 10 digits |
A national identifier, a number with separators, or the prefix omitted |
IBR-004-OM |
An exchange rate must be present when the invoice currency is not OMR | Foreign-currency invoices issued without one |
IBR-172-OM |
An exchange rate must not be present when the invoice currency is OMR | A pipeline that always sets the rate, including 1.0 for rial invoices |
IBR-DEC-03-OM |
No amount may carry more than 3 decimal places; the exchange rate may carry 7 | Amounts formatted to two decimals then re-scaled, or a rate at full float precision |
IBR-080-OM |
An item classification with listID='HS' must be exactly 12 digits |
A 6-digit or 8-digit customs code pasted into the HS field |
CL-08-OM-HS, CL-08-OM-ISIC, CL-12-OM |
Classification values must come from Oman's published lists | The right shape of code from the wrong list |
The pattern is worth naming. Almost none of these are errors of care; they are places where Oman is more specific than the international profile, and a system built to the international profile is silently wrong until the rule tells it so. Treat a firing rule as a question about your data rather than an argument with the pack: the packs are generated from the specification.
The full description of what the file has to contain in the first place is on what format an Oman e-invoice must be in.
Why did the same invoice pass one validator and fail another?
Because they ran different rule packs, and that is a legitimate outcome rather than a bug in either one.
Severity is set per rule inside the pack, and packs are revised. IBR-174-OM is the worked
example: it is flagged fatal in the 2026-Q2 final pack GoRoute ships, and the Authority's
development resources carry the same rule at warning, in a pack that totals 151 assertions
rather than 155. A document with a goods line and no HS code passes one and is refused by
the other, and both validators are behaving correctly.
Three habits follow from this:
- Store the ruleset version with the document, from the
BTOM-META-001line. "It validated fine in June" is only an argument if you can say what it validated against. - Ask a provider which pack it runs, by version and date, not whether it is "PINT OM compliant".
- Do not soften your own data to the weakest pack you have seen. An HS code on every goods line satisfies both.
We ship the Authority's own published artefacts whole rather than patching individual rules, because chasing per-rule differences between packs is how a validator drifts away from the one that will judge the document.
What gets rejected after the invoice?
The invoice is not the last document. The tax data document is derived from it and carries the reporting view for the Authority, and it has its own rule pack: 66 rules, all fatal, no warning level. A clean invoice with a failing tax data document is a real and common state, and it is not diagnosed by looking at the invoice again.
The field-by-field walk-through is in inside the Oman tax data document, and how the whole flow fits together is in the Oman Fawtara 5-corner model explained.
How do you stop a rejection happening twice?
Rejections repeat because the fix was applied to one invoice rather than to the field that produced it. A short loop that ends that:
- [ ] Write down the identifier, not the message, the first time you see it.
- [ ] Map it to the field in your own system that feeds it.
- [ ] Add one test invoice that exercises that field, and keep it.
- [ ] Re-run every document type you actually issue — invoice, credit note, and the self-billed pair if you use them.
- [ ] Validate a rial invoice and a foreign-currency invoice, so both exchange-rate rules are exercised in the direction that catches them.
- [ ] Validate a goods line and a services line, so the classification rules fire.
- [ ] Store the ruleset version alongside every result.
Running that check before anything is sent is a separate page: how to test an Oman e-invoice before you send it.
What is not settled here
Pack versions move, and this page is a snapshot. Every count and severity above was read from the 2026-Q2 final packs as we ship them on 22 August 2026. A future release can change a severity, and the version stamp in your own results is the authority for what judged your document — not this page.
Whether IBR-174-OM should be fatal is a question for the Authority, not for us. We
ship what the Authority published. The difference against its development resources is
recorded here because it explains a real disagreement between validators, not because we
think one of them is wrong.
A rule pack is not a legal text. It is the machine-readable form of a specification. Where the two are read differently, the specification and the Authority decide, and nothing on this page is a statement about your own compliance position. Oman's own material is published by the Tax Authority.
This page has no search history yet. It is new, and we do not have Search Console data for the queries it targets. The related pages it sits with are measured; this one is not, and we will not claim otherwise until it is.
Related Oman guides
- What format must an Oman e-invoice be in? — UBL 2.1, the PINT OM profile, and what the file has to carry.
- How to test an Oman e-invoice before you send it — running the same rules yourself, before anything leaves.
- Invoice validation errors you can prevent — the generic Peppol and EN 16931 error families, which are a different rule set from these.
- Inside the Oman Tax Data Document — the reporting document and its 66 fatal rules.
- Peppol in Oman: a practical Fawtara readiness guide — registration, transport and the end-to-end flow.
What to do with this
If you are holding a failed document right now, take the identifier out of the response and
find it in the table above or in the pack itself. If it ends -OM it is an Oman rule and
the fix is in your Oman-specific mapping. If it is lower case with no suffix it is a shared
PINT rule and the fix is generic. If it begins ibr-tdd- you are looking at the wrong
document.
If you are choosing a provider, ask for a validation response on a document you supply and check that it returns rule identifiers, per-finding severity, and the ruleset version. A provider that answers with a red cross has told you something about its tooling.
The commercial ground — what Oman e-invoicing with GoRoute involves and how the integration works — is on our Oman e-invoicing page.
Frequently asked questions
- Why was my Oman e-invoice rejected?
- Because a named rule failed. An Oman document is checked for well-formedness, then against the UBL 2.1 schema, then against the shared Peppol PINT rule set of 170 rules, then against Oman's own jurisdiction pack of 155. Any fatal finding at any of those layers refuses the document, and the response names the rule that fired by its own identifier. The identifier is the answer; the message is only the description.
- What does IBR-174-OM mean on an Oman invoice?
- It means a goods line has no item classification identifier from the Harmonized System code list published by the Royal Oman Police, Directorate General of Customs. The rule's own wording says the code should be provided, and in the packs GoRoute ships it is flagged fatal, so the document is refused rather than flagged.
- Can a rule that says should still reject an Oman e-invoice?
- Yes. Severity lives in the rule file, not in the sentence. Counted on 22 August 2026 in the packs we ship, exactly three Oman rules are worded should and flagged fatal — IBR-005-OM, IBR-082-OM and IBR-174-OM — and no rule worded should is a warning. The two warning-flagged rules in the pack both open with the words ACCEPTED WITH WARNING.
- Is an Oman validation warning a rejection?
- No. Two of the 155 rules in the Oman jurisdiction pack are warnings, both rounding tolerances of one baisa, and a document that trips one is accepted with a flag. Everything else in that pack refuses the document. The tax data document pack has no warning level at all — all 66 of its rules are fatal.
- Why did the same invoice pass one validator and fail another?
- Usually because the two ran different rule packs. Severities can differ between an authority's development resources and its final release, so two validators can legitimately disagree about one document. That is why every Oman validation result carries an informational line naming the ruleset version that judged it. Store that line with the document.
- Does a rejection come from Oman's Tax Authority or from the network?
- A validation rejection happens before anything is sent, at the point the document is checked. It is not a decision by the Tax Authority. Acceptance by the Authority is a separate event that follows the tax data document, which is derived from the invoice and carries its own rule pack of 66 rules.
- What are the CL rules on an Oman invoice?
- Code-list checks. There are 14 of them inside the Oman jurisdiction pack, and they fire when a value is well formed but is not on the list Oman publishes for that field — a unit of measure, a tax category, a payment means, or an item classification. The fix is a lookup, not a schema change.
- How do I stop the same Oman rejection recurring?
- Map each rule identifier you have seen to the field in your own system that produces it, and add a case to your test set for that field. Rejections cluster around a small number of Oman-specific fields — the 20-character transaction type, the version 5 UUID, the twelve-character VATIN, the exchange rate, three-decimal amounts and the 12-digit HS code.
Building on Peppol?
GoRoute is a certified Peppol Access Point & SMP. Book a demo or read the docs to get started.