Skip to content

Labor actuals and variance

Every screen before this one deals in estimates. This is the one that deals in what happened. You record hours as they are worked, and Flow shows you the job's real labor cost beside the bid it was priced at.

Get there from the Stage 6 — Field execution screen or the Stage 7 — Closeout screen, or go straight to /jobs/{id}/actuals. The page stays available after the job closes, which is usually when you want it.

Recording hours

One entry is one person, on one day. That is the unit — not a week, not a crew. If three people worked Tuesday, that is three entries.

Fill in the Record hours form:

  • Work date — the day the work happened, not the day you're typing. Hours written up on Friday for Tuesday's work belong to Tuesday.
  • Employee — a name, as it reads on the timesheet. It does not have to be someone with a Flow login; most people whose hours land here won't have one.
  • Role — from your configured labor roles. This is what sets the rate.
  • ST / OT / DT hours — straight time, overtime, double time. Each is billed at its own rate. At least one has to be more than zero, and none of them can be more than 24 — a "90" in a box is an extra digit, and it would go straight into the job's cost.
  • Phase / cost code (optional) — use the same wording the bid used ("Rough-In — Conduit"), so hours read back against the phase they were priced in.
  • PO / work order and Notes (optional).

Flow costs the entry the moment you save it, using your current wages and payroll burden — the same numbers that price a bid. It stores those rates on the entry. Give someone a raise next month and last month's jobs still cost what they cost; only new entries pick up the new wage. If you correct an entry later (the foreman wrote 8, it was really 10), it re-costs at the rate it was originally recorded at, not today's.

Every entry, edit and removal is written to the audit log with your name on it.

Reading the variance

The Estimated vs actual table compares four things: ST hours, OT hours, DT hours, and total labor cost.

Variance is actual minus estimated. A positive number means the job ran over; a negative number means it came in under. Every row says which in words as well as colour, so there is nothing to memorise and nothing that depends on seeing red and green.

Two things about the cost row are worth knowing:

  • The estimate is your fully-loaded labor cost, before overhead and profit — wages plus payroll burden. It is not the marked-up figure the customer was quoted. That is on purpose: your crew is not paid your margin, so including it would make every profitable job look like it came in under budget.
  • The estimate comes from the signed bid. If nothing is signed yet, Flow falls back to the latest live version and tells you which one it used. If the job was never bid at all, the estimate reads zero and the page says so rather than pretending it was budgeted.

A "—" in the Variance % column means there was nothing to compare against — you can't be a percentage over an estimate of zero.

What's not in v1 yet

  • No import. Hours are typed in one at a time. Bulk import from a payroll or timesheet CSV is tracked separately.
  • No editing in place. You can record an entry or remove it; correcting one means removing and re-recording.
  • Labor only. Material actuals — what you really spent at the supply house — are not tracked yet, so the variance covers labor and nothing else.
  • No cross-job reporting. Variance is per job. There is no "how are we doing across all open work" view.