EH HR Announcement
Company announcements, governed and on the record.
Why this module
EH HR Announcement
A workflow, not a status field
Announcements advance through configurable draft, published and archived states with a cancel path from draft. The steps are data on the shared workflow engine and publishing is restricted to HR Officer, so release is a controlled act, not a free edit.
Tamper-evident audit trail
State, title, category, dates, audience and pin changes are written to an append-only, sha256 hash-chained log. Each row links to the one before it and an administrator can verify the whole chain on demand to prove nothing was altered after the fact.
Strict multi-company scoping
Every announcement is owned by one company and required to be. Cross-company writes are refused by default and audited when explicitly elevated, so one company's notices never bleed into another in a shared database.
Day in the life
From draft to the whole company in a few clicks
An HR officer opens Announcements, writes an urgent notice, sets the audience to two departments and watches the reached count resolve before sending. They publish; the record moves to Published, the transition is stamped into the hash-chained audit log, and the notice is marked live within its publish and expiry window. When it is no longer relevant they archive it, which is a final state, and the full history stays on the record's chatter and in the audit trail for any later review.
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.
The audit log is hash-chained and serialized by a Postgres advisory lock on append, so concurrent edits cannot fork the chain and any later tampering is detectable by verify_chain().
Writing a record into a company the user does not belong to is rejected outright, and any sanctioned cross-company elevation is itself written to the audit trail with every affected record id.
Archived and Cancelled are marked final; the workflow engine refuses any further transition out of a final state even if a misconfigured definition declared one.
The underlying transition engine captures the real submitter before any sudo, so a user cannot approve their own gated action even if they hold an approver group (relevant if you later route announcements through an approval chain).
Switching audience between whole company, departments and named employees recomputes the reached employee set and count immediately, scoped to the announcement's own company.
What is inside
Built to do the job, end to end.
- Models this module adds. One model, eh.hr.announcement, with title, body, category (policy, event, general, urgent), publish and optional expiry dates, a pin flag, audience selection, resolved audience and count, and a computed live flag.
- Standard Odoo models it uses. Reads hr.employee and hr.department to resolve the targeted audience. It adds no fields to those models and keeps them as the source of truth.
- Workflow and sequence data. A workflow definition with draft, published, archived and cancelled states and their group-gated transitions, plus a yearly ANN reference sequence. Workflow and audit logic live in the platform engines, not in this module.
- Security and menu. Access rules for HR admin, officer, manager and self-service employee (read only), and an Announcements menu under Records and Compliance limited to HR Officer.
Honest about the edges
What this does not do, so nothing surprises you.
- This is an internal HR record and workflow tool. It has no employee-facing portal page, push notification or email blast: it does not send the announcement out to inboxes or to a website by itself.
- The live flag and expiry date are a computed display window, not an automation. An expired announcement stops counting as live but is not auto-archived; archiving is a deliberate action by an HR officer.
- Publishing and archiving are gated to the HR Officer group out of the box. There is no built-in multi-step approval chain on announcements, though the platform's approval engine can be wired in if you need one.
- The body is plain text, not a rich HTML editor or template designer, and the module does not manage attachments beyond the standard Odoo chatter.
- It depends on the EH HR Platform engines (eh_hr_core, eh_hr_compat, eh_hr_engine_workflow) and standard hr. These install automatically but are required; the module is not a standalone add-on to vanilla Odoo.
Odoo HR announcement, company announcement Odoo, internal communication Odoo, staff noticeboard Odoo, HR notice board, employee announcements, policy and event notices, urgent staff alert, department targeted announcement, publish archive workflow, tamper-evident audit trail HR, hash-chained audit log, multi-company HR Odoo, Odoo 19 Community HR, Odoo 16 17 18 HR module, EH 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.
Modules teams pair with this one.
Premium ERP Heritage modules that extend the same stack, each built to the same engineering bar.
Shared foundation for the ERP Heritage Employment Hero country packs
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...
Please log in to comment on this module