HR Background Verification
Track pre-hire and employee background checks from request to clearance on the EH HR Platform workflow engine, with a tamper-evident audit trail.
Why this module
HR Background Verification
A domain layer, not a black box
The check record, its five types, and its workflow states live here. The state machine, audit chain, and company guards come from the shared EH HR Platform engine this module depends on, so the same rules apply across every HR document type.
An audit trail you can verify
Every create, edit, and state change writes a row to an append-only log where each row carries the SHA256 of the previous one. A single advisory lock serializes appends so concurrent writes cannot fork the chain, and a verify pass flags the first tampered row.
No skipped steps, no edits after the fact
A check can only follow a transition that is defined from its current state, and only HR officers may fire it. Once a check is cleared or flagged it is final and rejects any further transition, so a closed verification stays closed.
Day in the life
From request to clearance
An HR officer opens a check for a candidate, sets the type to criminal and the agency to the external screening provider, and saves. The record takes an automatic BG/year/number reference and sits in draft. The officer presses Request, then Start once the agency begins. When results arrive the officer pastes them into the result field, sets the completion date, and presses Clear, or Flag if something needs review. Each press is gated to HR officers, recorded in the chatter, and chained into the audit log. Cleared and flagged are final, so the closed check cannot be quietly reopened or re-edited.
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.
A check in cleared or flagged is marked final. Any further transition is refused with an error, even one a misconfigured workflow definition might declare from that state, so closed verifications stay closed.
A transition only fires if it is defined from the record's current state. You cannot jump from draft straight to cleared or repeat a step out of order; the engine raises a clear error instead.
Every workflow transition requires the HR officer group. A user outside that group is refused at the transition, and the menu itself is hidden from them, so progression is not just a UI nicety.
State, employee, check type, agency, and completion date are captured before and after every write into a hash-chained log. Editing one past row without recomputing the whole downstream chain is detectable by the verify pass.
Audit appends take a transaction-scoped Postgres advisory lock so two simultaneous writes cannot read the same chain tail and fork it. The chain stays strictly ordered under load.
Each check is required to carry an owning company. Writing a record into a company the user does not belong to is refused, and any permitted cross-company move is itself written to the audit log.
A write whose audited fields did not actually change emits no audit row, so saving a form without edits does not pad the trail with empty entries.
What is inside
Built to do the job, end to end.
- Five check types. Criminal, education, employment, reference, and credit, selected per record. Employment is the default. Each check also captures the external screening agency, free-text result notes, and a completion date.
- Configurable five-step workflow. Draft, requested, in progress, then a terminal cleared or flagged. The states, their order, and the transitions between them are stored as engine records, so the progression can be adjusted without changing code.
- Tamper-evident audit trail. An append-only, SHA256 hash-chained log records create, write, unlink, and every state change, with before and after snapshots of the key fields and a verify pass that locates the first broken row.
- Strict multi-company scoping. Every check belongs to one company by default and cannot be written into another company a user is not a member of without an explicit, audited override.
- Access control and menus. HR admins get full rights, HR officers create and edit, HR managers read only. The Background Checks menu sits under HR records and is shown only to HR officers.
- References, chatter, and tests. Each check takes an automatic BG/year/number reference, carries a mail thread with field tracking for discussion and history, and ships with tests covering defaults and both the clear and flag paths.
Honest about the edges
What this does not do, so nothing surprises you.
- This module owns no workflow, audit, approval, or company-scoping logic of its own. Those live in eh_hr_core and the EH HR Platform engine, which are required dependencies and must be installed.
- Transitions are gated by the HR officer group, not by a multi-step approval chain. There is no approver ladder or escalation wired on these checks.
- There is no integration with external screening providers. The agency and result are recorded as text by the HR officer; nothing is fetched, scored, or cleared automatically.
- Results are free-text notes. There is no structured pass or fail scoring, no per-check-type field set, and no automatic clearance based on the result.
- There are no SLA timers, reminders, or scheduled jobs. Progression is entirely manual through the workflow buttons.
- There is no candidate self-service portal. Checks are managed by HR users inside the backend.
- Document evidence relies on the standard chatter attachments; there is no dedicated certificate or document register on the check itself.
- Built and tested for Odoo 17 Community.
employee background check Odoo, pre-hire verification Odoo 17, HR screening module, criminal record check HR, education verification Odoo, employment history check, reference check tracking, credit check HR, candidate vetting Odoo, onboarding compliance HR, background verification workflow, tamper-evident HR audit trail, multi-company HR Odoo, HR officer approval workflow, Odoo 17 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