DexVee
Troubleshooting

Why Your Receivables Don't Match the Ledger

Your AR outstanding and debtors ledger disagree. The usual causes: unapplied receipts, unbooked TDS, credit notes, drafts and migrated balances, and fixes.

DexVee Team16 Oct 2026 8 min read

Your accounts receivable report says customers owe you ₹18.4 lakh. The debtors control account in your ledger says ₹15.9 lakh. This is one of the most common month-end problems in Indian finance teams. It almost never means money has gone missing. It means the two numbers are counting different things. Here is how to find the difference, one cause at a time.

Check whether draft, cancelled and void invoices are in the total

The quickest win. Many AR reports are simply "invoice total minus amount paid" summed over every invoice in the system. That sum quietly includes drafts that were never sent, invoices that were cancelled or voided, and test or duplicate documents someone created and abandoned. None of these were ever posted to the ledger, so the AR report runs high.

Fix: define outstanding as issued invoices only (sent, overdue or partly paid) and exclude drafts, cancelled, void and archived records explicitly. If the gap shrinks a lot, your report logic was the problem, not your books.

Check how credit notes are being counted

A credit note posted in the ledger reduces what the customer owes. But if nobody applied it to the original invoice in the billing system, that invoice still shows its full balance in the AR report. The reverse also happens: a credit note raised in billing that never reached the ledger.

Under GST, an issued tax invoice can't simply be edited or deleted. Corrections go through a credit note under section 34 of the CGST Act, which has to be reported in GSTR-1.

Fix: list every credit note for the period and confirm two things for each one: it is posted in the ledger, and it is applied against a specific invoice in the AR system. A credit note settles the invoice without being a cash receipt, so it should reduce the balance due, not inflate "amount received".

Check for receipts that were never matched to an invoice

A customer pays ₹2 lakh by NEFT with a narration that says nothing useful. The accountant credits the customer's account in the ledger, which is correct, but the receipt sits "on account" in the billing system, not applied to any invoice. The ledger shows the customer owing ₹2 lakh less. The AR report shows every invoice still open.

Advances cause the same gap. Money received before the invoice is raised has to sit somewhere until the invoice exists. For services, GST is also payable on the advance when it is received, against a receipt voucher, which is one more reason it shouldn't be lost in a suspense account.

Fix: run a list of unapplied receipts and advances by customer. Apply each one to the invoice it actually pays, using the customer's payment advice where you have it. Where a receipt genuinely covers several invoices, split it only once the customer confirms the split. Guessing creates a second reconciliation problem later.

Check for TDS the customer deducted but nobody booked

This is the single biggest cause in Indian B2B businesses. A customer deducts TDS, typically 10% under section 194J for professional services, 2% under 194J for technical services, or 1–2% under 194C for contracts. They pay you the net amount. The section numbers change under the Income-tax Act, 2025 from April 2026, but the mechanics do not.

If the receipt is recorded at the bank amount only, the invoice stays short by exactly the TDS, forever. Meanwhile the accountant may have booked the TDS receivable in the ledger, so the two sides disagree by the sum of every unbooked deduction.

A useful pattern check: a balance that is exactly 10% (or 2%, or 1%) of an invoice's taxable value is almost always TDS. TDS is normally deducted on the value before GST when GST is shown separately on the invoice.

Fix: record TDS receipts gross, as the bank amount plus the TDS, with the TDS booked as TDS receivable, so the invoice settles in full. Then confirm each deduction against Form 26AS or AIS once the customer has filed their quarterly TDS return. Until it shows there, treat it as unverified, not settled. If it never shows up, the customer deducted but didn't deposit, so raise it with them.

Check for GST the customer is holding back

Some customers pay the taxable value but hold back the GST until your invoice appears in their GSTR-2B, because they can only claim input tax credit once it does. The invoice is then part-paid with a balance exactly equal to its GST.

This isn't a ledger error, but it often gets "fixed" by someone writing off the balance or misclassifying it as TDS, and that is where the ledger and AR start to diverge.

Fix: tag these invoices as GST on hold, check that you actually filed them in GSTR-1, and chase the customer once the invoice is visible on their side. Keep them open in both places until the money arrives.

Check for overpayments netting against other customers' debt

When one customer overpays (duplicate payment, paid before a credit note was applied), a simple "total minus paid" calculation produces a negative balance for that invoice. Added into the total, it reduces the outstanding figure by money another customer owes. Duplicate receipts do the same thing: a bank credit recorded once from the bank feed and again manually.

Fix: clamp each invoice's balance at zero and report overpayments separately as customer credit. Then check whether each credit is genuine (refund it or apply it) or a duplicate receipt (reverse one of the two entries).

Check the opening balances from your old system

If you migrated from another accounting or billing tool, the ledger may carry one lump "opening balance" per customer, while the AR system imported individual invoices, or the other way round. Any receipt applied in the old system after the export, or any invoice exported in a different status, becomes a permanent difference dated to the cutover.

Fix: reconcile the cutover date first. Take the old system's customer-wise aging on the migration date and tie it, customer by customer, to both the ledger's opening balances and the open invoices you imported. Once that day agrees, every later difference is a current-period problem.

Check write-offs, dates and currencies

Three smaller causes that are easy to rule out:

  • Write-offs posted in the ledger as bad debts, while the invoice stays open in AR (or closed in AR with no ledger entry). Write off in both places, with the same date and reference. GST already paid on the invoice generally isn't recoverable just because the debt went bad.
  • Cut-off dates. The AR report runs "as of today" and the ledger "as of the 31st". A week of receipts is the gap.
  • Foreign-currency invoices valued at the invoice-date rate in AR but revalued at month-end in the ledger. The difference is exchange gain or loss, not an unpaid amount.

Fix: run both reports to the same date, and keep exchange differences in their own account so they don't hide inside receivables.

A worked example

Hypothetical numbers for a fictional company, chosen to show how a gap breaks down. Not a real reconciliation.

Vindhya Network Services (fictional) found its AR report at ₹18,40,000 and its debtors ledger at ₹15,93,000. Every item below was correct in the ledger and wrong in the AR report:

ItemEffect on AR report
AR report, total minus paid on every invoice₹18,40,000
A draft invoice included in the sumāˆ’ā‚¹1,18,000
Credit note in the ledger, not applied to its invoiceāˆ’ā‚¹59,000
NEFT receipt sitting on account, not appliedāˆ’ā‚¹50,000
10% TDS under 194J on a ₹2,00,000 taxable invoice, receipt booked netāˆ’ā‚¹20,000
Reconciled AR₹15,93,000, equal to the ledger

No money was missing. Four process gaps, each one a few minutes to fix once found.

Where this connects to system design

Most of these differences come from receivables and the ledger being kept in separate places by separate rules. In DexVee's finance and billing module, the outstanding figure is calculated per open invoice on the server. It counts only issued invoices (sent, overdue or part-paid), skips drafts, cancelled, void and archived records, subtracts applied credit notes, and never lets an invoice go below zero. Overpayments are reported separately as customer credit. A receipt can be split across several invoices, but each allocation is capped at the invoice's open balance, and whatever doesn't fit stays on the receipt as an unapplied advance.

TDS receipts are booked gross and matched against imported Form 26AS and AIS lines, so each customer statement shows TDS as verified or unverified. A short receipt that equals the GST is flagged as GST on hold, not mislabelled as TDS. Issued invoices can't be moved back to draft or have their number or discount changed. The correction path is a credit note or a void. And each invoice carries the GST registration that issued it, with its GSTIN printed on the document, so a business billing from more than one state never has to guess which branch a balance belongs to. More on that in multi-GSTIN invoicing.

If your receivables and ledger disagree, work through these checks in order. The difference is almost always a short list of explainable items, and once you can name them, you can stop them happening next month.

#accounts-receivable#reconciliation#tds#gst#finance

See how Finance & Billing works

GST-ready invoicing, purchase orders, bills and payment tracking in one ledger.

Frequently asked questions

Usually because the two are built from different records. The AR report sums open invoices, while the ledger sums every posted entry. Draft or cancelled invoices, credit notes not applied to an invoice, receipts sitting on account, TDS booked in only one place, and migrated opening balances are the most common gaps.