Block Detail Page — Operational Hub
Block Detail Page — Operational Hub
Every block in the platform has a dedicated detail page at /dashboard/blocks/[id]. This page is the single operational hub for a residential building — showing ownership, units, client money compliance, and management account status in one place.
Navigating to a block
From the blocks list (/dashboard/blocks), click any block row to open its detail page. The URL changes to /dashboard/blocks/<block-id>, which means you can bookmark or share a direct link to any building.
Page sections
Block identity card
Displayed at the top of every detail page:
- Name — the block's display name.
- Owner — owner name with a company or individual icon. Clicking the owner name navigates to the Owners section.
- Address — full address assembled from stored address lines, city, and postcode.
- Dates — created and last-updated timestamps.
- Ownership transfer count — total number of ownership transfers recorded against this block.
Owner assignment warning
If a block has no owner assigned, an amber warning banner is shown at the top of the page. Every block must belong to exactly one owner — financial reporting and compliance features depend on this association. Assign an owner by editing the block or from the Owners section.
Management account banner
A banner is displayed when the block has no active management account source. Financial reports (P&L, service charge demands, budgets) are not available until at least one active source is connected. See Management Account Sources below.
Stats grid
Four summary cards give an at-a-glance view of the block:
| Card | What it shows |
|---|---|
| Units | Total registered units; occupied and vacant breakdown. Links to the Units page filtered to this block. |
| Account Sources | Total management account sources; active count. |
| Client Money | Number of client money accounts opened (maximum 2: Main + Reserve). Links to Client Money. |
| Expected Units | The totalUnits value from the block record; shows how many units are still to be registered. |
Units overview
A bar chart shows the proportion of units in each status:
- Occupied — unit has a current leaseholder in residence.
- Vacant — unit has no current occupier.
- Sublet — unit is sublet by the leaseholder.
- Sold (Pending) — unit sold, completion pending.
Click View all to open the Units page filtered to this block.
Client money
Shows the two FCA-required ring-fenced accounts for the block:
| Account type | Purpose |
|---|---|
| Main (Service Charge) | Holds collected service charge payments. |
| Reserve (Sinking Fund) | Holds long-term reserve contributions. |
Each account displays a status badge (Active, Pending Application, Pending Verification, Suspended, or Closed) and a Ring-fenced badge where applicable. If an account has not been opened yet, a dashed placeholder is shown.
Management account sources
Lists every management account source connected to this block. Supported source types:
| Type | Description |
|---|---|
| TrueLayer Bank Feed | Direct open-banking bank feed via TrueLayer. |
| Calmony Account | Ring-fenced Calmony-managed account. |
| Manual Ledger / CSV | Manual data entry or CSV import. |
| Accounting Connector | Third-party accounting system integration. |
Each source shows a label, type, optional provider name, and an Active / Inactive badge. Financial reporting requires at least one Active source.
Quick actions
Three shortcut cards at the bottom of the page:
- Manage Units — opens the Units page filtered to this block.
- Client Money — opens the Client Money section.
- Financial Reports — opens financial reports. This action is disabled (with a tooltip) until at least one active management account source exists.
Editing a block
Click Edit (top-right of the page) to open an inline edit form. Fields available:
- Block name (required)
- Total units
- Address Line 1
- Address Line 2
- City
- Postcode
Click Update Block to save or Cancel to discard changes. The page data refreshes automatically after a successful save.
Deleting a block
Click Delete to reveal an inline confirmation step. Deleting a block:
- Removes the block record and all associated management account sources.
- Units and leaseholder records linked to the block will be orphaned — reassign or remove them first.
Confirm by clicking Confirm Delete, or click Cancel to dismiss.
API: block.getDetail
The detail page is powered by the block.getDetail tRPC query.
Input
{ id: string } // Block ID
Returns
{
block: Block; // Full block record
owner: {
id: string;
name: string;
ownerType: string; // "company" | "individual"
} | null;
unitCounts: {
total: number;
occupied: number;
vacant: number;
sublet: number;
soldPending: number;
};
managementAccounts: {
total: number; // All sources
active: number; // Active sources only
hasActiveSource: boolean; // Gate flag for financial reporting
};
clientMoney: {
total: number;
mainAccount: {
status: string;
isRingFenced: boolean;
} | null;
reserveAccount: {
status: string;
isRingFenced: boolean;
} | null;
};
ownershipTransfers: number;
}
Returns NOT_FOUND if the block does not exist or does not belong to the authenticated organisation.
Business rules
| Rule | Enforcement |
|---|---|
| Block belongs to exactly one owner | Warning banner shown when ownerId is null |
| Financial reporting requires a management account | Quick action disabled; management account banner shown |
| FCA-aligned client money | Ring-fence status displayed per account |
| Two-account structure (Main + Reserve) | Each account type shown separately |
| Multi-tenant isolation | All queries scoped to ctx.orgId |
| Audit trail | All mutations logged via logAudit |