Appearance
Budget snapshots
Versioned, immutable budgets you can compare to live spend — with inline drift on every forecast cell when one is selected.
A budget snapshot is a frozen copy of the cost forecast at a point in time. You take one when you sign off the annual plan, you take a new one whenever a budget request finalises, and you keep them all. Snapshots are immutable by design — that is what makes them auditable.
The list page
Lands at /plan/[planId]/cost-forecast/budgets. Two sections, top to bottom:
- Upcoming — active budget requests that have not yet finalised. Each row links into the request detail page.
- Snapshots — every snapshot grouped by fiscal year, with the active one pinned to the top of its group.
Snapshot row
| Column | Source |
|---|---|
| Version | Monotonically increasing per fiscal year. v1 is the initial sign-off; v2 supersedes after the first finalised request, and so on |
| Status | DRAFT, ACTIVE, SUPERSEDED. Only one ACTIVE snapshot per fiscal year |
| Total cost | Total cost in the snapshot's reporting currency |
| Total FTE | Total FTE captured at snapshot time |
| Drift chip | On ACTIVE snapshots only. +£42K and +1.2 FTE chips showing delta from snapshot to current forecast |
| Created at | Snapshot timestamp |
Superseded snapshots de-emphasise visually but stay in the list. They are your audit trail — never delete them.
Group subtitle
Each fiscal year group shows a subtitle with the active snapshot's total cost and FTE — quick read of "what is the budget for FY25 currently". Format: £12.3M · 87.5 FTE.
Drift summary
Drift is the headline. For every ACTIVE snapshot, the page fires forecastBudgetDriftSummary and displays the result inline. The summary returns costDelta, fteDelta, and totalChanges — a count of distinct entities that differ from the snapshot.
TIP
The drift query is intentionally narrow — limited to the first three active snapshots. Budgets are low volume in practice (one per fiscal year, sometimes two during a transition). If you need drift across more snapshots, query the API directly.
The detail page
Click into any snapshot to land at /plan/[planId]/cost-forecast/budgets/[snapshotId]. Three tabs, all driven by the same snapshot grid query:
| Tab | What it shows |
|---|---|
| Teams | Hierarchical team tree with totals at every level |
| Projects | Project tree with cost and FTE per project |
| Roles | Flat list grouped by job role, useful for headcount planning |
Above the tabs: the cost-trend chart, the cost-by-team chart, and the cost-by-role chart, all rendered as a chart carousel.
The detail page is read-only. To change a budget, raise a request.
Creating a snapshot
From the budgets list, click Add > Take snapshot. The dialog asks:
- Fiscal year — defaults to the current FY based on org config.
- Reporting currency — defaults to the org's reporting currency.
- Source — by default, the live cost forecast. Optionally, you can clone an existing snapshot (e.g. last year's plus 5%).
The snapshot captures the forecast as it is at that moment. Set status: ACTIVE to make it the comparison baseline.
Permissions
- View: any user with
FINANCIALS_VIEW_SUMMARY. Without it, the page renders zero values. - Create snapshots:
SETTINGS_FINANCIAL_CONFIG_*or the org's configured budget approvers (see cost review workflow).
Related
- Variance overview — the full variance loop.
- Budget requests — how budgets get changed between snapshots.
- Cost forecast — the live forecast view that snapshots get compared to.