Recurring revenue sounds simple until you invoice across Malaysia, Indonesia, and Singapore on the same customer contract. Add a mid-cycle add-on, a currency fluctuation, and a tax rate change, and your invoice breaks. Most SaaS platforms and hybrid service businesses in Southeast Asia get this wrong—they invoice the base recurring amount, then scramble to reconcile tax, proration, and FX drift in a spreadsheet. The fix is not more spreadsheets. It's a clear model that separates the billing cycle from the tax calculation, locks in the exchange rate at the right moment, and prorates line-by-line before tax is applied. This guide walks through the real mechanics: how SST, PPN, and GST stack on recurring charges, when and how to prorate mid-cycle, and where currency rounding kills your GL reconciliation. The tax trap: SST, PPN, and GST on recurring charges Malaysia's SST (Sales and Service Tax), Indonesia's PPN (Pajak Pertambahan Nilai), and Singapore's GST all apply to recurring revenue—but the timing and calculation differ. Malaysia (SST): SST applies at invoice date. If your subscription renews on the 1st of each month, SST is calculated on that day's rate. There is no retroactive adjustment. A monthly SaaS subscription billed at RM 1,000 carries 6% SST = RM 60, for a total of RM 1,060. Indonesia (PPN): PPN (10%) must be itemized and reported via e-Faktur in real-time. A monthly retainer billed at IDR 5,000,000 carries 10% PPN = IDR 500,000, total IDR 5,500,000. The invoice must include the PPN in the line-item, not as a separate charge added at the end. This matters for LHDN reconciliation. Singapore (GST): GST (8%) applies to standard-rated services. If you bill a subscription to a Singapore entity on the 15th of the month, GST is calculated on that date's amount. Unlike Malaysia and Indonesia, Singapore allows input tax recovery for GST-registered businesses, which changes the effective cost but not the invoice calculation. The critical rule: Tax is calculated at invoice date, not at service start. If your subscription renews on March 1st but the invoice is issued March 5th, tax is calculated on March 5th. Most platforms calculate tax at service start, which creates a mismatch in reconciliation. Mid-cycle changes and proration: The real math A customer signs a RM 2,000/month subscription on January 10th. On January 20th, they add a RM 500/month feature. Most platforms add the RM 500 to the next invoice cycle and ignore the 10 days already consumed. Correct proration: Calculate the daily rate: RM 500 ÷ 31 days (January) = RM 16.13/day Count consumed days: January 20–31 = 12 days Prorate amount: RM 16.13 × 12 = RM 193.56 Add to current invoice: Issue a prorated invoice for RM 193.56 (plus 6% SST = RM 11.61), total RM 205.17 Adjust next cycle: February invoice includes the full RM 2,500 base + RM 500 add-on = RM 2,500 with SST The trap: If you prorate after tax, you create a fractional SST liability that doesn't match your tax return. Always prorate the base amount first, then apply tax to the prorated total. For hybrid models (retainer + hourly overage), the math compounds. A customer on a RM 3,000 monthly retainer with RM 150/hour overage billed at RM 600 overage in January should be invoiced as: Retainer: RM 3,000 + 6% SST = RM 3,180 Overage: RM 600 + 6% SST = RM 636 Total: RM 3,816 Do not combine the retainer and overage, apply a blended tax, and call it done. Each component should be taxed separately to survive an audit. Currency fluctuation and lock-in timing A customer in Malaysia pays in USD. Your contract says USD 300/month. On renewal day, the MYR/USD rate is 4.50. Invoice amount = USD 300. When you convert to MYR for GL posting, do you use 4.50, or do you wait for the bank settlement rate? The answer matters. Most platforms use invoice-date rates, which can diverge from settlement rates by 0.5–2%, creating a rounding variance between AR and GL. Correct approach: Lock the exchange rate at invoice date for reporting and GL posting. Record the invoice in MYR at 4.50 (= MYR 1,350). When the customer pays and the settlement rate is 4.48, record the FX variance as a separate line in GL—not as a reduction in revenue. Example for RM/USD recurring billing: Invoice date: Jan 10, rate 4.50, invoice USD 300 = MYR 1,350 GL entry: DR AR (MYR 1,350), CR Revenue (MYR 1,350) Payment received: Jan 15, rate 4.48, USD 300 received = MYR 1,344 GL entry: DR Cash (MYR 1,344), CR AR (MYR 1,350), CR FX Gain (MYR 6) This keeps revenue clean and isolates FX noise, which is critical for recurring revenue analytics and tax compliance across three countries. Multi-country invoicing on one contract A regional SaaS company bills a holding company registered in Singapore, with subsidiary entities in Malaysia and Indonesia. The contract specifies that 40% of the monthly charge applies to Singapore, 35% to Malaysia, and 25% to Indonesia. How do you invoice this? The naive approach: One invoice with the total amount and one tax rat