All Workflows

Bank Charge Reconciliation vs Schedule of Charges

Statement charges matched to tariff, overcharges flagged, recoverable total ready — bank charge reconciliation in under 30 seconds per period.

Live demo Drop your statement charge extract and schedule of charges tariff — Cadel matches every row and flags exceptions in seconds.

The Problem

Mid-market finance teams running 30–80 bank charge reconciliation lines per month face a manual cross-reference task that is error-prone, under-resourced, and almost always incomplete.

Two to four hours of manual comparison every close

A controller exports the current account statement, isolates charge-type transactions, opens the tariff PDF from the relationship manager, and cross-references each transaction code, amount, and effective date by hand — for 30–80 rows. The exercise is not automated anywhere in the standard ERP stack and falls on whoever is doing the bank reconciliation.

Tariff change detection is almost always skipped

Indian commercial banks may revise their schedule of charges at any time, subject to a 30-day notice period under the RBI Master Circular (DBR.No.Leg.BC.21/09.07.006/2015-16). A bank that applies a revised tariff before its stated effective_from date has made an unauthorised charge — but detecting this without an automated date comparison requires a step most controllers skip entirely under time pressure.

Three exception classes conflated into one informal note

Manual review rarely separates overcharges (amount exceeds scheduled rate), unauthorised codes (transaction code absent from any tariff), and mid-month tariff changes (effective date after charge date) as distinct classes. The output is typically an email to the relationship manager with no structured variance figure, which delays recovery and makes the dispute unauditable.

Recoverable amounts accumulate undetected

A single NEFT outward charge overcharged by Rs 1,000 per transaction, applied across 40 transactions in a month, represents Rs 40,000 in unrecovered cash. This amount appears in no ERP variance report, triggers no audit finding, and is visible only if the charge reconciliation is performed with an explicit scheduled-rate comparison — which it almost never is.

₹40K+

The monthly leakage potential from a single overcharged transaction code at moderate volume. Under RBI Fair Practices Code for Lenders, the account holder has a right of recovery for any charge applied above the published scheduled rate or against an unapproved transaction code — but only if the reconciliation is performed with a structured comparison that produces an auditable variance figure.

Why It Matters: Regulatory Context

Bank charges on Indian current accounts sit inside four overlapping regulatory obligations. Each one creates an enforceable right of recovery — but only if the finance team can produce a structured reconciliation statement with per-row variances.

RBI Master Circular · DBR.No.Leg.BC.21/09.07.006/2015-16

Schedule of charges must be published and honoured

Banks are required to display their schedule of charges on their website and at branch premises. Any charge debited above the published scheduled rate, or under a transaction code absent from the schedule, is an unauthorised deduction. The circular gives account holders a right of recovery, subject to a written representation supported by a line-by-line reconciliation statement.

RBI Circular · DBOD.No.Leg.BC.74/09.07.005/2013-14

30-day advance notice for tariff revisions

Banks must give account holders 30 days’ notice before revising their schedule of charges. A revised tariff with an effective_from date that falls after the charge date means the new rate was billed before it was contractually in force — a mid-month tariff change exception. Manual review rarely captures this distinction because it requires a date comparison across two separate documents.

ICAI SA 230 · Audit Documentation

Recovery disputes require an audit-quality evidence file

Any recovery letter to a bank relationship manager is more likely to succeed — and any internal audit test of bank charge authorisation is more easily satisfied — when it is supported by a workpaper showing the transaction code, charge date, amount debited, scheduled rate, tariff version, variance, and exception class in a single structured output. Ad-hoc email notes do not meet the documentation standard for audit evidence under SA 230.

Companies Act 2013 · Section 143(3)(i)

Internal financial controls must cover bank charge authorisation

The statutory auditor’s report is required to state whether the company has adequate internal financial controls over financial reporting. Bank charge authorisation — specifically, verifying that only charges at or below the published tariff rate are accepted — is a standard test of operating effectiveness. A manual, undocumented process fails this test; a structured reconciliation with a complete exception log passes it.

For Acme Corp Pvt Ltd, the schedule of charges is typically provided as an Excel or PDF from the relationship manager, with columns for txn_code, service description, scheduled_rate, effective_from, and tariff_version. The bank statement charge extract carries the mirror columns: txn_code, description, charge_date, amount_debited, and reference. The join key is the transaction code. Without automation, the date comparison and code-lookup steps are routinely skipped.

What This Workflow Automates

Seven deterministic passes from two Excel inputs to a structured exception report with recoverable total — in under 30 seconds per period, with the same output every run.

01

Ingest & classify both documents

Upload the statement charge extract (statement_charges) and the schedule of charges tariff sheet (schedule_of_charges) as Excel or CSV files. Cadel classifies each automatically by its column headers — no template mapping required, no column renaming. Both documents are validated for non-emptiness before reconciliation proceeds; an empty file halts the run with an explicit FAIL message rather than producing a false-clean output.

02

Extract all rows from both documents

Every row is extracted from both files: txn_code, description, charge_date, amount_debited, and reference from the statement; txn_code, description, scheduled_rate, effective_from, and tariff_version from the tariff. Mixed date formats and numeric formats (e.g. 01-Feb-2026 vs 2026-02-01) are normalised before comparison.

03

Join by transaction code

Each statement charge row is matched to its tariff counterpart using txn_code as the primary key. Statement rows with no tariff counterpart are isolated immediately as unauthorised-charge candidates — the full amount debited is treated as recoverable pending tariff evidence, consistent with the account holder’s rights under the RBI Fair Practices Code.

04

Test Amount Within Scheduled Rate

For every matched pair, computes variance = amount_debited − scheduled_rate. A positive variance triggers an overcharge exception with the exact recoverable amount recorded (e.g., code LCMG01 debited at Rs 3,500 vs scheduled Rs 2,500 = Rs 1,000 overcharge). Zero or negative variance reconciles cleanly with no exception raised.

05

Test Tariff Effective Before Charge Date

For every matched pair, compares effective_from against charge_date. If effective_from is later than charge_date, the entry is flagged as a tariff-change-mid-month exception — the tariff version (e.g., FY26-v2) was not yet operative when the charge was applied, violating the RBI Circular DBOD.No.Leg.BC.74 30-day notice requirement.

06

Check description alignment

For matched rows where the amount reconciles cleanly, compares the statement narration to the tariff description. A narration that disagrees with the published service description is raised as a description-drift warning (e.g., ACMT01 billed as "Service charge - account upkeep (bundled)" vs tariff description "Account maintenance - quarterly") — worth a review even when the amount is correct, as re-labelling can obscure fee bundling.

07

Produce structured exception report with recoverable total

The output contains one row per statement charge, the matched scheduled rate, the exception class (clean / overcharge / unauthorised / tariff-change-mid-month / description-drift), the variance in rupees, the tariff version applied, and a footer row summing all recoverable amounts — formatted for direct inclusion in a recovery letter to the bank’s relationship manager and ready to attach as an audit workpaper under ICAI SA 230.

Edge Cases We Simulate

A battery of synthetic test scenarios that exercise every exception class the workflow handles. Each scenario produces a deterministic outcome an auditor or controller can verify in seconds.

Clean Match

ScenarioA charge is debited at exactly the scheduled rate, with a transaction code present in the tariff and an effective_from date before the charge date — no variance exists.
Expected outcomeMarked as fully matched with zero variance; no exception raised; does not appear in the exception queue; recoverable total remains unaffected.

Overcharge — Amount Exceeds Scheduled Rate

ScenarioLetter of credit margin charge (LCMG01) debited at Rs 3,500; tariff lists scheduled rate as Rs 2,500 — a Rs 1,000 positive variance.
Expected outcomeOvercharge exception raised; variance of Rs 1,000 recorded; included in the recoverable-overcharges total on the output summary.

Unauthorised Charge — Code Not in Tariff

ScenarioTransaction code MISC099 ("Miscellaneous service charge (uncoded)", Rs 750) appears on the statement but has no corresponding row anywhere in the schedule of charges tariff.
Expected outcomeUnauthorised-charge exception raised; full Rs 750 treated as recoverable; code flagged as absent from tariff in the output row.

Tariff Change Mid-Month

ScenarioRevised POS terminal charge (POSCH02) debited on 10-Feb-2026; tariff shows effective_from as 18-Feb-2026 — the FY26-v2 rate was not yet in force when the charge was applied.
Expected outcomeTariff-change-mid-month exception raised; entry treated as unauthorised pending confirmation of the applicable rate for the charge date; tariff version recorded in the output.

Description Drift — Re-labelled Fee

ScenarioAccount maintenance charge (ACMT01) debited at the correct Rs 600, but statement narration reads "Service charge - account upkeep (bundled)" while tariff description reads "Account maintenance - quarterly."
Expected outcomeDescription-drift warning raised for review; amount left unflagged since it matches the scheduled rate; the re-labelling is surfaced without inflating the recoverable total.

Empty Document Submitted

ScenarioEither the statement charges file or the schedule of charges file is submitted with a header row only and no data rows — e.g., an export that filtered all rows out or a blank template.
Expected outcomeWorkflow halts with a FAIL result and an explicit message naming the empty document — no false-clean reconciliation is produced, and the controller is prompted to resubmit the correct file.

Sample Documents & Results

Two seeded files for Feb-2026 — one statement charge extract, one tariff sheet — engineered so that most rows reconcile cleanly and only the seeded exception rows surface in the queue.

Statement Charges · Feb-2026
Processed

statement_charges.xlsx

Acme Bank → Acme Corp Pvt Ltd · Current account · ACMEXXX1234
Total rows85charge lines
Clean78at scheduled rate
Exceptions7to investigate

Covers NEFT outward, RTGS outward, demand draft, cash management, and letter of credit charges. Seven rows plant the four exception classes: three overcharges (LCMG01, BGIS01, CMS001), two unauthorised codes (MISC099, RELMG01), one mid-month tariff change (POSCH02), one description drift (ACMT01).

Schedule Of Charges · FY26-v1 / v2
Loaded

schedule_of_charges.xlsx

Acme Bank · Published tariff catalogue · Acme Corp Pvt Ltd
Tariff lines59service codes
FY26-v158effective 01-Apr-25
FY26-v21POSCH02 · 18-Feb-26

The authoritative source for what each charge should be. Most lines carry tariff version FY26-v1, effective 01-Apr-2025. One revised POS line (POSCH02, FY26-v2) becomes effective 18-Feb-2026 — applied eight days before its effective date in the statement charges to seed the mid-month case.

Overcharge · 3 rows
Recoverable

LCMG01 · BGIS01 · CMS001

Letter of credit margin · Bank guarantee commission · Cash management bulk collection
LCMG01₹1,0003,500 vs 2,500
BGIS01₹6003,600 vs 3,000
CMS001₹1,0002,500 vs 1,500

Three overcharge exceptions totalling Rs 2,600 recoverable. Each row carries the transaction code, charge date, amount debited, scheduled rate, variance, and tariff version FY26-v1 — ready to quote in a recovery letter.

Unauthorised · 2 rows
No tariff basis

MISC099 · RELMG01

Miscellaneous service (uncoded) · Relationship manager advisory fee
MISC099₹750no schedule line
RELMG01₹2,000no schedule line
Total₹2,750fully recoverable

The most operationally significant class: both codes are entirely absent from the tariff. A standard bank reconciliation that only checks whether the debit appears on the statement would silently accept these charges. The full Rs 2,750 is recoverable pending tariff evidence.

Sample Results — Feb-2026 Run

Reconciling the Feb-2026 statement against the schedule of charges, the workflow matched all 85 statement rows to the tariff by transaction code and confirmed 78 clean charges at exactly the scheduled rate. Seven rows surfaced as exceptions. Three overcharges: LCMG01 (Letter of credit margin, Rs 3,500 debited vs Rs 2,500 scheduled — Rs 1,000 recoverable), BGIS01 (Bank guarantee commission, Rs 3,600 vs Rs 3,000 — Rs 600 recoverable), and CMS001 (Cash management bulk collection, Rs 2,500 vs Rs 1,500 — Rs 1,000 recoverable).

Two unauthorised charges with no tariff line at all: MISC099 ("Miscellaneous service charge (uncoded)", Rs 750) and RELMG01 ("Relationship manager advisory fee", Rs 2,000) — the full Rs 2,750 is recoverable pending tariff evidence. One tariff-change-mid-month exception: POSCH02 (revised POS terminal charge, Rs 950) was debited on 10-Feb-2026 against a tariff line whose effective_from is 18-Feb-2026 (version FY26-v2) — the revised rate was billed eight days before it went live. One description drift warning: ACMT01 carried the correct code and the scheduled Rs 600, but the statement narration disagrees with the published description. Total recoverable from overcharges and unauthorised charges: Rs 5,350 — a figure that would be invisible to a standard bank reconciliation and appear in no ERP variance report without this workflow.

Why Automation Wins Here

Before this workflow, a two-to-four-hour monthly exercise produced an informal note with partial exception coverage and no structured recoverable total. Cadel replaces that with a deterministic, sub-30-second run that catches all four exception classes every time — with the same output on the same inputs, every close cycle.

2–4 hrs → 30 s
Per-period controller time on bank charge reconciliation
100%
Exception classes covered (overcharge, unauthorised, mid-month, description-drift) on every run
₹5,350
Recoverable surfaced on the Feb-2026 seed dataset — invisible to standard bank recon
0
False-clean runs — empty-document guard halts before producing misleading output

Structured recoverable total in the output itself

The workflow computes the recoverable-overcharges total in the Excel output — eliminating a separate aggregation step. Each row carries the transaction code, reference number, charge date, amount debited, scheduled rate, variance, tariff version, and exception class: the full chain of evidence required for a recovery letter to the relationship manager and for an audit workpaper under ICAI SA 230.

Catches what standard bank recon misses

A standard bank reconciliation confirms that the bank’s debits appear on the statement — it does not check whether the bank had contractual authority to raise each charge at that rate. Unauthorised codes like MISC099 and RELMG01 pass a standard recon silently. This workflow surfaces them because it tests the schedule join and the tariff effective date, not just the debit amount.

Audit-ready output, every close cycle

The completed Excel workbook drops directly into the controller’s month-end audit file under the bank reconciliation section, with no reformatting required. It satisfies the internal financial controls test under Companies Act 2013 Section 143(3)(i) and gives the statutory auditor a line-by-line evidence chain from statement debit to scheduled rate to exception class — without relying on email threads or manual logs.

Frequently Asked Questions

The questions finance controllers and treasury teams ask most often before deploying bank charge reconciliation automation.

Which documents do I upload?

Two files for the same period: the bank’s statement charge extract (the fees actually debited — transaction code, description, charge date, amount debited, reference) and the bank’s schedule of charges tariff sheet (transaction code, service description, scheduled rate, effective from, tariff version). Drop them together in the Inbox; Cadel classifies each by its columns.

How does the workflow match a charge to its tariff?

Every statement charge is matched to a schedule line by transaction code. Once matched, the workflow runs four checks: the amount debited must be at or below the scheduled rate, the tariff’s effective-from date must be on or before the charge date, and the statement narration should align with the tariff description. A fifth check confirms that the transaction code exists in the tariff at all — if not, the charge is flagged as unauthorised regardless of amount.

What exceptions does it flag?

Four. Overcharge — the amount debited exceeds the scheduled rate. Unauthorised — the transaction code does not appear in the schedule at all, so there is no tariff basis for the fee. Tariff change mid-month — the schedule’s effective-from date falls after the charge date, meaning a revised tariff was billed before it went live. Description drift (a warning) — the right code and amount but a narration that disagrees with the published service description.

How is the recoverable total calculated?

For each overcharge the workflow takes the amount debited minus the scheduled rate; unauthorised charges count at their full debited value since no tariff supports them. These per-row variances are summed into a single recoverable figure in rupees, ready to quote in a recovery letter to your relationship manager. Tariff-change-mid-month exceptions are included as recoverable pending confirmation of the applicable rate; description-drift warnings are excluded since the amount is correct.

Why are most charges not flagged?

A healthy account is mostly clean. Charges billed at exactly the scheduled rate under a tariff in effect on the charge date reconcile silently and never reach the Exceptions queue, so your attention goes only to the fees worth disputing. On the Feb-2026 seed dataset, 78 of 85 rows (92%) reconciled cleanly; only the 7 seeded exception rows surfaced.

Does it handle mid-month tariff revisions?

Yes. The schedule carries an effective-from date and tariff version per line. If the bank applies a revised rate to a charge dated before that revision took effect, the workflow flags it as a mid-month tariff change rather than treating the new rate as authorised. Under the RBI Circular DBOD.No.Leg.BC.74/09.07.005/2013-14, a 30-day advance notice is required before rate revisions take effect; this check makes that obligation enforceable without manual date comparison.

Can I export the results?

Yes. Export the reconciled charges and the exception list — including the per-row variance, tariff version, exception class, and recoverable total — to Excel from the Inbox toolbar, ready to attach to a recovery letter to the relationship manager or to drop into the month-end bank reconciliation audit file.

Is my data used to train models?

No. Your statement and tariff files are processed only to produce this workflow’s reconciliation results and are not used to train any model.