Withdrawals
Only a member can start a withdrawal, from their own wallet, and it has to clear a checklist before it's even submitted.
Before a request can go out
- A transaction PIN, separate from the login password
- A whole-naira amount, no kobo
- An active, verified bank account on file
- The workspace isn't paused
- The amount meets the minimum (₦1,000 by default, set per workspace)
- No other withdrawal already open for that member
- The chosen pocket is actually withdrawable
That last one is where Business Investment gets excluded. It needs its own balance to clear a threshold (₦1,500,000 by default) before it unlocks; once it does, it can be withdrawn from like any other pocket. The withdrawal screen greys out any pocket that fails these checks and shows why, instead of letting a member pick it and get a rejection two steps later.
One request, one pocket
A withdrawal draws from a single pocket, not from the wallet total. A member with ₦300,000 in Upkeep and ₦100,000 in Savings has ₦400,000 in the wallet but can only request ₦300,000 in one go, because that's what the largest pocket holds.
To withdraw more than one pocket holds, move money together first. Pocket transfers let a member consolidate into one pocket, with team leader or director approval, and then withdraw from it. A transfer waiting for approval holds its amount in the source pocket, so that money won't show as available to withdraw until the transfer is resolved one way or the other.
Status flow
Requested
The member has submitted. Nothing's been touched yet on the payout side.
Ready for payout
A team leader or director has approved it. It's now queued to actually be paid.
Verifying receipt
A payout receipt has been uploaded and is being checked, either by the AI extraction pipeline or a human.
Paid
Done. Money's out, receipt matched.
Needs review
The receipt didn't match, or something about the request needs a second look before it can move forward.
A member can cancel their own request while it's still in the Requested state. Once it moves past that, it's out of their hands.
Who can act on a request
Team leaders manage withdrawals for their own workspace, approving requests and reviewing receipts as they come in. Directors get the same access across every workspace they're assigned to, plus one thing leaders don't have: the authority to resolve a dispute once a request lands in Needs review. A leader can flag something as off. Only a director can close it out.
Receipts get read
When a payout receipt gets uploaded, OpenAI Vision reads it, amount, recipient, date, and checks it against what the request actually asked for. A clean match gets marked Paid automatically. Anything that doesn't line up gets kicked to Needs review with the specific mismatch attached, not just a generic "please check this."
Receipt upload accepts drag-and-drop and clipboard paste, so a screenshot doesn't have to be saved to disk first just to attach it.