E-Invoice & PEPPOL Guides
Everything you need to report your sales to LHDN through MyInvois and to deliver documents over the PEPPOL network — from first-time setup, through the monthly cycle you will run for the rest of your working life, to what happens when something goes wrong.
What happens after you press Save
Almost every e-invoicing question turns out to be a question about this picture. Nothing is sent at the moment you finalise a document: it is queued, and background jobs route it, submit it and collect LHDN’s answer. Where a document has stopped tells you what to fix.
A document is either held — sitting in one of three pools because something is missing — or on its way. Held documents never move on their own.
Get started
New to e-invoicing? Three terms do most of the work across every guide here, and each is explained once on its own short page: consolidated e-invoices · pools and queues · validation and clearance. Two minutes each, and the guides below stop needing to define anything.
Then read these three, in this order.
What setup covers:
- Authorising BigLedger as your e-invoice intermediary on the MyInvois portal
- Turning e-invoicing on for each company, before you finalise any documents
- Your company’s own identity block — tax number, registration number, industry code, address, phone
- Customer and supplier identity: tax number, identity type and value, and an address flagged for e-invoicing
- Item classification codes, units of measure and tax types on your items
Every day
Once you are set up, e-invoicing sits inside your normal sales and purchasing work:
- Create sales invoices and credit notes as usual.
- Finalise them. BigLedger does not submit at the moment you press Save — a finalised document is queued, and a background processor sends it. Everything after Save happens in the background, which is why an e-invoice is not at LHDN the second you look for it.
- Check the status of yesterday’s documents on Internal Submission → To IRB E-Invoice.
- Fix anything marked Invalid and resubmit. That is the whole daily loop, and it is entirely about the documents you issue.
The purchase side is not a daily task, and it is not automatic. Checking that your purchases have a validated supplier e-invoice behind them is a monthly job with a large manual component: BigLedger can pair the supplier documents that reach it over PEPPOL or through the OCR e-mail intake, but a supplier e-invoice filed with LHDN and sent to you as an ordinary PDF never reaches BigLedger at all.
Every week
Two of the three pools never empty themselves, and no pool ages its rows or warns you when one has been sitting too long — so unless you look, nothing tells you they are filling up. (There is one optional e-mail: a scheduled job can send the company a CSV of Individual Pool rows whose last attempt failed. It is switched on per tenant, it does not cover rows that have simply never been completed, and there is no equivalent for the Single General Pool. Ask your BigLedger contact whether you have it; do not plan around it.)
- Open the Individual Pool and the Single General Pool. Every row is a sale you have not reported. Chase the buyer’s details or move it somewhere it can still be reported.
- Filter the Batch Pool for rows marked processed / failed. Those are stranded: the monthly consolidation only sweeps unprocessed rows.
Every month
The 1st to the 7th is the busiest week in e-invoicing: last month’s consolidated e-invoices have to reach LHDN by the 7th, and everything that failed has to be found and fixed before then.
When something goes wrong
The issues that come up most often, and what to do about each:
| Scenario | What is actually happening | How to handle it |
|---|---|---|
| Buyer identity rejected | A foreign customer keyed as Malaysian, a national identity number stored with dashes, or a registration number in the wrong field | Registration number for a company, Malaysian or foreign; passport for an individual who is not Malaysian; national identity number as 12 digits with no dashes — fix it on the customer record, not on the e-invoice |
| Line rejected on its codes | Not the tax rate, and not a blank field either — a blank classification, unit or taxable type is filled in for you before anything checks, so none of them can be reported missing. What is rejected is a code that is present and wrong, above all classification 004 on an individual e-invoice | Set a real classification code on the item; never use 004 outside a consolidated e-invoice. The taxable type is not yours to set at submission time — it is derived from the line’s tax amount (how) |
| Missing mandatory fields | The document was never submitted; it is sitting in a pool | Complete the buyer’s tax number, identity and address, then Save and Resubmit |
| A row that has not moved since yesterday | It is queued, not retrying — nothing picks a stalled row back up on its own | Select it and press Submit. If the same rows stall again, raise a support request. What each status means, and when to wait |
| The same sale at LHDN twice | Possible, and it does happen — but repeated document numbers are more often a sales invoice and a self-billed purchase invoice sharing a number | Find real duplicates by reconciling, not by reading Submission History. Inside 72 hours you can cancel one; after that it is a credit note |
| A PEPPOL document is rejected by the recipient | The receiving access point turned down the message — most often the receiver is not registered for that document type, or the purchase-order / sales-order number was not carried onto the invoice as its order reference | Confirm the receiver’s participant ID, make sure the source document carries its PO or SO number, then resend from Internal Submission → Queue |
| Your buyer says they rejected an e-invoice and nothing changed | A rejection raised on the MyInvois portal, rather than through BigLedger’s buyer portal, never reaches BigLedger at all | Check the e-invoice on the portal yourself and act on it here. Ask buyers to use the BigLedger portal, where the request lands in your Rejection Requests list |
Reporting
Three places tell you where you stand, and they do not say the same thing:
- Internal Submission → To IRB E-Invoice — one row per e-invoice with the live LHDN status (Valid, Invalid, Submitted, IN_QUEUE). Export this one when you need a work list.
- Internal Submission → Submission History — an archive of what each submission looked like at the moment it was sent. It is not the current status, so never filter your Invalid list from here.
- Monthly Report → Discrepancies Report — compares the documents you finalised against the e-invoices on record, per company and period. This is your self-service reconciliation.
Compliance habits worth building:
- Watch rejection rates daily during your first months.
- Keep customer and supplier tax numbers and identity types clean — that one field group causes most rejections.
- Clear the Individual Pool before your consolidation runs, every month.
- Reconcile before the 7th, not after it.
Related resources
- My E-Invoice Admin Applet — field-level reference for every e-invoice screen
- My E-Invoice Portal Applet — what your buyers can see and request
- My PEPPOL Admin Applet — PEPPOL queues and configuration
- Sales Invoice Applet — where a sales e-invoice starts
- Purchase Invoice Applet — the purchase side of the same pipeline
- E-Invoice & PEPPOL module — the architecture view: who does what, which applets are involved, and the go-live checklist