Skip to content

Labor & Payroll — shifts, timesheets, and what work really costs

What this covers. Food is only half of what a restaurant spends; the other half is people. This explains how worked time becomes a cost the business can trust: the shift as the unit of work, the timesheet that approves it, the payroll run that turns approved hours into money per period, and prime cost — the one number (food + labor together) every restaurant lives or dies by. It also answers the question that decides the whole design: should a cleaner's wages be part of a dish's cost? — and why the answer is no for the cleaner but yes for the worker who spent the morning making pesto.


1. Two kinds of labor, two destinies

Watch a restaurant for a day and you'll see two different kinds of work.

The first kind has no traceable path to any particular plate: the cleaner mopping at midnight, the manager doing the rota, the server carrying food, even the line cook plating à la minute during service — when forty dishes leave the pass in an hour, nobody can honestly say which minutes belonged to which plate. This is indirect labor. It is real cost, and it belongs to the restaurant's bottom line for the period — as a single honest line, not sliced onto dishes.

The second kind is different: on a production day, a dedicated worker spends four hours turning a crate of basil into twenty kilos of pesto. Here the path from hours to output is direct and countable — these hours, this batch, this quantity. This is direct production labor, and it genuinely is part of what that pesto cost to make.

The model treats them differently on purpose. Spreading the cleaner's wages across the menu would manufacture a number with no causation behind it — every spreading rule (per portion? by price? by food cost?) gives a different answer, which is the tell that none of them is true. A cost figure an operator can't trace is a cost figure they'll eventually stop believing. So: indirect labor stays a period-level restaurant line; direct production labor follows the food it made.

2. The shift — the unit of worked time

A shift records that one teammate worked one restaurant on one day: start, end, unpaid break, and — optionally — the station (kitchen, bar) where they worked. Paid hours are simply the span minus the break.

Three details carry the weight:

  • The restaurant on the shift is the profit center. Exactly as a consumption movement charges food cost to the selling restaurant, the shift charges labor cost to the restaurant where the work happened. A teammate who covers a shift at a sister location costs that location, not their home one.
  • The business date is restaurant-local, the same rule a sales ticket follows — a shift ending at 1 a.m. belongs to the evening it started.
  • A shift is a fact, entered or confirmed by a manager. Clock-in devices and rota plans can come later as sources that create shifts — the same one-front-door pattern sales ingestion uses — without changing what a shift is.

3. Employment terms — what an hour costs

Each teammate carries employment terms: hourly rate or monthly salary, effective from a date. A raise is a new row from a new date — history is never edited, so last month's payroll stays explainable forever from the rows that were in force then. (The same append-only discipline as recipe versions: the past is pinned, only the future changes.) Pay is in the company's single currency.

4. The timesheet — approval makes hours real

Shifts collect into a timesheet per restaurant per week, which moves from draft to approved. Approval freezes the shifts inside it: approved hours are the facts that payroll reads — the labor counterpart of "count wins" at the stock close. Until approval a manager corrects freely; after approval a correction is an explicit amendment, and if the money was already paid out, the difference rides the next payroll run as an adjustment — the books never rewrite a settled period, the same rule a late sale follows at the stock close.

5. The payroll run — the labor close

Once per payroll period (a company-level calendar — monthly or semi-monthly), a payroll run turns approved time into gross money: for hourly teammates, hours × the rate in force on each shift's date; for salaried ones, the monthly figure pro-rated for partial months. Like the stock close, it refuses to run while something is unresolved — an unapproved timesheet in the period, a worked shift with no pay terms covering its date — and it enumerates every blocker rather than failing vaguely. Posted run lines are immutable; corrections post forward.

And it stops at gross. Withholding, social security, payslips, and the actual payment belong to the operator's accountant or payroll provider — the same boundary the financial boundary draws for everything else: this system produces operationally honest figures and exports them; it does not pretend to be a tax engine.

6. Prime cost — the number this module exists for

Prime cost = cost of goods sold + gross labor, per restaurant per period. Food cost alone routinely looks healthy while the business bleeds; labor alone says nothing about the menu. Together they are the restaurant's vital sign — typically 55–65% of revenue, and the first number any operator, lender, or buyer asks for. The stock side already produces COGS at its warehouse close; the payroll run produces the labor line; the P&L view lays them side by side. (Staff meals — food the team ate, already recorded by the stock side as internal consumption under a category of their own — sit naturally next to the labor line as a benefit cost.)

7. The absorption seam — when labor becomes part of the food

There is exactly one place where labor crosses into the value of stock, and it is the case the cleaner test approves: the dedicated production run.

When a production run carries labor — this worker, these hours, on this batch — the wages for those hours are absorbed into the value of what was produced, alongside the ingredients:

 Production day:  4 h × €12/h            = €48 labor
                  ingredients at cost     = €52
                                           ────
                  20 kg pesto enters stock at €100  →  €5.00/kg
                  (€2.60/kg of it material, €2.40/kg the work of making it)

From that moment the existing machinery does everything: the pesto's pool price carries the labor, every dish using pesto picks it up through the ordinary recipe explosion, and when the dish sells, that labor lands in COGS — the dish carries exactly the labor that physically went into its components, and nothing else. No new spreading rule was invented; the food's own cost flow delivers it.

Two guardrails keep the seam honest. The absorbed amount is recorded as its own explicit artifact, so every derived figure still reconstructs from the record — and so the wages line gives up exactly what the batch absorbed (the money moves from "labor expense" to "stock value"; it is never counted twice). And absorption is opt-in per run: cooking during service never absorbs, because at the pass, production work and service work are the same blur — which makes them indirect by definition.

8. Plate cost — an honest answer

So what does a dish really cost? First, the word: the per-dish figure is the plate cost. (COGS is the period total of what was sold — a month has a COGS, a dish has a plate cost. The two meet only when dishes sell.)

  • Food + packaging at real pool prices — including the direct labor embedded in its prep items via the absorption seam. This is the dish's plate cost: every euro in it is traceable to something that demonstrably went into the plate.
  • Indirect labor deliberately excluded — it reaches the operator one level up, in the restaurant's prime cost, where it is true. A "fully loaded" per-dish number that includes a share of the cleaner is a number that changes whenever the spreading rule does; the model refuses to print it.

When pricing a menu, the operator reads both: the dish's plate cost for the floor, and the restaurant's prime-cost percentage for the climate. And because every labor-attached production run records hours against actual output, a third reading emerges with no extra bookkeeping: labor per unit produced, per item — the honest way to see that a batch of sheet-baked cookies buys far more output per hour than pancakes griddled two at a time. Where a shared piece of equipment is the day's real limit, the ranking that matters is margin per hour of that bottleneck, not margin per plate.

9. What this module deliberately is not

Not a payroll processor (no net pay, no payslips, no filings — the provider's job). Not a scheduler (a rota can come later and propose shifts; the shift stays the fact). Not a time-clock (punches can come later and create shifts). And not an activity-based costing engine: the only labor that touches a plate's cost is labor someone actually spent making that plate's components.


See also

  • Period close — the stock close whose rhythm (record → approve → period truth → blockers → immutable corrections) this module mirrors for time.
  • Recipes & production — the production run the absorption seam attaches to, and the explosion that carries absorbed labor to dishes.
  • Financial boundary — where gross wages, absorbed labor, and the employer-cost estimate join the exported buckets.
  • Scope & locations — why the restaurant (profit center), not the warehouse, is labor's axis.
Last updated · History