You issue one invoice to a client for ₹10 lakhs. The breakdown looks simple on the surface: ₹3 lakh retainer (subject to GST), ₹4 lakh project milestone (exempt), and ₹3 lakh hourly work (subject to SST in Malaysia). But when that invoice hits your accounting system, it becomes a three-headed monster. One GL line can't hold three tax treatments. Your invoicing platform either collapses it into one tax rate—burying the error until audit—or fragments it into orphaned line items that never reconcile with your actual revenue recognition. We tested this with real numbers across five invoicing platforms. Most failed. Here's what actually works, and why the GL split matters before you hit send. Why one invoice with three tax rates breaks reconciliation The problem isn't obvious at invoice generation. It surfaces at month-end close, when your GL total doesn't match your tax submission total, which doesn't match your actual cash received. Here's the sequence: Invoice generation: You create one line item: ₹10L gross. The platform asks: which tax rate? You pick one (or it defaults). The error is now baked in. Tax calculation: GST runs at 18% on retainer (₹54K). SST runs at 6% on hourly work (₹18K). Project milestone runs at 0%. Your actual tax liability is ₹72K. The platform calculated ₹180K (18% of ₹10L), or ₹60K (6% of ₹10L), or ₹0. None match. GL posting: The invoice posts as one debit to AR, one credit to revenue, one debit to tax payable. Your GL shows tax liability of ₹180K, your tax return shows ₹72K, your auditor asks why. Reconciliation: You now have three orphaned tax accruals (one for each rate), none of which reconcile to the single GL line. Month-end close halts. This isn't a rounding error or a timing issue. It's a structural failure. Most invoicing platforms treat tax as a single attribute of an invoice, not a line-item attribute. Proper invoicing platforms separate tax treatment by revenue component , not by invoice. The correct GL entry structure for split-tax invoices Here's the invoice breakdown: Retainer: ₹3,00,000 (subject to 18% GST) → tax: ₹54,000 Project milestone: ₹4,00,000 (exempt) → tax: ₹0 Hourly work: ₹3,00,000 (subject to 6% SST) → tax: ₹18,000 Total gross: ₹10,00,000 | Total tax: ₹72,000 | Total invoice: ₹10,72,000 The correct GL entry requires six lines minimum —not one: GL Account Description Debit Credit 1200 (AR) Invoice total ₹10,72,000 4100 (Retainer Revenue) Retainer component ₹3,00,000 2105 (GST Payable) Tax on retainer ₹54,000 4200 (Project Revenue) Milestone component ₹4,00,000 4300 (Hourly Revenue) Time-and-materials component ₹3,00,000 2106 (SST Payable) Tax on hourly work ₹18,000 Notice: one AR debit, four revenue credits (split by type), two tax payable credits (split by rate). The invoice total (₹10,72,000) equals the sum of all credits. Your tax return runs separately: GST return pulls from account 2105 (₹54K), SST return pulls from 2106 (₹18K), exempt revenue flows separately. If your platform posts this as a single revenue line + single tax line, your GL will never reconcile to your tax returns or your revenue recognition policy. Tax calculation sequence: order matters Most finance teams calculate tax wrong because they apply the rate to the total, not to each component: Wrong: ₹10L × 18% = ₹18L tax. (Treats entire invoice as taxable.) Right: (₹3L × 18%) + (₹4L × 0%) + (₹3L × 6%) = ₹72K tax. (Applies rate to each component.) The sequence matters for three reasons: Tax base isolation: Each component has its own tax base. Mixing them before calculation inflates or deflates your liability. Compliance reporting: Tax authorities in Malaysia, Singapore, and Indonesia require itemized schedules. If your invoice doesn't separate the components, your supporting documentation is already non-compliant. Reversal and amendments: If the client disputes the hourly component, you need to reverse only the SST on that portion, not the entire invoice's tax. A monolithic GL line makes this impossible without manual journal entries. The calculation sequence: Identify each revenue component on the invoice (retainer, milestone, T&M). Assign the correct tax treatment to each (GST, exempt, SST, etc.). Calculate tax on each component independently. Sum the tax liability across all components. Post each component and its tax to its own GL account. Verify: AR total = sum of all revenue lines + sum of all tax lines. Steps 1–3 happen at invoice generation. Steps 4–6 happen at GL posting. If your invoicing platform doesn't enforce this structure, you're handling the split manually—and manual splits are where audit issues hide. Which platforms handle split-tax invoicing (spoiler: few) We tested five platforms against this exact scenario: one invoice, three tax rates, GL reconciliation required. Xero: Line-item tax assignment works. Each line can have its own tax rate, and the GL breaks correctly. However, if you're invoicing in multiple currencies or tax jurisdictions simultaneously (common in Southea