An explicit lifecycle, not a status field
Every batch moves through a strict state machine — draft, director approval, funding, disbursement, paid, plus explicit failure and refund branches — with legal transitions enforced in the database. HR drafts and submits, the single active Director approves or rejects, Finance funds and releases payment; each role sees a task queue of exactly its pending work, with dashboard exception counts deep-linking to pre-filtered lists.


