Skip to content

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:

Enrol the company before anybody finalises anything. A document finalised while its company is not enabled for e-invoicing is dropped silently — no queue row, no pool row, no error message anywhere. It is not retried and it does not appear in any list of problems. You discover it from a reconciliation report, weeks later, and by then the correction window has closed on every document in the gap.

1. Authorise BigLedger, then enable the company

WhatWhere
Authorise BigLedger as your intermediary in the MyInvois portalLHDN’s MyInvois portal, not BigLedger
Company tax registration number, MSIC industry code, registration detailsOrganization
Turn e-invoicing on for the company, and choose the document types that enter the pipelineMy 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.

FieldWhereWhy
Buyer tax number, identity type and identity valueCustomer MaintenanceMissing any of them sends the document to a pool instead of to LHDN
Address with line 1, city and state codeCustomer Maintenance and SupplierAn address that looks complete to you can still be missing the state code LHDN needs
Supplier tax identitySupplierOn 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 unitsDoc Item MaintenanceA 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 typeTax Configuration, Doc Item MaintenanceThe 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.

A country it cannot recognise is sent as Malaysia, and nothing tells you. Singapura, SG and U.S.A. are all read as Malaysia, and so are the few names in the list spelt with an accented letter (Réunion, Curaçao). A partial match can also pick the wrong country: the list’s Democratic Republic of the Congo resolves to the Republic of the Congo. Once an address is treated as Malaysian, its state is matched against Malaysia’s states — so the tell is a state-code problem on a party who is not in Malaysia at all. Look at the country on the e-invoice record first.

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 zero06 Not Applicable — whatever type was chosen
tax, and no type or 0601 Sales Tax
tax, and any other typethe 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.

The quantity is sent as a whole number, and any fraction is dropped. A reel of network cable sold as 2.5 metres goes to LHDN as 2; half a metre goes as 0. The line’s amounts are sent exactly, so LHDN holds a line whose quantity times unit price does not make its total. Nothing warns you, and the e-invoice record in BigLedger still shows 2.5 — the cut happens as the document is sent. If you sell anything by weight or length, open one validated e-invoice in LHDN’s MyInvois portal and compare its quantity with your invoice before you rely on it.

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

WhatWhere
Confirm which companies and branches consolidateMy E-Invoice Admin
Confirm the consolidation run day for each companyAsk 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

WhatWhereHow long
Register the company with the Malaysian Peppol directory, and add the participant ID it producesOrganisation → your company → Peppol ConfigDays to weeks
Outbound and inbound queue monitoringMy Peppol AdminOngoing

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.

A Sabah or Sarawak registration number takes 2 to 10 working days to register, because it is checked by hand at the local authority counter. Start this before the rest of the project, not at the end of it.

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:

  1. Finalise one sales invoice for a customer whose tax number, identity and address are complete.
  2. Within a few minutes, find it in Internal Submission → Individual, not in a pool.
  3. Watch it move to the Validation Queue and come back Valid, with a UUID and a QR code.
  4. 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

MistakeSymptom
Finalising documents before enrolling the companyNothing, anywhere. Found weeks later in reconciliation
Buyer identity incompleteDocuments accumulate in a pool that never empties itself and never raises an alert
Address missing a state codeRejected at submission with a validation error
Picking an alternative unit’s code on a lineLHDN is told the base-unit quantity in that unit — 6 cables become 6 packs. Leave the item’s own code
Selling by weight or lengthFractions are dropped from the quantity LHDN receives; only the MyInvois portal’s copy shows it
Expecting the consolidated run at month-endThe deadline is the 7th of the next month, and submission is slow
Leaving PEPPOL registration to the endTwo to ten working days you did not plan for
Assuming the buyer got an e-mailAutomatic e-mailing is configured per company and set up on request