accounting2026-07-28

Multi-Currency Invoicing & Foreign Exchange Gain/Loss Double-Entry Journaling

A Malaysia-focused guide to multi-currency invoices, realized and unrealized foreign exchange gains or losses, month-end revaluation, settlement journals, and MyInvois currency fields.

GetPay Accounting Team
Updated: 2026-10-15

TL;DR (Key Takeaways)

  • For a Malaysian business whose functional currency is MYR, record a USD or SGD invoice in MYR at the transaction-date rate while retaining the original currency, foreign amount, rate, date, and evidence.
  • A foreign-currency receivable or payable is a monetary item: retranslate its open balance at the reporting-date closing rate and recognise the exchange difference in profit or loss; do not retranslate the original revenue or expense.
  • On settlement, clear the receivable or payable at its latest MYR carrying amount, record the actual MYR cash, and post the difference as a realized foreign exchange gain or loss.
  • GetPay does not currently provide a complete per-invoice FX accounting engine: its invoice record has no document-currency or exchange-rate field, its ledger operations are RM-based, and its MyInvois mapper currently submits MYR only.

Record two currencies, but keep one functional-currency ledger

A foreign-currency invoice is not accounted for by changing the currency symbol on an MYR amount. The business must preserve both:

  1. the contractual amount in the invoice currency, such as USD 10,000; and
  2. the amount recognised in the entity's functional currency, such as MYR 42,000.

The functional currency is the currency of the primary economic environment in which the entity operates. It is not automatically MYR merely because the company is incorporated in Malaysia, although MYR will be the functional currency for many Malaysian SMEs. The examples below assume MYR after the entity has made that assessment.

Use a documented rate convention and state the quotation direction. This article expresses every rate as MYR for one unit of foreign currency:

functional-currency amount
= foreign-currency amount × MYR per foreign-currency unit

At an illustrative rate of MYR 4.20 per USD, USD 10,000 is therefore MYR 42,000. A system or spreadsheet that stores only 4.20 without the source currency, target currency, rate date, and quotation direction leaves an avoidable audit ambiguity.

At minimum, retain these fields for every foreign-currency document:

FieldPurpose
document_currencyThe contractual invoice currency, for example USD or SGD
foreign_amountThe amount payable in that currency
functional_currencyThe entity's ledger currency, assumed MYR here
transaction_rateThe rate used on initial recognition
rate_date and rate_sourceEvidence for why that rate was used
functional_amountThe MYR amount posted at initial recognition
open_foreign_amountThe foreign amount still unpaid
closing_rateThe reporting-date rate used for an open monetary item
settlement_rate and cash_amountThe economics of the eventual receipt or payment

These are workflow fields, not a claim that GetPay currently exposes each named field.

How is a USD sales invoice recorded on the invoice date?

Assume a Malaysian service company has MYR as its functional currency and invoices a customer USD 10,000. The service is recognised on 15 November, when the illustrative spot rate is MYR 4.20 per USD. Taxes are omitted from the examples so the FX mechanics remain visible.

USD 10,000 × MYR 4.20 = MYR 42,000

The initial journal is:

AccountDebit (MYR)Credit (MYR)
Accounts Receivable — customer42,000.00
Service Revenue42,000.00
Total42,000.0042,000.00

The receivable is a monetary item because it will be settled in a fixed amount of currency. The revenue is initially measured using the transaction-date rate. Do not wait until cash arrives to recognise the sale if the applicable revenue-recognition conditions were already met.

Do not overwrite the invoice rate later. Preserve USD 10,000 at MYR 4.20 as the original layer. Later rates measure the outstanding monetary item; they do not rewrite the historical invoice or erase the rate that supported the original journal.

If an exchange rate approximating the actual transaction-date rate is used for operational convenience, the policy must be reasonable and consistently applied. A monthly average is not suitable when rates fluctuate significantly or when it does not approximate the actual rate for the transaction. The rate used for accounting and any rate required for tax or e-Invoice conversion should remain separately traceable if their rules differ.

What is an unrealized forex journal entry at month end?

Suppose the USD 10,000 invoice remains fully unpaid on 30 November and the illustrative closing rate is MYR 4.30 per USD:

Closing MYR value: USD 10,000 × MYR 4.30 = MYR 43,000
Existing carrying amount:                         MYR 42,000
Increase in receivable:                            MYR 1,000

The receivable has increased in MYR terms, producing an exchange gain for the seller:

AccountDebit (MYR)Credit (MYR)
Accounts Receivable — FX revaluation1,000.00
Unrealized Foreign Exchange Gain1,000.00
Total1,000.001,000.00

“Unrealized” is a useful management-account label because the invoice is still open. It does not mean the difference is excluded from the period's profit or loss. Under the normal IAS 21 mechanics, foreign-currency monetary items are retranslated at the reporting-date closing rate and the exchange difference is recognised as it arises, subject to the standard's specific exceptions.

Only retranslate the open monetary balance. Do not also increase revenue from MYR 42,000 to MYR 43,000; doing both would count the exchange movement twice. The MYR 1,000 is FX income, not an extra sale.

For a partial payment, revalue only the foreign amount still outstanding. If USD 4,000 was settled before month end, the closing calculation is based on the remaining USD 6,000, while the settled portion has its own realized difference.

How is the realized gain or loss recorded on settlement?

Assume the receivable was carried at MYR 43,000 after the November close. The customer pays USD 10,000 in December and the business receives MYR 42,500 at an illustrative settlement rate of MYR 4.25 per USD:

AccountDebit (MYR)Credit (MYR)
Bank42,500.00
Realized Foreign Exchange Loss500.00
Accounts Receivable43,000.00
Total43,000.0043,000.00

The MYR 500 settlement loss is measured against the receivable's latest carrying amount, not blindly against the original MYR 42,000. Across both periods, the transaction produced a net MYR 500 exchange gain: MYR 1,000 gain at November close less MYR 500 loss on December settlement.

Some ledgers reverse the prior revaluation at the start of the next period and calculate settlement against the original layer. Others retain the revalued carrying amount. Either workflow can produce the same cumulative result if it is applied completely. The dangerous hybrid is to leave the MYR 1,000 revaluation in Accounts Receivable and then also calculate a MYR 500 gain from the original MYR 42,000; that overstates both the receivable movement and FX income.

Bank fees are separate from exchange differences. If the bank converts USD 10,000 at MYR 4.25 but remits only MYR 42,450 after a documented MYR 50 charge, the settlement entry is:

AccountDebit (MYR)Credit (MYR)
Bank42,450.00
Bank Charges50.00
Realized Foreign Exchange Loss500.00
Accounts Receivable43,000.00

Do not bury a separately evidenced fee inside the FX account merely because both affect the net cash received.

Why does an SGD settlement create a gain?

Assume an SGD 20,000 invoice is issued and recognised at MYR 3.45 per SGD, with no intervening reporting date:

Invoice-date receivable: SGD 20,000 × MYR 3.45 = MYR 69,000
Settlement cash:         SGD 20,000 × MYR 3.48 = MYR 69,600
Realized gain:                                         MYR 600
AccountDebit (MYR)Credit (MYR)
Bank69,600.00
Accounts Receivable69,000.00
Realized Foreign Exchange Gain600.00
Total69,600.0069,600.00

The foreign amount did not change. The gain exists because each SGD bought more MYR when the customer settled. For a seller with an SGD receivable, strengthening SGD against MYR creates a gain; weakening SGD creates a loss.

For a foreign-currency payable, the direction is reversed. If a USD 5,000 supplier bill was initially recognised at MYR 4.20, Accounts Payable is MYR 21,000. If it is settled at MYR 4.30, MYR 21,500 leaves the bank:

AccountDebit (MYR)Credit (MYR)
Accounts Payable21,000.00
Realized Foreign Exchange Loss500.00
Bank21,500.00

A stronger USD helps a USD receivable but hurts a USD payable. This directional check catches many sign errors before posting.

How should realized and unrealized FX be reconciled?

Maintain a roll-forward by invoice or bill, not merely one net FX total:

Opening functional-currency carrying amount
+ new foreign-currency documents translated at transaction-date rates
− derecognised carrying amount of settlements
± reporting-date exchange differences
= closing functional-currency carrying amount

For every open item, reproduce:

open foreign amount × closing rate = closing MYR carrying amount

Then connect every difference to one of four causes: a new document, a settlement, a credit or debit adjustment, or a closing-rate revaluation. If a difference cannot be assigned, leave it as an exception rather than posting a balancing FX amount.

Useful controls include:

  • one rate source and quotation convention documented for each rate purpose;
  • no revaluation of an item after its foreign balance reaches zero;
  • partial settlements reducing both the foreign open amount and the functional carrying amount;
  • separate gain and loss presentation where the chart of accounts requires it;
  • bank charges and conversion spreads supported independently from FX translation;
  • revaluation journals identified by period so they can be reversed or carried forward consistently; and
  • foreign-currency subledger totals tied to the functional-currency general ledger.

What does LHDN require for a foreign-currency e-Invoice?

LHDN's MyInvois Invoice v1.1 data specification provides:

  • DocumentCurrencyCode for the currency in which the e-Invoice monetary values are stated;
  • optional TaxCurrencyCode;
  • TaxExchangeRate/CalculationRate where applicable;
  • TaxExchangeRate/SourceCurrencyCode equal to the document currency; and
  • TaxExchangeRate/TargetCurrencyCode as MYR.

The MyInvois specification describes the calculation rate as the rate used to convert non-Malaysian currency to MYR. LHDN's published e-Invoice guidance says the supplier should first follow applicable legal or tax exchange-rate requirements; where none applies, the supplier may follow a documented internal policy. The rate must be provided when the e-Invoice needs an MYR-equivalent conversion.

That filing rate is part of the e-Invoice evidence. Preserve it even if the customer's bank settles at a different rate later. The settlement rate creates the accounting exchange difference; it does not retrospectively change the submitted document.

GetPay's current standard UBL mapper does not implement that foreign-currency branch. It sets DocumentCurrencyCode and every monetary currencyID to MYR, and it does not emit TaxExchangeRate. Therefore, do not label an existing GetPay submission as USD or SGD merely by adding a note, and do not assume that changing the company setting alters the payload. A foreign-currency MyInvois workflow needs a filing path that actually supports LHDN's currency fields and validation requirements.

What multi-currency support exists in GetPay today?

The current code supports several currency-adjacent pieces, but not a complete multi-currency invoicing and FX-revaluation cycle:

AreaVerified current behaviourBoundary
Company settingsThe settings UI offers MYR, USD, and SGDThis is one company-level currency, not a currency per invoice
Price lists and purchase ordersCurrency is copied from the company record and protected as company currencyForeign-currency price lists are not enabled
Bank transactionsRows can retain currency and fx_rate; the UI can display a non-MYR source badgeThe five supported domestic statement parsers write MYR and rate 1
Sales invoicesAmounts, tax, payments, and sale journals are recorded without invoice-currency or invoice-rate fieldsNo automatic realized or unrealized FX calculation exists
MyInvois UBLStandard invoices are mapped to MYRNo foreign DocumentCurrencyCode or TaxExchangeRate branch exists
Ledger previewsCurrent money operations emit RMA display helper accepting another prefix is not an FX accounting engine

For a foreign-currency transaction today, maintain a controlled supporting schedule, post the MYR journals using the business's approved accounts and period controls, and attach or reference the underlying invoice, rate evidence, revaluation, settlement, and bank evidence. Do not infer product automation from a currency selector or display badge.

Month-end foreign-currency close checklist

  1. Confirm the entity's functional currency and the rate policy approved for transaction, reporting, tax, and e-Invoice purposes.
  2. List every open foreign-currency receivable, payable, and foreign-currency cash balance by currency.
  3. Tie each foreign amount to its invoice, bill, credit note, payment, and prior-period carrying amount.
  4. Obtain the reporting-date closing rate from the documented source and record its quotation direction.
  5. Retranslate only open monetary items and post the balancing exchange difference to profit or loss.
  6. Do not retranslate historical revenue or expense a second time.
  7. Separate actual bank fees from exchange gains or losses.
  8. At settlement, clear the latest carrying amount, record actual functional-currency cash, and recognise the residual realized difference.
  9. Reconcile opening carrying amount to closing carrying amount by value, including partial settlements.
  10. For MyInvois, verify that the actual filing path supports the required document currency and exchange-rate fields before submitting.

Frequently Asked Questions

What is the difference between realized and unrealized foreign exchange gain or loss?

An unrealized exchange difference arises when an open foreign-currency monetary item is retranslated at a reporting-date closing rate. A realized difference arises when the receivable or payable is settled. Both normally affect profit or loss; the separate labels are useful for reconciliation but do not make the month-end difference optional.

How do I journal a foreign-currency customer invoice?

Assuming MYR is the functional currency, translate the foreign invoice at the transaction-date spot rate, debit Accounts Receivable and credit Revenue for the MYR equivalent, with any tax handled under the applicable tax policy. Keep the foreign amount and rate as supporting dimensions because the general ledger entry alone cannot reproduce the later FX calculation.

Do I revalue foreign-currency sales revenue at month end?

No. The open receivable is a monetary item and is retranslated at the closing rate. Revenue initially recorded at the transaction-date rate is not simply rewritten each month. The change in the receivable's MYR carrying amount is recognised as an exchange gain or loss.

Can a foreign-currency e-Invoice be submitted to LHDN MyInvois?

LHDN's Invoice v1.1 specification contains DocumentCurrencyCode and, where applicable, TaxExchangeRate fields for conversion to MYR. The rate must follow applicable legal or tax requirements or the supplier's documented policy where those do not apply. However, GetPay's current UBL invoice mapper fixes the document and monetary currency IDs to MYR and does not emit TaxExchangeRate, so its present submission path should not be represented as foreign-currency capable.

Does changing GetPay's company currency to USD or SGD enable multi-currency invoice accounting?

No. GetPay exposes MYR, USD, and SGD as company-level settings and uses company currency on certain purchasing and price-list records, but the current invoice record has no per-document currency or FX-rate field. Changing the company setting does not make the MyInvois mapper or sale-journal logic perform foreign-currency translation.

Sources & Ground Truth

Direct LHDN MyInvois Submission Engine

Ready to automate your Malaysian e-invoicing & bookkeeping?

GetPay handles 100% compliant e-invoices, multi-bank reconciliation, and statutory payroll out of the box.

Get Started Free

Related Articles