EH HR Background
Pre-hire and employee background checks tracked from request to clearance on a hash-chained audit trail.
Why this module
EH HR Background
One job, done cleanly
This module adds the background-check record and its five-state workflow. It owns no workflow or audit code of its own; that behaviour is inherited from the shared HR Platform engine, so there is one implementation to trust, not a copy per module.
Every change is on the chain
State, employee, check type, agency and completed date are captured to an append-only audit log where each row carries the sha256 of the row before it. Any silent edit to history breaks the chain and is caught by the verify pass.
No cross-company leakage
Each check belongs to exactly one company and defaults to the active one. A write that moves a record into another company is refused, even under sudo, unless an explicit audited override is set, and the elevation is logged.
Day in the life
From request to clearance
An HR officer opens a new check for a candidate, picks a type such as criminal or education, names the external agency, and saves to get an auto numbered BG reference. Request moves it to requested, Start to in progress. When the agency reports back, Clear records the outcome and date and locks the record as a final cleared state, or Flag closes it as blocked for review. Every step is officer-gated and written to the audit chain, so the file shows exactly who advanced it and when.
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.
Cleared and flagged are final states. The engine refuses any further transition from them, even one a misconfigured definition might declare, so a closed check cannot be silently reopened.
Audit appends take a transaction-scoped Postgres advisory lock so two concurrent saves cannot fork the hash chain; the lock releases automatically on commit or rollback.
Writing a check into a company the user does not belong to is rejected with an AccessError, and even a permitted cross-company move requires an explicit context override and is itself audited.
Each transition is restricted to the HR officer group. A user outside the allowed groups gets a clear refusal rather than a partial state change.
The BG reference is assigned once from the shared sequence on create and is copy-protected, so duplicating a record never reuses or collides a number.
The employee link uses restrict on delete, so an employee with background history cannot be removed out from under their checks.
What is inside
Built to do the job, end to end.
- Background model. eh.hr.background with employee, check type (criminal, education, employment, reference, credit), external agency, free-text result and completed date, plus an auto numbered, copy-safe BG reference.
- Five-state workflow. A workflow definition with draft, requested, in progress, cleared (final, done) and flagged (final, blocked), and request, start, clear and flag transitions, all gated to the HR officer group and configurable without code.
- Inherited platform behaviour. Workflow, append-only hash-chained audit, strict company scoping and chatter come from the platform mixins it inherits, so this module ships no duplicate engine logic.
- Access and security. Three access rules out of the box: HR admin full control, HR officer read, write and create, HR manager read-only.
- Views and tests. List and form views with a status bar and chatter, a Background Checks action and menu, and a post-install test suite covering defaults and both the clear and flag workflow paths.
Honest about the edges
What this does not do, so nothing surprises you.
- No integration with external screening agencies; the agency field is free text and outcomes are entered by hand.
- No approval chain is configured for background checks by default; transitions complete immediately when an officer fires them. The engine supports gated transitions but this module does not enable one.
- Result is a single free-text field; there are no structured sub-checks, scoring or per-document attachments beyond the standard chatter.
- No re-check scheduling, expiry reminders or cron jobs; checks do not lapse or re-open on their own.
- No dedicated reporting dashboard or analytics view ships with this module.
- Built and documented for Odoo 16 Community; depends on the eh_hr_core, eh_hr_compat and eh_hr_engine_workflow platform modules.
employee background check Odoo, pre-employment screening Odoo 16, background verification HR, criminal record check HR, education verification Odoo, employment verification module, reference check tracking, credit check HR Odoo, candidate vetting Odoo Community, HR onboarding compliance, hash-chained audit trail HR, multi-company HR Odoo, background check workflow, ERP Heritage HR Platform
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