Engineering · · 3 min read

PINT Oman CustomizationID Reference: Invoices, Credit Notes, TDD

PINT Oman CustomizationID reference: every billing, self-billing, credit note and Tax Data Document identifier with profiles and Schematron file mappings.

What this page is

A no-narrative reference for engineers building PINT Oman issuance and validation. Bookmark it, paste it into your design docs, link it from your validator config.

For the higher-level context, read the Oman Fawtara readiness guide and the TDD deep-dive. For the global picture, the e-invoicing mandates 2026 tracker is the index.

The five document types

# Document CustomizationID Direction
1 Billing — Invoice urn:peppol:pint:billing-1@om-1 Supplier → Buyer
2 Billing — Credit note urn:peppol:pint:billing-1@om-1 Supplier → Buyer
3 Self-billing — Invoice urn:peppol:pint:selfbilling-1@om-1 Buyer → Supplier (self-billed)
4 Self-billing — Credit note urn:peppol:pint:selfbilling-1@om-1 Buyer → Supplier (self-billed)
5 Tax Data Document (TDD) urn:peppol:taxdata:om-1 Supplier (or self-biller) → OTA

Notes:

  • Invoices and credit notes share the same CustomizationID; they are distinguished by cbc:DocumentTypeCode (380 invoice, 381 credit note) and the UBL root element (Invoice vs CreditNote).
  • The TDD is a separate document with its own root and namespace (pxs:), not a UBL invoice.

Schematron files

GoRoute compiles the official PINT OM artefacts into nine compiled XSLTs at Docker build time. The mapping:

Pack Sub-pack Compiled XSLT
billing invoice (preprocessed) PINT-jurisdiction-aligned-rules-OM-Invoice.xslt
billing invoice (preprocessed PINT) PINT-UBL-validation-preprocessed-OM-Invoice.xslt
billing creditnote (preprocessed) PINT-jurisdiction-aligned-rules-OM-CreditNote.xslt
billing creditnote (preprocessed PINT) PINT-UBL-validation-preprocessed-OM-CreditNote.xslt
selfbilling invoice (preprocessed) PINT-jurisdiction-aligned-rules-OM-SelfBilling-Invoice.xslt
selfbilling invoice (preprocessed PINT) PINT-UBL-validation-preprocessed-OM-SelfBilling-Invoice.xslt
selfbilling creditnote (preprocessed) PINT-jurisdiction-aligned-rules-OM-SelfBilling-CreditNote.xslt
selfbilling creditnote (preprocessed PINT) PINT-UBL-validation-preprocessed-OM-SelfBilling-CreditNote.xslt
tdd tdd TDD-OM-peppol-om-tdd.xslt

Each Schematron is run with Saxon-HE 12.4 in-process at validation time. A Schematron-level error blocks; a warning is logged for audit.

How the validator picks the pack

The selection rule is purely on CustomizationID:

if customization_id.startswith("urn:peppol:pint:billing-1@om-1"):
    pack = "billing"
elif customization_id.startswith("urn:peppol:pint:selfbilling-1@om-1"):
    pack = "selfbilling"
elif customization_id == "urn:peppol:taxdata:om-1":
    pack = "tdd"
else:
    raise ValidationError(f"Unsupported CustomizationID: {customization_id}")

The PINT OM packs skip the baseline CEN EN 16931 + Peppol BIS 3.0 Schematrons by design — the rule families are restated inside the PINT Schematron itself.

Identifier scheme conventions

Field Typical value (Oman)
Sender / receiver endpoint scheme 9959 (Oman Tax Authority taxpayer identifier)
Document currency code OMR (with TaxCurrencyCode matching unless cross-currency)
Country code OM
Tax scheme VAT (5% standard rate, 0% zero-rated, exempt as applicable)

Worked example — invoice header

<Invoice xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2"
         xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2"
         xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2">
  <cbc:CustomizationID>urn:peppol:pint:billing-1@om-1</cbc:CustomizationID>
  <cbc:ProfileID>urn:peppol:bis:billing</cbc:ProfileID>
  <cbc:ID>INV-2026-000123</cbc:ID>
  <cbc:IssueDate>2026-05-09</cbc:IssueDate>
  <cbc:DocumentCurrencyCode>OMR</cbc:DocumentCurrencyCode>
  <cbc:TaxCurrencyCode>OMR</cbc:TaxCurrencyCode>
  <!-- … -->
</Invoice>

Cross-references

What we ship at GoRoute

GoRoute compiles the nine PINT OM Schematrons into the Saxon-HE 12.4 binary at Docker build time and runs them in-process at validation. PINT OM is in production today; the regression suite includes 66 official-artefact tests on every release.

Book a demo to see PINT OM validation against your sample invoices.


Sources: OpenPeppol PINT framework and PINT Oman artefacts (official); Oman Tax Authority Fawtara documentation; Peppol BIS Billing 3.0 for ProfileID semantics.

Frequently asked questions

How many PINT Oman document types are there?
Five — billing invoice, billing credit note, self-billing invoice, self-billing credit note, and the Tax Data Document (TDD). Each has its own CustomizationID and Schematron.
What is the difference between billing and self-billing in PINT OM?
Billing is the standard supplier-issues-to-buyer flow. Self-billing is the reverse — the buyer issues the invoice on behalf of the supplier under a self-billing agreement, common for commissioned sales and certain regulated industries.
Where do these CustomizationIDs come from?
They are published by OpenPeppol as part of the PINT Oman specialisation, anchored on the EN 16931 semantic standard. GoRoute mirrors and compiles the official artefacts at Docker build time.
Do PINT OM documents skip BIS Schematrons?
Yes. PINT documents run only their PINT Schematrons, by design, to avoid double-enforcement of the same rule family. Baseline EN 16931 + BIS 3.0 are inherited semantically but enforced through PINT Schematrons.
What ProfileID applies?
The ProfileID corresponds to the BIS process profile and is not country-specific in PINT. The CustomizationID is where the country specialisation lives.

Related posts

Building on Peppol?

GoRoute is a certified Peppol Access Point & SMP. Book a demo or read the docs to get started.

Book a demo Read the docs