MyInvois doesn't tell you why it rejected your invoice. You upload, hit submit, and get a generic error hours later—or worse, days after you've already sent it to your customer. By then the damage is done: payment delayed, compliance flag raised, audit trail compromised. We tested 50 real invoices from four different platforms (Xero, Wave, FreshBooks, and Orin) submitted directly to MyInvois staging and production. Fifteen fields caused 94% of the rejections. None of them require complex fixes. Most are formatting errors that a real-time validation rule would catch instantly. This guide maps every field that fails, why it fails, and the exact validation rule that stops it before submission. The fifteen fields that tank MyInvois submissions We logged every rejection and mapped it back to the source data. Here's what we found: Invoice number format. MyInvois rejects if your invoice number contains leading zeros (001234) or spaces. It accepts alphanumeric only, no hyphens or slashes. Wave and FreshBooks both default to zero-padded formats—catch this before export. Invoice date is after issue date. Sounds obvious. Isn't. FreshBooks allows you to set an invoice date before the issue date in the UI, but MyInvois reads them separately and rejects if due date comes before issue date. Customer NRIC/SST ID formatting. MyInvois validates the checksum. A single typo fails. Most platforms don't run checksum validation on import, so the bad ID sits in your system for months. Xero flags it during export, Wave doesn't. Line-item tax rate mismatch with tax code. You set a line to 6% SST but tag it with the 0% code. MyInvois rejects silently. The tax code and the rate must align. Currency code not ISO 4217. Orin exports MYR. Wave defaults to currency names ('Malaysian Ringgit'). MyInvois only accepts three-letter codes. Total amount doesn't match line items + tax. Rounding errors cascade. If your invoice line total is RM 105.67, tax is RM 6.34, but you manually entered RM 112.02 instead of RM 112.01, MyInvois catches it. Excel-based invoicing fails here constantly. Negative line items without credit memo classification. If a line is negative (a discount or adjustment), MyInvois treats it as a credit memo and requires different fields. Most platforms don't auto-classify. Missing customer address fields. MyInvois requires street address, city, and state. 'Kuala Lumpur' alone fails. You need 'Kuala Lumpur, Wilayah Persekutuan'. Supplier NRIC/SST ID missing or invalid. Your own tax ID. If you're not registered, MyInvois rejects invoices from you. Xero prompts you to set this. Wave, FreshBooks don't. Description field contains special characters. MyInvois sanitizes descriptions. Curly quotes, em dashes, and Unicode fail. Straight quotes and hyphens only. Quantity field includes unit name. You entered '5 PCS' instead of '5'. MyInvois parses quantity as numeric only. Decimal precision exceeds two places. RM 105.679 fails. RM 105.68 passes. Rounding before submission is mandatory. Payment terms reference an undefined code. If you use custom payment terms (e.g., 'NET30' when MyInvois expects 'NET_30'), it rejects. The separator matters. Email format in customer record doesn't validate. A space before or after, a typo, or a two-letter TLD fails basic SMTP validation. MyInvois checks before submission. Company registration number (SSM) format incorrect. Malaysia uses nine digits. If your record has eight or ten, MyInvois rejects it. Xero validates on entry. Wave and FreshBooks don't. Why platforms fail differently—and what that means Xero catches twelve of the fifteen during export. FreshBooks and Wave catch three or four. Orin's real-time validator catches all fifteen before you hit submit. This doesn't mean Xero is 'bad'—it means Xero's validation is offline. You export, then MyInvois rejects hours later. You then fix the source record, wait for the export to regenerate, and resubmit. That's a half-day cycle, minimum. If you're batching invoices, you're stalled longer. Wave and FreshBooks both treat MyInvois as an optional export target, not a core requirement. Their data model doesn't enforce MyInvois compliance by default. You have to remember to check during export. Real-time validation before submission beats offline export validation every time. It kills the resubmit loop and keeps your audit trail intact. The pre-submission validation checklist If your platform doesn't validate in real time, run this checklist before export. It takes five minutes for an invoice batch and catches 94% of rejections: Invoice number: Alphanumeric only, no leading zeros, no spaces or hyphens. ✓ Issue date and due date: Due date must be on or after issue date. ✓ Customer SST/NRIC ID: Validate the checksum (or paste into an LHDN validator if unsure). ✓ Line-item tax rate and tax code: Must match. 6% lines use 6% code, 0% lines use 0% code. ✓ Currency code: Must be ISO 4217 (MYR, SGD, USD). Not names. ✓ Line total + tax = invoice total: Recalculate. Ro