EH HR Announcement
Company announcements, published through a governed workflow and an audit trail you can verify.
Why this module
EH HR Announcement
A real workflow, not a status field
Announcements advance through draft, published, and archived states defined as data in the platform workflow engine. Publish, archive, and cancel are explicit transitions, each restricted to HR officers, and a final state refuses any further move.
An audit trail you can verify
State, title, category, publish and expiry dates, audience, and pinning are written to an append-only, sha256 hash-chained log. A verify pass walks the chain and reports the first row that was altered, so after-the-fact edits do not pass unnoticed.
Strict per-company isolation
Every announcement carries a required owning company. Cross-company writes are refused even under elevated rights unless an explicit, audited override is set, so one company's notices never leak into another's records.
Day in the life
From draft to the whole company in a few clicks
An HR officer drafts an announcement, picks a category, and chooses whether it reaches the whole company, selected departments, or named employees. The resolved audience and a head count appear straight away. They set an optional expiry date, pin it if it matters, and publish. A live flag shows the notice is published and inside its publish and expiry window. The reference number is assigned automatically, the chatter tracks the headline and key changes, and the publish itself is recorded in the hash-chained audit log. When the notice is no longer relevant, an officer archives it, which is again a gated, audited transition that moves it to a final state.
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-log appends take a transaction-scoped Postgres advisory lock, so two simultaneous publishes cannot read the same chain tail and fork the hash chain.
Archived and cancelled are marked final. Even if a misconfigured definition declared a transition out of them, the workflow engine refuses any further move from a final state.
Changing a record's company to one the user does not belong to is rejected. A permitted cross-company write requires an explicit override and emits its own audit row recording every affected id.
Publish, archive, and cancel are restricted to the HR officer group at the transition level, so a self-service employee with read access cannot move an announcement's state.
Recordset and date values in the captured payload are coerced identically for both the stored JSON and the hash material, so the chain stays symmetric and verification does not break on relational fields.
The live flag is computed from state plus the publish and expiry dates, so an expired announcement reads as not live immediately without depending on a background job to flip it.
What is inside
Built to do the job, end to end.
- Models this module adds. One model, eh.hr.announcement, carrying title, body, category, publish and expiry dates, a pinned flag, audience selector, resolved audience and head count, and a live flag. It builds on the platform workflow, audit, and company-aware mixins rather than owning that code.
- Workflow and sequence. A workflow definition with draft, published, archived, and cancelled states and publish, archive, and cancel transitions, each gated to the HR officer group. An auto-sequence assigns yearly ANN reference numbers with five-digit padding.
- Security and access. Access rules grant admins full rights, officers and managers create and edit, and self-service employees read only. The Announcements menu sits under HR records and is visible to officers.
- Tests in the box. Eight unit tests cover default values and reference numbering, the category default, the publish and archive path, cancellation from draft, audience resolution by employee and by department, and the live window before and after expiry.
Honest about the edges
What this does not do, so nothing surprises you.
- This module manages announcement records inside Odoo. It does not send email or push notifications on its own and does not include a public or portal-facing announcement page.
- Expiry is reflected by a computed live flag, not by a scheduled job. There is no cron in this module, so an expired or past-publish announcement is not automatically moved to archived; archiving remains a manual, gated transition.
- Announcement transitions are gated by HR officer permissions, not by a multi-step approval chain. The platform approval engine exists but is not wired into this module's publish or archive steps.
- Audience targeting computes the set of employees a notice is aimed at; it does not record per-employee read receipts or acknowledgements. Policy acknowledgement is handled by a separate platform module.
- This is the Odoo 17 Community build. It depends on eh_hr_core, eh_hr_compat, eh_hr_engine_workflow, and the standard hr module, which install automatically.
odoo hr announcement, company announcements odoo, staff notice board odoo, hr communication odoo 17, announcement workflow odoo, internal announcements community, department announcement odoo, pinned announcements hr, audited hr records odoo, multi company hr odoo, employee notices odoo, hr platform odoo community
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