EH HR Reminder
Date-based HR reminders that fire a daily cron and post a chatter note on every due item, audited and company-scoped.
Why this module
EH HR Reminder
Due items surface on their own
A computed due flag marks every reminder whose date has passed and is still open, and a daily cron posts a chatter note on each one. The record carries its own proof that the prompt fired.
Every change is hash-chained
Create, edit and delete each write an append-only audit row with before and after snapshots. Rows are SHA-256 chained under an advisory lock, so any later tampering is detectable by chain verification.
No cross-company leakage
The owning company is required on every reminder, and writes that move a record into a company the user does not belong to are refused unless an explicit, audited override is set.
Day in the life
A quiet list that does the chasing for you
An HR officer logs a contract renewal due in ninety days, a probation review for a new starter, and a passport expiry for a visa holder, each with the employee attached and a category set. Months pass. On the morning each one falls due, the daily cron posts a note straight onto the reminder's chatter, and the list view paints the row amber. The officer works the amber rows, ticks Done, and the row drops out of the due set. Every tick, edit and deletion lands in the hash-chained audit log, so when an auditor later asks who closed what and when, the answer is already recorded.
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 cron only notifies reminders that are not done and on or before today. Marking one done removes it from the next run, so a long-overdue item is not re-notified forever once it is handled.
Audit rows append under a Postgres transaction-scoped advisory lock, so concurrent writes from multiple users or the cron cannot fork the hash chain. Appends are strictly ordered.
Reassigning a reminder to a company the user is not a member of is rejected outright. A permitted reassignment still emits a dedicated cross_company_write audit event recording every affected record id.
Because each audit row hashes the previous row plus its own fields, editing a historical row without recomputing the whole downstream chain is caught by chain verification.
The chain material normalises a missing actor to zero on both append and verify, so cron-created rows with no human user do not break verification.
Employees in the self group can read reminders but cannot create, edit or delete them, keeping the reminder list owned by HR while staying visible to staff.
What is inside
Built to do the job, end to end.
- Reminder model. eh.hr.reminder with title, optional employee, required due date, five-way category (contract, document, probation, review, other), notes, a done flag and a computed is_due flag, ordered by date.
- Daily fire cron. An ir.cron running once per day calls _cron_fire(), which searches every not-done reminder on or before today and posts a chatter note on each, returning the count fired.
- Platform mixins. Inherits the audited mixin (append-only, hash-chained log with before/after snapshots on create, write and unlink) and the company-aware mixin (required company, cross-company guard with audited override).
- Views and chatter. List and form views with amber decoration on due rows and muted styling on done rows, a one-click Done button, and a full mail.thread chatter on each reminder.
- Security and menu. Three access tiers: HR admin and officer get full read-write, the self-service group gets read-only. A Reminders menu sits under HR records for the officer group.
- Tests. Post-install tests covering due detection past and future, that marking done clears the due flag, and that the cron fires on a same-day reminder.
Honest about the edges
What this does not do, so nothing surprises you.
- Notifications are posted as chatter notes on the reminder record. The module does not send email or SMS and does not create Odoo activities or calendar events.
- The cron runs once daily. It is not real-time and does not escalate, re-route or follow an approval or escalation ladder.
- Reminders are created and dated manually. The module does not auto-generate reminders from contract end dates, document expiry fields or other HR records.
- Categories are a fixed five-value list (contract, document, probation, review, other) and are not user-configurable from the UI.
- There is no recurrence engine. A repeating obligation must be logged as separate dated reminders.
- Audit rows are tamper-evident through hash-chain verification rather than blocked at the database level, so detection is by verification, not hard prevention.
HR reminder Odoo, contract renewal reminder, probation review reminder, document expiry reminder HR, employee follow-up tracking, HR due date cron, Odoo 19 HR reminders, multi-company HR records, audited HR module, hash-chained audit trail, HR records management, chatter notification HR, scheduled HR job, self-service HR visibility, 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.
Please log in to comment on this module