Concept
Glossary
The vocabulary behind Duration's model. Every budget item has a purpose and a horizon, and the horizon decides where the money sits — these are the terms that describe that. The same definitions appear as the inline "?" hints throughout the app.
- Allocated
- Allocated is the intent figure for a horizon: the total parked across its buckets. Allocating raises it without moving any cash, so allocated can run ahead of funded. That gap is drift, and it is closed afterwards — by a sweep moving cash to match intent, or by attributing market movement so intent matches reality.
- Attribution
- Attribution drains the market pool (M) into buckets by a split you choose: pro-rata by current balance (the default), all to a single bucket, or a custom split. It moves intent only — no cash — so funded is untouched. Attributing into another horizon’s bucket is allowed too; that simply leaves an ordinary timing drift the sweep then closes.
- Billing cycle
- A card's billing cycle is its statement closing day and payment due day, configured per card because a transaction feed carries posted rows, not cycle metadata. With it set, the sweep can date a harvest precisely — money stays invested as long as the bill allows — and read the urgency against today. Without it the same harvest still appears from drift, simply undated. It is a guide, never an asserted deadline.
- Bucket
- A bucket holds intent at a horizon — rent, a holiday, an emergency fund. Allocating moves money into a bucket (intent, not cash); spending draws it back down. A bucket belongs to one horizon at a time, but that membership is dated, so it can be re-homed to a nearer horizon as a deadline approaches without rewriting its history.
- Contributions
- Contributions is the cumulative real cash moved into a horizon's accounts — income swept in, transfers in and out, opening balances — with mark-to-market revaluation excluded. Set against the tier's funded value over time, the gap is the tier's market return: for out-of-pocket the two coincide, while a long-term tier's value can run ahead of (or behind) what you contributed.
- Coverage (net vs gross)
- Coverage is the single out-of-pocket liquidity question: does the debit account, with or without the expected repayments, cover the card obligations? The net figure assumes the receivables settle before the bill is due; the gross figure counts on no repayment and covers the counterparty’s share too. It is presented as a choice, never applied automatically.
- Drift
- Drift is the difference between what you have allocated and what is actually funded. It deliberately separates into two parts that call for opposite actions: timing drift — intent the cash has not caught up to, which a sweep closes — and market movement, which is waiting to be attributed across buckets and is never swept. Keeping them apart is what lets a single figure not mislead you into the wrong move.
- Excluded
- Excluding a transaction keeps it in the real balance — the money moved, and the statement still reconciles — but removes it from the drift diagnostic and from every other derived figure, such as average spending and goal progress, so a one-off raises no phantom drift and pollutes no signal. The single flag does one clean thing; un-excluding toggles it back, after which the transaction wants a bucket like any other.
- Expectation
- An expectation is an accepted-but-not-yet-cleared transfer, kept off the ledger. It does two things: it suppresses re-suggesting the same move, and it waits to match the real transfer when it appears in an import. Until then the horizon honestly still shows underfunded, because the money has not actually moved. Settle it when the transfer lands; an expectation never matched simply expires, harmlessly.
- Fund
- A fund is the sweep move for an underfunded invested horizon: it transfers cash from the debit hub into the invested account so funded catches up to what you have allocated there. It is the payday-sweep direction — money moving out along the horizon ladder.
- Funded
- Funded is the real money in a horizon's accounts. Duration keeps two funded figures doing different jobs: the real balance, shown here and reconciled against statements, and a drift balance used only in the diagnostic — the real balance after carving out ready-to-allocate, receivables, market movement and excluded transactions, so the comparison against intent stays honest.
- Goal
- A goal is dated configuration over a bucket — a target by a date, or a recurring per-cycle target — never a separate pot of money; contributing is an ordinary allocation into the bucket. Progress is measured gross (the running sum of contributions in), so a drawdown lowers the bucket’s balance without erasing the progress you made toward the goal.
- Harvest
- A harvest is the sweep move for an overfunded invested horizon: it sells and transfers cash from the invested account back to the debit hub, where it can fund a tier that is short or return to ready-to-allocate. Harvests are surfaced before fundings so the hub never goes negative mid-sequence.
- Horizon
- A horizon is the spine of the model: a band defined by when you will need the money and how much risk it can bear, from out-of-pocket (a debit account) through short, medium and long-term invested tiers. Every account and bucket belongs to a horizon, and the horizon determines where the money actually sits. The aim is control and legibility — a clear picture of where everything stands — not chasing yield.
- Idle cash
- Idle cash is the one sweep move that is not a bare transfer: when ready-to-allocate is positive and past the threshold, it is both allocated into a bucket at the lowest invested tier and funded there. Doing both keeps the move from bouncing back as overfunding on the next sweep — the cash and the intent travel together.
- Market movement (M)
- Market movement (M) is the change in an invested account's value not explained by your recorded contributions. It is held as a per-horizon “to attribute” pool — the market analogue of ready-to-allocate — and shown as drift so you notice it, but labelled “attribute” rather than “sweep”. The gain is already in the account, so it is never swept; it waits until you decide how to spread it across buckets.
- Opening balance
- An opening balance is a posting primitive, not an onboarding flow: each account can carry one, effective-dated at a chosen epoch, that sets where it stood when the journal begins. Queries before that date are empty by construction. Opening allocated need not equal opening funded — any gap is honest opening drift, closed afterwards through ordinary allocation.
- Ready to allocate
- Ready-to-allocate is where income waits for a job. The cash sits in your debit account, but it is carved out of the out-of-pocket drift figure so that unassigned money shows as its own “ready to assign” line rather than masquerading as overfunding. You draw it down by allocating into buckets.
- Receivable
- A receivable is the mirror of ready-to-allocate: a special out-of-pocket bucket holding a counterparty’s share of a spend. A partner-split spend posts their share here, so it does not read as your underfunding; when they repay, you categorise the repayment into the receivable and it falls back to zero. Both are ordinary, drift-neutral moves — there is no special linked-pair object.
- Sweep
- The sweep proposes the cash moves that close timing drift, all routed through the debit hub: harvesting overfunded tiers up to the hub first (so it never runs short), then funding underfunded ones, plus moving genuinely idle ready-to-allocate into the lowest invested tier. It is advisory and recomputed from drift on every refresh — nothing moves until you record it.
- Threshold
- Each horizon has a threshold — an amount below which timing drift is not worth acting on. Within the dead-band no sweep suggestion is raised, and a flag persists only until the mismatch resolves or shrinks back below the line. Defaults are opinionated but adjustable: tighter for short horizons, more generous for long ones where short-run market movement is expected.
- Timing drift
- Timing drift is the part of drift a sweep should act on: allocated minus the diagnostic funded figure. Underfunded means cash must move into the horizon; overfunded means cash can be swept up a tier, or idle out-of-pocket money moved into the lowest investment tier. Per-horizon timing drift always sums to zero, so every deficit is matched by a surplus elsewhere and the system is always sweep-able.
- Transfer
- A transfer is a cash-ledger move between two of your accounts that conserves value and leaves intent untouched — its whole purpose is to let funded catch up to allocated. The set is small and closed: the payday sweep, the credit-card payment, a sale-and-transfer out of an invested account, and a partner repayment. A card payment is a transfer, not a spend — the spending already happened when purchases hit the buckets.