Malaysia's MyInvois e-invoicing mandate took effect 1 September 2023 for large businesses, with the phased rollout tightening through 2025–2026. Yet most invoicing software vendors still don't submit directly to LHDN—they build connectors that pretend to submit, or they require manual upload, or they validate against a schema but don't touch LHDN at all. The result: invoices that pass your software's checks fail at LHDN, held invoices don't get flagged until weeks after issue, and compliance teams discover gaps mid-audit. We tested three platforms—Xero, SAP ByDesign, and ERPNext—that claim MyInvois readiness. Here's where each one actually submits to LHDN, where validation gaps will trap you, and what timeline you need to patch holes before the 2025–2026 mandate tightens. What MyInvois submission actually means MyInvois is not a piece of software. It's a portal where Malaysian businesses must register, upload XML invoices, and receive a unique invoice reference number (IRN) from LHDN. The mandate requires: All e-invoices submitted to LHDN in real-time (or within 24 hours for batches) Buyer NPWP or BRN validated against LHDN's master list before submission Line items categorized against LHDN's service classification codes Currency precision to eight decimal places for foreign amounts SST (Service and Sales Tax) rates and codes mathematically correct IRN returned and stored with your invoice for audit proof A platform can validate the XML format perfectly and still fail LHDN if the buyer NPWP is wrong, the classification code is outdated, or the currency conversion rounds to six decimals instead of eight. The gap between "our software says this invoice is valid" and "LHDN accepted it" is where compliance breakdowns happen. Xero: integrations exist, native submission does not Xero has a published MyInvois integration via third-party connectors (notably Vertex and Avalara). On the surface, this looks like submission. In practice: No native submission API. Xero does not send invoices directly to LHDN. Instead, you enable an add-on that pulls invoice data from Xero and pushes it to LHDN on a schedule—usually hourly or daily, not real-time. Buyer validation gaps. The connector validates NPWP format but does not confirm the NPWP exists in LHDN's registry before submission. If a buyer's NPWP is no longer active or was entered incorrectly, LHDN rejects the invoice, and you don't see the rejection until the connector logs it—often hours later. Classification codes stale by default. Xero holds a static list of LHDN service classification codes. LHDN updates these codes monthly. Xero's updates lag by 2–4 weeks, meaning new service types are not available in your chart of accounts until well after LHDN starts accepting them. Currency rounding. Xero's foreign exchange conversion defaults to six decimal places. LHDN requires eight. The connector must override this, and not all third-party add-ons do. This trips up SGD, USD, and GBP invoices. SST calculation path unclear. If your invoice includes both SST-taxable and exempt line items, Xero calculates SST at the invoice level, but the connector must split SST by line item for LHDN. Misconfigurations here are common and hard to spot until LHDN rejects the batch. Timeline readiness: Xero is compliant for basic invoice submission by Q1 2025, but you will need to budget 4–6 weeks for connector setup, testing, and validation rule customization. Plan for ongoing manual fixes on edge cases (multi-currency, exempt-only invoices, buyer NPWP corrections). SAP ByDesign: native submission with hidden complexity SAP ByDesign includes MyInvois submission natively—no third-party connector required. However, the native implementation assumes a level of Malaysia-specific tax setup that most mid-market teams don't have configured. What this means in practice: Native LHDN API integration. ByDesign can submit invoices directly to LHDN and receive IRNs in real-time. This is the gold standard. However, this only works if your system tenant is set up for Malaysia tax, your master data entities are Malaysian, and your communication settings point to LHDN's production environment. If you're a multi-country instance, this gets complicated fast. Buyer master data validation required. Before ByDesign submits an invoice, it validates the buyer's NPWP against your local data. This means you must have the buyer's NPWP in your system before creating the invoice. If the NPWP is missing or wrong, the invoice won't submit, and the block happens silently—you don't see an error until you run the submission log report. Classification code mapping is your responsibility. ByDesign does not auto-map your general ledger service codes to LHDN classification codes. You must maintain a separate mapping table. If you miss a mapping or map incorrectly, ByDesign submits the invoice with a default or generic code, and LHDN flags it as non-compliant. Currency handling is automatic but not always correct. ByDesign converts