If you run a services firm across Malaysia and Singapore, you're probably invoicing the same client three different ways: a monthly retainer in MYR, a one-off project in SGD, and hourly time and materials at a rate that might live in another accounting category entirely. Each has its own tax treatment, currency, and GL posting logic. Most platforms—even the ones that claim to handle invoicing—break somewhere in this flow. You end up copying numbers into spreadsheets, reconciling tax codes manually, and praying your accountant doesn't find a mismatch. This playbook shows you how to structure retainer, project, and hourly billing on a single platform, keep taxes correct by country, and eliminate the manual GL posts that eat your team's time. Why three billing models break in most tools A retainer is a fixed monthly payment—typically invoiced on the first of the month, recognized as revenue linearly, and taxed as a service. A project is a time-bounded deliverable billed on completion or milestone, often in a different currency because the client is regional or offshore. Hourly billing is open-ended: you log time, apply a multiplier, and invoice weekly or monthly. The problem emerges when you try to post all three to the same GL in one accounting system: Currency mismatch: Retainer in MYR hits revenue on day 1. Project in SGD might not close for 60 days and needs to be recognized over the delivery period. Hourly rates in a third currency depend on when time is logged and which client's labor rate applies. Your GL sees three separate entities with three exchange-rate windows. Tax divergence: Malaysia applies SST (Sales and Service Tax) at 6% on services. Singapore applies GST at 8%, but only on taxable supplies. Hourly time to one client might be GST-exempt if they're overseas; the same firm's project for a local entity is not. Most invoicing tools apply a single tax rule to all line items. Revenue recognition timing: A retainer is revenue the moment you invoice. A project milestone might be revenue only when work is accepted. Hourly is revenue when time is logged, but your invoice is sent 30 days later. These three timelines rarely align in a single invoice template. GL posting: Retainer revenue goes to one GL account (Service Revenue – Retainer). Project revenue goes to another (Service Revenue – Project). Hourly billing, if it's mixed on one invoice, needs to split across both accounts based on which hours belong to which engagement. Manual entry here introduces errors. The moment you mix two billing models on a single invoice to a single client, tax and GL reconciliation stop being automatic. They become manual. Structure your invoicing model first Before you pick a tool, decide: Will you invoice retainer, project, and hourly on separate invoices to the same client, or combined? Separate invoices (recommended): Invoice the retainer on the 1st. Invoice the project when a milestone closes. Invoice hourly on the 15th. Each invoice has a single tax regime, a single GL posting, and a single revenue recognition date. Your accountant loves this. Your invoicing tool only needs to track one billing type per invoice. Combined invoice (common but risky): Bundle retainer + project + hourly on a single invoice to reduce invoice clutter. This saves your client a few emails but costs you dearly: you now need to split tax calculation by line item (SST on retainer, SST on project hours, GST on project deliverables if applicable), and your GL post becomes a multi-leg journal entry that's hard to automate. If you must combine, commit to a rule: retainer lines first, project deliverables second, hourly time last. This makes tax rules stackable and GL posts predictable. Build line-item tax rules by country and billing type In Malaysia, services are SST-taxable at 6%. In Singapore, most services are GST-taxable at 8%. But the devil is the detail: Retainer in MYR: Taxable at SST 6% in Malaysia. If the retainer is a management fee or consulting retainer, SST applies. If it's a subscription to software or access, SST still applies. Project in SGD billed to a Singapore entity: GST 8% applies. If the project involves physical goods (training materials, deliverables), you may have a goods + services split and different rates. Hourly billing in MYR to a Malaysian client: SST 6% on the labor. If the client is overseas or GST-registered, the rule may differ—e.g., zero-rated if it's a service to an overseas customer. Hourly billing in SGD to a Singapore business: GST 8% on time-based services. But if the client is outside Singapore or the engagement is deemed a supply to an overseas entity, GST does not apply. Your platform must allow you to: Define tax rules that vary by country of invoice issue (Malaysia vs Singapore). Assign tax rules by line-item category (Retainer Service, Project Deliverable, Time and Materials). Override tax for specific clients (e.g., a GST-exempt overseas client stays zero-rated even if invoiced in SGD). Post the