EH HR Skills
Define the skills each job needs, then see exactly where every employee stands against them.
Why this module
EH HR Skills
Built on standard Skills
Required skills hang off the native hr.job, and gaps are computed from the employee's own hr.employee skill records. No parallel skill store to keep in sync, no second source of truth to reconcile.
Levels compared by progress
A gap is decided by comparing the employee's current level progress against the job's required level progress. Below threshold is flagged below, no match at all is missing, at or above is met. The rule is explicit and tested.
Recompute is idempotent
Pressing the gap button rebuilds the rows from scratch each time. Stale rows are cleared first, so a second run never duplicates the result. Covered by an automated test that recomputes twice and asserts the same count.
Day in the life
From a vague job spec to a ranked gap list
A manager opens a job position and lists the skills it needs, each with an optional minimum level. On an employee form they press Skill gaps; the module reads that person's current skills, compares them to the role, and writes one row per requirement marked missing, below required, or met. The list opens filtered to unmet items and grouped by employee, so the conversation about training or hiring starts from facts rather than a spreadsheet.
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.
action_compute_skill_gaps deletes the employee's existing gap rows before recreating them, so running it repeatedly rebuilds rather than duplicates. An automated test recomputes twice and asserts the row count is unchanged.
The current-skills lookup prefers current_employee_skill_ids when the field exists (Odoo 18 active versions) and falls back to employee_skill_ids otherwise, so the same code reads the right skill records across Odoo series including Odoo 18.
If an employee has no job position, the compute simply skips them and writes no gap rows, rather than erroring on a missing required-skills set.
A required skill the employee does not hold at all is classified missing; one held but at a lower level progress than required is classified below; equal or higher is met. The unmet count excludes met rows.
A job can require a skill with no specific level. In that case the required progress is zero, so simply holding the skill counts as met.
Each gap row stores a company_id related from the employee and indexed, so gap lists stay scoped per company in a multi-company database.
What is inside
Built to do the job, end to end.
- Models this module adds. eh.hr.job.skill (a skill, with optional minimum level, that a job position requires) and eh.hr.skill.gap (one materialized row per required skill per employee, carrying status, required level and progress, and current level and progress).
- Standard models it extends. hr.job gains a required_skill_ids matrix; hr.employee gains a read-only skill-gap list, a non-met gap count, and the action_compute_skill_gaps method behind the form smart button.
- Views and navigation. An editable required-skills list and form, a read-only gap list with danger, warning and success row colors, a search view with Unmet and Missing filters and group-by employee, status or skill type, plus Talent menu items and an employee form smart button.
- Security. Per-group access from the platform core: HR admin and officer get full rights on both models, employee self-service is read-only. Talent menus are gated to the HR officer group.
- Tests. An automated suite covering the required-skills relation and stored skill type, the missing / below / met classification with its unmet count, and the recompute-replaces-rows idempotency guarantee.
Honest about the edges
What this does not do, so nothing surprises you.
- Gap computation is triggered manually from the employee form button or the action_compute_skill_gaps method; this module ships no scheduled cron to refresh gaps automatically.
- Gaps are computed for employees against their assigned job; the module does not score recruitment candidates or applicants.
- Gap rows are a materialized snapshot from the last recompute, not a live computed field; they do not auto-update when an employee's skills or the job's requirements change until you recompute.
- This module does not define skills, skill types or levels itself; those come from standard Odoo Skills (hr_skills), which it depends on and extends.
- It targets Odoo 18 Community and depends on eh_hr_core and eh_hr_compat from the EH HR Platform, plus hr and hr_skills.
- It does not add its own audit log, approval chain, workflow or notifications; it reads and compares standard skill data.
odoo skills gap analysis, job required skills odoo, competency matrix odoo, employee skill assessment, hr_skills extension, required proficiency level, skill matrix per job position, odoo 18 talent management, skill gap report, missing skills employee, odoo community hr skills, workforce competency tracking
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.
Please log in to comment on this module