यह लेख वर्तमान में केवल अंग्रेज़ी में उपलब्ध है। अनुवाद जल्द आ रहा है।
Odoo Malaysia Localization 2026: SST, MyInvois & LHDN E-Invoice Setup
Malaysia replaced the GST system with the Sales and Service Tax (SST) regime in September 2018, and the country has since rolled out one of Southeast Asia's most ambitious e-invoicing programs through the MyInvois platform operated by Lembaga Hasil Dalam Negeri (LHDN, the Inland Revenue Board). The MyInvois mandate phased in from August 2024 for top-tier taxpayers and expanded to all businesses by mid-2025, making Malaysia a fully e-invoiced economy by 2026. Odoo's l10n_my localization provides the chart of accounts and SST framework, while MyInvois integration requires API connectivity to LHDN's portal.
Key Takeaways
- LHDN administers SST (Sales Tax 5-10%, Service Tax 6-8%) and corporate income tax (24% standard)
- MyInvois e-invoicing mandatory since 2024-2025 phases; full coverage by July 2025
- Odoo
l10n_mycovers MFRS-aligned chart of accounts and SST taxes- MyInvois requires direct API integration with LHDN — UBL 2.1-based JSON/XML format
- Service Tax expanded scope from March 2024; rate increased to 8% for most taxable services
- Statutory reports include SST-02 (sales tax), SST-03 (service tax), and Form C (corporate tax)
- SSM business registration number (12-digit) required on all e-invoices
Malaysia Tax Framework Overview
Malaysia's SST regime distinguishes between two parallel taxes:
- Sales Tax: Charged on manufactured or imported taxable goods at 5%, 10%, or specific rates. The taxpayer is the manufacturer or importer; subsequent retail sales are not re-taxed.
- Service Tax: Charged on prescribed taxable services at 8% (raised from 6% in March 2024 for most services; certain services such as F&B, telecom, parking remain at 6%).
Corporate income tax is 24% for resident companies (17% for SME first MYR 600,000 of chargeable income). Personal income tax uses progressive brackets up to 30%.
The MyInvois platform under the Continuous Transaction Controls (CTC) framework requires near-real-time invoice clearance with LHDN. Phased rollout:
| Phase | Effective | Threshold |
|---|---|---|
| Phase 1 | 1 August 2024 | Annual turnover > MYR 100 million |
| Phase 2 | 1 January 2025 | Annual turnover MYR 25-100 million |
| Phase 3 | 1 July 2025 | All other taxpayers |
By 2026, all B2B, B2G, and many B2C transactions must flow through MyInvois.
Required Odoo Localization Modules
| Module | Purpose | Edition |
|---|---|---|
l10n_my | Malaysia chart of accounts (MFRS aligned) | Community |
l10n_my_edi | MyInvois e-invoice integration | Enterprise (Odoo 17+) |
l10n_my_ubl_pint | UBL 2.1 PINT-MY format | Enterprise |
account_reports | SST report templates | Enterprise |
hr_payroll_l10n_my | EPF, SOCSO, EIS, PCB payroll | Enterprise / Custom |
Odoo 17.0 introduced native MyInvois support in l10n_my_edi. For deployments on older Odoo versions, integration is built via custom modules calling LHDN's MyInvois APIs (sandbox at preprod-api.myinvois.hasil.gov.my, production at api.myinvois.hasil.gov.my).
Chart of Accounts Setup
Malaysia uses MFRS (Malaysian Financial Reporting Standards), aligned with IFRS. The l10n_my chart provides:
- 1xxx: Assets (cash, receivables, inventory, fixed assets)
- 2xxx: Liabilities (payables, SST payable, tax payable)
- 3xxx: Equity
- 4xxx: Revenue
- 5xxx: Cost of revenue
- 6xxx-8xxx: Operating and other expenses
- 9xxx: Tax expense
Configure the company record with the SSM Business Registration Number (12-digit format from 11 October 2019), tax identification number (TIN, prefixed with C for companies, IG for individuals), and SST registration number if registered.
SST Configuration
Configure SST tax records under Accounting > Configuration > Taxes:
| Tax Name | Rate | Type | Notes |
|---|---|---|---|
| SST Service Tax 8% | 8% | Sales | Most taxable services |
| SST Service Tax 6% | 6% | Sales | F&B, telecom, parking, others |
| Sales Tax 10% | 10% | Sales | Manufactured taxable goods |
| Sales Tax 5% | 5% | Sales | Reduced-rate goods |
| Sales Tax 0% | 0% | Sales | Schedule A exempt |
| Out of Scope | 0% | Sales | Non-SST registered transactions |
Sales tax differs fundamentally from VAT — there is no input credit mechanism. The manufacturer pays sales tax to LHDN, and downstream resellers do not reclaim or charge it again (with limited exceptions for designated areas like LMW and FCZ). Configure Odoo so that purchases of finished goods do NOT generate input tax records; only direct manufacturers register and remit sales tax.
# Example service tax check on invoice
def _check_service_tax_applicability(self, invoice):
"""Service tax applies only if seller is SST-registered and service is in Schedule of Taxable Services."""
if not self.company_id.l10n_my_sst_registered:
return False
taxable_codes = ['001', '002', '003', '004', '005', '006', '007', '008', '009']
for line in invoice.invoice_line_ids:
if line.product_id.l10n_my_service_tax_code in taxable_codes:
return True
return False
MyInvois E-Invoicing Requirements
MyInvois operates as a CTC platform — every invoice must be submitted to LHDN before transmission to the buyer. The flow:
- Seller's ERP creates the invoice and submits to MyInvois API in UBL 2.1 PINT-MY format
- MyInvois validates structure, tax IDs, totals, and compliance fields
- On success, LHDN issues a Unique Identifier Number (UIN) and digitally signs the invoice
- MyInvois generates a QR code linking to the validation portal
- Seller delivers the validated invoice (PDF + XML) to the buyer
- Buyer can reject within 72 hours; otherwise it is deemed accepted
Required fields include seller TIN, buyer TIN (or "EI00000000010" for non-business consumers), SSM number, MSIC industry code, e-invoice type (01-Invoice, 02-Credit Note, 03-Debit Note, 04-Refund Note, 11-Self-billed, etc.), and item-level tax breakdown.
For Odoo 17+ Enterprise, configure MyInvois under Accounting > Configuration > Settings > Taxes:
<record id="res_company_myinvois_config" model="res.config.settings">
<field name="l10n_my_edi_mode">prod</field>
<field name="l10n_my_edi_company_tin">C12345678901</field>
<field name="l10n_my_edi_company_brn">202301012345</field>
<field name="l10n_my_edi_company_msic">62010</field>
</record>
The OAuth2 client credentials (client_id, client_secret) issued by LHDN must be configured in the e-invoice settings.
Payroll Considerations
Malaysian payroll requires four mandatory contributions plus PCB (income tax withholding):
| Contribution | Employee | Employer | Notes |
|---|---|---|---|
| EPF (Employees Provident Fund) | 11% | 13% (or 12% if salary > MYR 5,000) | Retirement fund |
| SOCSO (Social Security) | 0.5% | 1.75% | Capped at MYR 6,000 base |
| EIS (Employment Insurance Scheme) | 0.2% | 0.2% | Capped at MYR 6,000 |
| HRDF | N/A | 1% | If 10+ employees, mandatory training fund |
| PCB (Potongan Cukai Bulanan) | Per LHDN tables | N/A | Monthly income tax withholding |
EPF rates for foreign workers differ. PCB calculations follow the LHDN MTD (Monthly Tax Deduction) tables, which are updated annually.
Reporting Requirements
Statutory reports a Malaysia Odoo deployment must produce:
- SST-02: Bi-monthly sales tax return (manufacturers)
- SST-03: Bi-monthly service tax return (service providers)
- Form C: Annual corporate income tax return
- Form CP58: Annual statement of fees and commissions paid to agents
- EPF Form A: Monthly EPF contribution return
- SOCSO Form 8A: Monthly SOCSO contribution return
- EA / EC / E: Annual employer remuneration statements
SST returns are submitted via the MySST portal (mysst.customs.gov.my) operated by RMCD (Royal Malaysian Customs Department).
Implementation Checklist
- Obtain SSM registration (12-digit BRN) and SST registration if applicable
- Apply for LHDN MyInvois API credentials (sandbox first, then production)
- Install
l10n_myandl10n_my_edi; configure TIN, BRN, MSIC code - Verify MFRS chart of accounts; add company sub-accounts
- Configure Service Tax 8% (or 6% for special category) and Sales Tax 5%/10%
- Test MyInvois submission with sample invoices in sandbox
- Configure payroll with EPF, SOCSO, EIS, HRDF, PCB
- Build SST-02 / SST-03 report aligned to RMCD format
- Train AR team on 72-hour buyer rejection window
- Migrate to MyInvois production after sandbox validation
Common Pitfalls
Treating SST as VAT: Sales Tax has no input credit. Configuring it as a recoverable input tax inflates expenses and triggers RMCD audit.
Wrong service tax rate: 8% applies broadly since March 2024, but F&B, telecom, parking, and certain professional services remain at 6%. Hard-coding 8% causes overcharging.
Missing MSIC code on invoices: MyInvois rejects invoices without a valid MSIC industry code on each line. Configure MSIC at product or product category level.
TIN validation failures: Buyer TIN must be valid and active in LHDN's registry. Use the TIN validation API before invoice submission to avoid rejection storms.
Bypassing 72-hour rejection window: If a buyer rejects within 72 hours, the seller must issue a cancellation and a corrected invoice. Workflows that don't track rejection status leave invoices in an ambiguous state.
ECOSIRE delivers Odoo localization for Malaysia, including MyInvois integration and SST-compliant invoicing. Contact us for implementation or explore our Odoo customization services.
Frequently Asked Questions
Does Odoo 17 Enterprise fully support MyInvois?
Yes. Odoo 17.0 introduced l10n_my_edi with native MyInvois submission. Odoo 18 and 19 enhance the integration with self-billed invoice support, consolidated invoicing for B2C, and improved validation pre-checks. For Odoo 16 or earlier, custom development is required.
Is MyInvois mandatory for B2C transactions?
B2C transactions can be issued as consolidated monthly e-invoices for non-business consumers (using TIN "EI00000000010"). However, certain B2C sectors and high-value transactions require individual e-invoices. The LHDN guidelines define thresholds and exceptions; consult the latest version when configuring Odoo's invoicing rules.
What is the difference between Sales Tax and Service Tax?
Sales Tax is charged once at the manufacturer or importer level on goods (5% or 10%). Service Tax is charged at the service provider level on prescribed services (6% or 8%). They do not stack — a manufacturer selling goods charges sales tax, and a service provider charges service tax. Both are non-creditable: there is no input recovery mechanism like in VAT systems.
How do we handle self-billed invoices in Odoo?
Self-billed invoices (where the buyer issues the invoice for the seller, common with foreign suppliers) require e-invoice type 11 in MyInvois. Odoo's l10n_my_edi supports this via a flag on the vendor bill. The buyer's company appears as the "seller" in the e-invoice payload, and the foreign supplier's details populate the buyer fields.
Can we issue credit notes through MyInvois?
Yes. Credit notes use e-invoice type 02 and must reference the original invoice's UIN. Odoo's refund and reverse functionality, when paired with l10n_my_edi, automatically populates the reference field. Credit notes can only be issued within the timeframe LHDN allows (currently 6 months from original invoice date for adjustments).
लेखक
ECOSIRE TeamTechnical Writing
The ECOSIRE technical writing team covers Odoo ERP, Shopify eCommerce, AI agents, Power BI analytics, GoHighLevel automation, and enterprise software best practices. Our guides help businesses make informed technology decisions.
ECOSIRE
Odoo ERP के साथ अपना व्यवसाय बदलें
आपके संचालन को सुव्यवस्थित करने के लिए विशेषज्ञ ओडू कार्यान्वयन, अनुकूलन और समर्थन।
संबंधित लेख
How to Add a Custom Button to an Odoo Form View (2026)
Add custom action buttons to Odoo 19 form views: Python action method, view inheritance, conditional visibility, confirmation dialogs. Production-tested.
How to Add a Custom Field in Odoo Without Studio (2026)
Add custom fields via custom module in Odoo 19: model inheritance, view extension, computed fields, store/non-store decisions. Code-first, version-controlled.
How to Add a Custom Report in Odoo Using External Layout
Build a branded PDF report in Odoo 19 using web.external_layout: QWeb template, paperformat, action binding. With print logo + footer overrides.