Case Study 02 — Reconciliation without the reconcilers | SatyaHQ
CASE 02 Finance operations · Reconciliation

Reconciliation without the reconcilers.

2,400 SKUs. Five tender types. Twelve source ledgers. The client's team spent two weeks a month matching entries by hand — and still ended with a book of unresolved breaks. We built an auto-matcher that closes 99.9% of the ledger before a human ever sees it.

Auto-match rate
99.9%
Up from 68% manual match
Break rate
<0.1%
Down from 8.2% at start
Tender types
5
Cash · Credit · Debit · UPI · Wallet
SKUs handled
2.4K
Across all product lines
The client
A leading finance company with a multi-channel receivables book across retail POS, distributor collections, and dealer networks.
Industry
Consumer finance
Scope
Bank ↔ processor ↔ ledger reconciliation
Timeline
10-week build · Live in production
The problem

A matrix problem, solved with spreadsheets.

Every transaction had to reconcile across three axes at once: which SKU, which tender, which acquiring bank. Reconcilers built VLOOKUPs that took hours to run and hid the exceptions that mattered.

The daily flood.

~180,000 transactions a day landed in five tender buckets. Cash needed matching against physical DSR sheets. Cards had TID-level MDR splits from three acquirers. UPI came through two aggregators with different settlement windows.

Reconcilers manually classified breaks into ten failure modes: TID mismatch, MDR variance, refund echo, split settlement, cutover timing, chargeback echo, and more. It never caught up.

Multi-tenderMulti-acquirerSettlement lagSKU sprawlManual VLOOKUP

Daily transaction mix by tender

Steady-state volume · 180K transactions/day
180K txns / day
Credit cards 38%
UPI 24%
Debit cards 18%
Cash / DSR 14%
Wallets 6%
The approach

Match once, at ingestion. Human only on breaks.

We collapsed the reconciliation matrix into a single rules-plus-fuzzy engine, driven by tender-specific match keys. Anything auto-matched posts straight to the ledger; only true breaks reach the reconciler queue.

1

Normalize sources

Bank statements, processor MIS, POS DSR and internal orders unified into one canonical schema per tender.

2

Deterministic match

TID + amount + timestamp keys clear the majority in one pass. Split-settlement and refund echoes handled inline.

3

Fuzzy fallback

Amount-window and reference-prefix matchers pick up MDR variance, timing gaps and truncated remittance strings.

4

Break classifier

Every unmatched entry auto-tagged by failure mode with a proposed resolution. Reconciler confirms or overrides.

Auto-match coverage — tender × source

Deeper cell = higher share of that pairing cleared automatically
Steady state · month 6
Bank statement Processor MIS POS / DSR Aggregator feed Internal ledger Credit cards Debit cards UPI Cash / DSR Wallets 99.9% 99.8% n/a 99.7% 100% 99.8% 99.9% n/a 99.6% 100% 99.9% n/a n/a 99.9% 100% 99.5% n/a 99.6% n/a 100% 99.6% n/a n/a 99.8% 100%
≥99.5% auto-matched
Not applicable (channel not used)
The results

Break rate down 82×. Reconcilers redeployed.

Within two months the reconciler's workday flipped: from clearing thousands of matched rows to investigating a handful of true exceptions. The rest simply reconciled.

Break rate over time

% of daily transactions unmatched at day-close · week-over-week
10% 7.5% 5% 2.5% 0% W0 W4 W8 W16 W24 8.2% <0.1%

Where breaks go now

Classification of the residual 0.1% — every break auto-tagged
Chargeback echo 34% MDR variance 27% Cutover timing 18% Missing DSR sheet 11% Bank reject echo 7% Other 3%
The impact

Reconciliation stopped being a project.

Match rate
68% → 99.9%
Auto-clear at day-close
Break volume
↓ 82×
14,700 → 180 breaks / day
Reconciler hours
↓ 91%
On matching · redeployed to exceptions
Cutoff time
T+1 → T+0
Daily close now runs same-day

"The reconciliation ledger used to be the last thing we looked at every day. Now the engine writes it before we start — and my team spends their time on the exceptions that need judgment."

— Finance Controller, [Client name]
Deliverables

What they own after go-live.

The rules, the models, the operator tools — all shipped as source. No black-box service.

Match engine

  • Canonical schema per tender
  • Deterministic + fuzzy matchers
  • Split-settlement handling
  • Idempotent daily runs

Break workflow

  • Ten-class break classifier
  • Proposed resolution per break
  • Reconciler console + assignment
  • Aging + SLA dashboard

Ledger integration

  • Auto-post to ERP sub-ledger
  • Reversal + reclass hooks
  • Audit trail per journal line
  • Finance-controller sign-off flow
PythonPostgresAirflowdbtReact operator consoleBank connectorsCard acquirer connectors
Next case study

03 — From 35-day close to 3-day close

Reporting TAT compressed 15× and monthly close cycle cut 12×.

Read case 03 →