Skip to content

Extracting Overtime and Break Deductions From a Time Sheet

10 min read · updated August 11, 2026

Four ten-hour days is forty hours. Under the federal weekly rule that is zero overtime; under California’s daily rule it is eight overtime hours. Same card, same punches, same total — and the extraction cannot tell you which, because the answer is not in the document.

Why the card does not contain the answer

This page assumes the punches are already reconstructed and complete; getting there is a separate problem and doing overtime arithmetic on an incomplete card produces a confidently wrong number. What is left is classification: taking hours that are known and deciding what each one is worth.

The reason that is not extraction is that the classification rule comes from outside the document. A time card records when somebody was at work. Whether hour forty-one is overtime depends on the employee’s work location, their exempt or non-exempt status, any collective agreement, and the employer’s declared workweek — none of which is printed on the card. So the pipeline needs a jurisdiction and a policy as inputs, and any card processed without them has been processed under a default that nobody chose.

Some sheets do carry an OT column, filled in by a supervisor. Extract it as a claim to be checked, exactly like the printed totals, and never as the classification itself. A supervisor’s OT column that disagrees with the computed figure is a finding worth surfacing in both directions.

One card, two jurisdictions

Take a card with four ten-hour days and Friday off, and assume a base rate of $30.00 per hour — an assumption, stated here so the arithmetic below can be followed, not a figure taken from anywhere.

Mon 07:00-17:30, 30 min unpaid meal  = 10.0 h
Tue 07:00-17:30, 30 min unpaid meal  = 10.0 h
Wed 07:00-17:30, 30 min unpaid meal  = 10.0 h
Thu 07:00-17:30, 30 min unpaid meal  = 10.0 h
Fri off                              =  0.0 h
                              weekly = 40.0 h

FLSA weekly rule (over 40 in a workweek at 1.5x):
  hours over 40                      =  0.0 h
  straight time                      = 40.0 h  x $30.00 = $1,200.00
  overtime                           =  0.0 h            =     $0.00
  total                                                    $1,200.00

California daily rule (over 8/day at 1.5x, over 12/day at 2x):
  per day: 8.0 straight + 2.0 at 1.5x
  straight time                      = 32.0 h  x $30.00 =   $960.00
  overtime                           =  8.0 h  x $45.00 =   $360.00
  total                                                    $1,320.00

difference                                                   $120.00

The federal standard is the Fair Labor Standards Act requirement of time and one-half for hours worked over 40 in a workweek, with no daily threshold; the US Department of Labor publishes the rule at dol.gov. California adds daily thresholds under Labor Code §510 — time and a half over eight hours in a workday and double time over twelve, plus time and a half for the first eight hours on the seventh consecutive day of a workweek and double time beyond that — summarised by the state’s Division of Labor Standards Enforcement at dir.ca.gov.

Two mechanical points follow from that comparison. First, daily and weekly thresholds do not stack: hours already paid as daily overtime are excluded when applying the weekly threshold, or the same hour is counted twice. In the card above the eight daily overtime hours are removed before testing against 40, which is why there is no additional weekly overtime even though the employee worked forty hours.

Second, the rule engine must be data rather than code. Encode thresholds as an ordered list — a basis of daily or weekly or consecutive_day, a threshold, and a multiplier — and evaluate them in order against the classified hours. Any implementation with the number 40 in an if statement will need rewriting the first time somebody is hired in another state.

Unpaid breaks and automatic deductions

A break is either paid or unpaid, and the distinction determines whether it is subtracted from worked hours. Short rest breaks are generally compensable and are usually not punched at all, so they never appear on the card and must not be deducted. A bona fide meal period is generally not compensable, and under 29 CFR §785.19 it ordinarily means at least 30 minutes during which the employee is completely relieved of duty — a worker eating at their desk while covering the phones is not relieved of duty, and that time counts as worked.

The extraction-relevant version of that problem is the automatic deduction. Many systems and many paper forms subtract a fixed 30 minutes from any shift over a certain length, whether or not the employee punched for a meal. On the card above, the 07:00 to 17:30 span is 10.5 hours and the recorded figure is 10.0, so 30 minutes were removed by rule rather than observed by punch.

That distinction has to survive into the record, because the two cases are legally different and indistinguishable once the arithmetic is done:

{
  "date": "2026-02-09",
  "span_minutes": 630,
  "meal": { "source": "auto_deduct", "minutes": 30,
            "punched": false, "attested": false },
  "worked_minutes": 600
}

With source: "punched" the deduction is evidenced by the card. With auto_deduct and punched: false the deduction is an assumption the system made, and it is the single most common source of unpaid-time exposure in timekeeping. Flag any day where a meal was auto-deducted and the span shows no gap consistent with a break — a continuous 07:00 to 17:30 with no interior punches cannot corroborate the deduction either way, which is exactly why it needs flagging rather than silence.

Meal-period premiums add a third category of time. In California, a non-compliant meal period obliges the employer to pay one additional hour at the regular rate under Labor Code §226.7. That hour is a premium payment, not hours worked — so it is paid, but it does not count toward the 40-hour weekly threshold and cannot push other hours into overtime. A schema with a single hours field per day cannot represent it. You need at least three buckets: hours worked, hours paid but not worked, and premium payments measured in hours but not attributable to any hour.

The workweek is not the pay period

Weekly overtime is computed over a workweek: a fixed, regularly recurring period of 168 consecutive hours, which the employer defines and which can start on any day at any hour. Pay periods are frequently semi-monthly — the 1st to the 15th and the 16th to the end of the month — and a semi-monthly period does not contain a whole number of workweeks.

So a time sheet covering 1–15 March contains a workweek that started in February and one that finishes after the 15th. You cannot compute weekly overtime from that sheet alone. Any pipeline that computes overtime per document is wrong for every semi-monthly employer, and the error appears only in the weeks that straddle a period boundary, which is most of them.

The fix is structural: extraction is per document, classification is per workweek, and the two must be separate stages with a persistent store between them. Classification runs when a workweek is complete, which may be after the pay period closed. Where a partial week is unavoidable, mark the computed overtime as provisional and recompute; do not present a provisional figure as final.

What to extract and what to compute

  • Extract punches, the printed daily and weekly totals, any supervisor OT column, meal punches where present, the employee identifier, the period covered, and any attestation signature or checkbox — the last of which matters because an employee attestation that the recorded hours are accurate is a distinct fact from the hours themselves.
  • Compute worked minutes per day, the workweek assignment for each day, straight and premium hours under the configured rule set, and the deltas against the printed and supervisor-supplied figures.
  • Never infer jurisdiction from the document, exempt status from a job title, or a meal break from a gap that might be a missing punch pair.

One boundary worth naming so it is not mistaken for part of this job: the overtime multiplier applies to the regular rate, which under the FLSA includes certain non-discretionary payments such as production bonuses and shift differentials, not merely the base hourly rate. That computation belongs to payroll and needs data this document does not contain. The extraction’s job ends at hours in correctly labelled buckets.

The federal and California rules cited are as published by the respective agencies at the time of writing, and wage-and-hour law is amended frequently and interpreted by case law that these pages do not track. Other states impose daily thresholds of their own, and non-US jurisdictions differ entirely. Treat the citations as pointers to the authority, use the employer’s own configured rule set in production, and take questions about a specific employee to counsel. This page is about parsing and classifying a document, not legal advice.