| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Recruitment (hr_recruitment)
• Discuss (mail) • Employees (hr) • Calendar (calendar) |
| Community Apps Dependencies | Show |
| Lines of code | 1029 |
| Technical Name |
eh_hr_recruitment |
| License | LGPL-3 |
| Website | https://www.erpheritage.com.au/ |
| Versions | 16.0 17.0 18.0 19.0 |
EH HR Recruitment
Structured interview scorecards and a tamper-evident audit trail on every hiring stage change, built on standard Odoo Recruitment.
Why this module
EH HR Recruitment
Structured interview scorecards
Each applicant carries a list of interview records: interviewer, date, a 1 to 5 rating, a hire, maybe or no recommendation, and notes. No more scattered scoring in email and chatter.
One stored average score
Every interview rating rolls into a stored avg_score field on the applicant, recomputed automatically when any interview is added, edited or removed. Sort and filter your pipeline on it directly.
Tamper-evident stage history
Every move between recruitment stages writes a hash-chained audit row recording who moved the candidate, from which stage to which, so the hiring trail can be verified end to end.
Day in the life
From gut feel to evidence
A panel interviews three candidates for one role. Each interviewer opens the applicant, adds a scorecard with a 1 to 5 rating, a hire or maybe or no call, and notes. The applicant's average score updates immediately, so the hiring manager ranks the shortlist on real numbers instead of memory. When the chosen candidate is moved from Interview to Offer, the module writes a hash-chained audit entry capturing who made the move and the exact stage transition. Months later, if anyone questions the decision, the stage history can be replayed and the audit chain verified for any silent edits.
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.
Audit appends take a transaction-scoped Postgres advisory lock, so two people moving candidates at the same instant cannot fork the hash chain. The lock releases automatically on commit or rollback.
Each audit row stores the SHA-256 of the previous row plus its own fields. verify_chain walks the log forward with keyset pagination and returns the id of the first row whose hash no longer matches, so any after-the-fact edit is pinpointed.
A stage write only produces an audit entry when the stage actually changes. Saving an applicant on the same stage, or a write that does not touch stage_id, records nothing, so the trail stays free of noise.
Each audit row carries the actor's company, and the audit model is scoped per company by record rule, so one company's hiring history is not visible from another. The company column is deliberately kept out of the hash material so it never breaks an existing chain.
The hr.applicant creation surface shifted across Odoo releases (the candidate split, partner_name moving, the name subject). The test suite drives the fixture off the fields actually present so the same module installs cleanly on Odoo 18.
Interview scorecards are linked to the applicant with ondelete cascade and an index, so deleting an applicant removes its scorecards cleanly while the stage-change audit rows remain in the append-only log.
What is inside
Built to do the job, end to end.
- Interview scorecard model. eh.hr.applicant.interview holds applicant link, interviewer employee, interview date, a 1 to 5 rating, a hire / maybe / no recommendation and free-text notes, with list and form views under the Talent menu.
- Average score compute. avg_score is a stored, dependency-tracked compute on hr.applicant that integer-coerces every interview rating and averages them, returning zero when no interviews exist yet.
- Stage-change audit hook. An override of hr.applicant.write detects stage_id transitions and appends a stage_change event to eh.hr.audit.log with the from and to stage ids and the acting user, via sudo.
- Hash-chained audit core. The shared eh.hr.audit.log model from eh_hr_core provides the SHA-256 chain, advisory-locked appends, verify_chain integrity check and per-company isolation that this module writes into.
- Scoped access control. HR admins and officers can create and edit scorecards; employee self-service is read-only. Audit writes always run via sudo so the trail cannot be bypassed by a low-privilege actor.
Honest about the edges
What this does not do, so nothing surprises you.
- This module adds scorecards and stage auditing on top of standard Odoo Recruitment. It does not provide its own recruitment workflow: job posting, sourcing, email-to-applicant parsing and pipeline automation remain standard Odoo features.
- A scorecard is a single overall 1 to 5 rating with one recommendation and notes. There are no per-competency criteria, weighting, or configurable evaluation templates.
- Only stage changes are written to the audit log. Other edits to an applicant, such as salary expectation or notes, are not captured by this module's audit hook.
- The average score is a plain mean of all interview ratings. There is no weighting by interviewer seniority, no median, and no exclusion of outliers.
- Tamper-evidence means edits are detectable via verify_chain, not prevented at the row level. The audit table relies on standard access control plus hash verification rather than blocking writes outright.
- Requires the eh_hr_core and eh_hr_compat platform modules and standard hr_recruitment. It is part of the EH HR Platform, not a standalone app.
odoo 18 recruitment, interview scorecard, applicant rating, hire recommendation, recruitment audit trail, hr.applicant extension, candidate scoring, tamper evident audit, hash chained log, hr recruitment compliance, interview evaluation odoo, stage change history, average interview score, odoo community hr
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