Source: https://guthlabs.ai/docs/instruments/work-hours-timesheet-calculator/mechanism/

instrument mechanism / verified-clean

# Work Hours / Timesheet Calculator mechanism

The inspectable method record for Work Hours / Timesheet Calculator, kept separate from implementation and qualification.

Status: **VERIFIED_CLEAN**Lifecycle: **verified-clean**

## Model scope

The instrument cannot PASS as written. At minimum, replace 40 with the supplied threshold, define regular hours and total-pay formulas, specify time and break units, and define overnight, overlap, validation, payroll-period, rounding, and overtime-premium rules.

- The overtime formula hardcodes 40 instead of using the supplied overtime threshold input.

- The specification does not define the regular-hours formula explicitly; it should be regular = max(0, total − overtime), or equivalently min(total, threshold).

- The claimed total pay output has no formula. Pay requires at least a base rate and a defined overtime multiplier, along with rules for whether overtime is paid at the multiplier.

- The expression Σ(clock_out−clock_in) is incomplete for overnight shifts unless timestamps include dates or an explicit next-day rule.

- The specification does not state how breaks are assigned to shifts or validated against worked intervals.

## Units and conventions

- Clock times are interpreted as elapsed intervals using timestamps or an explicit overnight convention; plain clock times alone are ambiguous across midnight.

- Break durations are represented in minutes in the test vectors and converted to decimal hours by dividing by 60.

- Hours are decimal hours, not clock-format hours and minutes.

- The overtime threshold is measured in hours for the relevant overtime period, assumed to be a weekly threshold unless otherwise specified.

- The pay example assumes a base hourly rate applied uniformly to all hours; no overtime premium is assumed because none is specified.

## Inspectable vector

One of 4 source-bound review vectors:

````
{
  "inputs": {
    "shifts": [
      {
        "clock_in": "2025-01-06T09:00",
        "clock_out": "2025-01-06T17:00",
        "unpaid_break_minutes": 30
      },
      {
        "clock_in": "2025-01-07T09:00",
        "clock_out": "2025-01-07T17:00",
        "unpaid_break_minutes": 30
      },
      {
        "clock_in": "2025-01-08T09:00",
        "clock_out": "2025-01-08T17:00",
        "unpaid_break_minutes": 30
      },
      {
        "clock_in": "2025-01-09T09:00",
        "clock_out": "2025-01-09T17:00",
        "unpaid_break_minutes": 30
      },
      {
        "clock_in": "2025-01-10T09:00",
        "clock_out": "2025-01-10T17:00",
        "unpaid_break_minutes": 30
      }
    ],
    "overtime_threshold_hours": 40
  },
  "expected_outputs": {
    "total_hours": 37.5,
    "regular_hours": 37.5,
    "overtime_hours": 0
  },
  "working": "Each shift: 17:00 − 09:00 = 8 hours gross. Each break: 30 ÷ 60 = 0.5 hours. Each shift net: 8 − 0.5 = 7.5 hours. Weekly total: 5 × 7.5 = 37.5 hours. Overtime: max(0, 37.5 − 40) = max(0, −2.5) = 0 hours. Regular: 37.5 − 0 = 37.5 hours."
}
````

## Failure boundary

**BREAK_CLAIMED** · SELF_FLAGGED

A missing clock-out produces an undefined duration unless the calculator validates and rejects the input. Overnight clock pairs without dates are also convention-ambiguous and can produce a negative duration if same-day subtraction is applied.

## Other records

[01**Overview**](<https://guthlabs.ai/docs/instruments/work-hours-timesheet-calculator/>)[03**Implementation**](<https://guthlabs.ai/docs/instruments/work-hours-timesheet-calculator/implementation/>)[04**Qualification**](<https://guthlabs.ai/docs/instruments/work-hours-timesheet-calculator/qualification/>)

## Sources and evidence

These pointers bind the page to evidence. They do not grant authority or collapse verification into deployment.

- `VERIFIED_LEDGER.json`

- `evidence-tranche5/tranche5-results.json`

- `BOUNDARY_HAZARD_CATALOG.json`
