Skip to content

Per-project CapEx review

Open one project, write its rationale, reassign its effort, and push it into approval. This is where claims actually get built — the overview is triage, this is the workshop.

The page has three modes layered on the same project:

  1. Project view — the default. Full project detail with the CapEx classification, cost centre, owner, and effort breakdown. Same component the workforce roadmap uses, but in viewMode="capex".
  2. Rationale writer — a guided, region-aware writer for the auditor-facing narrative.
  3. Reassign workspace — bulk effort reallocation by person or by week.

Each mode has its own URL, so links from approvers, audit emails, or saved view filters land deep without losing context.

Project view

Lands at /plan/[planId]/cost-capitalization/project/[projectId]. Shows the project's CapEx panel — capitalisation status, cost centre, classification, recent activity — alongside the standard project metadata (lifecycle stage, owner, dates, allocations).

If the project drawer is open when you arrive, it auto-closes. The full page shows everything the drawer does, and more, so the drawer is just clutter.

Rationale writer

Lands at /plan/[planId]/cost-capitalization/project/[projectId]/rationale?region=UK. Renders the unified RationaleWriter with rationaleType="capex". Region is read from the region query param — defaults to UK.

The writer is purpose-built for capitalisation narratives. Three columns:

  • Left sidebar — interview prompts the AI uses to probe the technical and accounting position.
  • Editor — the actual rationale draft, with margin comments from the AI panel and a draft-readiness gate before you can submit.
  • AI panel — generation progress, cost evidence summary, completion dialog.

TIP

The same RationaleWriter powers R&D claim review — the prompts and frameworks differ, the UX is identical.

Reassign workspace

Lands at /plan/[planId]/cost-capitalization/project/[projectId]/reassign. The customer's headline ask: let CTOs and CFOs reassign chunks of logged effort from one project to another, by person or by week, with a 15-second undo and a clear impact preview before commit.

Architecture matters here:

  • Single source of truth: GetCapexProjectWeeklyEffort — one (resource, week) bucket per row, aggregated server-side. The page pivots client-side between By-person and By-week so totals stay identical regardless of pivot.
  • Cost, hours, and FTE pass through verbatim from SQL. No JS math on monetary values.
  • Bulk reassignment fires bulkReassignEmployeeEffort and bulkReassignContractorEffort in parallel when a selection mixes types.
  • 15-second undo via useReallocationUndo. Best-effort revert: only when the entire selection shared a single source project.

Reassign controls

ControlWhat it does
PivotBy person (rows are people, columns are weeks) or By week (rows are weeks, columns are people)
Resource typeFilter to employees, contractors, AI agents — or any combination
Date rangeDefaults to recent months; expand for the full project history
Project pickerDestination project. Includes a + New CapEx project option that opens an inline create flow
Cost centreBulk-set the destination's cost centre via projectCostCenterSet

Impact preview

Before commit, the Impact Preview Sheet shows the per-resource cost delta on the source and destination project. No surprises — what you see is what gets booked.

Permissions

  • View: ROADMAP_PROJECTS_READ.
  • Cost figures: FINANCIALS_VIEW_SUMMARY.
  • Reassign and inline create: ROADMAP_PROJECTS_UPDATE. The picker hides itself when the viewer lacks the capability.

Where it goes from here

When the rationale is ready and the effort is on the right project, the claim moves into the approval workflow. Approved or completed claims land in completed claims with annual depreciation calculated.

Flowstate Documentation