Skip to main content
All Docs
FeaturesagentOS Block ManagerUpdated April 12, 2026

Block Detail View

Block Detail View

The Block Detail View is the core operational hub of the platform. It aggregates all child entity data — units, management account sources, client money accounts, and ownership history — into a single screen so you can assess a block's full status at a glance.

Accessing the Detail View

From Dashboard → Blocks, click any block in the list. The list view is replaced by the detail view. Use the Back button to return to the list.

Sections

Block Information

Displays headline stats for the block:

StatDescription
Total UnitsThe configured unit count for the block
OwnerOwner name with a company or individual icon
AddressFull postal address (address line 1, line 2, city, postcode)
CreatedDate the block record was created

No Owner warning — if no owner is assigned an amber banner is displayed. Every block must belong to exactly one owner; this banner indicates a data integrity issue that should be resolved.

Units

Shows a live breakdown of units registered against this block:

StatusDescription
TotalAll registered units
OccupiedUnits with an active occupancy
VacantUnits with no current occupancy
SubletUnits that are being sublet
Sold (Pending)Units sold but pending legal completion

The View all link navigates to the Units page filtered to this block. If no units exist, an Add Units CTA is shown.

Management Account Sources

Lists every management account source connected to this block. The section header badge shows:

  • Active (green) — at least one source is active.
  • Not Configured (amber) — no sources are present. This is a financial reporting gate; reports cannot be run until a source is added.

Each source row displays:

  • Source type icon and label (TrueLayer Bank Feed, Calmony Account, Manual Ledger / CSV, Accounting Connector)
  • Connector provider name, if applicable
  • Active or Inactive status badge

Client Money Accounts

Displays the Main and Reserve client money accounts for the block (the two-account structure). Each account card shows:

Account type badge — Main (blue) or Reserve (amber).

Account status badge — one of:

  • Active
  • Pending Application
  • Pending Verification
  • Suspended
  • Closed

Compliance indicators (green check or red cross for each):

IndicatorMeaning
Ring-FencedClient funds are held in a ring-fenced account
Fee ExcludedManagement fees are excluded from client money
CASS AcknowledgedCASS acknowledgement has been received
RICS CompliantAccount meets RICS client money handling requirements

If no accounts exist, a note is shown explaining the two-account structure.

Use the Manage link to navigate to the Client Money Accounts management page.

Ownership Transfer History

Shows the last 5 ownership transfer events for the block, in reverse-chronological order. Each entry records the transfer date and, where provided, the reason. This section is hidden when no transfers exist.

Editing a Block

Click Edit in the top-right of the detail view to open the block edit form inline. Save or cancel to return to the detail view.

Deleting a Block

Click Delete to reveal the confirmation panel. The confirmation message explicitly warns that deleting the block will also remove:

  • All management account sources
  • All client money accounts
  • All other associated records

This action is irreversible.

Business Rules Enforced

  • Every block must belong to exactly one owner — an amber banner is shown if unassigned.
  • A block requires at least one active management account source before financial reporting is available — the Management Account Sources section is badged Not Configured until this is resolved.
  • Client money accounts must individually satisfy ring-fencing, fee exclusion, CASS, and RICS requirements — compliance gaps are visible per account.

API Reference

The detail view is powered by the block.getDetail tRPC query.

// Input
{ id: string }

// Returns null if the block is not found or does not belong to the caller's org.
// Otherwise returns:
{
  // All block fields (id, name, orgId, ownerId, totalUnits, address fields, createdAt, updatedAt, …)
  owner: {
    id: string;
    name: string;
    ownerType: string; // "company" | "individual"
    email: string | null;
  } | null;
  unitSummary: {
    total: number;
    occupied: number;
    vacant: number;
    sublet: number;
    soldPending: number; // status === "sold_pending_completion"
  };
  managementSources: Array<{
    id: string;
    sourceType: string;
    label: string;
    isActive: boolean;
    connectorProvider: string | null;
    createdAt: Date;
  }>;
  clientMoneyAccounts: Array<{
    id: string;
    accountType: string;          // "main" | "reserve"
    status: string;
    label: string;
    isRingFenced: boolean;
    managementFeeExcluded: boolean;
    cassAcknowledgementReceived: boolean;
    lastReconciliationPassed: boolean;
    ricsCompliant: boolean;
    createdAt: Date;
  }>;
  recentTransfers: Array<{
    id: string;
    previousOwnerId: string | null;
    newOwnerId: string | null;
    reason: string | null;
    createdAt: Date;
  }>;  // last 5, most recent first
  hasManagementAccount: boolean; // true if any managementSource.isActive === true
}

The query is scoped to the caller's organisation (orgId) — it will return null for blocks belonging to other organisations.