Skip to main content
Malaysia MyInvois LHDN E-Invoicing — Build-to-order Odoo module that submits and validates e-invoices to Malaysia's MyInvois  — 1/1Illustrative preview

Build-to-order Odoo module that submits and validates e-invoices to Malaysia's MyInvois (LHDN) portal with UBL 2.1, batch mode and QR.

What is Malaysia MyInvois LHDN E-Invoicing?

Build-to-order Odoo module that submits and validates e-invoices to Malaysia's MyInvois (LHDN) portal with UBL 2.1, batch mode and QR. Built to order by ECOSIRE for Odoo 17, 18, 19 — indicative price from $999.00 USD; request a quote for a scoped proposal.

Key Features

MyInvois API integration with LHDN — direct submission, status polling and clearance retrieval against the official MyInvois endpoints (sandbox and production)
UBL 2.1 Malaysia e-invoice document generation matching LHDN's mandatory schema, tax categories and code lists
Batch submission via a scheduled ir.cron action — clear a full day or month of confirmed invoices in one automated run with per-record error isolation
Individual on-demand submission directly from the invoice form for ad-hoc, urgent and corrective documents
TIN validation and buyer/supplier mapping — verify tax numbers and map res.partner records to LHDN party details before submission to prevent rejections
Validated QR code and long ID embedding onto the customer-facing QWeb invoice PDF so printed documents are compliant on issue
New MyInvois fields on account.move (submission UID, long ID, validation status, e-invoice type, MSIC/classification codes) with @api.depends computed status
Credit note and debit note handling with correct reference to the original validated e-invoice, per LHDN cancellation and adjustment rules
Self-billed and consolidated e-invoice support for scenarios the mandate requires (e.g. foreign suppliers, aggregated B2C)
Full submission audit trail — every request, response, rejection reason and cancellation logged to the chatter and a dedicated submission log model
Automated retry and error surfacing — failed or rejected invoices are flagged with the LHDN reason so accounting can fix and resubmit
Role-scoped security via ir.model.access.csv and record rules so MyInvois credentials and logs are restricted to authorized accounting users
Configurable company profile (TIN, MSIC, SST/registration numbers, certificate credentials) stored securely in company settings
XML-RPC / JSON-RPC accessible so external systems can trigger submission and read validation status headlessly
Compatible with Odoo 17, 18 and 19 on both Community and Enterprise editions

Built to order, done for you

No DIY setup — a working app, built, installed and supported by ECOSIRE.

  1. 1

    You order

    Start with a one-time build price. We scope it with you at kickoff.

  2. 2

    We build & install

    ECOSIRE builds, configures and installs it on your Odoo.

  3. 3

    Go live + support

    You go live in about one working week, with two weeks of go-live support. Defects in the code we deliver are fixed free of charge.

Technical Specifications

Odoo Compatibility
Odoo 17, Odoo 18, Odoo 19
Editions
Enterprise & Community
License
Licence confirmation required
Python Requirement
Python 3.10+
Database
PostgreSQL 12+

About this Product

Malaysia's phased LHDN e-invoicing mandate requires every taxable sale to be cleared through the MyInvois portal before it counts as a valid tax document — and the deadlines keep pulling in more businesses each phase. This is a build-to-order Odoo module that ECOSIRE designs, builds, installs and supports specifically for your database. It is not an instant apps.odoo.com download; we tailor it to your chart of accounts, tax setup, document flow and MyInvois credentials, then hand you a production-ready, tested integration in one working week.

Under the hood the module extends Odoo's native accounting rather than replacing it. We add MyInvois-specific fields to account.move (models.Model) — TIN, MSIC code, classification, e-invoice type, submission UID, long ID and validation status — using computed fields with @api.depends so status, QR payloads and clearance state stay in sync automatically. On confirmation (or via a scheduled ir.cron for batch runs) the module serializes each invoice into the LHDN UBL 2.1 Malaysia e-invoice format, signs and transmits it over the MyInvois API, then polls for the validation result. Once LHDN returns a valid clearance, the module embeds the validated QR code and long ID onto the customer-facing QWeb invoice PDF so your document is legally compliant the moment it prints.

Access is governed properly: ir.model.access.csv grants and record rules keep MyInvois credentials and submission logs scoped to the right accounting roles, and every submission, rejection and cancellation is logged in the chatter and an auditable submission table. Batch submission lets you clear a full day or month of invoices in one automated run with per-record error handling, while individual submission covers ad-hoc and corrective documents. TIN validation and buyer/supplier mapping catch bad tax numbers before they ever reach LHDN, cutting rejection loops. Because it is a real Odoo module, everything is reachable from your existing screens and via XML-RPC/JSON-RPC for headless or third-party flows.

The module targets Odoo 17, 18 and 19 and works on both Community and Enterprise. ECOSIRE handles the manifest, models, security, views (XML/OWL), QWeb report changes, automated actions and the LHDN sandbox-to-production cutover, and supports you through your first live submission window and beyond.

What you get

  • Complete, installable Odoo module (source code with __manifest__.py, models, views, security and QWeb templates) built for your Odoo 17, 18 or 19 database
  • MyInvois configuration completed in your environment — company TIN/MSIC profile, API credentials, and sandbox-to-production cutover
  • Mapping of your existing tax codes, product classifications and res.partner records to LHDN code lists and party requirements
  • Customized QWeb invoice report with the validated QR code and long ID embedded for compliant customer documents
  • End-to-end validation in the LHDN sandbox plus a supervised first live submission run against production
  • Written documentation — admin/config guide, day-to-day submission SOP and troubleshooting reference for rejection codes
  • A live training session for your accounting/finance team on batch runs, individual submission and handling rejections
  • A defined post-go-live support window covering bug fixes, LHDN schema/mandate updates and questions during your first mandate phase

Who this is for

Malaysian SME finance manager

Runs accounting for a Malaysian business newly caught by a phased LHDN deadline. Needs Odoo invoices cleared through MyInvois correctly and on time, without turning every invoice into a manual portal upload.

Odoo implementation partner in Malaysia

Delivers Odoo to Malaysian clients and needs a reliable, supported MyInvois integration to bundle into projects — rather than building and maintaining the LHDN UBL 2.1 pipeline from scratch for every engagement.

Group financial controller with multi-entity operations

Oversees several Malaysian legal entities on Odoo and needs consistent, auditable e-invoice clearance, batch processing at month-end close, and a clean audit trail of every MyInvois submission and rejection.

How Malaysia MyInvois LHDN E-Invoicing Compares

CriterionECOSIRECustom BuildCompetitorOdoo Native
MyInvois clearance built for your databaseTailored to your chart of accounts, taxes and document flowPossible but you scope and build it yourselfGeneric — assumes a standard configurationNot available in Odoo core
UBL 2.1 Malaysia format + LHDN code listsImplemented and mapped to your dataYou must build and maintain the schema yourselfUsually included but rigidNo
Batch submission via scheduled ir.cronYes, with per-record error isolationOnly if you build the scheduler and error handlingSometimes, varies by vendorNo
Validated QR + long ID on QWeb invoice PDFEmbedded automatically after clearanceYou build the QWeb changes and QR logicOften yesNo
TIN validation + buyer/supplier mappingPre-submission checks tuned to your partnersYou implement the validation rulesBasic, generic checksNo
LHDN schema/mandate updates handledCovered during your support windowOngoing burden on your teamDepends on vendor's release cadenceNot applicable
Installation, training and go-live supportConfig, docs, team training, supervised first live runSelf-managedUsually docs onlyNone
XML-RPC / JSON-RPC accessYes — headless submission and statusIf you expose it yourselfVariesOdoo exposes RPC but has no MyInvois logic to call

Frequently Asked Questions about Malaysia MyInvois LHDN E-Invoicing

How long until the module is delivered and live?

This is a build-to-order module, not an instant download. Typical delivery is one working week from kickoff, depending on the complexity of your tax setup and document flows. The timeline covers building the module, mapping your data to LHDN code lists, full validation in the MyInvois sandbox, and a supervised first live submission against production.

What support and updates are included after go-live?

You get a defined post-go-live support window covering bug fixes and questions during your first mandate phase. Because LHDN periodically revises the MyInvois API and UBL 2.1 schema, we also handle mandate/schema updates during that window. Extended support and maintenance retainers are available if you want ongoing coverage beyond it.

Does it support batch submission or only one invoice at a time?

Both. Individual submission runs directly from the invoice form for ad-hoc and corrective documents, and batch submission runs via a scheduled ir.cron action so you can clear a full day or month of confirmed invoices in one automated pass, with per-record error isolation so one rejection doesn't block the rest.

Which Odoo versions and editions does it work with?

We build for Odoo 17, 18 and 19, on both Community and Enterprise. The module extends Odoo's native account.move and QWeb reporting rather than replacing your accounting, so it fits your existing setup. Tell us your exact version and edition at kickoff and we target that build.

How does the validated QR code get onto my invoice?

Once LHDN validates a submitted e-invoice, MyInvois returns a long ID and QR payload. The module stores these on the account.move record and embeds the validated QR code and long ID onto your customer-facing QWeb invoice PDF, so the printed or emailed document is compliant the moment it's issued.

Can other systems trigger submission, or is it Odoo-only?

It's a real Odoo module, so submission and validation status are fully accessible via Odoo's XML-RPC and JSON-RPC APIs. External systems — a POS, an e-commerce front end, or a middleware layer — can trigger clearance and read the validation result headlessly, in addition to the in-Odoo screens.

What do you need from us to build it?

Your Odoo version and edition, access to a staging database, your MyInvois/LHDN credentials (TIN, MSIC code, registration details, API credentials), and a sample of the invoice and tax scenarios you issue. We handle the rest, from module build through sandbox validation to the production cutover.

Request a quote

Malaysia MyInvois LHDN E-Invoicing

Build-to-order Odoo module that submits and validates e-invoices to Malaysia's MyInvois (LHDN) portal with UBL 2.1, batch mode and QR.

  • MyInvois API integration with LHDN — direct submission, status polling and clearance retrieval against the official MyInvois endpoints (sandbox and production)
  • UBL 2.1 Malaysia e-invoice document generation matching LHDN's mandatory schema, tax categories and code lists
  • Batch submission via a scheduled ir.cron action — clear a full day or month of confirmed invoices in one automated run with per-record error isolation
  • Individual on-demand submission directly from the invoice form for ad-hoc, urgent and corrective documents

Request a Quotation

Tell us about your Malaysia MyInvois LHDN E-Invoicing requirements and we'll send pricing, licensing options and a tailored proposal — usually within one business day.

No payment now. This sends a quote request to our team — we'll follow up by email with pricing and next steps.