Reserve Fund Projection & Scenario Modelling
Reserve Fund Projection & Scenario Modelling
The Reserve Fund Projection tool generates a year-by-year financial forecast for a block's reserve fund, applying compound inflation to every asset's estimated replacement cost over a configurable planning horizon. A built-in scenario mode lets you explore what-if inflation rates without altering the block's saved settings.
Overview
| Capability | Detail |
|---|---|
| Planning horizon | 1–100 years (default: 30) |
| Inflation modelling | Compound annual growth per asset |
| Scenario analysis | Adjustable rate; changes never persisted |
| Benchmarking presets | 4 BCIS-aligned UK construction inflation rates |
| Shortfall detection | Per-year flag + first-shortfall-year indicator |
| Recommended contribution | Automatically calculated to avoid deficits |
Configuring Per-Block Settings
Each reserve fund account has two projection parameters, editable via the account's Edit form:
Inflation Uplift (%)
The annual percentage rate applied to all future asset replacement costs. Stored internally as basis points.
- Default: 3.00% (300 bp) — BCIS General Building Cost Index long-run average
- Range: 0%–100%
- Effect: A higher rate increases projected CapEx in later years, potentially surfacing shortfalls earlier.
Planning Horizon (years)
The number of years the projection covers, starting from the current calendar year.
- Default: 30 years
- Range: 1–100 years
How the Projection is Calculated
For each asset linked to the block that has an estimated replacement cost and a projected (or manually set) replacement year, the engine:
- Determines the number of years until replacement:
yearsFromNow = replacementYear − currentYear - Applies compound annual inflation:
adjustedCost = baseCost × (1 + inflationRate)^yearsFromNow - Places the inflation-adjusted cost into the corresponding year bucket.
The fund balance is then projected year by year:
openingBalance
+ annualContributions (monthlyContribution × 12; zero for the current year)
− inflationAdjustedExpenditures
= closingBalance
A year is flagged as a shortfall when closingBalance < 0.
Replacement year precedence:
manualReplacementYearoverridesprojectedReplacementYearwhen both are set.
Reading the Projection View
The Projection View appears in the account detail panel beneath the Contributions vs. Expenditures chart.
Summary Cards
| Card | Description |
|---|---|
| Total Projected CapEx | Sum of all inflation-adjusted replacement costs within the horizon |
| Projected End Balance | Fund balance at the final year of the horizon (green = positive, red = deficit) |
| Shortfall Years | Count of years where the closing balance goes negative; shows the first shortfall year |
| Recommended Contribution | Monthly amount needed to cover all projected CapEx from the current balance |
Balance-Over-Time Chart
A bar chart covering every year in the horizon. Green bars indicate a positive fund balance; red bars indicate a deficit. Hover over a bar to see the exact year and closing balance.
Year-by-Year Detail Table
Displays years that have asset expenditures plus every fifth year. Each row shows:
- Opening balance — fund balance at the start of the year
- Contributions — annual contribution added that year
- Expenditure — total inflation-adjusted replacement costs due that year
- Closing balance — resulting end-of-year balance
Shortfall rows are highlighted in red. Click any row to expand an asset breakdown listing each asset due for replacement that year, including:
- Asset name and class
- Inflation-adjusted cost vs. original base cost (base shown with strikethrough when different)
- Benchmarked badge — cost derived from the benchmarking reference table
- Early replacement badge — asset flagged for earlier-than-expected replacement
Data Quality Warning
If any assets are missing replacement cost or projected replacement year data, an amber warning banner shows how many assets are incomplete and notes that the projection may be understated.
Scenario Modelling
Scenario mode lets you explore the impact of different inflation rates on the projection without saving any changes to the block.
Activating Scenario Mode
Click Scenario Modelling in the top-right of the Projection View. An amber panel appears confirming that changes are NOT saved.
Adjusting the Rate
Slider — Drag to set a custom rate between 0% and 10% (step: 0.25%). The projection recalculates instantly.
Preset buttons — Click a preset to jump to a standard benchmark rate:
| Preset | Rate | Description |
|---|---|---|
| Low (CPI-aligned) | 2.00% | Aligned with Bank of England CPI target |
| Medium (default) | 3.00% | BCIS General Building Cost Index long-run average |
| High (construction inflation) | 5.00% | Reflects recent UK construction cost inflation |
| Very High | 7.00% | Stress-test scenario for high-inflation environments |
The header subtitle updates to show the active rate and a (scenario) tag to distinguish it from the saved projection.
Exiting Scenario Mode
Click Exit Scenario Mode. The view reverts to the block's configured inflation rate and the amber panel is dismissed.
Monthly Contribution Stats Card
The Monthly Contribution card on the account overview now displays the block's configured annual inflation uplift rate beneath the contribution figure, e.g.:
£450.00
↑ 3.00% annual inflation uplift
API Reference
All three endpoints are tRPC queries scoped to the authenticated organisation.
reserveFund.projection
Returns the year-by-year projection using the block's saved inflation uplift rate.
Input
{ accountId: string }
Key response fields
{
inflationRatePercent: number; // e.g. 3.00
planningHorizonYears: number; // e.g. 30
currentYear: number;
endYear: number;
totalExpenditureOverHorizonPence: number;
projectedEndBalancePence: number; // negative = deficit
shortfallYearsCount: number;
firstShortfallYear: number | null;
recommendedMonthlyContributionPence: number;
assetsWithReplacementData: number;
assetsWithoutReplacementData: number;
years: ProjectionYear[]; // one entry per year
}
reserveFund.scenarioProjection
Same as projection but overrides the inflation rate for this query only.
Input
{
accountId: string;
scenarioInflationBasisPoints: number; // 0–10000 (e.g. 500 = 5.00%)
}
The response is identical to projection with isScenario: true.
reserveFund.benchmarkingDefaults
Returns the BCIS-aligned inflation presets.
Input: none
Response
{
defaultInflationBasisPoints: 300,
scenarios: [
{ label: string; basisPoints: number; description: string },
// ... 4 entries
]
}
Basis Points Convention
Inflation rates are stored and transmitted as basis points (integers) to avoid floating-point precision issues:
- 1 bp = 0.01%
- 100 bp = 1.00%
- 300 bp = 3.00% (system default)
- Conversion to rate:
inflationRate = basisPoints / 10000
The edit form accepts decimal percentages (e.g. 3.00) and converts to basis points on save (Math.round(percent × 100)).