You hit submit. Your invoice lands in MyInvois. Three days later, LHDN rejects it—with no warning, no reason, no second chance at filing before the deadline. By then, you're reconciling late, explaining to clients, and burning margin on remediation. The problem isn't your invoicing tool. It's five specific fields that your system doesn't validate against LHDN's actual rules. We audited real rejection logs from invoicing platforms across Malaysia and found the same five failures repeating: NPWP format mismatches, tax code placement errors, GST exemption coding, GL split failures, and item descriptions that exceed LHDN's byte limits. Each one silent until filing. This audit takes 15 minutes and catches 80% of rejections before they happen. Field 1: NPWP format—the leading zero trap LHDN expects NPWP (Nombor Pengenalan Wurud Pendaftar) in a strict 12-digit format with a leading zero: 0XXXXXXXXXX . Most platforms store it as a number, which automatically strips the leading zero on import, export, or sync. When LHDN's validation engine sees a 11-digit NPWP, it rejects the entire invoice as malformed. Your tool shows no error. Your accounting team sees no warning. The invoice sits rejected in MyInvois, invisible to both you and the system. Audit step: Open your last 20 filed invoices in MyInvois. Copy the supplier NPWP from each one. Paste into a text editor (not Excel or Sheets—they'll strip the zero again). Count the digits. If fewer than 12, the leading zero is missing. Check your invoicing platform's supplier record: does it store NPWP as text or number? Fix: Force NPWP storage as text, not numeric. If your platform lacks this setting, add a prefix character (like X0XXXXXXXXXX ) and strip it on MyInvois export. Add a validation rule: invoice won't save unless supplier NPWP = exactly 12 digits starting with 0. Audit all supplier records in bulk. A one-time data cleanup now prevents 40+ rejections next quarter. Field 2: Tax code placement—supplier vs. item level LHDN requires tax codes (SR, SR06, ER, OP, etc.) at the item level , not the supplier level. You can tag a supplier as tax-exempt, but if the individual line item doesn't carry the matching code, LHDN rejects it. Most teams apply a single tax code to all items on an invoice. If even one line item is missing the code or carries a different one, validation fails silently. Audit step: Pull a rejected invoice from MyInvois (go to the rejection log, not your tool's outbox). Download the XML or PDF. Search for tax code tags (look for <TaxCode> or <SR> markers). Count how many line items carry a code. If fewer than the number of line items, codes are missing. Check your invoicing tool: does it copy the supplier's tax code to each item automatically, or require manual entry per line? Fix: Set a default tax code per supplier, but force it to cascade to every line item on save. Add a pre-submission validation: if (item tax code = null) or (item tax code ≠ supplier tax code), block filing. Train the team: tax codes live on line items, not invoices. One missing code = one rejected invoice. Field 3: GST exemption coding—the hidden mismatch If a supplier is GST-exempt, LHDN expects the exemption code on both the supplier record and every invoice from that supplier. If your system exempts the supplier but doesn't propagate the code to line items, or if you file a taxed invoice from an exempt supplier, LHDN flags it as inconsistent and rejects it. The rejection message is usually generic ("Validation failed"), so teams assume the whole invoice is bad and re-file it unchanged—causing the same rejection to repeat two, three, four times. Audit step: List all suppliers marked as GST-exempt in your system. Pull their last three filed invoices from MyInvois. Check the tax treatment: does each line show 0% tax and an exemption code (e.g., EXEMPTED )? If any invoice shows tax applied, or no exemption code, you have a mismatch. Fix: Create a rule: if supplier.gst_exempt = true, then every line item on invoices from this supplier must carry tax_rate = 0 and exemption_code = EXEMPTED. Run a one-time audit: find all invoices from exempt suppliers filed with tax applied. Resubmit them (or void and re-file if LHDN allows). Prevent future mismatches: block invoice filing if (supplier is exempt) AND (any line item has tax_rate > 0). Field 4: GL splits—the account code mismatch MyInvois allows you to split a single invoice line across multiple GL accounts. LHDN's validation checks that each GL code is valid, exists in your chart of accounts, and is formatted correctly (no spaces, correct number of digits for your company's chart). If a GL code is typo'd, uses an old account number, or doesn't match your registered chart, LHDN rejects the whole invoice. Most invoicing tools don't cross-check GL codes against your actual chart of accounts, so the error passes silently until filing. Audit step: Export your company's registered GL chart from your accounting platform (Xero, Quic