Your trial balance has a line on it: Accounts receivable — RM8,000. It is correct, it is useful for the balance sheet, and it cannot answer the only question you actually have on a Monday morning: who owes me that, and how late are they?
RM8,000 owed by one customer sixty days overdue and RM8,000 spread across four customers who all pay on time are the same number and completely different businesses. The general ledger has no way to tell you which one you are.
The naive fix, and why it collapses
The instinct is to split the account. If you need per-customer detail, create per-customer accounts: "Receivable — Lim Enterprises", "Receivable — Tan Trading", one for each. The GL already supports as many accounts as you like.
Try it for a year and watch what happens.
- The chart of accounts becomes unreadable. A chart with 15 meaningful accounts and 400 customer accounts is not a classification scheme any more, it is a contact list with balances.
- It never stops changing. Every new customer is a schema change to your chart of accounts. Every customer who leaves is either a dead account you must keep forever or a deletion that orphans historical entries. The chart of accounts is supposed to be the stable part of your books — the thing whose comparability across years lets you say "marketing spend is up 12%".
- It conflates two different kinds of fact. An account answers what kind of thing is this? — an asset, a category of expense, a form of equity. A customer answers who is the counterparty? Those change on completely different timescales and are used by completely different readers. Merging them means neither dimension can be queried cleanly: you cannot ask "total receivables" without summing 400 accounts, and you cannot ask "everything involving Lim Enterprises" without knowing that Lim also appears in deposits and credit notes.
The failure here is a general one. Putting a high-cardinality, fast-churning identity into a low-cardinality, slow-changing classification destroys the classification.
Subledgers: one account, detail beside it
The solution splits the two dimensions apart.
The GL keeps one receivables account. It is called a control account, and its job is to carry the total. Alongside it, outside the GL, sits the accounts receivable subledger: one record per customer, with the individual invoices, credit notes and payments that make up each balance.
Binding them is a single invariant:
The control account balance equals the sum of all balances in its subledger. Always, exactly.
That is not documentation. It is a check you can run, and it is the reason the design is safe rather than merely tidy. If the AR control account says RM8,000 and the customer balances add to RM7,650, you have not discovered a business fact. You have discovered a defect — an invoice that posted to the GL but never landed in the subledger, a payment applied twice, a manual entry someone posted straight to the control account bypassing any document. There is no legitimate state of the world in which those two figures disagree, which is what makes the comparison worth automating.
Payables works identically, mirrored: one Accounts payable control account, one subledger record per vendor.
The invoice lifecycle through this lens
Now the double-entry mechanics of a sale become easy to reason about, because there are two separate events, not one.
You issue an invoice for RM8,000. You have done the work; the customer owes you. Two facts:
- Debit Accounts receivable RM8,000 — a new asset, a right to collect.
- Credit Revenue RM8,000 — you earned it.
Revenue is recognised here, at the point of performance, not when the money shows up. Simultaneously, an RM8,000 entry appears in that customer's subledger record.
Three weeks later they pay. Nothing new has been earned. What changed is the form of the asset:
- Debit Bank RM8,000 — cash arrives.
- Credit Accounts receivable RM8,000 — the right to collect is extinguished.
Total assets are unchanged. Revenue is untouched.
That second point is the single most common beginner error, and it comes from bank-statement thinking: money landed, so surely that is income. Credit revenue again and you have recorded RM16,000 of sales for RM8,000 of work, and the receivable never clears — it sits there forever, quietly wrong, on a balance sheet that still balances.
Revenue is credited exactly once per sale, at issue. Everything after that is asset shuffling.

