| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Employees (hr)
• Discuss (mail) |
| Community Apps Dependencies | Show |
| Lines of code | 1282 |
| Technical Name |
eh_hr_training |
| License | LGPL-3 |
| Website | https://erpheritage.com.au |
| Versions | 16.0 17.0 18.0 19.0 |
HR Training and Certifications
Turn "who is about to fall out of compliance?" into a one-click answer.
Why this module
HR Training and Certifications
Never silently lapse
A daily job recomputes every certificate status against today and flags anything inside its alert window or already expired, so an officer sees the gap before an auditor does.
Expiry is computed, not typed
Set the issue date and validity months and the expiry date and days-to-expiry follow automatically. Set validity to zero for a certificate that never expires.
Every change on the record
Certifications and courses write to an append-only, hash-chained audit log, and certification records are pinned to their owning company so they cannot leak across the group.
Day in the life
Monday morning, one screen
An HR officer opens Certifications. The default view already filters to records that need attention, with expired rows in red and expiring rows in amber. Over the weekend the daily watch posted a renewal note and a to-do activity on each certificate that crossed into its alert window, assigned to the holder's manager. The officer books the renewals, records the new issue date, and the expiry, status and days-to-expiry recompute on the spot.
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.
Each certificate carries a reminder_sent flag. The daily cron posts a chatter message and HR activity once per lapse, so a certificate that stays expired for weeks is not re-alerted every single day.
Status and days-to-expiry are stored but depend on the current date. The cron force-recomputes and flushes them each run so a Valid certificate flips to Expiring or Expired as the calendar moves, not just when the record is edited.
Scheduling the HR activity is best-effort and wrapped so a missing activity type or a single bad record cannot abort the whole nightly run for the rest of the workforce.
Certification records default to the acting company and refuse cross-company writes unless an explicit, audited override is set, so one company's compliance data never bleeds into another's.
Creates, writes and deletes on certifications and courses append to a hash-chained log whose appends are serialized by a Postgres advisory lock, so the trail is ordered and tamper-evident.
A course or certificate with zero validity months is treated as permanent: expiry date stays blank, status reads No expiry, and the cron skips it entirely.
What is inside
Built to do the job, end to end.
- Training course catalog. Courses with a code, one of six categories (Safety, Compliance, Technical, Soft skills, Onboarding, Other), provider, default validity in months, a default alert window, a mandatory flag, description and an archive toggle. A stat button counts and opens the certifications referencing each course.
- Employee certifications. Per-employee records with auto-generated reference numbers, issue date, validity months that default from the course, computed expiry date, live status, days-to-expiry, an individual alert window, certificate or licence number, an optional score, attachment files for the scanned certificate, and free-text HR notes.
- Daily expiry watch. A scheduled action runs once a day, refreshes the stored status of every dated certificate, then posts a chatter message and a to-do activity (routed to the holder's manager where known) on anything expiring or expired, marking it so the alert fires once.
- Views and filters. Color-coded list, a form with Expired and Expiring ribbons, and a search view with ready filters for Expired, Expiring soon, Valid and Needs attention, plus group-by status, category and employee. Officer menus surface the expiring-and-expired shortlist directly.
- Access and audit. Self-service users get read-only visibility; HR officers create and edit. All certification and course changes flow into the platform's append-only, hash-chained audit log, and certifications are company-scoped by the strict company-aware mixin.
Honest about the edges
What this does not do, so nothing surprises you.
- This is a register and tracker, not a learning platform. It does not host course content, lessons, quizzes or e-learning delivery.
- Renewal alerts are delivered as chatter messages and HR activities inside Odoo. It does not send email digests or external notifications on its own.
- The mandatory flag and category drive manual filtering and grouping. The app does not auto-generate a who-is-missing-which-mandatory-training coverage report.
- There is no employee self-service request or enrollment workflow; self-service users have read-only access and officers maintain the records.
- It ships no skills or competency matrix and no built-in PDF or printed compliance certificate output.
- Requires the eh_hr_core and eh_hr_compat platform modules and the standard hr app; it is part of the EH HR platform, not a standalone install.
Odoo 17 training certifications, employee certification tracking, certification expiry alerts, training management Odoo, compliance certification register, licence expiry tracking, renewal reminders HR, mandatory training Odoo, HR audit trail, multi-company HR certifications
Please log in to comment on this module