The 12-Digit HS Code on an Oman E-Invoice
Goods lines on an Oman e-invoice need a 12-digit HS code from the official list. Services carry none. What IBR-080-OM and IBR-174-OM check, and the item master.
On an Oman e-invoice, every line for goods carries an HS code of exactly 12
digits taken from the official Oman list. Lines for services carry none. Two rules
enforce this: IBR-080-OM rejects an HS code that is not twelve digits, and IBR-174-OM
rejects a goods line that has no HS code at all.
The rest of this page covers what each rule checks, how a line is marked as goods or services, the other classification code that sits on the same line, and how to keep the code in an item master so it arrives in the file.
What does IBR-080-OM check?
That an HS code is exactly 12 digits. The rule text in the pack we run is: "When Item classification identifier (IBT-158) is provided with @listID='HS', it must be exactly 12 digits (Oman HS code). 6-digit ISIC codes are validated separately under CL-08-OM-ISIC and 8-digit service-type codes under CL-12-OM."
Two points follow from that text. The rule fires only when a classification code is marked
as HS, so it does not touch the other codes. And it names the other two code lengths on a
line, six and eight digits, which are a different thing and are covered below.
The international Harmonized System is built on six digits. Oman's list runs to twelve, so a six or eight digit code from an existing item record has to be extended before it will pass.
Is a twelve-digit number enough?
No. A second rule, CL-08-OM-HS, checks the value against the list: "Value of
'cbc:ItemClassificationCode[@listID="HS"]' is not a valid 12-digit Oman HS code." A number
of the right length that is not on the list is rejected.
The list in the validation pack we ship holds 14,313 codes. Rule IBR-174-OM names the
source of the list as the Harmonized System code list published by the Royal Oman Police
(Directorate General of Customs). We do not link the Customs tariff here, because we have
not confirmed its web address as of this writing. Take the code from your customs
broker or from the Customs publication, and never construct one by padding.
Which lines need an HS code?
Goods lines. IBR-174-OM requires the code on an item marked as goods, and the message
reads: the code "should be provided from the Harmonized System (HS) Code list published by
the Royal Oman Police (Directorate General of Customs) when Goods or Services
identification (BTOM-019) is 'G' (Goods)." Despite the word "should", the pack flags it
fatal, so a goods line without a code is refused.
How does a line become goods? Through business term BT-OM-19, the item type, which
carries G or S. It sits in the file as the DocumentTypeCode of the
cac:ItemSpecificationDocumentReference on the line. The code list CL-07-OM allows only
those two letters.
A line marked S has no HS code. It carries a service type instead, an 8-digit code from
CL-12-OM, in the ID of the same element. The service type matters most on an export of
services, where IBR-155-OM requires it. The zero-rating side of that case is on
the reason codes page.
GoRoute's renderer treats a line that has an HS code and no stated item type as goods, and a
line with neither as a service. It also carries an HS code only if it is on the list, since an
invalid code is worse than none. The first is a convenience. The second means a wrong code
shows up as an IBR-174-OM rejection and not as a list failure.
Where does the HS code go in the file?
<cac:Item>
<cbc:Name>Copper cable 2.5mm</cbc:Name>
<cac:ItemSpecificationDocumentReference>
<cbc:DocumentTypeCode>G</cbc:DocumentTypeCode>
</cac:ItemSpecificationDocumentReference>
<cac:CommodityClassification>
<cbc:ItemClassificationCode listID="HS">XXXXXXXXXXXX</cbc:ItemClassificationCode>
</cac:CommodityClassification>
</cac:Item>
The twelve X's stand for a code from the list. The G is what makes the HS code mandatory.
The example is trimmed to the elements this page is about; a full line carries more.
What is the code with six digits on the same line?
The industrial classification code, a six-digit ISIC code, and it is a separate
requirement. IBR-081-OM says it must be provided for each item "except when Invoice
transaction type (BTOM-001) is a simplified tax invoice (01000000000000000000) and/or
import of goods (00000000000010000000) or import of service RCM (00000000100000000000) or
profit margin self-invoice (00000000001000000000)." It describes the seller's activity
connected with the supply, not the product, and it goes in
cac:AdditionalItemIdentification with schemeName="CC". The list check for it is
CL-08-OM-ISIC.
The two are easy to confuse. Both are classification codes, both are on every goods line, and one is twelve digits while the other is six. A line can pass one and fail the other.
One more rule belongs here. On an import of goods, IBR-084-OM makes the country of
origin mandatory. Imports are one of the transaction types covered in
the format article.
What does the data dictionary say?
Something slightly different. Its rule BR-OM-80 says "the minimum number of digits to be
provided should be '12'". The pack says exactly twelve. The pack is what validates the
file, so build to exactly twelve. The data dictionary
article explains why the two can differ and which
to follow.
How should the code be kept in an item master?
One code per item, stored once, and sent on every line that uses the item. In practice:
- Store it as text. Many codes begin with zero. The list begins
000000000000,010121100001,010121100002. A numeric column drops the leading zero and leaves eleven digits, whichIBR-080-OMthen refuses. This is the commonest cause. - Store the item type next to it. Goods or service, so the line is marked correctly and the HS code is required only where it should be.
- Store the ISIC code too, or a default for the seller, so
IBR-081-OMis met. - Hold the HS code on the item, not on the line. Free-typed codes on invoice lines are where wrong digits arrive.
- Check the existing items first. Run the list of active goods and pick out those with no code, a short code or a number that has lost its zero. That is the work list.
Spreadsheet users meet the same trap in the file itself: sending Oman e-invoices from Excel covers getting the columns right.
What is not settled here
Classification advice. Which HS code describes your product is a customs question. This page says how many digits the code has and where it goes, and not which code to use.
The list changes. The list we ship is the one in the 2026-Q2 final packs. The version history is tracked here.
What to do with this
If you sell goods, export your active items with their classification codes and check them
against three tests: exactly twelve characters, stored as text, and on the official list.
Then validate a few real invoices before sending anything:
how to test an Oman e-invoice before you send it.
When a rejection arrives, why Oman e-invoices get rejected
covers IBR-174-OM in the context of the others.
GoRoute accepts the HS code and item type on each line, validates the code against the list and returns the rule identifier when it fails. The Oman e-invoicing page sets out the service, the documentation has the field names, and the tutorials show a run. To go through your item master 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; Peppol technical documentation — the PINT specification this profile extends.
Frequently asked questions
- How many digits must an HS code have on an Oman e-invoice?
- Exactly twelve. Rule IBR-080-OM rejects an item classification code marked as HS that is not exactly 12 digits. The usual six or eight digit international code is not enough, because Oman's list extends it to twelve.
- Which lines need an HS code?
- Goods lines. Rule IBR-174-OM requires an HS code on an item that is marked as goods. A line marked as a service carries no HS code, and a service line carries a service type from a separate list instead.
- Does the HS code have to be on an official list?
- Yes. Rule CL-08-OM-HS checks the value against the Oman 12-digit list, so a twelve-digit number that is not on it is rejected. The list our validation uses holds 14,313 codes.
- What is the difference between the HS code and the industrial classification code?
- They are two different codes on the same line. The HS code classifies the goods and has 12 digits. The industrial classification code is a six-digit ISIC code for the seller's activity, and rule IBR-081-OM requires it on every line except for a few transaction types.
- Where does the HS code go in the XML?
- In cac:CommodityClassification under cac:Item, as cbc:ItemClassificationCode with the attribute listID set to HS.
- Why does my HS code lose its first digit?
- Because it was stored as a number. Many Oman codes start with a zero, such as 010121100001, and a spreadsheet or database that treats the value as a number drops it. Store the code as text.
Building on Peppol?
GoRoute is a certified Peppol Access Point & SMP. Book a demo or read the docs to get started.