| 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 | 978 |
| Technical Name |
eh_hr_recruitment |
| License | LGPL-3 |
| Website | https://www.erpheritage.com.au/ |
| Versions | 16.0 17.0 18.0 19.0 |
| 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 | 978 |
| 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
Interview scorecards and audited stage changes on standard Odoo Recruitment.
Why this module
EH HR Recruitment
Built on standard Recruitment
Inherits hr.applicant directly and adds one interview model beside it. No parallel applicant table, no duplicated pipeline, no data to reconcile. Your existing kanban, stages and recruitment reports keep reading the native records.
Every stage move is logged
Moving an applicant between stages writes a stage_change event, with the from and to stage, into a hash-chained append-only log you can verify on demand. The write override skips no-op writes, so the trail records real moves only.
Scorecards, not side spreadsheets
Each interview captures interviewer, date, a one to five rating, a hire / maybe / no recommendation and free-text notes. A stored average score rolls up per applicant and recomputes automatically as ratings change.
Day in the life
A panel interview, scored and on the record
Three interviewers each open the applicant, add a scorecard with their rating, recommendation and notes. The applicant's average score recomputes on the spot. The hiring lead moves the candidate from Interview to Offer, and that stage change lands in the audit log with who moved it and the exact from and to stages. Weeks later, when someone asks why a candidate was advanced, the scorecards and the verifiable stage history answer it without a side 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.
Two recruiters changing stages at the same instant cannot fork the audit chain: each append takes a transaction-scoped Postgres advisory lock, so chain rows are written in strict order and release automatically on commit or rollback.
The write override compares the current stage id to the incoming one and only logs when they actually differ, so re-saving a form or writing the same stage does not pollute the trail with phantom moves.
Each audit row stores the SHA-256 of the previous row plus its own fields. verify_chain() walks the log and returns the first row whose hash no longer matches, so any after-the-fact edit to a stage-change record is detectable.
The average-score compute divides only over interviews that carry a rating and returns 0.0 when there are none, so an applicant with no scorecards yet never raises a division error.
Stage-change events inherit the actor's company on write, and the underlying audit log is scoped per company by record rule, so one company's hiring history is not visible from another.
hr.applicant's creation surface changed across series (candidate split on 18, reverted on 19, required name on 16 and 17). The test fixture builds the applicant from the fields actually present, so the suite runs green on all four.
What is inside
Built to do the job, end to end.
- Models this module adds. eh.hr.applicant.interview: a per-applicant interview scorecard with interviewer, date, one to five rating, hire / maybe / no recommendation and notes, ordered most recent first.
- Standard Odoo models it extends. hr.applicant: gains an interviews one2many, a stored avg_score computed from interview ratings, and a write override that audits stage_id changes.
- Audit and security. Stage changes are recorded through the shared eh.hr.audit.log hash chain. Access is officer and admin read-write, employee self read-only, with the Interviews menu under the HR Talent section for HR officers.
- Built on. eh_hr_core and eh_hr_compat for the audit engine and cross-version layer, plus standard Odoo hr_recruitment. Installs on its own or as part of the eh_hr_platform bundle.
Honest about the edges
What this does not do, so nothing surprises you.
- This module adds interview scorecards and stage-change auditing only. It does not add job board posting, CV parsing, candidate self-service portals, offer-letter generation or AI screening.
- The standard Odoo Recruitment pipeline, stages and kanban remain Odoo's; this module records and scores on top of them rather than replacing the recruitment workflow.
- The audit trail covers applicant stage changes written through this module. It is not a full field-level change log of every recruitment edit.
- There is no approval ladder or escalation on interviews or stage moves; scorecards and the average score are informational inputs to a human decision.
- The hash chain and advisory-lock serialization are provided by eh_hr_core, which is installed as a dependency; this module is the recruitment-facing layer over that engine.
odoo recruitment scorecard, interview rating odoo, candidate evaluation odoo, hr applicant audit trail, recruitment stage history, hiring audit log odoo, applicant tracking community, odoo 19 recruitment addon, interview scorecard module, tamper evident hiring record, self hosted ats odoo, hr recruitment extension
Please log in to comment on this module