Construction · Job cost

Committed cost

Cost already incurred on a job plus the unbilled value of subcontracts and purchase orders signed for it. It shows how much of the budget is locked in and how much is still to buy.

Plan your metrics

What it is

When a contractor signs a subcontract or issues a purchase order, the cost is committed even though it has not been invoiced. Open commitments are the remaining unbilled value of those contracts.

Early in a job, comparing committed cost with budget shows how buyout is going: whether subs and suppliers came in at or under budget.

Why operators track it

  • Buyout. Commitments below budget create savings early; above budget, a problem is already locked in.
  • Forecast floor. Cost to complete should not be less than open commitments.
  • Cash planning. Open commitments are future payments.
  • Visibility. Cost to date lags; commitments show cost before invoices arrive.

How it is calculated

Committed cost = cost to date + open commitments

  • Open commitments = subcontract and PO value (including approved change orders) − amounts invoiced against them.
  • Uncommitted budget = revised budget − committed cost.
  • Compare uncommitted budget with the forecast cost of scope not yet bought.

Worked example

Job 2420 has $240,000 of cost to date and $355,000 of open subcontracts and POs, so $595,000 is committed against a $718,000 budget. $123,000 of budget is uncommitted; the PM forecasts $115,000 to buy the rest.

Job 2420: how the estimate at completion breaks downCost to dateOpen commitments (subs and POs)Uncommitted forecastJob 2420Cost to date $240kOpen commitments $355kEAC $710,000Committed vs revised budgetRevised budget$718,000Committed$595,00083% of budgetUncommitted budget$123,000vs $115,000 forecast to buy
Example data Committed cost = cost to date + open commitments. The remaining forecast should cover the scope not yet bought out.

How to read it

  • Buyout early in the job is the key read. Compare each committed cost code with its budget.
  • Commitments without cost codes cannot be compared. Make sure lines are coded.
  • Cost to complete below open commitments is a red flag.
  • We do not publish a benchmark.

Definitional choices and common pitfalls

  • Include labor. Labor is not committed by contract. Many reports show commitments for subs and materials only.
  • Pending change orders. Include approved sub change orders. Show pending separately.
  • Retainage. Invoiced amounts include retainage held from subs.
  • Closed commitments. A commitment closed short frees the remainder.

How different roles use it

Role How they use it
Project manager Tracks buyout against budget by cost code.
CFO / controller Checks cost to complete covers open commitments.
Owner / CEO Sees buyout savings or losses early.
Operations / superintendent Confirms subs and materials are ordered before they are needed.

Questions it answers

  • How much of the budget is under contract?
  • Did buyout come in under budget?
  • Is the forecast at least as large as open commitments?
  • What payments are still ahead?

How to present it in a report

  • One row per cost code: budget, committed, uncommitted, and forecast to buy.
  • A buyout summary at job level.
  • Flag codes where committed exceeds budget.
Customer report mockupExample data
Buyout and commitmentsJob 2420 · Oct 31, 2026
Committed$595,00083% of budget
Uncommitted budget$123,000
Forecast to buy$115,000$8,000 under
Cost codeBudgetCost to dateOpen commitmentsCommittedUncommitted
26-000 Electrical$330,000$95,000$215,000$310,000$20,000
23-000 Mechanical$175,000$60,000$100,000$160,000$15,000
03-300 Concrete$213,000$85,000$40,000$125,000$88,000

Data you need

Fields

Field What it means Example value
Commitment Subcontract or PO, vendor, cost code SC-2420-04, Ace Electric, 26-000
Commitment value Original plus approved changes $310,000
Invoiced to date Billed against it $95,000
Status Open or closed Open
Revised budget By cost code $330,000
Cost to date Posted cost $240,000

What the raw data looks like

Example data A few rows as they might come out of the source system.

Commitment Type Vendor Cost code Value Invoiced Open
SC-2420-04 Subcontract Ace Electric 26-000 $310,000 $95,000 $215,000
SC-2420-05 Subcontract North Mech 23-000 $160,000 $60,000 $100,000
PO-8812 PO Metro Supply 03-300 $70,000 $30,000 $40,000

Where this data usually lives

The same field can live in more than one system. Agree with the customer which one is the source of truth.

Common data gaps and traps

  • Commitments in a PM tool, invoices in the ERP. Join on commitment number.
  • Uncoded lines. Lump-sum commitments without cost codes cannot be compared to budget.
  • Closed short not recorded. Old open balances inflate commitments.
  • Sub change orders not entered. Commitments understated.

FAQ

Is committed cost on the income statement?
No. Only incurred cost is. Committed cost is a management view.
Does committed cost include labor?
Usually not, since labor is not contracted ahead. Some teams add scheduled labor as a forecast.
What is buyout?
Signing subcontracts and POs for the job, ideally at or under budget.
For your data teamFormula variants, tables, SQL sketch, and dashboard spec

Formula details

open_commitments = SUM(commitment_value) - SUM(invoiced_against_commitment)   -- open only
committed_cost   = cost_to_date + open_commitments
uncommitted      = revised_budget - committed_cost

Worked example detail

Item Job 2420
Cost to date $240,000
Open commitments $355,000
Committed cost $595,000
Revised budget $718,000
Uncommitted budget $123,000

Tables and fields

Table Fields Notes
commitments commitment_id, job_id, cost_code, vendor_id, type, value, status
commitment_invoices commitment_id, amount, invoiced_at
job_costs job_id, cost_code, amount

SQL sketch

SELECT c.job_id, c.cost_code, SUM(c.value - COALESCE(i.inv,0)) AS open_commitments
FROM commitments c LEFT JOIN (SELECT commitment_id, SUM(amount) inv FROM commitment_invoices GROUP BY 1) i USING (commitment_id)
WHERE c.status = 'open' GROUP BY c.job_id, c.cost_code;

Build spec

Copy this into a ticket. It lists the grain, inputs, logic, and edge cases.

metric: construction.committed_cost
grain: one row per job per cost code
inputs:
  - commitment value
  - invoiced against commitment
  - cost to date
  - revised budget
logic:
  - open = value - invoiced (open commitments only)
  - committed = cost_to_date + open
  - uncommitted = budget - committed
edge_cases:
  - invoiced > value: open = 0 and flag
  - uncoded commitment: assign to an 'uncoded' bucket
  - closed commitment: open = 0

As a dashboard card

  • Stacked bar of cost to date, open commitments, and uncommitted forecast per job; table by cost code.

Common mistakes

  • Double counting invoiced commitments in both cost to date and commitments.
  • Leaving closed-short commitments open.
  • Comparing uncoded commitments to coded budgets.

Version 1.0 · Last reviewed 2026-10-20 · Machine-readable definition