GCC E-Invoicing | Singapore InvoiceNow (PINT SG)
| Technical name | ecosire_einvoice_sg |
| Odoo versions | 17.0, 18.0, 19.0 (Community or Enterprise) |
| Current shipped version | 19.0 -> 19.0.1.7.4 (fleet-standard dashboard + the 14-code SGTaxCat wiring + configurable GST rate + Storecove Access Point submission and delivery tracking), 18.0 -> 18.0.1.0.4, 17.0 -> 17.0.1.0.4 |
| Price | $499 USD — one-time (requires ecosire_einvoice_core, $499) |
| Odoo module licence | OPL-1 |
| Category | Accounting / Localizations / EDI |
This is the Singapore country pack for the ECOSIRE GCC E-Invoicing | Core Engine. It implements the PINT SG / BIS Billing 3.0 profile on the Peppol 4-corner network (Singapore InvoiceNow), as mandated by IMDA and the IRAS GST InvoiceNow Requirement.
This pack requires the core engine. Install ecosire_einvoice_core first, then install this pack on top.
Compatibility: Odoo 17 / 18 / 19 (Community or Enterprise) Price: $499 (one-time) License: OPL-1 (Odoo Proprietary License v1.0) Category: Accounting / Localizations / EDI
Singapore InvoiceNow is Peppol, not a government clearance portal. There is no taxpayer-facing IRAS REST API for invoice submission. Your Odoo instance generates a PINT SG / BIS Billing 3.0 UBL 2.1 XML document and hands it to an IMDA-certified InvoiceNow-Ready Access Point (IAP). The IAP handles AS4 transport to the buyer's access point and automatically forwards a GST data copy to IRAS for businesses enrolled in the IRAS GST InvoiceNow Requirement.
Unlike the KSA ZATCA pack: no clearance gate, no per-document cryptographic stamp, no TLV QR code.
Try the module on a live database at einvoice.demo.ecosire.com (login admin / admin, switch to the ECOSIRE Demo Pte. Ltd. company) — seeded with a GST-registered Singapore supplier, InvoiceNow buyers, and posted invoices with generated PINT SG documents under Accounting → E-Invoicing (labelled "GCC E-Invoicing" before core v19.0.1.0.2) → Singapore InvoiceNow → Transmissions.
What it does
- Singapore country pack auto-discovered by the engine when your company's country is Singapore (
country_code = SG). - Full PINT SG / BIS Billing 3.0 UBL 2.1 document generation (Invoice type 380, Credit Note type 381) — since v19.0.1.1.0 the complete document (supplier/buyer party blocks with scheme-0195 endpoint IDs, 9% GST tax breakdown, legal monetary totals, line items) is rendered through Odoo's official PINT SG builder (
l10n_sg_ubl_pint, customization IDurn:peppol:pint:billing-1@sg-1) and parse-validated before it is stored on the transmission. - Singapore business-rule validators run before any transmission attempt:
- Supplier UEN (Unique Entity Number) format check — Peppol Participant ID scheme
0195. - GST Registration Number format check (
M-XXXXXXX-X) when GST is charged. - Standard GST rate validation — configurable per company since v19.0.1.2.0 (default 9%, effective 1 January 2024); a future rate change is a setting plus one click ("Apply Rate to Standard-Rated Taxes"), not an upgrade.
- GST tax category recognition — the full 14-code SGTaxCat taxonomy since v19.0.1.2.0 (
SR,SRCA-S,SRCA-C,SROVR-RS,SROVR-LVG,SRLVG,SRRC,ZR,ES33,ESN33,DS,OS,NG,NA), verified against the official IMDA SGTaxCat code list. - Document currency code required (SGD for domestic supplies).
- Supplier UEN (Unique Entity Number) format check — Peppol Participant ID scheme
- Singapore InvoiceNow Dashboard (v19.0.1.4.0) — the app's main dashboard: live KPI cards (invoiced value, transmissions, delivered, completion rate, IRAS copies pending, needs-action) with period-over-period deltas, a 6-month trend chart, status split, Top Buyers, and a Recent Activity feed. Period filter (7D/30D/90D/Year), Access-Point connection badge, auto-refresh, full dark-mode support. All numbers come from the current company's records — multi-company safe.
- Enterprise-style menu structure (v19.0.1.4.x / core v19.0.1.3.x) — E-Invoicing is its own top-level app: Dashboard → Documents → Singapore InvoiceNow (Dashboard · Transmissions) → Reporting (Singapore analytics · Audit Log) → Configuration (Access Points, Settings, CSIDs). The former "GCC E-Invoicing" naming is now region-neutral "E-Invoicing" everywhere.
- SGTaxCat wiring, end to end (v19.0.1.2.0) — the SG GST category on each tax is mirrored automatically into the UBL
<cac:TaxCategory>; unset taxes are auto-mapped from theirl10n_sgchart names ("9% SR", "0% ZR", …), and generation raises an actionable error instead of ever emitting a generic UNCL5305 code (S/Z/E) that the InvoiceNow network would reject. - Peppol Participant ID management — stores and transmits the
0195:{UEN}identifier on supplier and buyer party records. - IRAS GST InvoiceNow compliance cockpit — per-invoice transmission status, Peppol message-ID audit log, and a configurable mandatory-date alert.
- Pluggable IAP transport adapter — abstract adapter layer with Storecove as the first confirmed target (
api.storecove.com/api/v2/). - Validated XML export fallback — export signed BIS Billing 3.0 UBL XML for manual upload to any IAP portal while your live IAP API credentials are being provisioned.
Government compliance — what is (and is not) required
A question every implementer asks: does any government authority need to approve this module before it is installed in a customer database?
No approval or accreditation is required for the module itself. Under Singapore's InvoiceNow framework (verified against IRAS guidance, 2026-08-18):
- IMDA accredits the transport layer — Access Points — not ERP connectors. IMDA maintains two lanes: pre-approved off-the-shelf "InvoiceNow-Ready Solutions", and connections made through an IMDA-accredited Access Point provider — which is exactly how an ERP-integrated solution like this module participates. Installing the module in a customer database needs no government sign-off.
- IRAS accredits nobody and exposes no taxpayer submission API. The IRAS GST copy travels through the Peppol network via the Access Point.
What IS required — per customer, handled during onboarding:
- Peppol network registration — the customer is registered on the SG Peppol directory with
their
0195:{UEN}participant ID. Their chosen IMDA-accredited Access Point performs this registration as part of onboarding. - GST InvoiceNow activation (GST-registered businesses) — customers in scope of the IRAS GST InvoiceNow Requirement activate invoice-data submission to IRAS via their Access Point.
- Meeting their phased mandate date (IRAS GST InvoiceNow Requirement timeline):
| Mandatory from | Applies to |
|---|---|
| 1 Nov 2025 | Voluntary GST registration within 6 months of incorporation |
| 1 Apr 2026 | Voluntary GST registration on/after this date (any structure) |
| 1 Apr 2028 | New compulsory GST registrants; existing GST businesses with annual supplies ≤ S$200,000 |
| 1 Apr 2029 | Existing GST businesses with annual supplies ≤ S$1,000,000 |
| 1 Apr 2030 | Existing GST businesses with annual supplies ≤ S$4,000,000 |
| 1 Apr 2031 | Existing GST businesses with annual supplies > S$4,000,000 |
Set the applicable date on the company record (IRAS GST InvoiceNow Mandatory Date) and the compliance cockpit alerts against it.
Honest scope — what is pending
The module ships every confirmed building block, and anything unconfirmed raises a clear UserError rather than making a guessed API call.
Implemented and live (v19.0.1.6.0, built call-for-call from Storecove's published OpenAPI 2.0.1 document): submission via POST /document_submissions, delivery-evidence polling via GET /document_submissions/{guid}/evidence/sending, and the IRAS GST InvoiceNow consent request via POST /legal_entities/{id}/c5/iras/email/activate.
The following remain genuinely open, and each says so on the record rather than pretending otherwise:
| Item | Status | Why |
|---|---|---|
| PINT SG schematron validation | Pending | docs.peppol.eu/pint/sg/ returned 404, so the schematron artefacts could not be retrieved; rely on your Access Point's validation step |
| IRAS mandatory phase dates / thresholds | Configurable, not hardcoded | Set by IRAS and subject to change — the cockpit alert takes your applicable date rather than shipping a table that silently goes stale |
| Tickstar / Zyllem / DataPost adapters | Portal upload only | No public API documentation retrieved for these Access Points. They are catalogued with their real status, and DataPost is IMDA-accredited |
The Export Validated XML action works on every provider and allows you to submit through any Access Point portal that accepts UBL XML upload — a manager then closes the loop with Mark as Delivered against the portal receipt.
Requirements
| Requirement | Detail |
|---|---|
| Odoo | 17.0, 18.0, or 19.0 (Community or Enterprise) — full UBL body generation via the native PINT SG builder ships in 19.0.1.1.0 |
| Core engine | ecosire_einvoice_core installed and configured |
| Odoo dependencies | ecosire_einvoice_core, l10n_sg, l10n_sg_ubl_pint (the last two are standard Odoo modules, auto-installed) |
| Python packages | lxml (installed automatically by Odoo's addon installer) |
| License | None required — no activation key. The module is fully functional on installation (OPL-1 licence terms govern usage). |
| IAP account | An IMDA-certified InvoiceNow-Ready Access Point account (e.g. Storecove developer account) for live submission; not required to install or export XML |
See the core engine requirements for the engine's own prerequisites.
Installation
- Install and configure the GCC E-Invoicing | Core Engine first.
- Download this pack's ZIP from your ECOSIRE Dashboard and extract it to your addons directory:
unzip ecosire-einvoice-sg-*.zip -d /opt/odoo/addons/sudo systemctl restart odoo
- In Odoo go to Apps, click Update Apps List.
- Search for ECOSIRE E-Invoicing | Singapore InvoiceNow (PINT SG) and click Install. Odoo installs
ecosire_einvoice_coreautomatically if it is not yet present.
That is the whole installation. There is no key to paste and no step to unlock the module: it is fully functional the moment Odoo finishes installing it, and the OPL-1 licence terms govern its use.
After installation a Singapore InvoiceNow submenu appears under Accounting → E-Invoicing.
Configuration
This module has no licensing step: OPL-1 licence terms govern its use, and the module is fully functional the moment Odoo installs it. Earlier builds and some direct-channel packages shipped an optional licence client; that is no longer part of any build we ship. If you are on an older version and see a licence screen, update to the current release and it is gone.
Step 1: Company prerequisites
Before the Singapore validators will pass, complete the following on your company record (Settings → Companies → [your company]):
| Field | Where to set it | Requirement |
|---|---|---|
| Singapore UEN | Partner record of the company | Required; format: 201234567K (companies) or T08LL1234A (LLPs) |
| GST Registration Number | Partner record → Singapore GST Reg No (sg_gst_reg_no) | Required when your company charges GST; format M-XXXXXXX-X |
| Peppol Participant ID | Partner record → Peppol Participant ID | Pre-filled as 0195:{UEN} once UEN is entered |
| Currency | Invoice / company settings | SGD for domestic supplies |
| Country | Company address | Must be Singapore for the country pack to auto-activate |
For buyer partners that will receive InvoiceNow documents: fill in their UEN and GST Registration Number on their contact record. The buyer Peppol Participant ID (0195:{UEN}) is required for Peppol network routing.
Step 2: Configure GST tax categories
Navigate to Accounting → Configuration → Taxes. For each tax used on Singapore invoices, set the GST Category field. The module ships the full 14-code SGTaxCat taxonomy, verified against the official IMDA code list, and can map it automatically from your standard l10n_sg chart names ("9% SR", "0% ZR", …):
| Code | Description |
|---|---|
SR | Standard Rate — 9% GST on taxable supplies |
SRCA-S / SRCA-C | Standard Rate with customer accounting (supply / cost) |
SROVR-RS / SROVR-LVG | Overseas vendor — remote services / low-value goods |
SRLVG | Standard Rate on low-value goods |
SRRC | Reverse charge — imported B2B services |
ZR | Zero-Rated — exports of goods and international services |
ES33 / ESN33 | Exempt Supply — regulation 33 / other exempt supplies |
DS | Deemed Supplies |
OS | Out-of-Scope |
NG | Non-GST supplier |
NA | GST not charged (e.g. before registration) |
The SR 9% GST rate is confirmed effective 1 January 2024 (Singapore Budget 2022) and is a per-company setting in v19.0.1.2.0 onward — Apply Rate to Standard-Rated Taxes rolls a future rate change out in one click, so a policy change is configuration rather than an upgrade.
Generation is strict, on purpose. An invoice line with no recognised category stops generation with an error naming that line's position and label, and any document still carrying a generic category code (E, S, Z, O) is refused at Submit and Export. The InvoiceNow network rejects generic UNCL5305 codes, so a document that cannot be accepted is never stored as though it could be.
Step 3: Configure the IAP provider (for live submission)
Live submission requires a contract with an IMDA-certified InvoiceNow-Ready Access Point and the IAP's API credentials. The Export Validated XML action works without an IAP account.
- Navigate to Settings → E-Invoicing → Singapore InvoiceNow.
- Select your InvoiceNow Access Point (IAP) from the dropdown — seven are catalogued (Storecove, DataPost, Tickstar/Pagero, Zyllem, and embedded options), each carrying its real API status. Storecove is the provider whose adapter is implemented, built call-for-call from its published OpenAPI 2.0.1 document.
- Enter your IAP API Key (for Storecove: the Bearer token from your Storecove developer account).
- Enter the Storecove Legal Entity ID — the
legalEntityIdyour documents are submitted under. - Enter the IAP Base URL if your provider uses a non-default endpoint.
- Set the IRAS GST InvoiceNow Mandatory Date to the phase date that applies to your business size (check the IRAS GST InvoiceNow Requirement for your applicable phase and threshold — the module does not hardcode this date, because IRAS changes it).
- To have IRAS receive a copy of every InvoiceNow document: open the Activate GST InvoiceNow Submission setting, name the authorised signer (IRAS Activation Signer and IRAS Activation Signer E-mail) and click Request IRAS Activation E-mail. Storecove sends the consent e-mail to that signer. The settings screen then shows the time the request went out.
- Click Save and then Test Connection to verify the API key is accepted.
Step 4: Sandbox vs production
Singapore InvoiceNow does not have a separate government sandbox portal (unlike ZATCA). The Storecove IAP offers a sandbox environment at the account level — contact Storecove to enable sandbox mode for your API key. In the module:
- Set Environment to
Sandboxduring testing; switch toProductionwhen ready for live submission. - There are no Compliance or Production CSID steps — Singapore does not use PKI certificates at the taxpayer level. Peppol certificates are held by the IAP, not your Odoo instance.
Usage
Generating and exporting XML require the E-Invoicing User group. Submitting to your Access Point requires E-Invoicing Manager. A user without the required group gets a clear permission message instead of a silent state change — access rights alone do not gate the workflow buttons.
Core workflow
- Create and confirm an invoice in Odoo as usual (Accounting → Customers → Invoices → New).
- Click Validate for InvoiceNow (or the equivalent button added by the pack on the invoice form). The module runs the Singapore validators (SG-01 through SG-04) and surfaces any errors before generating XML.
- If all validators pass, the module generates the PINT SG / BIS Billing 3.0 UBL 2.1 XML for the invoice.
- Choose your transmission path:
- Submit via IAP — sends the XML to your configured IAP (e.g. Storecove), which routes it to the buyer's access point and forwards the GST copy to IRAS. Requires an active IAP API key.
- Export Validated XML — downloads the generated UBL XML for manual upload to your IAP's web portal. Use this path while your IAP API credentials are being provisioned, or as a fallback.
- The IRAS GST InvoiceNow Compliance Cockpit (accessible from the invoice or from Accounting → E-Invoicing → Singapore InvoiceNow → Transmissions) records the transmission attempt, Peppol message GUID returned by the IAP, and delivery status.
Credit notes
Create a credit note through the standard Odoo credit note flow (Invoice → Add Credit Note). The country pack automatically maps credit notes to document type 381 in the UBL output. The Peppol profile and validation rules apply identically.
Compliance cockpit
Navigate to Accounting → E-Invoicing → Singapore InvoiceNow → Transmissions to see:
- All transmission attempts with status (
draft,submitted,delivered,error). - The Peppol message GUID assigned by the IAP for each submission.
- The IAP provider used and the timestamp of each attempt.
- Chatter notes and activity tracking for compliance follow-up.
Troubleshooting / FAQ
| Symptom | Likely cause | Fix |
|---|---|---|
| A licence screen appears anywhere | Only possible on an older build or a direct-channel package that carried the optional licence client | Update to the current release. No build we ship has a licensing step, so there is nothing to enter. If it persists, contact support@ecosire.com. |
| Supplier UEN missing or invalid (SG-01) | Company partner has no sg_uen or the UEN format is wrong | Set the UEN on the company's partner record. Companies: 9 digits + letter (e.g. 201234567K). LLPs/partnerships: prefix-year-type-digits-letter format. |
| Supplier GST Registration Number missing or not in M-XXXXXXX-X format (SG-02) | GST reg no field is blank or incorrectly formatted | Enter the 9-character GST reg number (e.g. M-12345678-A) on the company partner record under Singapore GST Reg No. This check only triggers when the invoice has a non-zero tax amount. |
| Document currency is not set (SG-03) | Invoice currency is blank | Ensure the invoice currency is set. SGD is required for domestic supplies. |
| GST category warning (SG-04) | A tax line has no recognised GST category code | Set the GST Category field (SR/ZR/ES/OS) on the Odoo tax record via Accounting → Configuration → Taxes. |
| No IAP configured error on Submit | No IAP provider selected in company settings | Navigate to Settings → E-Invoicing → Singapore InvoiceNow and select an IAP provider. |
| IAP has no confirmed public API error | A non-Storecove provider is selected (Tickstar, Zyllem, etc.) | Only Storecove has a confirmed public API in the current module version. Use Export Validated XML and upload manually to your IAP portal, or switch to Storecove. |
| Live IAP submission not yet implemented (Storecove) | Storecove adapter is pending sandbox credentials | Use Export Validated XML to download the UBL XML and upload it via the Storecove portal, or contact support@ecosire.com for the latest adapter status. |
| PINT SG schematron validation is not available | The schematron spec URL was unreachable when this module was built | The module's BIS Billing 3.0 UBL generation follows confirmed Peppol standards. Rely on your IAP's validation step for schematron conformance until PINT SG spec is accessible. |
| Singapore InvoiceNow does not define a QR-code requirement | A QR code action was triggered | Singapore InvoiceNow uses no TLV QR code. This is by design — do not import ZATCA/KSA QR patterns. |
| XML export downloads but IAP portal rejects it | UBL XML field mapping mismatch with your IAP's profile | Share the IAP rejection message with support@ecosire.com so we can adjust the UBL field mapping for your IAP. |
Common questions
Do I need a CSID or PKI certificate? No. Singapore InvoiceNow does not require taxpayers to hold Peppol certificates. The IAP manages the AS4 transport certificates on your behalf. There is no onboarding wizard equivalent to the KSA CSID flow.
Does the module support both B2B and B2G invoices? Yes. B2B (business-to-business) and B2G (invoices to Singapore Government agencies on the InvoiceNow network) both use the PINT SG / BIS Billing 3.0 profile. B2C invoices are out of scope for InvoiceNow — standard Singapore tax invoice rules apply and these are not transmitted via Peppol.
Do I need to register my Peppol Participant ID separately?
Your Peppol Participant ID (0195:{UEN}) is registered in the Singapore SML (Service Metadata Locator) by your IAP on your behalf when you onboard with them. The module stores and transmits the identifier; the registration process itself is handled by the IAP.
What is the IRAS GST InvoiceNow Requirement and when does it apply to me? IRAS is phasing in a mandatory requirement for GST-registered businesses to transmit invoice data to IRAS via the InvoiceNow network. The IAP forwards this data automatically — you do not call IRAS directly. The mandatory phase dates and revenue thresholds are set by IRAS and are subject to update; configure the IRAS Mandatory Date alert in the module settings once your applicable date is confirmed on the IRAS website.
Support
- Documentation: docs.ecosire.com
- Email: support@ecosire.com
- Support portal: ecosire.com/support
- Common issues: Troubleshooting Guide
For IAP-specific integration questions (Storecove account setup, Singapore-specific onboarding steps, adapter body schema once available), include your IAP provider name and the exact error message in your support request.