EH HR Resignation
Resignation and offboarding, governed end to end.
Why this module
EH HR Resignation
Nobody leaves with the laptop
Offboarding cannot be marked complete while any exit-clearance item is still open. The complete action raises a hard error listing the gap, so IT return, manager handover, finance settlement, HR exit interview, and facilities return all sign off before the record closes.
An audit trail you can verify
Status changes and key field edits are written to an append-only, sha256 hash-chained log. A built-in chain check walks every row and reports the first tampered entry, giving you a separation record that holds up independently of the chatter.
Roles enforced at each step
Each transition carries its own allowed groups. Employees submit and withdraw their own resignation, managers accept and mark offboarded, and the engine refuses any transition the user is not entitled to fire.
Day in the life
From notice to clean exit
An employee logs a resignation and picks a reason. The last working day fills in automatically from the resignation date plus the notice period, and they can override it if the team agreed something different. They submit. Their manager accepts, then generates the standard exit-clearance checklist covering IT, manager handover, finance, HR, and facilities. Each owner ticks their item as it clears, with the progress bar climbing as they go. When the manager tries to mark the leaver offboarded with items still open, the system blocks it and names the gap. Once every item is signed off, the manager completes the offboarding and the record locks into a final state. Throughout, every transition and edit is captured in the hash-chained audit log.
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 are serialized by a transaction-scoped Postgres advisory lock, so two simultaneous saves cannot fork the hash chain. The lock releases automatically on commit or rollback.
Each audit row hashes the previous row's hash plus its own canonical fields. The chain check uses keyset pagination and clears cache per batch, so verification stays bounded no matter how large the log grows, and returns the id of the first broken row.
A resignation with no checklist is treated as cleared and can complete, while one with any open item is blocked. Progress reads 100 percent only when every item is done.
Once a record reaches Offboarded or Withdrawn, the engine refuses any further transition, even one a misconfigured definition might still declare from that state.
Records default to the active company and are required to carry one. Writing a record into a company the user is not a member of is rejected, even under sudo, unless an explicit audited override context is set, and the elevation itself is written to the audit log.
When a gated transition routes to the platform approval engine, the real submitter is captured before the engine elevates, so the user who fired the transition cannot later approve their own request even if they hold an approver group.
What is inside
Built to do the job, end to end.
- Resignation record. Auto-numbered reference (RES/year/00001), resigning employee, resignation date, notice period in days, a suggested-but-editable last working day, reason type and free-text reason, with chatter and field-level tracking on the employee, dates, status, and reason.
- Exit clearance checklist. A child checklist of clearance items, each with an area (IT, manager, finance, HR, facilities, other), a description, a responsible person, a done flag, and notes. A one-click action seeds the five standard areas, and computed fields report completion state and percentage progress.
- Workflow and audit, inherited. Status runs on the shared workflow engine with states Draft, Submitted, Accepted, Offboarded, and Withdrawn, configurable per document type. Auditing, the hash-chained log, and strict company scoping come from the platform mixins, so this module ships only the resignation-specific logic.
Honest about the edges
What this does not do, so nothing surprises you.
- Targets Odoo 18 Community and depends on the EH HR Platform modules (core, compat, and the workflow engine), it does not run standalone.
- Notice period is a simple calendar-day offset. It does not account for public holidays, weekends, or working-calendar rules when suggesting the last working day.
- The shipped resignation workflow uses permission-gated transitions only. It does not wire a multi-step approval or escalation chain onto resignation out of the box.
- Generating the clearance checklist is a manual action and seeds a fixed set of five standard areas. There is no per-department or template-driven checklist designer in this module.
- Marking a leaver offboarded records the separation in this module. It does not itself archive the employee, revoke external accounts, or trigger final-pay processing in other systems.
- Final pay, settlements, and exit-interview content are tracked as checklist items and notes, not as computed payroll figures.
odoo 18 resignation, employee resignation odoo, odoo offboarding, exit clearance checklist, notice period tracking, last working day, hr separation workflow, employee offboarding odoo community, resignation management, hr exit process, offboarding audit trail, multi company hr odoo
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