Authored by
Philip Gundy — economist & data scientist, several years in California wage-and-hour litigation analytics at an Am Law 100 firm.
Written to be cited
Every figure traces to a section here — for expert reports, meet-and-confer briefings, and class-certification work.
Current
Updated September 22, 2026 — the date moves whenever a threshold, formula, or assumption changes.
The analysis computes five claim heads and no others: meal-period and rest-break premium exposure, the § 226 wage-statement and § 203 waiting-time estimates, and the PAGA base civil penalty. Figures in the current analysis scope exclude: the PAGA higher tiers (the base civil penalty per deficient pay period IS computed — only the subsequent-violation, malice, and uncured tiers are excluded, since they turn on facts not in the timekeeping record — see PAGA under Claims, limitations & penalties), overtime and double time in any form, 6th/7th consecutive-workday premiums, split-shift premiums, minimum-wage shortfalls, reporting-time pay, on-duty meal agreements, multi-rate employees, Donohue rounded-time presumption detection, and industry-specific exemptions.
Every excluded item is listed here so the scope of each figure is explicit.
A worked example — from punches to premium
How these rows were validated, de-duplicated, and grouped into the three shifts below is walked stage by stage on Data processing.
Simulated data: three employees on one date, 2025-03-03, all clocking in at 08:00 — one shift each, average hourly rate $21. Their punches produce one, two, and two Time Segments, and each stage below shows the columns the analysis computes on those rows.
The Time Segments, row by row
Each clock-in/out pair is one Time Segment. For every segment the analysis computes its length, the total length of the shift it belongs to, and the gap that follows it before the employee’s next segment — a gap below the split-shift threshold keeps the segments in one shift and becomes a meal-break candidate:
| employee_id | clock_in | clock_out | Segment length | Shift duration | Gap (meal break) |
|---|---|---|---|---|---|
| 101 | 08:00 | 13:30 | 5 h 30 m | 5.5 h | — |
| 102 | 08:00 | 11:30 | 3 h 30 m | 7.5 h | 30 m |
| 102 | 12:00 | 15:30 | 3 h 30 m | 7.5 h | — |
| 103 | 08:00 | 13:10 | 5 h 10 m | 8.1 h | 22 m |
| 103 | 13:32 | 16:06 | 2 h 34 m | 8.1 h | — |
The shifts — spans set the meal requirement
Segments group into one shift per employee. Every shift here spans more than 5 hours and not more than 10, so each requires exactly one meal period:
| employee_id | Shift start | Shift end | Shift duration | Meal periods required |
|---|---|---|---|---|
| 101 | 08:00 | 13:30 | 5.5 h | 1 |
| 102 | 08:00 | 15:30 | 7.5 h | 1 |
| 103 | 08:00 | 16:06 | 8.1 h | 1 |
Meal detection — each required meal, classified
A required meal is compliant when it begins by 5 hours elapsed and runs at least 30 minutes — compared at exact recorded minutes, never rounded (Donohue). A qualifying shift with no recorded meal is “No meal period recorded”:
| employee_id | Meal period | Meal start | Meal end | Started (elapsed) | Duration | Classification |
|---|---|---|---|---|---|---|
| 101 | 1st | — | — | — | — | Missing |
| 102 | 1st | 11:30 | 12:00 | 3 h 30 m | 30 m | Compliant |
| 103 | 1st | 13:10 | 13:32 | 5 h 10 m | 22 m | Short · Late |
The classification and meal period read exactly as the app’s own meal table renders them (a short-and-late meal is “Short · Late”, with the meal period in its own column). 102 starts under the 5-hour deadline at a full 30 minutes; 103 starts 10 minutes past it and runs 8 minutes short. 101’s shift — over 5 and up to 6 hours with no meal — is additionally flagged Waiver-eligible; the premium stage shows both treatments.
Premium math — the per-shift cap and the waiver setting
A shift carries at most one meal premium regardless of how many of its meals violate, valued at one hour of pay. Employee 103’s short & late shift carries one. Employee 101’s no-meal shift counts under the default treatment — waivers are assumed not to exist — and is excluded when the case’s waiver setting, frozen when the analysis runs, is on:
default treatment: 2 premium shifts × 1 hour × $21 = $42
waiver setting on: 1 premium shift × 1 hour × $21 = $21
Rest breaks — estimated from the meal record
Rest breaks are rarely punched, so no rest figure is measured — the analysis estimates instead. All three shifts are rest-qualifying (101 requires 1 rest period; 102 and 103 require 2 each), and each employee’s own meal violation rate becomes their rest premium estimate per qualifying shift:
| employee_id | Meal violation rate | Rest-qualifying shifts | Rest premium estimate |
|---|---|---|---|
| 101 | 100.0% | 1 | 1.0 |
| 102 | 0.0% | 1 | 0.0 |
| 103 | 100.0% | 1 | 1.0 |
Rates reflect the default meal treatment (101’s Waiver-eligible shift counted); with the waiver setting on, 101’s rate is 0.0% and the estimate drops to 1.0 shift.
estimated rest exposure = 2 rest premium shifts × 1 hour × $21 = $42
From premium shifts to pay periods
Penalty estimates count pay periods per employee. Each premium shift above sits in its employee’s bi-weekly pay period, and a pay period whose net meal premium count is at least one — its premium assumed unpaid — is deficient. The rest premium estimates do not make a pay period deficient: the § 226 and PAGA counts rest on the meal side alone. Under the default treatment employees 101 and 103 each carry one deficient pay period; with the waiver setting on, only 103 does.
The § 226 schedule, the cap, and the window — an employee with history
Penalty arithmetic needs history, so extend the picture with an employee on the same bi-weekly calendar carrying 52 deficient pay periods across two years of data, of which 26 end inside the 1-year window. The all-time schedule hits the per-employee cap; the windowed figure is re-counted from the 26 in-window pay periods and re-capped — never scaled down from the all-time number:
§ 226, all time — 52 pay periods: $50 + $100 × 51 = $5,150 → capped at $4,000
§ 226, 1-year window — re-counted, 26 pay periods: $50 + $100 × 25 = $2,550
PAGA base, 1-year window — 26 pay periods: $100 × 26 = $2,600
The § 226 and PAGA estimates share the same deficient-pay-period grain, and the premium buffer — a setting of the analysis — offsets both alike. § 203 is separate: it keys to assumed separation rather than to pay periods, and its unit of pay is that employee’s own average shift. Were employee 103’s last shift to fall at least 28 days before the dataset’s most recent date, their 7 h 44 m of paid hours across one shift — the 22-minute meal gap is off the clock, so recorded hours run under the 8.1-hour span — is a 7.7333-hour average shift: $162.40 at $21, and $4,872.00 across the 30-day statutory maximum.
Every case figure is this arithmetic summed across employees — each step reproducible by hand from the counts shown.