Skip to content

E-Invoice & PEPPOL Module

Malaysia requires you to report your invoices to LHDN and get them back validated. This module is the machinery that does it: it picks up documents when they are finalised, fills in what LHDN insists on, sends them one at a time, waits for the verdict, and puts the ones it cannot send somewhere you can find them. It also carries the separate PEPPOL path, for exchanging documents directly with trading partners.

There is no certificate for you to obtain, upload or renew. BigLedger is configured as your e-invoice intermediary and signs on your behalf. What does expire is your authorisation of BigLedger in the MyInvois portal — that is an administrative renewal, not a cryptographic one.

Applets in this module

Four, and all four are documented. Membership is an editorial judgement recorded in planning/specs/module-applet-membership.md — the product carries no module↔applet relationship of its own.

AppletWho opens itWhat it is for
My E-Invoice AdminYouThe control room. Company enrolment, the submission queues, the three pools, submission history, the monthly reconciliation reports.
MY E-Invoice PortalYour customerA buyer-facing portal. A customer with a login completes their tax number, identity and address so you can issue them an individual e-invoice, views their validated e-invoices, and raises a rejection request inside the 72-hour window.
My Peppol AdminYouPEPPOL participant registration and the outbound/inbound PEPPOL queues.
Peppol AP AdminAccess-point operationsAdministration of the access point itself.
There is no separate “customer and supplier” applet. A page of that name exists in the wiki as the leftover of a rename — it was the MY E-Invoice Portal applet and has been merged into it. If you are looking for the screen your customers use, it is the Portal.

How a document gets to LHDN

    flowchart TD
  FIN["A sales document<br/>reaches FINAL"] --> GATE{"Is e-invoicing<br/>enabled for<br/>this company?"}
  GATE -->|No| DROP(["Dropped silently —<br/>no queue row, no pool row,<br/>no error"])
  GATE -->|Yes| CHK{"Does the buyer's<br/>identity pass<br/>LHDN's rules?"}
  CHK -->|Yes| Q["Submission queue<br/>one document per call"]
  CHK -->|No| POOL["A pool —<br/>waiting for a person"]
  Q --> LHDN["LHDN"]
  LHDN --> VQ["Validation queue<br/>polls for the verdict"]
  VQ --> VALID(["Valid — 72 hours<br/>to cancel, then never"])
  VQ --> REJ(["Rejected —<br/>fix and resubmit"])
  POOL -->|Month end| CONS["Consolidated e-invoice"]
  CONS --> Q
  
Submission is serial, and it is not fast. Each submission packs exactly one document per LHDN call, and there is no parallelism anywhere in the path — no thread pool, no asynchronous HTTP. The measured ceiling is roughly 600 to 3,000 documents an hour. A month-end batch takes hours, not minutes. Any process, any promise to a customer and any lesson that says “instant” or “real time” is wrong for a tenant with real volume.

A document finalised while its company is not enabled is dropped silently. No queue row, no pool row, no error anywhere. This is the single most expensive misconfiguration in the module: you find out weeks later, from a reconciliation report, that a month of invoices was never reported. Enable the company before anyone finalises anything.

The four kinds of e-invoice

These are document reporting types. None of them posts a journal — the accounting is done by the underlying sales or purchase document, and the e-invoice is the report of it.

KindWhenThe underlying document
Individual e-invoiceA buyer who has given you a tax number and identityA sales invoice, or a cash bill for an identified buyer
Consolidated e-invoiceRetail receipts to buyers who gave you nothingCash bills, gathered monthly. See Consolidated e-invoice
Self-billed e-invoiceYou buy from someone who is not required to e-invoice you — imported services, unregistered suppliers, commissionsA purchase document flagged self-billed
Credit, debit and refund notesCorrecting a document already validatedThe corresponding sales or purchase note

A consolidated e-invoice is not a summary or a report. It is a tax document in its own right, and it has a hard structural limit: 200 lines, each line one consecutive document-number range.

The PEPPOL path runs beside LHDN, not after it

PEPPOL is a separate network for exchanging documents with trading partners. The important thing to understand is the sequencing: the PEPPOL pipeline does not wait for LHDN to return “Valid”. The two run in parallel from the same finalised document. A diagram that shows PEPPOL as a step after tax clearance is describing something the product does not do.

BigLedger runs an accredited Malaysian access point. The Malaysian profile in use is PINT-MY.

Plan PEPPOL registration weeks ahead. Registering a participant identifier for a Sabah or Sarawak registration number takes 2 to 10 working days, because the registration number is checked by hand at the local authority counter. It is not a same-session setup task.

What this module needs from others

ModuleWhat it supplies
CoreOrganization — the company tax registration and MSIC industry code; Customer Maintenance and Supplier — tax number, identity type and value, and an address with line 1, city and state; Doc Item Maintenance — item classification codes and units; Tax Configuration
Sales and Point of SaleEvery document that is reported: cash bills, invoices, returns, credit, debit and refund notes
PurchasingThe purchase documents behind self-billed e-invoices and the incoming reconciliation

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.

Where to go next