Methodology
How Illuminare turns raw timekeeping data into the figures it reports — every threshold, formula, and default assumption, in the order the pipeline applies them. It applies identically plaintiff-side or defense-side: the system reports what the data shows and leaves interpretation to you.
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.
Versioned
Version 1.0 (v0 draft) · updated July 5, 2026. Increments whenever a threshold, formula, or assumption changes.
Per Naranjo v. Spectrum Security disclosure practice, figures 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 below), weekly overtime (daily OT/DT identification is included), 6th/7th consecutive-workday premiums, split-shift premiums, 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
Follow one employee across three workdays to see exactly how a raw time punch becomes a meal-period premium — every stage the pipeline applies, in order. Illustrative data; the employee’s average hourly rate is $21.
The three shifts, as recorded
| Workday | Recorded punches |
|---|---|
| Monday | In 09:00 · Out 13:30 |
| Tuesday | In 08:00 · Meal 11:45–12:15 · Out 15:15 |
| Wednesday | In 06:00 · Meal 1 10:00–10:30 · Meal 2 16:10–16:32 · Out 17:00 |
Exact minutes — censored, never rounded
Punch times arrive minute-granular — the timekeeping system records to the minute, so the observations are already “censored.” The analysis compares durations exactly and never rounds a time before a legal threshold. Wednesday’s second meal runs 16:10 to 16:32 — 22 minutes — so it is short; a 29-minute break would be short too, never rounded up to 30.
Meal detection — required meals, timeliness, duration
The 5-hour and 10-hour meal triggers are measured on the shift’s elapsed span — clock time from the first clock-in to the final clock-out, including intra-shift gaps. A first meal must commence before the end of the 5th hour, a second before the end of the 10th, each at least 30 minutes.
| Workday | Elapsed span | Meals required | Result |
|---|---|---|---|
| Monday | 4.5 h | 0 | Under 5 hours — no meal required. Compliant. |
| Tuesday | 7.25 h | 1 | The meal starts 11:45, before the 13:00 deadline, and runs a full 30 minutes — timely and compliant. |
| Wednesday | 11 h | 2 | Meal 1 is timely (10:00) and 30 minutes. Meal 2 starts 16:10 — after the 16:00 deadline — and runs 22 minutes: late and short. A potential violation. |
Premium math — at most one premium per workday
A workday carries at most one meal premium, regardless of how many meals violate. Only Wednesday has a violation, so it carries a single premium — one hour of pay at the $21 rate.
| Workday | Meal premium |
|---|---|
| Monday | $0 |
| Tuesday | $0 |
| Wednesday | $21 |
| Total | $21 |
Across the three shifts, this employee’s meal-period exposure is $21 — a single premium, from the one workday whose second meal was both late and short.
The legal model
Legal framework
The analysis applies California Labor Code §§ 226.7, 512, 558, and 1194, and IWC Wage Orders 4 and 5. Threshold and premium logic follows the controlling cases: Brinker Restaurant v. Superior Court (2012), Donohue v. AMN Services (2021), Naranjo v. Spectrum Security (2022), UPS v. Superior Court (2011), Ferra v. Loews Hollywood (2021), and Murphy v. Kenneth Cole (2007).
Meal period thresholds
- First meal period — must commence before the end of the 5th hour (LC 512(a)); at least 30 minutes long. A shift of 5–6 hours with no recorded meal is flagged waiver-eligible, not counted, when the case-level waiver setting is on.
- Second meal period — must commence before the end of the 10th hour; same 30-minute duration requirement.
- Threshold basis — the 5-hour and 10-hour triggers are measured on the shift’s elapsed span: clock time from the first clock-in of the work period, including intra-shift gaps — not cumulative hours worked.
- Exact-minute comparison — durations are never censored before a threshold comparison (Donohue): a 29-minute-30-second break is short; a 9-hour-59.5-minute shift requires one meal period, not two.
Rest break model — estimated, not measured
Rest periods are typically unrecorded in timekeeping data, so rest break figures are estimates, derived from the measured meal-period record under one of three modes (selected per analysis and disclosed with every figure):
- Match meal, per employee (default) — each employee’s own meal violation rate applied to their rest-qualifying shifts.
- Match meal, dataset average — the dataset-wide meal rate applied uniformly.
- Manual — a user-supplied rate.
Rest periods owed scale with shift length (0 under 3.5 h; 1 to 6 h; 2 to 10 h; 3 to 14 h; 4 beyond). The rest premium cap is separate from the meal cap (§ 226.7; UPS).
Waiver treatment
Meal waivers are a legal defense, not a data finding. Under LC 512(a), the first meal period may be voluntarily waived only when the workday is no longer than 6 hours — so the analysis flags waiver-eligible shifts (5–6 hours, no recorded meal). Whether they are excluded from counts is the case-level waiver setting, off by default. The per-case treatment in effect is stated alongside every figure.
How your data becomes analyzable
Data processing
- Time segments — each clock-in/out interval is one segment. Overnight segments split at midnight into two, each carrying its calendar date, so day-bounded rules apply cleanly.
- Shift clustering — same-day segments for an employee group into work periods; meal and rest requirements are evaluated per work period.
- Duplicates — exact duplicates on (employee, clock-in, clock-out) are identified and excluded from calculation; counts are reported on the Duplicate Data page.
- Overlapping punches — when two segments for the same employee overlap in time, the longer is kept and the shorter set aside, so overlapping records never double-count toward a work period.
- File inclusion — only files marked included-in-analysis feed the figures; per-file inclusion is user-controlled.
- Timezones — timestamps are read as local, offset-naive times. An explicit UTC offset, if present, is read at its written wall-clock value and set aside — never converted across time zones, which could shift a punch across midnight.
- Rounding practices are not detected — the analysis evaluates timestamps as recorded; Donohue-style rounded-time presumption detection is not performed in alpha.
Overlapping-punch resolution
When two time segments for the same employee overlap in time, the longer segment is kept and the shorter is set aside. Overlapping records therefore never double-count toward a work period, and the work-period span used for the meal thresholds reflects the longer of the two.
Exact duplicates on (employee, clock-in, clock-out) are handled separately — identified and excluded before overlap resolution — and their counts are reported on the Duplicate Data page.
Minute-level censoring
Timestamps are read at minute resolution — seconds are censored (truncated), not rounded. A threshold comparison then uses the exact minute value, so the analysis never rounds a duration up or down before deciding whether a threshold is met (Donohue).
Concretely: a 29-minute break is short even if it is 29 minutes 59 seconds; a shift that elapses 9 hours 59 minutes requires one meal period, not two. Donohue-style rounded-time presumption detection is a separate practice and is not performed in alpha.
The exposure formula
Potential exposure formula
Meal-period exposure is the sum, over workdays with at least one potential meal violation, of one hour of pay at the case’s average hourly rate:
Σ (workdays with ≥1 meal occurrence) × 1 hr × average hourly rate
- Premium cap — at most one meal premium per workday regardless of occurrence count, and at most one rest premium per workday as a separate cap (UPS v. Superior Court; § 226.7). Up to two premiums per workday total.
- Rate source — the case-level average hourly rate, a required input set before analysis. No minimum-wage fallback is applied. The Ferra “regular rate of compensation” adjustment is not computed in alpha — figures use the entered rate as-is.
Average hourly rate assumption
Every per-employee dollar figure — the meal and rest premium amounts and the § 203 daily rate — uses a single average hourly rate, frozen into the run snapshot at run-start. The rate is a required precondition: an analysis cannot run until it is set, and no minimum-wage or other fallback is ever substituted.
Applying one rate across the population is an alpha simplification. A future employee-census upload will supply per-employee rates that refine these figures; the Ferra “regular rate of compensation” adjustment is not computed in alpha.
Penalties
Penalty coverage (alpha) — assumption-based
- § 226 wage statements — a pay period is treated as deficient when it contains at least one potential meal or rest violation whose premium is assumed unpaid. The assumed-paid share defaults to 0% and is adjustable on the exposure page without re-running the analysis.
- § 203 waiting time — employees with no recorded shift in the trailing inactivity window (default 28 days from the dataset’s most recent date) are assumed separated; up to 30 days at 8× the average hourly rate. Replaced by actual termination dates when a census upload is provided (post-alpha).
- Daily overtime / double time — identified from daily hours; weekly overtime is excluded in alpha.
§ 226 wage-statement penalty
A pay period is deficient when it has at least one potential meal or rest violation whose premium is assumed unpaid. The assumed-paid share defaults to 0% (assume none paid) and is adjustable on the exposure page as a display-time lever — it recomputes live and never re-runs the analysis.
Per employee, the penalty is $50 for the first deficient pay period and $100 for each additional, capped at a $4,000 aggregate per employee (Lab. Code § 226(e)):
penalty = LEAST( 50 + 100 × (deficient_pay_periods − 1), 4000 )
The case figure sums this across employees. It is computed in the read layer so the assumed-paid lever recomputes live from the employee grain.
§ 203 waiting-time penalty
An employee with no recorded shift in the trailing inactivity window (default 28 days from the dataset’s most recent date) is assumed separated. “Last observed” is the most recent shift in the uploaded data, used as a reasonable proxy for separation — not a confirmed termination date.
The daily rate is the average hourly rate × 8, accrued up to 30 days per separated employee:
penalty = average_hourly_rate × 8 × days_owed (days_owed ≤ 30)
A future employee-census upload will supply actual separation dates and replace the last-observed proxy.
PAGA base civil penalty
PAGA (the Private Attorneys General Act, Lab. Code § 2699) lets an aggrieved employee recover civil penalties for Labor Code violations. The 2024 reform (AB 2288 / SB 92) repealed the prior $100 / $200 civil-penalty formula. What remains computable from timekeeping data alone is the base civil penalty per deficient pay period — a configurable assumption defaulting to $100. The higher subsequent-violation, malice, and uncured tiers turn on facts not in the timekeeping record (prior notice, willfulness, cure status), so they are disclosed, not computed.
The gross PAGA figure is the base penalty multiplied by the deficient-pay-period count — the same count the § 226 figure is built on, scoped to the 1-year PAGA limitations window (CCP § 340(a)), before any assumed-paid reduction. PAGA has no $4,000 per-employee cap (that is a § 226 rule), so it is a case-level multiply, never folded or capped per employee.
PAGA (base) = base civil penalty per pay period × deficient pay periods (1-year window)
Of any recovered PAGA civil penalty, 75% goes to the Labor & Workforce Development Agency (LWDA) and 25% to the aggrieved employees (Lab. Code § 2699(i)). The split is shown for reference; it does not change the gross figure. The base penalty is a display-time assumption — adjustable without re-running the analysis.
§ 510 overtime & double-time thresholds
California Labor Code § 510 sets the daily hour thresholds at which premium rates apply. The statutory recommended values are the analysis defaults:
- Daily overtime — hours worked beyond 8 in a workday are overtime (§ 510). The default daily-overtime threshold is 8 hours.
- Double time — hours worked beyond 12 in a workday are double time (§ 510). The default double-time threshold is 12 hours.
- Weekly overtime — § 510 also sets a 40-hour weekly overtime threshold; the analysis carries 40 hours as the default. Weekly-overtime exposure is not computed in alpha — daily overtime/double-time identification (in hours) is.
Alpha identifies daily overtime/double-time hours from daily hours per shift; it does not compute an overtime/double-time dollar exposure (the unpaid-premium multiplier and the Ferra regular-rate recompute are deferred).
Statute-of-limitations windows
Statute-of-limitations windows
Each exposure figure is scoped to its claim’s California statute of limitations, measured back from the case filing date. The window is a lookback floor: a pay period is in scope when its end date is on or after the filing date minus the claim’s limitations period. There is no upper bound — pay periods on or after the floor are in scope, including those after the filing date.
- Meal premiums (§ 226.7) — 4-year window. Pleaded as UCL restitution; the UCL (Bus. & Prof. Code § 17208) carries a flat 4-year limitations period.
- Rest premiums (§ 226.7) — 4-year window. Same § 226.7 premium basis as meal; inherits the 4-year UCL reach.
- Wage-statement penalty (§ 226) — 1-year window. A statutory penalty; CCP § 340(a) sets a 1-year limitations period. The penalty is re-counted over the 1-year window and re-capped at $4,000 per employee — never scaled from the all-time figure.
- Waiting-time penalty (§ 203) — not statute-windowed. Its limitations period keys to the separation date, which the analysis infers from the last observed shift rather than a confirmed termination date, so the figure reflects all separated employees in the dataset.
The windows are a display-time scope applied to the stored pay-period figures. All uploaded data is retained; the filing date can be edited without re-running the analysis.
See the methodology on your own matter.
Upload a timekeeping export and every figure traces back to the sections above.
Request access →