Configuration
The step-by-step version of everything below, written for the person doing it, is MyInvois Setup. This page is the checklist and the reasoning.
The order matters for one reason only, and it is the one in the warning:
1. Authorise BigLedger, then enable the company
| What | Where |
|---|---|
| Authorise BigLedger as your intermediary in the MyInvois portal | LHDN’s MyInvois portal, not BigLedger |
| Company tax registration number, MSIC industry code, registration details | Organization |
| Turn e-invoicing on for the company, and choose the document types that enter the pipeline | My E-Invoice Admin |
There is no client ID, client secret or certificate for you to enter anywhere in BigLedger in the normal intermediary configuration. What expires is the authorisation you gave in the MyInvois portal; diarise its renewal, because when it lapses submissions start failing and nothing about the failure says “your authorisation expired”.
2. Master data — the fields LHDN actually validates
LHDN rejects an incomplete e-invoice, so this is where most of the work is.
| Field | Where | Why |
|---|---|---|
| Buyer tax number, identity type and identity value | Customer Maintenance | Missing any of them sends the document to a pool instead of to LHDN |
| Address with line 1, city and state code | Customer Maintenance and Supplier | An address that looks complete to you can still be missing the state code LHDN needs |
| Supplier tax identity | Supplier | On a self-billed e-invoice the supplier is the party whose identity LHDN checks. BigLedger fills two gaps on its own: a tax number with no identity value goes out with 000000000000, and an NRIC with no tax number goes out with the general individual tax number EI00000000010. Neither stops the document, so check the supplier record rather than relying on a rejection to tell you |
| Item classification codes and standard units | Doc Item Maintenance | A missing one never stops a document. The code on the line wins, then the item’s at the moment the e-invoice is built; with neither, the line goes to LHDN as 022 Others, and a line with no e-invoice unit as H87 piece. A consolidated e-invoice always says 004. So a wrong or missing code is found by an auditor, not by BigLedger: spot-check a submitted e-invoice’s lines once after setup |
| Tax codes, and each item’s e-invoice tax type | Tax Configuration, Doc Item Maintenance | The tax amount on the line, more than the code you picked, decides what LHDN is told — below |
MSIC is a company and branch code, not an item field. It lives on the Organization applet. If you have seen it described as item master data, that was wrong.
There is a Verify TIN action you can run against LHDN on demand from the portal side. There is no automatic format check that runs when a customer is created, and no business-registration-number check at all — so a tax number that is merely typed wrong will pass every screen and fail at submission.
Countries, states and postcodes — where the country on the e-invoice comes from
The Country and State drop-downs on a customer, supplier or company address come from one list that BigLedger maintains, the same for everyone. You pick from it; you cannot add a country, rename one or change a country’s states from any screen in your tenant — that is a request to BigLedger. City and postcode are typed, not picked. (A separate city-and-postcode list exists, but it serves the online store’s shipping-address form and the membership and seller search filters, not your customer, supplier or company records.)
The country code LHDN receives does not come from that list. A customer or supplier address keeps the country’s name (the company record keeps the three-letter code, so your own side is exact). When the e-invoice record is built, BigLedger converts what the address holds into LHDN’s three-letter code with its own built-in table, in this order: a three-letter code if that is what the field holds, an exact country name, a short list of common alternatives (UK, US, South Korea, Viet Nam), then a partial name match. The result — the three-letter code and the state code worked out from it — is written onto the e-invoice record, so that record is where you check it.
Two more things change quietly on the way. The postcode is cut to five characters, so a Singapore
supplier’s six-digit postcode reaches LHDN as its first five digits. Accented letters are dropped from
every address line — é disappears rather than becoming e. If GadgetSphere Distribution raises self-billed
e-invoices for its Singapore and Hong Kong distributors, pick those suppliers’ countries from the
drop-down rather than importing typed text, and open the first submitted record for each of them to
confirm the country reads SGP or HKG.
Which tax type each line reports
LHDN wants a tax type on every line, from its own list of six: 01 Sales Tax, 02 Service Tax, 03 Tourism Tax, 04 High-Value Goods Tax, 05 Sales Tax on Low Value Goods and 06 Not Applicable. BigLedger ships exactly those six, and no screen adds to the list or edits it.
You choose a tax type in several places: on an item’s E-Invoice tab, as a category default in Doc Item Maintenance, when you correct a line in the batch pool, and in an item import. The document line has its own E-Invoice Tax Type Code picker, offering the same six and pre-filled from the item.
Then the line’s tax amount has the last word. When the finalised document becomes an e-invoice record, each line is settled like this:
| The line has… | LHDN is told |
|---|---|
| no tax, or a tax amount of zero | 06 Not Applicable — whatever type was chosen |
| tax, and no type or 06 | 01 Sales Tax |
| tax, and any other type | the type chosen |
Two consequences are worth planning for. A line that charges service tax is reported as Sales Tax unless its item (or the line) says 02 — so GadgetSphere’s installation and repair items, which carry service tax, need 02 set on them. And an item set to 02 that is sold on an untaxed line goes as 06: that is the rule working, not a fault to chase.
An exemption is not a tax type in this list. LHDN’s exemption category is sent only when the line carries Tax Exemption Details and a Tax Exemption Amount — BigLedger then adds a second tax breakdown for the exemption beside the line’s own tax type, which is settled by the table above as usual. To check what went, read the tax type on the e-invoice record’s lines, not on the item: the item holds what you chose, and the record holds what was sent.
Which unit each line reports
LHDN wants a unit-of-measure code on every line, from its own list of about two thousand — H87 piece, XUN unit, SET set, KGM kilogram, MTR metre. Four things decide what it receives, and only the first is on a screen you would normally look at.
The item’s E-Invoice tab sets the code. When you add an item to a sales invoice, the line’s E-Invoice UOM is copied from the E-Invoice tab of the item in Doc Item Maintenance. The codes you pick there, and on each Multi UOM row, come from a copy of LHDN’s list built into the screen.
Selling in a bigger unit does not change it. GadgetSphere sells USB-C cables singly and in packs of three. Put two packs on an invoice and the line’s selling unit becomes Pack, but its E-Invoice UOM stays the item’s own code. The line has its own E-Invoice UOM picker, which offers the item’s code and each Multi UOM row’s code — and choosing the pack’s code there is the one way to get this wrong.
The quantity LHDN receives is always in the item’s base unit. Those two packs go as 6, whatever unit the line was sold in, and the unit price goes per cable to match. So the item’s base-unit code is the one that makes the line true: 6 pieces is right, 6 packs is what LHDN is told if somebody picks the pack’s code on the line. Leave the line on the item’s own code.
A blank code is filled in for you. A line with no E-Invoice UOM is sent as H87 piece, without a message, before any check looks for it. A consolidated e-invoice sets its own units: one line per source document goes as H87 piece, one line per branch range as XUN unit.
BigLedger keeps a second copy of LHDN’s list, and only an import reads it. That copy is empty until BigLedger fills it from LHDN’s published list — there is no screen for it. Its one job is to check the e-invoice UOM column of an item import, and a code it cannot find is dropped without a message: the item is saved with no e-invoice unit, and so goes to LHDN as H87 piece. Before an item import that carries e-invoice units, ask BigLedger to load the list into your tenant, or set the units on screen after the import and check a few items.
3. Retail consolidation, if you sell to walk-in customers
| What | Where |
|---|---|
| Confirm which companies and branches consolidate | My E-Invoice Admin |
| Confirm the consolidation run day for each company | Ask your BigLedger contact — the automated run is enabled per tenant |
The consolidated e-invoice for a month must reach LHDN and be validated by the 7th of the following month. Work back from that, not from month-end.
A receipt of RM 10,000 or more cannot be consolidated — it needs an individual e-invoice with a real buyer identity. The divert is automatic for the enforced document types, so treat anything above the line as needing a named buyer at the counter.
4. PEPPOL, if you exchange documents with partners
| What | Where | How long |
|---|---|---|
| Register the company with the Malaysian Peppol directory, and add the participant ID it produces | Organisation → your company → Peppol Config | Days to weeks |
| Outbound and inbound queue monitoring | My Peppol Admin | Ongoing |
The two halves of the first row do different jobs. The registration, once you press Final, publishes the company in the directory other access points look you up in. Adding the ID is what tells BigLedger’s access point that a document addressed to it belongs to this company; until it is added, a partner’s document addressed to you is delivered to nobody, and nothing on your side says so. The order and the check BigLedger runs for you are in Peppol configuration, Step 2.
My Peppol Admin has a Registration screen with the same form. Its SAVE sends nothing, on Create or on Edit, and shows no error, so a registration made there looks finished and is not. The Organisation applet is the only screen that registers a company or adds its Peppol ID.
What success looks like
There is a sandbox, and it is not a substitute for this test. LHDN’s pre-production system is reachable per company — the company’s LHDN Environment field picks it, and a blank field means it — but it exercises the sandbox credentials and the sandbox endpoint, so a clean run there proves nothing about the production configuration you have just built. Use it to rehearse reading a rejection (how), not to sign this off. The sign-off test is a real, small one:
- Finalise one sales invoice for a customer whose tax number, identity and address are complete.
- Within a few minutes, find it in Internal Submission → Individual, not in a pool.
- Watch it move to the Validation Queue and come back Valid, with a UUID and a QR code.
- Open the same customer’s view in the MY E-Invoice Portal and confirm they can see it.
If step 2 puts it in a pool, the pool row names the missing field. If nothing appears at all, the company is not enrolled.
Common mistakes
| Mistake | Symptom |
|---|---|
| Finalising documents before enrolling the company | Nothing, anywhere. Found weeks later in reconciliation |
| Buyer identity incomplete | Documents accumulate in a pool that never empties itself and never raises an alert |
| Address missing a state code | Rejected at submission with a validation error |
| Picking an alternative unit’s code on a line | LHDN is told the base-unit quantity in that unit — 6 cables become 6 packs. Leave the item’s own code |
| Selling by weight or length | Fractions are dropped from the quantity LHDN receives; only the MyInvois portal’s copy shows it |
| Expecting the consolidated run at month-end | The deadline is the 7th of the next month, and submission is slow |
| Leaving PEPPOL registration to the end | Two to ten working days you did not plan for |
| Assuming the buyer got an e-mail | Automatic e-mailing is configured per company and set up on request |