Theoretical vs Attended Time Analysis
This module adds a new report called "Theoretical vs Attended Time Analysis" that compares worked time, measured through attendances records, with the theoretical time, computed from employee's working calendar, public holidays and employee specific leaves. Missing attendance days are generated on the fly in the report with their corresponding theoretical hours.
There is the possibility of counting as theoretical time some leave types if specified in them.
As an example, imagine a work week with 40 theoretical hours, and these attendance situation:
- Monday: Worked 10 hours
- Tuesday: Worked 10 hours
- Wednesday: Worked 10 hours
- Thursday: Worked 10 hours
- Friday: Ask for a compensation leave (said leave type), as already worked 40 hours.
On the report, whole week should put 40 theoretical hours - 8 per day - against 40 worked hours (although they were on previous days, and none on Friday).
On contrary, if you want to take a holiday one of that days, you should ask for a leave type without the check for counting as theoretical time, and then the whole week will be 32 theoretical hours against the worked hours of that week without the leave.
auto_awesome What this module does
AI-generated from the code · Odoo 19.0Adds a 'Theoretical vs Attended Time Analysis' report that compares hours actually worked (from attendances) with the hours an employee was supposed to work, based on their working calendar, public holidays and leaves.
This module gives HR officers and managers a new pivot and graph report called 'Theoretical vs Attended Time Analysis', found under the Attendances reporting menu. For each employee and day it shows worked hours, theoretical hours, leave hours and the difference between worked and theoretical time.
Theoretical hours come from the employee's working calendar, excluding public holidays. Leave types can be flagged with 'Include in theoretical hours' and 'Include in leave hours' so that certain absences do not reduce the expected time.
To keep the report accurate, the module automatically creates inactive zero-duration attendance records for past working days where the employee should have clocked in but did not. A daily scheduled job ('Create Empty Attendance') does this automatically, and a 'Recompute Theoretical Attendance' wizard lets managers recalculate a chosen employee and date range on demand.
A 'Select Employees' wizard lets users filter by department or employee tag before opening the report. Employees also get a 'Theoretical hours start date' field to control from when the calculation starts. Access rules limit each user to their own attendances, their managed employees, or all employees depending on their role.
Depends on
Menus it adds
Models and fields (9)
- hr.leave · extends an existing model
- hr.employee · extends an existing modeltheoretical_hours_start_date
- hr.attendance · extends an existing modelactive, leave_hours, theoretical_hours
- hr.leave.type · extends an existing modelinclude_in_theoretical (Include in theoretical hours), include_in_leave_theoretical (Include in leave hours)
- hr.employee.public · extends an existing modeltheoretical_hours_start_date
- wizard.theoretical.time · new modelcategory_ids (Tag), employee_ids (Employees), department_id (Department)
- calendar.public.holiday.line · extends an existing model
- recompute.theoretical.attendance · new modeldate_to (To), date_from (From), employee_ids (Employees)
- hr.attendance.theoretical.time.report · new modeldate, company_id, difference, employee_id (Employee), leave_hours (Leave), worked_hours (Worked), department_id (Department), theoretical_hours (Theoric)
Text generated by AI (DeepSeek) from reading the Odoo 19.0 code on GitHub; it may contain mistakes, so check the code before deciding. View the code on GitHub
Availability by version
Reviewed: 2026-11-03Confirmation status: 8 confirmed, 1 with no information of 9 versions.
Sources · Odoo 19.0
Confirmed on 2026-11-03 in branch 19.0 of OCA/hr-attendance.
terminal Installation and usage
OCA documentation · Odoo 19.0Installation
Source · Odoo 19.0On installation time, this module computes the theoretical hours for the day of the attendance check-in, so if you have a lot of records, this would be a bit slow.
Configuration
Source · Odoo 19.0You need to be at least "Attendance / Manual Attendance" for being able to see the attendances report.
For including some leave types in the theoretical time, you have to:
- Go to Leaves \> Configuration \> Leave Types.
- Select leave type you want to include.
- Check the mark "Include in theoretical hours".
When generating non worked days, this module uses a start date for beginning the series generation, which is:
- Manual start date set on the employee.
- If not set, the greatest of these 2 dates:
- Employee creation date.
- Working calendar line start date.
For configuring manual start date, you have to:
- Go to Employees \> Employees.
- Select an employee.
- Go to "HR Settings" page.
- Set the date in "Theoretical hours start date" field.
The generation will stop on the end date of the working calendar line or today, so don't forget to properly set start and end dates of the lines of the working calendar for not leaving empty spaces between them.
Usage
Source · Odoo 19.0- Go to Attendances \> Reporting \> Theoretical vs Attended Time Analysis.
- Check pivot table or look at the graph view.
Installation instructions, the distribution package, dependencies and configuration steps are not shown because they have not yet been verified in the module documentation for any version.
Data imported from GitHub: this sheet reflects the latest catalog review, not a live lookup. Always check the module documentation and staging before installing in production.