Source: Google Gemini

For many Malaysian businesses, LHDN e-Invoice readiness sounds like a submission problem.

In practice, it is often a reconciliation problem first.

Because before you can issue the right e-Invoice, credit note, debit note, or refund note, your business needs to answer a more basic question:

Do our orders, tax treatment, refunds, and adjustment documents actually line up?

That question becomes much harder when you sell across:

  • Shopify
  • Shopee
  • TikTok Shop
  • retail POS
  • direct bank transfer
  • wholesale or manual invoice flows

LHDN’s current e-Invoice framework requires structured transaction data, official validation, and controlled adjustment handling. Once an e-Invoice is validated, cancellation is only allowed within 72 hours; after that, changes must generally be handled through a new e-Invoice such as a credit note, debit note, or refund note. (Hasil)

That means weak reconciliation is no longer just a month-end irritation. It can become a compliance problem.

This guide explains how to align orders, tax, refunds, and credit notes correctly so your e-Invoice process sits on clean, supportable transaction truth.


Why reconciliation comes before e-Invoice issuance

A lot of businesses start with the wrong question:

  • Which system should submit?
  • Should we use API or portal?
  • Can our ERP connect to MyInvois?

Those are valid questions, but they come after data alignment.

If the underlying transaction trail is weak, faster submission only gives you faster inconsistencies. LHDN’s guideline framework expects taxpayers to maintain accurate source data, and the MyInvois SDK and API structure are built around specific document types, structured references, and field-level validation. (Hasil)

In plain English: if your sales, tax, refunds, and adjustment logic do not reconcile internally, your invoice trail will be difficult to defend later.


First principle: one transaction, one story

A clean reconciliation process means every transaction tells one consistent story across all systems.

That story should answer:

  • what was sold
  • to whom
  • for how much
  • with what tax treatment
  • whether it was later refunded or adjusted
  • which note document was issued
  • and how the accounting reflected it

LHDN’s framework supports normal invoices, credit notes, debit notes, and refund notes as separate document types, with specific treatment for adjustments after validation. The SDK also makes clear that credit notes are for reducing a previously issued e-Invoice without returning money to the buyer, while refund notes apply where monies are returned. (MyInvois SDK)

That distinction matters. If your business uses “refund” casually for every post-sale change, your adjustment logic will become messy very quickly.


What must be reconciled first

There are four foundations you need to align before e-Invoice handling becomes reliable:

  1. orders
  2. tax
  3. refunds
  4. credit note / refund note references

Let’s go through them one by one.


1. Reconcile orders first, by source channel

Before you think about tax or adjustment notes, confirm the transaction base.

For each channel, reconcile:

  • gross order count
  • gross order value
  • cancellations
  • completed or fulfilled transactions
  • net sales population for invoicing or consolidated treatment

This matters because Shopify, Shopee, and TikTok all store transaction flow differently. Shopify often gives better checkout-level control, while marketplace channels may tie the commercial order, settlement, and refund events together less neatly from a finance perspective. LHDN’s e-Invoice framework does not replace the need for a clean source transaction trail; it depends on it. (Hasil)

A common mistake is using one broad “monthly sales” number from management reporting as if it were already invoice-ready. It usually is not. Finance needs a reconciled transaction set first.


2. Reconcile tax logic at line level, not only at summary level

Tax is one of the most common places where e-Invoice readiness quietly fails.

The issue is not only whether tax exists. The issue is whether your tax logic is consistent by item, by channel, and by adjustment type.

LHDN’s guideline framework and SDK rely on structured tax-related fields and code tables, and the SDK FAQ and releases have included clarifications and updates around tax types and related field handling. (Hasil)

What businesses should reconcile first:

  • which items are taxable
  • which are exempt or differently treated
  • whether shipping is taxed consistently
  • whether discounts reduce taxable value correctly
  • whether refunds reverse tax in the same logic as the original transaction

If Shopify treats discounts one way, Shopee seller vouchers another way, and TikTok settlement reports show net values that finance reclassifies later, then your tax trail becomes inconsistent.

That is exactly the kind of issue that turns a simple refund into a complicated adjustment.


3. Reconcile buyer type before deciding invoice flow

Not every sale should be handled the same way from a buyer-data perspective.

The LHDN Specific Guideline distinguishes ordinary identified buyer scenarios from consolidated e-Invoice treatment, including the requirement to use “General Public” and buyer TIN EI00000000010 for consolidated general-public cases. The guideline also shows that receipt reference numbers for the underlying transactions need to be included in the consolidated flow. (Hasil)

That means you should classify your transactions first:

  • B2B with identified buyer
  • B2C with identified buyer requesting an e-Invoice
  • B2C / general public flows that may go into consolidated treatment

If this classification is missing, businesses often end up with:

  • incomplete customer fields
  • late requests for specific invoices
  • unclear treatment between POS and ecommerce
  • weak receipt-to-invoice traceability

This is especially important in omnichannel businesses because customer data quality is rarely the same across Shopify, Shopee, TikTok, and physical sales.


4. Reconcile refunds separately from credit notes

This is one of the biggest mistakes businesses make.

A refund is not always the same thing as a credit note.

Under LHDN’s document logic, a credit note is used to reduce the value of an original e-Invoice where the reduction does not involve returning money to the buyer. A refund note is used where monies are returned. The guideline and SDK both support these as separate e-Invoice document types. (MyInvois SDK)

So finance needs to reconcile each post-sale event by type:

  • price correction without refunding cash
  • returned goods with money returned
  • discount granted after issue
  • cancellation after validation window
  • partial return against original invoice

If your team uses one generic “refund” bucket for all of the above, your adjustment trail will break.

A good starting register should capture:

  • original order ID
  • original validated invoice reference
  • date of adjustment
  • amount
  • whether money was returned
  • whether stock was returned
  • correct adjustment document type

That makes later note issuance far more controlled.


5. Reconcile the original invoice reference for every adjustment

This field is critical.

LHDN’s guidance and the MyInvois FAQ make clear that where multiple original e-Invoices are adjusted using one credit note, debit note, or refund note, the IRBM Unique Identifier Number of each original e-Invoice must be included in the Original e-Invoice Reference Number field. The SDK FAQ also explains how multiple original references are structured in API submissions. (MyInvois SDK)

In operational terms, that means your business must not stop at:

  • order ID
  • refund ID
  • customer name

It must also retain:

  • the validated e-Invoice UUID / unique identifier
  • the link between that UUID and the original transaction
  • the specific adjustment document that affects it

This is where many ecommerce businesses struggle because refunds are usually tracked operationally by order number, not by validated invoice reference. That is fine for customer service. It is not enough for clean adjustment control.


6. Reconcile cancellation window versus adjustment workflow

LHDN allows cancellation of a validated e-Invoice within 72 hours, with justification. After that, no cancellation is allowed; subsequent changes must be made through a new e-Invoice such as a credit note, debit note, or refund note. (Hasil)

This creates a very practical reconciliation need:

  • which issues are still inside the cancellation window
  • which issues have crossed into note-document territory
  • who decides the treatment
  • and whether the accounting follows the same logic

If customer service, finance, and ops are not aligned on this timing, you get inconsistent treatment such as:

  • one case cancelled
  • another case refunded
  • another case adjusted through a note
  • all for similar commercial events

That slows both compliance and month-end close.

A practical control is to include:

  • validation timestamp
  • issue discovery date
  • action deadline
  • final treatment chosen

inside your exception workflow.


7. Reconcile settlement and bank only after order and adjustment truth is clean

A lot of businesses jump too quickly to payout reconciliation.

That is useful, but not enough.

For e-Invoice readiness, your first priority is that the commercial and adjustment truth is correct. Then settlement and bank help prove the financial outcome.

This is especially important in ecommerce and marketplace environments because Shopee and TikTok may deduct refunds and adjustments through later payout cycles, while the original sales happened earlier. That means bank movement alone is not a clean source for invoice logic. (Hasil)

The better sequence is:

  1. reconcile source order truth
  2. reconcile tax truth
  3. reconcile refund / adjustment truth
  4. then reconcile settlement and bank impact

This prevents finance from trying to infer invoice treatment from net payout movements.


Common failure points in practice

Here are the weak spots that usually create the most pain.

Orders are clean, but customer identity is not

This often happens in B2C marketplace flows. Operationally, the sale is fine. From an invoice-data perspective, buyer detail may be incomplete for specific issuance scenarios.

Refund is recorded, but the original invoice reference is missing

This is one of the biggest blockers to clean refund-note handling later.

Tax is summarised at channel level, not mapped at item level

That may be enough for management. It is weak for structured invoice and note logic.

Credit note is used when cash was actually refunded

That creates documentary inconsistency.

One manual spreadsheet maps everything

That usually works until the first partial refund, multiple original invoice reference case, or late adjustment.

Each of these is fixable, but only if the business sees e-Invoice readiness as a reconciliation discipline, not a template exercise.


A practical workflow that works

Here is a finance-first sequence you can actually use.

Step 1: Build the monthly transaction base

By channel, freeze:

  • original transactions
  • cancellations
  • completed transactions
  • refund events

Step 2: Map tax and item treatment

Confirm:

  • item type
  • tax type
  • shipping treatment
  • discount allocation logic

Step 3: Classify buyer population

Split transactions into:

  • identified buyer
  • specific buyer request
  • consolidated general public

Step 4: Register all post-sale changes

Maintain one adjustment register for:

  • refund
  • return
  • discount correction
  • cancellation after validation
  • debit / credit event

Step 5: Link every adjustment to original invoice reference

This is where many businesses need to upgrade their recordkeeping.

Step 6: Only then issue or test invoice / note workflows

At that point, your process is much less likely to break on edge cases.


A simple example

Imagine this sequence for a Shopify order:

  • original order issued and validated as e-Invoice
  • customer returns one item after five days
  • business refunds cash for that returned item

That is no longer a cancellation case. It is now an adjustment case outside the immediate 72-hour window, so the business needs a new adjustment document path, and that adjustment should carry the original validated invoice reference. The correct handling depends on whether cash is returned or value is otherwise reduced without return of money. (Hasil)

If your records only say:

  • order #12345
  • refunded RM50

that is not enough.

You also need:

  • original validated invoice unique ID
  • adjustment document type
  • date
  • reason
  • accounting link

That is what proper LHDN reconciliation looks like in practice.


Final thoughts

LHDN e-Invoice readiness is not only about creating documents.

It is about making sure your transaction chain is strong enough to support the documents you issue later.

For omnichannel businesses, the smartest place to start is not submission.
It is reconciliation.

Reconcile first:

  • orders
  • buyer population
  • tax logic
  • refunds
  • original invoice references
  • and adjustment treatment

Once those are aligned, credit notes and refund notes stop feeling complicated.

They become what they should be:
a structured, traceable reflection of what already happened in the business.

That is the real goal.