AICA Passbook

How verification works

Every bank statement with a running balance is, quietly, a chain of arithmetic: each row’s balance is the row before it, plus or minus that row’s amount. If the statement is untouched, that chain holds all the way through. If a row was edited, a page went missing, or a digit got misread somewhere upstream, the chain breaks, and we can point to exactly where.

The balance-chain gate

As we parse a statement, we don’t just extract rows: we re-derive each one’s balance from the row before it and check it against what the statement itself claims: previous balance + amount = stated balance, row by row, start to finish. You watch this happen live on the ticket: template detected, rows cast, then the chain check ticking through row by row in front of you. Nothing about that progress is invented: it’s the same pass that produces your verdict, not a spinner timed to feel convincing.

A worked example

Four rows, the shape a real statement takes, with the arithmetic laid out:

Worked balance-chain example
RowDescriptionAmountBalance
1Opening balance₹10,000.00
2NEFT credit: salary+₹25,000.00₹35,000.00
3UPI debit: electricity bill−₹1,200.00₹33,800.00
4Cheque debit: rent−₹15,000.00₹18,800.00

Row 2 checks against row 1: 10,000 + 25,000 = 35,000. Row 3 checks against row 2: 35,000 − 1,200 = 33,800. Row 4 checks against row 3: 33,800 − 15,000 = 18,800. Every row agrees with the one before it, so this statement earns three verified rows. The opening balance isn’t a transaction, so it isn’t counted:

✓ Verified · 3 rows

If row 4 had instead claimed a balance of ₹18,300, the chain would break there: the arithmetic says 18,800, the statement says something else, and that ₹500 gap is an honest flag that they disagree, not a guess at which number is wrong:

Needs review · chain breaks at row 4

Why we flag instead of guessing

A flagged statement isn’t a soft maybe. It means the arithmetic did not reconcile, and we name the row where it broke. We don’t hand you a CSV with a caveat buried at the bottom: we show you the row the arithmetic disagrees on and we stop there, because we don’t release numbers we can’t stand behind. A flagged file never counts against your free daily cap: you didn’t do anything wrong by uploading it, we just couldn’t back the file the statement gave us.

What this gate honestly can’t catch

The balance-chain gate proves one specific thing well: that a statement’s own running total is internally consistent, row by row. It has real limits. It can’t catch a tape where every balance is off by the same fixed amount from the very first row: if the opening balance itself was wrong and everything after it shifted by exactly that much, the chain still holds, because each row’s arithmetic relative to the row before it is still correct. The gate has no independent ground truth to check the whole tape against, only internal consistency from row to row. It also isn’t a judgment on what a transaction is: whether a row is correctly categorized (rent versus a loan repayment, say) is a separate question, answered by classification, with its own confidence score. A VERIFIED stamp and a high-confidence category label are two different claims, and we never blur them into one.