Asset Register
Asset Register
The Asset Register lets you track physical building assets on a per-block basis — covering plant and equipment, building fabric, and compliance systems. For each asset you can record condition ratings, estimated replacement costs, projected replacement timelines, and freeform survey notes.
Navigate to Dashboard → Asset Register to access the module.
Asset Classes
Every asset must be assigned one of three classes:
| Class | Use for |
|---|---|
| Plant & Equipment | Lifts, boilers, pumps, CCTV, door entry systems, etc. |
| Building Fabric | Roofs, external walls, windows, communal flooring, etc. |
| Compliance Works | Fire suppression, lightning protection, asbestos remediation, etc. |
Building Fabric assets support section-by-section sub-entries (e.g. North elevation, Flat roof — main block) with individual condition ratings and notes per section.
Compliance Works assets can be linked to compliance certificate records.
Creating an Asset
- Go to Asset Register and click New Asset.
- Select the block this asset belongs to.
- Enter an asset name (required) and optionally a description.
- Choose an asset class.
- Fill in any applicable fields:
Identity fields
- Location — e.g. Basement Plant Room, Roof Level
- Manufacturer — e.g. Otis, Worcester Bosch
- Model — model number or name
- Serial Number — optional
Lifecycle fields
- Install / Last Replaced Date — the date the asset was installed or last replaced
- Estimated Lifespan (years) — combined with the install date to auto-calculate the projected replacement year
- Condition Rating (1–5) — see the Condition Rating section below
Cost fields
- Estimated Replacement Cost (£) — stored to the penny; displayed in GBP throughout the UI
- Benchmarking flag — tick this if the cost figure comes from a benchmarking reference table rather than a site-specific quote; flagged assets are indicated in the list and detail views
Notes field
- Notes — unlimited free-text field for survey observations, contractor recommendations, and condition history narratives. Notes are displayed on the detail view and included in capex exports. This field does not affect any calculations.
Building Fabric only
- Fabric Sections (JSON) — section-by-section breakdown. Each entry should follow the format:
[ { "section": "North elevation", "condition": 3, "notes": "Repointing needed" }, { "section": "Flat roof — main block", "condition": 2, "notes": "Survey due Q2" } ]
Condition Rating (1–5)
| Rating | Label | Effect |
|---|---|---|
| 5 | Excellent (as new) | No flag |
| 4 | Good | No flag |
| 3 | Average (serviceable) | No flag |
| 2 | Below Average (plan replacement) | ⚠️ Early replacement flag set |
| 1 | Poor (replace immediately) | ⚠️ Early replacement flag set |
Assets with a condition rating of 1 or 2 are automatically flagged for early replacement. These assets appear in the alert banner on the register list view and can be filtered with the Early replacement only toggle.
Projected Replacement Year
When both an Install / Last Replaced Date and an Estimated Lifespan are provided, the system automatically calculates a projected replacement year:
Projected replacement year = install year + estimated lifespan (years)
The list view shows the replacement year alongside a colour-coded indicator:
- Red — replacement due within 2 years or overdue
- Amber — replacement due within 5 years
- Default — more than 5 years remaining
Manual Replacement Year Override
If a surveyor or contractor recommends a different replacement timeline, you can override the projected year:
- Open the asset detail view.
- In the Replacement Year Override section, click Set Override.
- Enter the replacement year and a mandatory reason (e.g. Surveyor recommendation after inspection).
- Click Save Override.
The override is audit-logged with the reason and timestamp. The original projected year remains visible alongside the override.
To revert to the auto-calculated projection, click Clear Override — this action is also audit-logged.
Asset Register List View
The list view shows a summary dashboard at the top:
- Total Assets — count of all assets in the current filter scope
- Total Replacement Cost — sum of all estimated replacement costs; benchmarked estimates are noted
- Early Replacement Flags — count of assets rated condition 1 or 2
- Class Breakdown — counts for Plant & Equipment, Building Fabric, and Compliance Works
Filtering and search
| Filter | Options |
|---|---|
| Search | Matches on name, location, manufacturer, description |
| Block | Filter to a single block |
| Asset Class | Plant & Equipment, Building Fabric, Compliance Works |
| Early replacement only | Shows only condition 1–2 assets |
Asset Detail View
The detail view is organised into sections:
- Header — asset name, early replacement badge (if flagged), class badge, condition badge
- Summary cards — replacement cost, replacement year, install date + lifespan, condition
- Replacement Year Override — current override status and form to set or clear an override
- Asset Details — location, manufacturer, model, serial number, description
- Notes — survey observations and recommendations (free-text, whitespace preserved)
- Building Fabric Sections — section-by-section breakdown (Building Fabric assets only)
- Metadata — created and last updated timestamps
Permissions
All create, update, override, and delete operations require admin role. Read access follows standard tenant isolation — assets are scoped to your organisation and cannot be accessed across tenants.
API Reference
The Asset Register is powered by the asset tRPC router. All mutations are admin-gated and audit-logged.
asset.list
Returns a paginated list of assets.
Input
{
limit?: number;
blockId?: string; // filter to a specific block
assetClass?: AssetClass; // 'plant_and_equipment' | 'building_fabric' | 'compliance_works'
earlyReplacementOnly?: boolean; // true to return only condition 1–2 assets
}
asset.getById
Returns full detail for a single asset.
Input
{ id: string }
asset.create
Creates a new asset. Automatically calculates projectedReplacementYear from install date and lifespan, and sets earlyReplacementFlag if condition rating is 1 or 2.
Key input fields
{
blockId: string;
name: string;
assetClass: AssetClass;
installDate?: Date;
estimatedLifespanYears?: number;
conditionRating?: number; // 1–5
estimatedReplacementCostPence?: number; // integer, pence
isBenchmarked?: boolean;
fabricSections?: string; // JSON string (building_fabric only)
notes?: string; // unlimited free-text
// ... other optional identity fields
}
asset.update
Updates an existing asset. Recalculates projectedReplacementYear and earlyReplacementFlag when relevant fields change.
Input: same shape as create plus id: string, all fields optional.
asset.overrideReplacementYear
Sets a manual replacement year. Audit-logged.
{
id: string;
manualReplacementYear: number;
reason: string; // required
}
asset.clearOverride
Clears the manual replacement year, reverting to the auto-calculated projection. Audit-logged.
{ id: string }
asset.delete
Deletes an asset. Audit-logged.
{ id: string }
asset.blockSummary
Returns aggregate stats (total assets, total replacement cost, early flag count, class counts) for a given block.