Wednesday, September 2, 2026
1 change · master
New functionality added to Odoo
This update prepares Odoo for Singapore InvoiceNow certification by adding support for Peppol advanced ordering and government e-invoicing requirements. Businesses in Singapore can exchange purchase orders, order changes, cancellations, and compliant invoices with suppliers and government agencies more easily.
Original PR description
The Singapore IMDA requires a Solution Provider to complete a certification process (InvoiceNow-Ready Solution Provider / IRSP) before its users can be onboarded to InvoiceNow. Part of that…
The Singapore IMDA requires a Solution Provider to complete a certification process (InvoiceNow-Ready Solution Provider / IRSP) before its users can be onboarded to InvoiceNow. Part of that certification exercises the Peppol Advanced Ordering flow (order → order response → order change/cancellation) in addition to plain invoicing, and it requires special handling for B2G invoicing to Singapore government agencies (AGD). This PR is the groundwork for that certification and for the eventual Peppol corner 5 (CTC/government) model — it does not implement corner 5 itself, but puts in place the SG-specific Peppol document types, order exchange, and B2G invoice rules IMDA's test scenarios exercise.
### New modules
#### l10n_sg_sale_peppol (auto-installs with l10n_sg + sale_edi_ubl)
Receives Peppol UBL BIS Advanced Order documents (order, order change, order cancellation), decrypts/imports them into sale orders, and sends back order responses. This is the "seller" side of the advanced-ordering flow required by IRSP.
#### l10n_sg_purchase_peppol (auto-installs with l10n_sg + purchase_edi_ubl_bis3)
The "buyer" side: exports purchase orders as Peppol UBL BIS Advanced Order documents (order, order change, cancellation) and processes the resulting order responses/balances from the supplier.
#### l10n_sg_b2g (depends on l10n_sg_ubl_pint + l10n_sg_sale_peppol)
Implements Singapore's AGD (statutory board) B2G e-invoicing rules — a prerequisite specifically for selling to government vendors. Adds:
- A new res.partner.invoice_edi_format option ("Singapore (AGD B2G)") with a dedicated EDI encoder/constraints.
- Reference data: statutory boards as res.partner records tagged via a new res.partner.category, a new model for sub-business units of those boards, government-mandated payment terms, and a dedicated freight-charge product rendered as a document-level charge (per AGD spec).
- Overrides on account.move.send to control file embedding/attachment requirements specific to AGD submissions.
### Changes to existing modules
#### l10n_sg
Now depends on account_peppol. Adds a post-init hook that registers SG's Peppol document types on install and triggers auto-registration when an SG company (EAS scheme 0195) first becomes a Peppol receiver; an uninstall hook deregisters them. Adds representative name/email fields to the KYC registration wizard (IMDA requires a named representative) and hides the generic Peppol role-selection UI in settings since SG's flow is fixed.
#### l10n_sg_ubl_pint
Registers SG PINT invoice/credit-note document types with account_peppol. Also extended to stamp BuyerReference (BT-10) from invoice.ref, override OrderReference with the Peppol order id + sale order name (instead of BIS3's default of using the invoice name), and add OrderLineReference/LineID per invoice line — because IMDA's advanced-order test scenario requires invoices to trace back to the originating PO and PO lines.
#### account_peppol — several supporting changes:
- Recognizes Singapore's UEN-based Peppol participant id format (SGUEN<UEN> under scheme 0195) as a valid identifier.
- Promotes SG to PEPPOL_DEFAULT_COUNTRIES, adds a kyc_pending proxy state for SG's KYC step, and adds the auto-register cron that l10n_sg triggers.
- Generalizes _peppol_import_invoice → _peppol_import_document with a document-type gate, so the polling/import flow can dispatch to order-import logic (used by l10n_sg_sale_peppol) instead of assuming every inbound document is an invoice.
#### sale_edi_ubl
When importing UBL BIS order documents, line-level charges are now linked to their corresponding order lines via linked_line_ids (previously imported as unrelated standalone lines), which the SG advanced-order flow relies on to keep charges tied to the PO line they apply to.