Skip to content

Best Practices

Everything below exists because of one property of this module: nothing in it alerts you. No pool ages, no queue escalates, no e-mail arrives when LHDN rejects a document. The whole of your early warning is somebody opening a screen on a schedule. These are the schedules worth keeping.

1. Read the rejection list yourself, daily

  • Daily rejection audit: Read Internal Submission → To IRB E-Invoice daily in the MY E-Invoice Admin Applet and clear anything marked Invalid. Do not work from Submission History — it is a snapshot taken at submission time and will keep saying “Submitted” for a document LHDN has since rejected.
  • Verify tax numbers deliberately, because nothing verifies them for you. There is a Verify TIN action that checks a number against LHDN on demand. There is no automatic format check when a customer is created, and no business-registration-number check at all — so a tax number that is simply mistyped passes every screen in BigLedger and fails at submission, one document at a time. Run Verify TIN when you onboard a business customer, not when their invoice bounces.

2. Authorisation & Pool Hygiene

  • Diarise the intermediary renewal. Your MyInvois authorisation of BigLedger expires. When it lapses every submission for that company stops at once with an authentication error and no document has anything wrong with it. Set a reminder a month ahead. (There is no signing certificate to renew — BigLedger holds the credentials.)
  • Review the Individual and Single General pools weekly. Neither empties itself and neither raises an ageing alert; a document can sit in one for months as an unreported sale.
  • Reconcile before the 7th, not after it. Run Monthly Report → Discrepancies Report for the closing month and clear it while cancellation is still possible.

3. Plan month end around hours, not minutes

Submission to LHDN is serial — one document per call, at most 49 in each run of the submitter, with no parallelism anywhere in the path. Plan on a few hundred documents an hour: the busiest days measured so far averaged at most about 640 an hour, and the 600 to 3,000 an hour sometimes quoted is a June 2026 engineering ceiling, not an observed rate. The consolidated e-invoice for a month must be validated by the 7th of the following month. Start the run with days in hand, and never promise a customer an instant e-invoice during a month-end batch.

4. Capture identity at the counter for anything at or above RM 10,000

A retail receipt of RM 10,000 or more cannot be consolidated — it needs an individual e-invoice with a real buyer identity. Discovering that at month end means going back to a shopper you can no longer find. Make it a till rule, not a back-office cleanup.

5. Do not design a process around an approval or an alert

There is no approval step before an e-invoice is submitted; the trigger is the document reaching FINAL. And there is no ageing alert on any pool or queue. Any procedure that depends on the system telling somebody will quietly stop working the first week nobody checks.

Who actually uses this module

It is worth being blunt, because it changes who you train. E-invoice is not a job. In BigLedger’s own installation data, a login that holds My E-Invoice Admin holds nine of fifteen functional families on average, and fewer than two dozen logins across the whole platform hold e-invoice applets and nothing else. The person doing this also runs the sales documents, the ledger and usually the till. Write the procedure for them, not for a specialist.

How you know e-invoicing is actually working

When a company is not enabled, a clock is off or the authorisation has lapsed, nothing in BigLedger comes to tell you; you find it only by looking. Looking is a person’s job: whoever runs the sales documents (see Who actually uses this module above). It takes a few minutes a day and one report a month.

  1. The company reads ENABLED. Check this once, and again after any change to a company. In My E-Invoice Admin, every company that issues documents should read ENABLED. A company that does not is not an error anywhere; its documents are simply never queued.
  2. The clocks are ACTIVE. Check this once, and again after anyone edits the Scheduler. In the Scheduler, these rows should read ACTIVE: routing (E_INVOICE_GENERIC_DOCUMENT_TO_IRB_PROCESSOR), submission (E_INVOICE_TO_IRB_SUBMISSION_PROCESSOR), the status check (E_INVOICE_TO_IRB_VALIDATION_STATUS_UPDATE_PROCESSOR) and token renewal (E_INVOICE_INTERMEDIARY_ACCESS_TOKEN_PROCESSOR). If you consolidate, add the run that builds consolidated e-invoices (E_INVOICE_BATCH_PROCESSING_CYCLE_RUN_PROCESSOR) and the one that submits them (CONSOLIDATED_E_INVOICE_PROCESSOR). A row named E_INVOICE_TO_IRB_SUBMISSION_QUEUE_PROCESSOR that is missing or off is not a fault, because the routing run puts documents on the submission queue itself. A current Last Run Date proves only that a clock fired, not that its job worked, which is why step 3 exists.
  3. Yesterday’s records have all moved on. Check this every morning. In To IRB E-Invoice, look at yesterday’s records. You are done when nothing reads IN_QUEUE. A record still IN_QUEUE a day later failed to send, and nothing in the default schedule sends it again: read its Request Error under Individual Submission, fix the cause, select the row and press Submit. Nothing should read Submitted either; press Refresh on any that does. And every Invalid record should be resubmitted, or have someone’s name on it.
  4. The pools have owners. Check this every week. The Individual and Single General pools never empty themselves. You are done when every row in them is one someone is chasing.
  5. Last month reconciles. Check this between the 1st and the 7th. Create a fresh Discrepancies Report for last month. You are done when both directions read zero, or every line on them is one you can name. The report does not examine foreign-currency documents, so check those from the document listing.

When all five hold, every document you finalised is either at LHDN with a verdict, or on a list that a named person is working through.