Working Time Monitor
Monitor average 48-hour weeks, opt-outs and rest-break compliance (UK WTR 1998)
Breaches of the UK Working Time Regulations 1998 usually go unseen until they become a tribunal or HSE problem. This module logs weekly working hours per employee, computes each person's average over a configurable rolling reference period (17 weeks by default) and flags anyone over the 48-hour average who lacks a valid signed opt-out. It also checks the 11-hour daily rest, 24-hour weekly rest and 20-minute break rules per week, raises de-duplicated breach records with an acknowledge and resolve workflow, and runs a scheduled weekly scan so compliance stays current without anyone remembering to. It suits HR and compliance teams in shift-heavy sectors like logistics, healthcare and manufacturing.
Key Features
Rolling 48-hour average per employee
The hr.employee _compute_wtd_average method averages worked_hours from the gb.wtd.week.log records inside the configurable reference window (17 weeks by default) and exposes wtd_average_hours, wtd_weeks_counted and a wtd_status of ok, warning, breach or waived directly on the employee record.
Weekly working-hours logs
gb.wtd.week.log captures worked_hours, night_hours, break minutes, longest shift and observed daily and weekly rest per employee per week, with a uniqueness constraint on employee and week_start. normalise_week_start snaps any date to that week's Monday.
Rest and break compliance checks
Each week log's _compute_compliance tests the daily rest against min_daily_rest_hours (11), weekly rest against min_weekly_rest_hours (24) and the 20-minute break when the longest shift exceeds break_threshold_hours (6), setting per-rule flags and an overall fully_compliant flag.
48-hour opt-out agreements
gb.wtd.optout records signed opt-outs with date_signed, effective_from, an attached signed document and a notice-period withdrawal. _compute_state derives active, withdrawing or expired, and is_valid_on(date) decides whether a given date is covered so over-48 hours can be lawfully waived.
Automated compliance scan and breaches
run_wtd_scan evaluates the 48-hour average, night-work average and per-week rest and break rules, calling _raise_breach to create gb.wtd.breach records with type, severity and measured-vs-threshold values. It dedupes open breaches for the same type and period so the same issue is not raised twice.
Breach workflow
Each gb.wtd.breach carries a breach_type (avg_48, avg_warning, daily_rest, weekly_rest, break, night), severity and an open / acknowledged / resolved / waived state with action_acknowledge, action_resolve and action_reopen. Over-48 breaches covered by a valid opt-out are auto-created as waived.
Scheduled weekly scan and per-company policy
The cron_wtd_scan scheduled action runs weekly, recomputing averages and running the scan across all employees so alerts stay current without manual runs. gb.wtd.config holds the per-company WTR policy: reference weeks, max average and warning hours, rest hours, break thresholds and the night-work limit.
Use Cases
Screenshots
Compliance Breaches
Wtd Configuration
Optout Agreements
Weekly Hours Logs
Why Choose This Module
Breaches of the UK Working Time Regulations 1998 usually go unseen until they become a problem. This module computes each employee's average weekly working hours over a rolling reference period, flags anyone over the 48-hour average without a valid opt-out, and tracks daily and weekly rest and break compliance — turning a legal-risk blind spot into a managed dashboard.
Specifications
- Compatible: Odoo 18.0 / 19.0
- License: OPL-1
- Languages: English
- Author: Pokutsoft
- Dependencies: hr
- Support: support@pokutsoft.com
Update date: 2026-07-02