The Cost control grid is the per-project cockpit on the Finance Overview tab: one row per task, grouped by stage, with the project total pinned underneath. Every money column traces to a source record — committed cost comes from commitments, actual cost from expense allocations and worklogs, the forecast from the earned-value engine — work completed priced at budget, explained in Forecasting & Earned Value. Nothing load-bearing is free-typed, and every change is written to the finance event log. The grid exists so that "where is the money going" is answered on screen, not in a spreadsheet you rebuild every Friday.
The grid
Open a project, go to Finance, stay on the Overview tab. The Cost control card shows the grid: collapsible stage rows with a task count, task rows underneath, and a Project total row pinned to the bottom. The Task column stays fixed while you scroll sideways; the header stays fixed while you scroll down. Stage rows and the project total sum the money columns, so a stage that is bleeding shows it before you expand a single task.
The columns
- Baseline — the current budget baseline. When it differs from the value at award, the cell shows the original underneath ("orig. €100 000"). Approved change orders adjust the baseline while the at-award original is preserved, and every baseline change — whether edited on the task or applied by a change order — is written to the finance event log, so the gap between original and current can always be traced.
- Committed — the sum of the task's open commitments: subcontracts and orders you are contractually on the hook for, invoiced or not.
- Actual (AC) — actual cost to date: expense allocations plus labor cost from logged hours and cost rates. The split is shown under the number ("exp €12 000 · labor €4 500").
- EV — earned value: percent complete × baseline. The value of work done, priced at budget.
- CPI — cost performance index, EV ÷ AC. Below 1 means spending is running ahead of progress; the grid marks those values explicitly.
- EAC (system) — the engine's forecast of final cost, with a badge showing how it was produced: EVM (from earned value), Rules (fallback when there is no progress signal), or Floor (lifted to cover open commitments).
- EAC (PM) — your own forecast, side by side with the system's. When they disagree, the difference is shown under your number. The two are never merged; the disagreement itself is a signal.
- VAC — variance at completion: baseline minus system EAC, signed. Negative means a forecast overrun.
- % complete — the value with a source badge: OVR (PM override), HRS (logged hours vs estimate), STS (task status). A task with no basis shows "No signal" rather than an invented number.
- Alerts — text chips per row: At risk (forecast overrun above 10% of baseline), Over budget, ≥80% budget, and a TCPI chip — to-complete performance index, the cost efficiency needed on the remaining work to still finish on budget — when that recovery has become unrealistic.
Stage rows carry a compact digest of their tasks' alerts ("3 at risk · 1 over baseline"), and the same counts roll up into the Alerts digest at the top of the Overview tab. Chips always carry text — color reinforces state but never carries it alone. The thresholds and formulas behind these figures are covered in Forecasting & Earned Value.
Committed cost you can trust
Committed cost used to be a number someone typed into a task and forgot. In ReflectHub it is the sum of the task's open commitments, and commitments come from three places:
- RFQ awards. Awarding a quote creates a commitment on the linked task automatically — the amount comes from the awarded quote, the expected date from the quote's delivery date, and the row is titled with the RFQ and vendor. Un-awarding removes it. You cannot edit the amount of an RFQ award commitment; only its expected date and status. The number on screen is the number you awarded.
- Manual commitments. For contracts that did not go through an RFQ — a framework agreement, a handshake subcontract — add a manual commitment with a title, amount and expected date (for example "Electrical subcontract — Volta OÜ").
- Invoice drawdown. When you allocate an invoice against a commitment, its Invoiced and Remaining figures update and the status re-derives: Open with nothing invoiced, Partially invoiced once allocations land, Closed when the invoiced amount covers the commitment. Closed commitments drop out of committed cost — the money has moved from committed to actual.
A worked example: you award a €48 000 electrical package. A commitment for €48 000 appears on the task and the Committed column reflects it. Two progress invoices allocate €30 000 against it — the commitment shows Invoiced €30 000, Remaining €18 000, status Partially invoiced. Committed and actual stay reconciled without anyone editing a field.
On the task itself, Committed Cost is read-only with a View commitments button that opens the full list — source, amount, invoiced, remaining, status — so every euro of committed spend traces to its origin.
Cost codes
Each company keeps a cost-code master list under Settings → Cost codes. The list starts pre-populated with every cost code already used on the company's tasks, so there is nothing to re-enter — review the seeded list and deactivate the retired codes. The Cost code field on the task form autocompletes against it; you can pick from the list or type a new code, and owners and admins can add a typed code to the company list directly from the field. Codes are deactivated rather than deleted — a retired code disappears from pickers while every historical task keeps its value.
Export
The grid exports via Export XLSX: the columns you see on screen plus the expense/labor split of actual cost, TCPI, the engine source and the percent-complete source, with the project totals row and a currency note. The filtered expense table on the Expenses tab has its own Export CSV. Both give you the same numbers as the screen — the export is a copy of the cockpit, not a different calculation.