Xero's MyInvois integration has a 94% first-pass rate across real-world invoices. That sounds reliable until you realize 6% fail silently —and the platforms that integrate MyInvois don't flag most of the reasons why. A malformed NPWP check digit. A GST line-item code that doesn't match LHDN's schema. A timestamp missing millisecond precision. A GL account code that exists in your chart but not in the invoice's issuer profile. These failures don't surface until after submission, when LHDN rejects them and your cash flow stalls. The 6% that fail share a pattern: they pass basic field presence checks but fail the structural and relational validation that LHDN's real-time system runs. This guide builds the 15-field audit you can run before you hit submit—and shows how to catch each category of failure before it costs you time and credibility with your customer. Why platforms miss these failures (and what they actually check) MyInvois validation on platforms like Xero, Orin, and Zoho One follows a tiered approach: Tier 1 (Always Checked): Field presence, invoice number format, date syntax Tier 2 (Usually Checked): Tax code assignment, document type code, total math Tier 3 (Rarely Flagged Before Submission): NPWP check-digit validity, timestamp millisecond precision, GL account issuer-profile alignment, character encoding on special names, GST line-item code schema match Most platforms validate Tier 1 and 2 thoroughly because failures there are obvious and repeatable. Tier 3 failures are harder to catch because they require cross-reference checks against your issuer profile and LHDN's real-time tax ID registry. By the time these fail at LHDN, the invoice has already been created in your ledger—and you're reconciling a rejection, not preventing one. The 15-field checklist: Field by field Run this audit before submission. Each field maps to a specific LHDN rejection category and the math that fails behind it. 1. Issuer NPWP (14 digits + check digit) The failure: The NPWP looks valid (14 digits) but the check digit—digit 15—fails LHDN's modulo-11 algorithm. How to audit: Take your 14-digit NPWP. Multiply each of the first 14 digits by a weight (8, 7, 6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3 in order). Sum them. Divide by 11. Subtract the remainder from 11. If the result is 10, the check digit is 0. Otherwise, the check digit is the remainder. Compare to digit 15 of your stored NPWP. If it doesn't match, the invoice will reject at LHDN, even if digit 15 is absent from your entry screen. If your NPWP failed a check-digit validation at LHDN in the last 90 days, this is your culprit. Xero and Zoho One don't validate this pre-submission; Orin flags it in real-time. 2. Issuer TIN (if non-individual) The failure: You've assigned the wrong entity type (individual vs. corporate) to the NPWP, or the TIN suffix doesn't match your issuer profile on LHDN. How to audit: Pull your issuer profile from LHDN's MyInvois portal. Check that the NPWP you're using on this invoice matches the TIN and entity type listed there. If you've set up a sole proprietor as a corporate entity (or vice versa), LHDN will reject the invoice at validation. 3. Document Type Code The failure: You've assigned 01 (standard invoice) when the transaction actually requires 02 (simplified invoice) or 03 (self-billed), or you've mixed debit and credit memo codes. How to audit: Verify your document type against the transaction type. Standard invoice (01) for most B2B sales. Simplified (02) if the buyer is a non-registered consumer. If you're issuing a credit note, you must use 02 as the document type with negative line amounts, not a separate debit memo code. LHDN rejects mixed codes at validation. 4. Timestamp (with millisecond precision) The failure: Your timestamp is accurate to the second (e.g., 2025-01-15T14:32:45Z) but LHDN expects millisecond precision (2025-01-15T14:32:45.123Z). The invoice submits but fails validation because the timestamp lacks the .sss fragment. How to audit: Check your invoice creation timestamp in your system's export. If it ends at Z (seconds) or +00:00 (timezone), add .000 before the Z. If your platform generates timestamps, verify it includes milliseconds in the export to MyInvois. Orin's invoicing engine adds milliseconds automatically ; Xero requires manual field mapping. 5. GST Line-Item Code (not SKU, but tax classification) The failure: You've used your internal SKU (e.g., PROD-001) in the line-item classification field, when LHDN expects a GST classification code (e.g., 01 for standard-rated, 02 for zero-rated, 05 for exempt). The invoice processes, but line-item validation fails. How to audit: For each line item, confirm the tax classification code: 01: Standard-rated supply (6% GST) 02: Zero-rated supply 05: Exempt supply 06: Out of scope Do not put your product SKU here. LHDN checks this field against its tax classification matrix. If your SKU slips in, the line fails validation. 6. GL Account Code (issuer-profile alignment) The