HR Policy Acknowledgement
Publish company policies through a configurable workflow and capture per-employee read acknowledgement, with every policy change written to a hash-chained audit trail.
Why this module
HR Policy Acknowledgement
Acknowledgement you can show
Each policy carries a list of employees and a tick plus dated stamp recording that they read it. action_acknowledge writes acknowledged and the acknowledgement date in one step, so you have a concrete per-person record rather than an assumption.
Policy changes are tamper-evident
State, title, category and version changes on a policy are written to an append-only audit log. Each row stores the sha256 of the previous row plus its own fields, and verify_chain walks the chain to flag any row that was edited after the fact.
Only officers publish or archive
The publish and archive transitions are restricted to the HR officer group by the workflow engine, and archived is a final state the engine refuses to transition out of. Employees get read-only access to policies and can record their own acknowledgement.
Day in the life
Roll out a new code of conduct
An HR officer drafts the policy, sets the category to HR and a version label, then clicks Publish. The policy moves draft to published through the workflow engine and the change lands in the audit log. Employees open the published policy, read it, and click Acknowledge on their line, which stamps the date. When a newer version supersedes it the officer archives the old policy, which the engine locks as final so it can no longer be edited back into circulation.
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.
Once a policy is archived the workflow engine treats archived as a final state and refuses every further transition, even one a misconfigured definition might declare from it, so a retired policy cannot be quietly reactivated.
Audit rows are appended under a transaction-scoped Postgres advisory lock, so two concurrent policy changes cannot read the same chain tail and fork the hash chain. The lock releases automatically on commit or rollback.
Policies are company-scoped and required to carry a company. Writing a policy into a company the user does not belong to is rejected unless an explicit audited override context is set, and any such elevation is recorded in the audit log.
A write that does not actually change any captured field (state, title, category, version) emits no audit row, so the trail records real changes rather than no-op saves.
Policy reference numbers come from a year-prefixed sequence assigned at creation and the field is read-only and copy-disabled, so the human reference stays stable for the life of the record.
What is inside
Built to do the job, end to end.
- Policy and acknowledgement models. eh.hr.company.policy holds the policy with title, body, category, version and an auto-numbered reference. A child eh.hr.policy.acknowledgement model links a policy to an employee and carries the acknowledged flag and date, exposed inline on the policy form.
- Composed platform engine. The policy owns no state-machine, audit or company-scope code of its own. It composes the platform workflow mixin, the audited mixin and the strict company-aware mixin, so behaviour stays consistent with the rest of the EH HR Platform.
- Configurable workflow definition. States and transitions are seeded as data records (draft, published, archived) against a workflow definition, so the steps and the groups allowed to move between them are configuration, not hardcoded logic.
- Security and menu. Access rules grant admin full control, officers create and publish, and self-service employees read policies and record their own acknowledgement. A Company Policies menu sits under the HR records area for the officer group.
Honest about the edges
What this does not do, so nothing surprises you.
- Acknowledgement is captured by ticking or clicking Acknowledge on an employee line; the module does not push notifications, send reminders, or block system access until a policy is signed.
- Publishing a new version does not automatically reset or re-request acknowledgement from employees who signed an earlier version; re-acknowledgement is a manual process.
- Approval routing and escalation ladders are not configured for the policy workflow on this branch; publish and archive are direct group-gated transitions, not multi-step approvals.
- The audit trail and company scoping apply to the policy record; individual acknowledgement rows are plain records, not hash-chained audit entries.
- Requires the EH HR Platform base modules (eh_hr_core, eh_hr_compat, eh_hr_engine_workflow) and the standard Odoo hr module.
company policy management odoo, employee policy acknowledgement, policy sign off odoo, code of conduct distribution, hr policy tracking, policy acknowledgement audit trail, versioned company policies, multi company hr odoo 16, policy workflow odoo, hash chained audit log, hr compliance evidence, officer gated policy publishing
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.
Bring Employment Hero onboarding workflows, employee goals and contractor flags into Odoo Community as real recor...
End to end French B2B and B2G electronic invoicing for the DGFiP reform, generating Factur-X PDF/A-3 with embedde...
Accept ZainCash wallet payments in Iraq at your Odoo checkout, on the ZainCash Payment Gateway v2 with OAuth2, re...
Sync Employment Hero ATS recruitment job openings into the standard Odoo Recruitment app, mapping each opening on...
The New Zealand country pack for the ERP Heritage Employment Hero integration
| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Employees (hr)
• Discuss (mail) |
| Community Apps Dependencies | Show |
| Lines of code | 1344 |
| Technical Name |
eh_hr_policy_ack |
| License | LGPL-3 |
| Website | https://www.erpheritage.com.au/ |
Please log in to comment on this module