EH HR Recruitment
Structured interview scorecards and a hash-chained audit trail on every stage move, layered on standard Odoo 16 Recruitment.
Why this module
EH HR Recruitment
Scorecards, not sticky notes
Every interview becomes a record with interviewer, date, a 1 to 5 rating, a hire/maybe/no recommendation and notes. The applicant shows a stored average score recomputed from all its interviews.
Stage moves you can trust
Each change to an applicant's recruitment stage is appended to a sha256 hash-chained audit log with the from and to stage. Editing history out of one row breaks the chain, and verify_chain pinpoints the first tampered entry.
Built on standard Recruitment
This extends hr.applicant rather than forking it. Your pipeline, kanban and stages stay native Odoo 16; the scorecard and the audit hook ride on top with no duplicate recruitment model to maintain.
Day in the life
A candidate moves through the pipeline
Three interviewers each open the applicant and add a scorecard: a 1 to 5 rating, a recommendation, a few notes. The applicant's average score updates as they save. When the hiring manager drags the card from Interview to Offer, the write override notices stage_id changed and appends one stage_change row to the audit log, recording who moved it, when, and from which stage to which. The candidate's own scorecards and the hiring trail are both there if anyone ever asks how the decision was reached.
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 audit append takes a transaction-scoped Postgres advisory lock before reading the chain tail, so two interviewers moving cards at the same instant cannot fork the hash chain. The lock releases on commit or rollback.
The stage audit fires only when stage_id is genuinely changing. Writing the same stage back, or a write that touches other fields, records nothing, so the trail has one row per real move and no noise.
Each audit row stores the sha256 of the previous row plus its own fields. Any silent edit that does not recompute the entire downstream chain is caught by verify_chain, which returns the id of the first broken row.
The audit log is append-only by design: it sets _log_access False and grants officers and admins read-only access, so the recruitment trail is created by the system and never edited through the UI.
Audit rows carry the actor's company and a global ir.rule scopes reads per company, so an officer in one company does not see another company's hiring trail. System-wide rows stay visible to all.
The average score divides only over interviews that actually carry a rating and returns 0.0 when there are none, so an applicant with no scored interviews never raises a division error.
What is inside
Built to do the job, end to end.
- Interview scorecard model. eh.hr.applicant.interview links to the applicant with a cascade delete and an index, and holds interviewer, date defaulting to today, a 1 to 5 rating, a hire/maybe/no recommendation and free-text notes, ordered newest first.
- Average score on the applicant. hr.applicant gains an interview_ids one2many and a stored avg_score computed from the interview ratings, so the figure is queryable and groupable, not just rendered on screen.
- Audited stage changes. A write override on hr.applicant emits a stage_change event to the eh.hr.audit.log only when stage_id changes, with the previous and new stage ids in the payload and the acting user as actor.
- Hash-chained platform log. Stage events land in the shared append-only audit log from eh_hr_core: sha256 chained, advisory-lock serialized, keyset-paginated verification, per-company read isolation and read-only access controls.
- Access and menu. Interviews are reachable from the Talent menu for HR officers; self-service employees get read-only access while officers and admins can create and edit scorecards.
Honest about the edges
What this does not do, so nothing surprises you.
- This builds on standard hr_recruitment and depends on it plus eh_hr_core and eh_hr_compat; it is not a standalone recruitment app and does not replace the native pipeline, kanban or stages.
- The audit hook covers recruitment stage changes. It does not audit every applicant field edit, and it does not add audit events for create or delete of applicants.
- Scorecards are a single overall 1 to 5 rating, a recommendation and notes. There are no weighted criteria, per-competency rows, scorecard templates or score thresholds.
- There is no offer letter generation, candidate portal, interview scheduling, email automation or cron in this module.
- Audit immutability is enforced by the hash chain plus read-only access controls, not by database triggers; a database superuser with direct SQL access could still alter rows, which verify_chain is designed to detect.
- Targets Odoo 16 Community. The shipped tests include cross-version applicant fixtures, but this listing describes the Odoo 16 build.
Odoo 16 recruitment, interview scorecard Odoo, applicant rating, candidate evaluation, recruitment audit trail, hiring stage history, hash-chained audit log, hr.applicant extension, average interview score, recruitment compliance, tamper-evident audit, ERP Heritage 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.
Modules teams pair with this one.
Premium ERP Heritage modules that extend the same stack, each built to the same engineering bar.
Sync certifications, qualifications and employee document metadata from the Employment Hero people platform into...
Sync Employment Hero leave categories, leave requests and leave balances into the standard Odoo Time Off app, wit...
Show the Hijri (Umm al-Qura) date alongside Gregorian dates across Odoo 16
Connect Odoo partner records to the Saudi SPL National Address service and the Wathq commercial registry
One click install of the full Employment Hero integration for Odoo Community, covering the connector, two way syn...
The Malaysia country pack for the ERP Heritage Employment Hero integration
| 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/ |
Please log in to comment on this module