Most billing systems were built for single-currency, single-tax-regime companies. The moment you add a customer in Malaysia, an invoice from Indonesia, and a subscription billing to Singapore, your invoicing logic fractures. You need to handle SST (Sales and Service Tax, 6%), PPN (Value Added Tax, 11%), and GST (Goods and Services Tax, 8%) in parallel—each with different rounding rules, cutoff thresholds, and GL posting requirements. Add currency conversion (MYR to IDR to SGD), proration on upgrades and downgrades, and the inability to backdate tax adjustments, and most teams reach for spreadsheets. That's where the leaks begin. This guide maps the exact rules, shows you how to structure your GL, and gives you a working invoice template that passes LHDN, DJP, and ACRA audit trails. The three tax regimes: calculation order, thresholds, and GL posting Malaysia SST (6%) applies to taxable supplies of goods and services. The threshold is RM500,000 annual turnover; below that, you may not be registered. Calculation is straightforward: tax = base amount × 0.06, rounded to the nearest RM0.01. The critical rule: SST is not recoverable on intra-group charges or non-taxable exports—so if you're invoicing a Singapore entity, SST may not apply at all. Indonesia PPN (11%) applies to most goods and services. The threshold is IDR 4.8 billion annual turnover for the prior calendar year; once you cross it, registration is mandatory retroactively. Calculation: tax = base amount × 0.11, rounded to the nearest IDR 100. PPN includes a reverse-charge mechanism for imports and intra-group supplies—if your customer is registered for PPN, they owe the tax, not you. This flips your GL posting. Singapore GST (8%) applies to supplies made in Singapore or imported into Singapore. The registration threshold is SGD 1 million annual turnover; below that, registration is optional but often done anyway for compliance visibility. Calculation: tax = base amount × 0.08, rounded to the nearest SGD 0.01. Singapore uses a simplified input tax credit system—you recover GST paid on inputs directly. GL posting rules by regime Malaysia (SST collected): Debit AR or Cash, Credit Revenue, Credit SST Payable. On payment, debit SST Payable, credit Cash. Indonesia (PPN collected): Debit AR or Cash, Credit Revenue, Credit PPN Payable— only if you are the supplier and not using reverse charge . If reverse charge applies (customer is PPN-registered), post zero tax and add a note in the memo field: 'PPN reversal—customer liable.' Singapore (GST collected): Debit AR or Cash, Credit Revenue, Credit GST Payable. Input tax (GST paid on purchases) posts to a separate GST Input account and offsets GST Payable monthly. The single biggest error: treating all three tax regimes as identical. They are not. PPN reversal, SST export exemptions, and GST input recovery each flip your GL posting. Your audit trail must show why tax was calculated that way, not just that it was. Currency conversion: real-time rates, cutoff dates, and GL impact Recurring billing across currencies requires a stable, auditable exchange rate. The three approaches: Transaction date rate (spot rate): Use the rate on the invoice date. Simple, auditable (pull from your bank or OANDA), but creates daily variance if you issue invoices across multiple days in a billing cycle. Period-end rate (accrual rate): Convert all invoices issued in a month using the rate on the last day of the month. Reduces variance within the period, but requires a 5-day accrual window post-close (many auditors require this for monthly revenue recognition). Fixed rate (monthly/quarterly lock): Announce a fixed rate at the start of the period and use it for all invoices that month. Transparent to customers, but exposes you to FX loss if rates move sharply. For multi-country recurring billing, transaction date rate is most common . Here's why: your customer in Malaysia sees the invoice in MYR on day 1, pays in MYR on day 25. Your customer in Indonesia sees the same invoice in IDR on day 1, pays in IDR on day 25. If you use a period-end rate, your MYR customer has seen one exchange rate but is settling at another—confusion and chargeback risk. GL posting for FX variance: On receipt of payment, if the amount received differs from the invoice amount due to FX movement, post the difference to an FX Gain/Loss account. Do not adjust AR. Example: Invoice issued: IDR 1,100,000 (rate 1 IDR = SGD 0.000083, so SGD 91.30) Payment received 25 days later: IDR 1,100,000 (rate 1 IDR = SGD 0.000082, so SGD 90.20) Post: Debit Cash SGD 90.20, Debit FX Loss SGD 1.10, Credit AR SGD 91.30 Audit trail: your system must log the rate used on the invoice date, the rate on the payment date, and the variance amount. This is non-negotiable for ACRA and DJP reviews. Proration logic: upgrades, downgrades, and tax recalculation Proration is where most multi-country teams fail. The rule: when a customer upgrades or downgrades mid-cycle, you must calculate tax on th