You're billing ₹50L in annual recurring revenue across Malaysia (MYR, SST 6–10%), Singapore (SGD, GST 8%), and Indonesia (IDR, PPN 11%). Same customer base. Same invoice line, three different tax rates, three different settlement currencies, three different GL ledgers. Your month-end close reveals an ₹8L tax discrepancy. Your invoicing platform says the numbers reconcile. Your accountant says they don't. Nobody is wrong and everyone is frustrated. This happens because most billing platforms—even expensive ones—treat multi-currency recurring revenue as a static math problem. It isn't. Currency settlement happens on T+2, tax accrual happens on invoice date, proration happens mid-cycle, and GL splits happen across three charts of accounts. The reconciliation gap isn't a bug in your tool. It's a gap in how the tool models cash vs. accrual vs. settlement timing. Here's how to architect recurring billing that reconciles. The three-layer model: invoice date, accrual date, settlement date Every recurring invoice in a multi-currency setup lives in three moments: Invoice date (day 1): You issue the invoice. Tax is calculated based on customer location (MYR, SGD, or IDR). The invoice amount is locked. GL recognizes revenue and tax payable. Accrual date (day 1): Same as invoice date for most SaaS. But if your contract says payment is due net-30, accrual doesn't equal cash. Your GL shows accounts receivable, not cash. Settlement date (T+2): Payment arrives in your merchant account. By now, the exchange rate has moved. If you invoiced ₹50L MYR on day 1, by day 3 that MYR is worth ₹47.8L or ₹51.2L depending on the rate. Your GL recorded ₹50L. Your bank shows a different number. That's your reconciliation gap. Most platforms collapse these three dates into one. They record the invoice amount in MYR, then post settlement in MYR. They never touch the exchange-rate variance. By month-end, if you've settled 20 invoices across three currencies, you're carrying unreconciled FX variance. First step: Demand that your invoicing platform (or your accounting system) track exchange-rate variance separately. If it doesn't, you're reconciling by hand. Tax calculation: the order matters SST in Malaysia, GST in Singapore, and PPN in Indonesia are not the same rule applied three ways. They have different bases, different exemptions, different rounding rules. Malaysia (SST): Base: gross invoice amount (before tax) Rate: 6% or 10% depending on service type (software is typically 6%) Rounding: to nearest RM 0.01 per line item GL split: invoice total + SST payable separately Singapore (GST): Base: gross invoice amount Rate: 8% Rounding: to nearest SGD 0.01 per invoice (not per line) GL split: invoice total + GST payable separately Indonesia (PPN): Base: gross invoice amount Rate: 11% Rounding: to nearest IDR 1 per line item GL split: invoice total + PPN payable separately If you calculate tax on the invoice total and then round, you get one result. If you calculate tax per line and then sum, you get a different result. On a 12-line recurring invoice across three currencies, those rounding differences add up. Rule: Calculate tax per line item in each currency, round to local precision, then sum. Do not round the invoice total first. GL entry splits for a single recurring invoice Let's model a real invoice. Customer in KL (MYR), Singapore (SGD), and Jakarta (IDR) all on the same monthly subscription. Example: ₹50L annual recurring revenue split • MYR customer: RM 50,000/month (₹3L equivalent) • SGD customer: SGD 15,000/month (₹2.5L equivalent) • IDR customer: IDR 500,000,000/month (₹2.5L equivalent) All invoiced on the 1st, settlement T+2 on the 3rd. When you issue three invoices on day 1, here's what hits your GL: MYR Invoice (SST @ 6%): Dr. Accounts Receivable MYR: RM 53,000 Cr. Revenue MYR: RM 50,000 Cr. SST Payable MYR: RM 3,000 SGD Invoice (GST @ 8%): Dr. Accounts Receivable SGD: SGD 16,200 Cr. Revenue SGD: SGD 15,000 Cr. GST Payable SGD: SGD 1,200 IDR Invoice (PPN @ 11%): Dr. Accounts Receivable IDR: IDR 555,000,000 Cr. Revenue IDR: IDR 500,000,000 Cr. PPN Payable IDR: IDR 55,000,000 All three GL entries are in local currency. Your consolidated GL will have six line items (three receivables, three tax payables) in three currencies. Your trial balance doesn't balance until you convert all three back to your reporting currency at day-1 rates. Now, on day 3, settlement arrives. MYR arrived at a rate of 0.0261 (worse than the 0.0262 you used on day 1). Your settlement is RM 53,000 × 0.0261 = ₹1.38L. Your AR was ₹1.39L. You have a ₹10K FX loss. That loss needs to go somewhere. Day 3 settlement GL entry: Dr. Cash INR: ₹1.38L Dr. FX Loss: ₹10K Cr. Accounts Receivable INR: ₹1.39L That FX loss is your reconciliation gap. If you're not tracking it per invoice, per currency, it vanishes into a consolidated FX variance line and becomes impossible to audit. Proration and mid-cycle changes: the math breaks here Recurring subscriptions don't always renew