Back to guides
Reviewed: 2026-07-14PINT-OM specification

PINT-OM for developers

PINT-OM for developers: Oman's Peppol e-invoice model, the billing and self-billing packages, layered validation artefacts, and the separate Tax Data Document.

The short answer

PINT-OM is Oman's localization of the Peppol International (PINT) invoice model — the technical format Fawtara e-invoices follow. Its public v1.0.0 package covers billing invoices, self-billing, and a separate Tax Data Document (TDD) for tax reporting. Oman's Peppol participant scheme is 0248 (OM:VAT). Build against the official OpenPeppol/OTA artefacts; QR/TLV rules and the final field list are not yet published.

Omani business professionals reviewing invoice preparation together

Guide overview

PINT-OM for developers

1 min

PINT-OM is the Oman localization of the Peppol International model for e-invoicing. For developers, it is the technical shape of Fawtara: the document models, identifiers, syntax bindings, validation artefacts, and tax-reporting document that software must handle.

This guide is written for developers and integrators. It explains the package boundaries and the implementation questions to answer before writing code.

What PINT-OM is

PINT-OM uses the Peppol PINT methodology for Oman-specific invoice and credit-note transactions. It is a national customization, not a generic PDF format and not a free-form API payload.

The current OpenPeppol documentation says the Oman specifications define electronic invoicing and tax-reporting structures, validation rules, and exchange processes. The PINT OM Billing page defines standard electronic invoices issued in Oman, while the TDD pages define a separate tax data document process.

For software teams, that means the implementation has at least four layers:

  • source-system invoice data;
  • PINT-OM invoice or credit-note XML;
  • validation against syntax, code lists, and rules;
  • Tax Data Document generation/reporting where required.

Document package map

Use this working map when planning architecture.

FlowDocumentDeveloper concern
BillingInvoiceMap source invoice data into the PINT OM invoice model and validate it.
BillingCredit noteKeep correction references and amounts consistent with the original invoice.
Self-billingSelf-billing invoiceSupport buyer-issued invoice scenarios separately from normal supplier-issued invoices.
Self-billingSelf-billing credit noteSupport corrections in self-billing flows.
Tax reportingTax Data DocumentGenerate and validate the tax-reporting document separately from the buyer-facing invoice exchange.

The Tax Data Document is not exchanged between the invoice issuer and receiver. The OpenPeppol Oman landing page describes it as a regulatory report submitted to the tax authority for tax reporting and compliance purposes.

Validation is not one check

PINT-OM validation is layered. A developer should not build a single "valid XML" check and call the invoice compliant.

At minimum, plan for:

  • XML well-formedness;
  • schema and syntax binding conformance;
  • required and conditional business terms;
  • allowed code values from normative code lists;
  • calculation and rounding rules;
  • Oman-specific business rules;
  • Schematron validation artefacts;
  • TDD validation where tax reporting is in scope.

The TDD release notes say implementers should understand the semantic model and syntax binding, comply with normative code lists, and validate against published artefacts including XSD and Schematron rules. That same discipline should shape the invoice-side implementation.

Keep the source data model separate

Do not hard-code Fawtara directly into screen forms or PDF templates. Keep a source invoice model inside the application and map it into PINT-OM at the boundary.

A useful internal model should preserve:

  • seller and buyer identities;
  • VATIN and electronic-address identifiers;
  • invoice header fields;
  • document type;
  • invoice line items;
  • tax categories and VAT rates;
  • taxable amounts, VAT amounts, totals, discounts, and charges;
  • credit/debit note references;
  • export, import, self-billing, and B2C flags where relevant;
  • archive metadata and validation status.

The mapping layer should be testable and deterministic. If two developers run the same source invoice through the mapper, they should get the same PINT-OM output.

TDD is a separate implementation concern

The Tax Data Document has its own process page, semantic model, syntax binding, code lists, rules, and Schematrons. Treat it as its own module.

Practical implications:

  • Do not embed tax-reporting logic only inside the buyer-facing invoice transmitter.
  • Keep TDD generation testable from a stored source invoice.
  • Preserve links between source invoice, PINT-OM invoice XML, TDD instance, validation result, and archive record.
  • Track submit, update, withdraw, and failure/status scenarios if they apply to the final process.
  • Do not assume every TDD is identical to the invoice XML; the TDD has metadata, extracts, and source-document handling rules.

This separation is important for debugging. A buyer-facing invoice can fail for one reason, while a tax-reporting document can fail for another.

Implementation checklist

Use this before writing production code.

AreaChecklist
Source dataConfirm where every required invoice value comes from.
IdentifiersDecide how VATIN, electronic-address, document, branch, and customer identifiers are stored.
MappingBuild a deterministic mapper from source invoice data to PINT-OM XML.
Code listsCentralize allowed codes and update them from the official artefacts.
CalculationsUnit-test totals, VAT amounts, allowances, charges, rounding, and negative/correction cases.
ValidationRun schema, code-list, business-rule, and Schematron checks before submission.
TDDTreat TDD generation and validation as a separate module.
ErrorsTranslate validation failures into finance-friendly messages without hiding the raw error.
ArchiveStore source data, generated XML, TDD records, validation status, timestamps, and correction links.
Change controlVersion the mapper and keep test fixtures for every spec update.

Test fixtures to create early

Do not wait for provider testing to create fixtures. Build a local fixture set from your real business cases.

Recommended fixtures:

  • simple B2B invoice;
  • simple B2C invoice;
  • invoice with discount;
  • invoice with multiple VAT rates;
  • credit note linked to an original invoice;
  • debit note or correction case;
  • export invoice;
  • import or self-billing case if relevant;
  • Arabic customer and item text;
  • edge-case rounding amounts;
  • intentionally invalid invoice for each validation layer.

Each fixture should include expected source data, expected XML output, expected validation result, and the reason it exists.

Current watch points

Details still pending final OTA/OpenPeppol publication:

  • final PINT-OM status and release location;
  • final data dictionary and mandatory field list;
  • exact validation artefact versions;
  • whether document-level monetary precision changes from two to three decimal places;
  • final QR/TLV rules from Peppol Oman Architecture v1.0.2 Appendix D;
  • final legislation and penalty provisions.

The current OpenPeppol Oman landing page notes that document-level monetary amounts are currently limited to two decimal places and that an update to support three decimal places is planned. Do not hard-code precision assumptions without versioning.

What is not safe to claim yet

Do not publish or rely on the following without current primary evidence:

  • exact final field names for every business term;
  • exact validation-rule counts;
  • exact QR/TLV tag order or limits;
  • final penalty amounts;
  • that a provider or software product fully supports PINT-OM;
  • that the current review-stage documentation is the final enacted spec.

The safe claim is that developers should build around the official OpenPeppol/OTA artefacts, separate invoice XML from the TDD, centralize validation, and version every mapping decision.

Next step

Start with a source-data inventory. Pick 10 real invoices and mark where each field lives in your system. Then build a mapper test around one simple B2B invoice and one correction case. Add TDD generation only after the invoice mapping and validation path is visible.

Continue your readiness plan

Move between reviewed guidance, official video material, and the planning checker.

Ask Fawtara Assistant

Continue with a cited answer from the approved Fawtara source corpus.

Ask Fawtara Assistant

Get Fawtara updates

Get reminders and updates when official timing or guidance changes.

Sources

This page is informational and not tax advice. Confirm taxpayer-specific obligations through official channels.