Three tiers of matching, best evidence first. There is no fuzzy amount matching, because a line that is one rupee different from a ledger entry is a discrepancy to investigate — not a match to assume.
Exact amount and date, then exact amount within a settlement window, then exact amount plus a shared reference token. Anything left is shown to a person.
Statement balance, plus deposits in transit, minus outstanding payments, must equal the book balance. That identity is verified, not asserted.
A reconciliation with a non-zero difference refuses to complete, and an incomplete reconciliation blocks the close.
Lines arrive from a bank feed or a file through the same idempotent path, so a replayed import creates nothing.
Deposits in transit and uncleared payments are classified and totalled rather than lumped into an unexplained difference.
A line the rules cannot categorise goes to a human queue. Paisa never guesses an account to make a number tidy.
Recognised descriptions post automatically to their account; everything else waits. The assistant can draft a categorisation, but posting needs approval.
Imported lines are deduplicated by reference before they can reach the journal.
Every cash account must carry a completed reconciliation as of the period end before the period can lock.
The demo runs on a seeded company with a live close waiting — two real blockers and agents holding proposals.