Every transaction passes through a controlled path. No stage is optional.
Source file arrives: bank statement, CSV, Plaid sync, or manual entry.
drop arrivesParser reads raw lines. Each stored as raw_line (frozen) and line (working copy).
raw_line frozenLarge drops split into separate commits.
commits createdField mapping normalizes dates, amounts, descriptions.
mappedStaged total compared to source statement total.
reconciledEach line assigned a COA entry through the cascade.
classifiedAccountant reviews and approves classifications.
reviewedReceipts and documents attached to the commit.
awaiting_evidenceJournal entry balanced. Ledger rows inserted. Hash computed. Staging cleared.
finalizedNo shortcuts, no silent imports.