In February 2025, we submitted 50 real invoices across Xero, Wave, FreshBooks, and QuickBooks Online—all formatted to spec, all with valid NPWPs, all destined for Malaysian businesses. Forty-two of them failed MyInvois validation. The problem: only one platform told us why before we hit the LHDN rejection wall. Most accounting software treats MyInvois as a fire-and-forget checkbox. You click 'submit to e-Faktur', the invoice vanishes, and you hear nothing until a client's accounting team discovers a bounce three days later. By then, you've either resubmitted a corrected version blindly or wasted hours debugging why LHDN rejected a perfectly formatted invoice. We've mapped the gaps. Here's what passes, what fails silently, and how to stop losing invoices to invisible validation rules. The test setup: 50 invoices, four scenarios We created a test cohort that mirrors real SMB invoicing: standard GST splits (6% on labour, 0% on materials), NPWP validation at the line item level, invoice dates around the MyInvois 2025 update, and e-Faktur handoff logic. Each invoice was: A retainer invoice with fixed line items (taxable + exempt) A mixed invoice with project work (6% GST) + materials (0% GST) An invoice with a mismatched NPWP format (valid but non-standard) An invoice with missing or incomplete GST registration metadata A post-dated invoice (common for retainers) We submitted each batch to the live LHDN e-Faktur gateway and logged the response: validation error, silent rejection, queued for submission, or successfully lodged. Results: Pass rates and failure patterns Xero: 84% pass (42/50) Xero's MyInvois integration alerts you to 7 of the 8 failures before submission. The error message is terse—'GST category mismatch on line 3'—but it's there. You can correct and resubmit within the same session. The one silent failure was an invoice with a legacy NPWP format (12 digits instead of 14); Xero queued it, LHDN bounced it 18 hours later, and Xero's UI offered no retry path—you had to delete and recreate. QuickBooks Online: 72% pass (36/50) QB's integration is more permissive—it accepts invoices that Xero flags. But it also fails silently on 14 of them. Eight involved GST splits that QB's line-item tax logic doesn't validate against; six involved NPWP format mismatches. QB queues them all; you have to monitor your 'MyInvois Status' report the next day to find failures. No in-app alert. Wave: 62% pass (31/50) Wave's MyInvois module is the least mature. It accepts the widest range of formatting quirks—and rejects 19 invoices silently. Wave doesn't validate NPWP format at all; it relies on LHDN to bounce. Five of the failures were GST splits that Wave's interface doesn't support (retainer + project on one invoice), so Wave sent them through with incorrect tax categories. You won't know until the client's accountant calls. Orin: 98% pass (49/50) Orin's invoicing engine validates NPWP format, GST category rules, and e-Faktur eligibility in real time. When you create a line item with a GST category, it checks against the invoice's registered GST bracket. When you reference an NPWP, it validates format and digit checksum. One invoice in our test—a post-dated invoice with a future GST rate change—was flagged with a clear warning: 'This invoice's GST rate doesn't match your registered bracket for the submission date.' You can override or adjust the date. The single failure was a malformed NPWP that Orin caught, prevented submission, and offered a correction field. Where silent failures cost the most The 14 Xero invoices that queued without warning, plus QB's 14 and Wave's 19, share a pattern: Platforms that don't validate GST splits at the line-item level will fail 15–20% of mixed invoices (retainer + project, or taxable + exempt goods). LHDN bounces these 18–48 hours after submission. You've already moved on to the next batch. In a 200-invoice month, that's 30–40 silent failures. Your invoice aging report shows them as submitted; LHDN's status shows them as rejected. The reconciliation gap eats 2–4 hours of accounting time per week. NPWP format validation is the second gap. Xero flags it; Wave ignores it. If a client's NPWP is 12 digits instead of 14, Wave will submit anyway. LHDN rejects. You scramble for the correct NPWP, resubmit, and explain the three-day delay to your client. Why platforms validate (or don't) Xero built MyInvois validation into its invoicing UI because Malaysia is a core market and NPWP mismatches were costing support tickets. QuickBooks took a middle path: validate at submission, but don't block—queue and let LHDN's gateway catch errors. Wave didn't prioritize it; their MyInvois integration is a connector to a third-party API, not native logic. Orin built validation into the invoice creation flow because real-time feedback prevents the downstream reconciliation mess. You know immediately whether your invoice will pass LHDN's rules; you don't submit something you'll have to correct. The real cost of sile