Allocation runs every time income arrives — a Plaid-detected deposit, a manual income entry, or a rolled-over surplus. The same five-step calculation applies regardless of source. If the dashboard ever surprises you, walk through these steps with the deposit's number and the gap will be in step 2 or step 4 nine times out of ten.
The five-step calculation
- Tax pre-skim. Your rolling tax rate (Settings → Tax) is applied to the gross deposit. The skimmed amount is reserved for Tax before priority walk runs.
- Priority walk. The remaining amount walks reserves in order: Survival → Business Ops → Tax → Growth → Lifestyle → Wealth. Each reserve fills to its floor (or the deposit runs out, whichever comes first).
- Surplus calculation. Any amount left after every reserve hits floor is surplus.
- Surplus rules. If you've configured surplus rules (see Setting Surplus Allocation Rules), they split the surplus across reserves. If not, surplus dumps entirely into Wealth Building.
- Ledger commit. Each per-reserve change is written as a single allocation event with a reference to the source deposit. The dashboard updates within ~2 seconds.
Step 1: Tax pre-skim, in detail
The pre-skim runs before priority walk so that Tax is funded against the gross deposit, not against what's left after Survival and Business Ops have eaten. This protects you on lean months — even if Survival can't fully fill, Tax has already been set aside proportional to your income.
Pre-skim formula:
tax_skim = deposit_gross × tax_rate
working_amount = deposit_gross − tax_skim
The skim goes directly to Tax (or its sub-reserves, proportionally). Tax's floor doesn't gate the skim — pre-skim happens regardless of whether Tax is over or under floor. If Tax is over floor and you have surplus rules that include Tax, you can still drain it back via surplus.
Step 2: The priority walk
For each reserve in order, ReservWise computes:
fill = min(reserve.floor − reserve.balance, working_amount)
reserve.balance += fill
working_amount −= fill
If working_amount hits zero, the walk stops there — under-funded reserves below the stopping point stay under-funded until the next deposit.
Paused reserves (see Pausing) are skipped: fill = 0 for them, and the walk continues.
Step 3 & 4: Surplus and rules
If working_amount is still positive after every reserve has reached floor, that remainder is surplus. Surplus rules split it. Without rules, the entire remainder goes to the lowest-priority reserve (Wealth Building by default).
Worked example: a $4,200 deposit
Suppose your setup is:
- Tax rate: 25%
- Reserves and floors:
- — Survival: $3,000 floor, $2,400 current balance ($600 to floor)
- — Business Ops: $800 floor, $800 (full)
- — Tax: $1,500 floor, $900 current balance ($600 to floor)
- — Growth: $1,000 floor, $400 ($600 to floor)
- — Lifestyle: $500 floor, $500 (full)
- — Wealth: $0 floor (open-ended)
- No surplus rules.
Step 1 — Tax pre-skim. $4,200 × 25% = $1,050 → Tax. Tax goes from $900 to $1,950 (above floor). Working amount = $4,200 − $1,050 = $3,150.
Step 2 — Priority walk.
- Survival: needs $600. Fill $600. Working = $2,550.
- Business Ops: needs $0. Skip. Working = $2,550.
- Tax: already at $1,950 (above floor after pre-skim). Skip. Working = $2,550.
- Growth: needs $600. Fill $600. Working = $1,950.
- Lifestyle: needs $0. Skip. Working = $1,950.
- Wealth: floor is $0, so it never asks for fill.
Step 3 — Surplus. $1,950 remaining is surplus.
Step 4 — Surplus rules. No rules configured, so $1,950 → Wealth Building.
Step 5 — Ledger. Five lines written: +$1,050 Tax, +$600 Survival, +$600 Growth, +$1,950 Wealth, plus the parent allocation event referencing the original $4,200 deposit.
Final balances after the deposit:
- Survival: $3,000 (at floor)
- Business Ops: $800 (at floor, untouched)
- Tax: $1,950 ($450 above floor)
- Growth: $1,000 (at floor)
- Lifestyle: $500 (at floor, untouched)
- Wealth: prior balance + $1,950
Rounding and precision
All math is computed in cents (integer). Tax skim is rounded half-to-even at the cent. Sub-reserve splits are also computed in cents and the smallest sub-reserve absorbs any rounding remainder so totals always reconcile.
When allocation runs in reverse
A draw or a refund triggers the inverse path: the dollars come from one reserve (or a draw distribution you specify) and a single ledger event ties them back to the same source. Pre-skim is not reversed automatically — if you refund a customer, you generally don't want to also refund the tax you set aside. See Drawing from a reserve safely for the manual draw flow.
What to do next
- Open the latest deposit on your dashboard and walk these five steps. The numbers should match exactly.
- Re-read How the six-tier priority system works for the conceptual frame behind the math.
- If the math matches but the outcome surprises you, the issue is likely a floor that's set higher or lower than your real-world need. See Adjusting reserve targets.
The system is exactly five steps. If it ever feels like more, you're looking at the floors wrong, not the math.