HR Overtime
Overtime that is auto-detected from attendance, costed by a data-driven multiplier, and routed through a guarded, audited lifecycle.
Why this module
HR Overtime
Built on the platform engines
The model inherits the workflow, audited, and company-aware mixins and sets a workflow code. It carries no state-machine, approval, or audit logic of its own, so overtime behaves exactly like every other HR document the platform drives.
The multiplier is data
The pay or time-in-lieu multiplier is an editable field defaulting to 1.5, and compensated hours are computed as hours times multiplier. Changing how overtime is rewarded is a value edit on the record, not a code change.
Attendance feeds overtime
A generate service reads overtime minutes off the attendance day projection for a date range and creates one entry per day, skipping any day that already has one. Re-running the range creates nothing new.
Day in the life
From a clocked-out shift to compensated overtime
An attendance day records overtime minutes. The generate service turns it into a draft overtime entry stamped auto, numbered OT for the year, with hours rounded from the minutes and the company carried over. A self-service employee submits it; a manager approves, refuses, or marks it compensated. The multiplier costs the hours into compensated hours for paid-out or time-off-in-lieu treatment. Every state change and field edit lands in the append-only audit log.
Edge cases
The cases most modules quietly ignore.
In the shipped code today, each one a place where a cheaper module silently does the wrong thing.
The generate service checks for an existing entry per attendance day before creating, so re-running the same date range produces zero duplicates.
A database unique constraint on the attendance day reference backs the code check, so even a concurrent generate cannot land two entries against one day.
Once an entry reaches Compensated or Refused, the workflow engine rejects any further transition, even one a misconfigured definition declares from that state.
Submit is open to self-service employees; approve, refuse, and mark-compensated require the HR manager group. Users outside the allowed groups are refused at the engine.
When a transition routes through the gated approval engine, the real submitter is captured before the internal sudo, so a person cannot approve their own request even with an approver group.
Company is required and defaults to the active company; writing an entry into a company the user is not a member of is refused, and any audited cross-company override is recorded.
State, employee, date, hours, multiplier, and compensation changes are written to a sha256 hash-chained log whose appends are serialized by a Postgres advisory lock, so tampering is detectable.
A check constraint rejects negative overtime hours at the database level.
What is inside
Built to do the job, end to end.
- Overtime entry model. eh.hr.overtime with employee, date, hours, source (auto or manual), the attendance day link, multiplier, compensation (paid or time off in lieu), reason, and a stored compensated-hours compute. Composes the workflow, audited, and company-aware mixins plus mail threading.
- Generation service. A registered service reads overtime minutes off the attendance day projection for a date range, optionally scoped to a company, and creates one auto entry per qualifying day, skipping days already covered.
- Workflow definition and sequence. Data records define the draft, submitted, approved, compensated, and refused states with group-gated transitions, and a year-prefixed, zero-padded sequence numbers each entry.
- Views, menu, and access. List and form views with a status-bar header and chatter, an Overtime menu under HR requests, and access rules for HR admin, manager, and self-service employee groups.
- Tests. Coverage for the compensation math and defaults, the full submit-approve-complete transition path, and idempotent generation from an attendance day.
Honest about the edges
What this does not do, so nothing surprises you.
- Requires the HR Platform engines: eh_hr_core, eh_hr_compat, eh_hr_engine_workflow, and eh_hr_attendance_pro, plus Odoo hr. It is not a standalone add-on.
- Auto-generation runs through a callable service over a date range. This module ships no scheduled job of its own to trigger it; generation is invoked by a caller.
- The shipped transitions are gated by user group. The multi-tier approval chain and self-approval block engage only when a transition is flagged to require the approval engine; out of the box the controls are group permissions plus the engine's submitter capture.
- There is no payroll posting, payslip line, or expense integration here. The module records and costs overtime; it does not push amounts into payroll.
- Targets Odoo 16 Community. The multiplier costs hours into compensated hours but does not apply currency rates or pay rules.
odoo overtime management, odoo 16 overtime approval, attendance overtime automation, time off in lieu odoo, paid overtime workflow, overtime multiplier odoo, hr overtime approval workflow, odoo attendance overtime, audited hr records odoo, multi-company hr odoo, overtime compensation odoo, odoo community hr platform
Need this fitted to the way you work?
ERP Heritage delivers end to end Odoo work: Odoo Implementation, Customization and Development, Integration, Migration, Consultation, Support and Training. We help teams put this module into production, shape it to their process, and keep it running.
We work with businesses across Australia (Melbourne, Sydney, Brisbane, Perth, Adelaide, Canberra) and the Middle East (Dubai, Abu Dhabi, Riyadh, Jeddah, Doha, Kuwait City, Muscat). Start a conversation at erpheritage.com.au or email info@erpheritage.com.au.
Languages
Available in 19 languages
The interface ships translated out of the box. Switch language in Odoo and the fields, menus, and messages follow.
Modules teams pair with this one.
Premium ERP Heritage modules that extend the same stack, each built to the same engineering bar.
Post Irish payslips to the general ledger on the Irish chart of accounts
Interactive drag and drop Gantt planner for Odoo 16 Community project tasks with a deterministic server side sche...
Employment Hero Connector is the integration core of the ERP Heritage Employment Hero suite, providing per compan...
The United Kingdom country pack for the ERP Heritage Employment Hero integration
Sync Employment Hero employees, departments and payroll bank details into standard Odoo Community HR over the pla...
Inbound webhook receiver for the Employment Hero people and payroll platform on Odoo 16 Community
| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Employees (hr)
• Attendances (hr_attendance) • Discuss (mail) |
| Community Apps Dependencies | Show |
| Lines of code | 5255 |
| Technical Name |
eh_hr_overtime |
| License | LGPL-3 |
| Website | https://erpheritage.com.au |
Please log in to comment on this module