| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Employees (hr)
• Discuss (mail) |
| Community Apps Dependencies | Show |
| Lines of code | 1323 |
| Technical Name |
eh_hr_reward |
| License | LGPL-3 |
| Website | https://www.erpheritage.com.au/ |
| Versions | 16.0 17.0 18.0 19.0 |
EH HR Reward
Rewards and recognition, on the record.
Why this module
EH HR Reward
A workflow, not a free-text field
Rewards move draft to nominated to approved to granted, with reject available from nominated. HR officers nominate and grant, HR managers approve and reject. The steps and the role on each step come from the workflow definition as data, so a final state cannot be re-transitioned and an off-step move is refused.
Tamper-evident by inheritance
Every create, write and grant on a reward is captured into the platform audit log: an append-only, sha256 hash-chained trail you can verify on demand to prove no row was edited after the fact. State, employee, type, amount, points and reason are the captured fields.
Recognition points that count when earned
Each granted reward adds its points to the employee record, with a granted-rewards count alongside. Points only accrue once a reward reaches the granted state, so nominations and rejections never inflate the tally, and they accumulate cleanly across repeat wins.
Day in the life
From shout-out to signed-off
A team lead who is an HR officer opens a reward, picks the employee, sets the type to bonus with an amount or to recognition with points, writes the reason and nominates it. It is auto-numbered RWD/2026/00042 and the status bar moves to Nominated. An HR manager reviews and approves, or rejects with the reason on the chatter. An HR officer grants it: the granted date is stamped, the points land on the employee, and the whole path sits in the hash-chained audit log. The employee record now shows their running recognition points and granted-reward count, no spreadsheet involved.
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.
Granted and rejected are terminal. The workflow mixin refuses any further transition out of a final state, even one a misconfigured definition might declare, so a granted reward cannot be quietly re-run or reversed by re-firing a button.
Each transition carries its own allowed groups. A user outside the group for nominate, approve, grant or reject is refused at that step, and the available header buttons follow the current state, so an approver cannot grant straight from draft.
The per-employee points and count are computed from granted rewards alone. A reward sitting in nominated or approved, or one that was rejected, contributes nothing, so the leaderboard reflects what was actually awarded.
Granting stamps the granted date with the record's context today only if it is not already set, so re-entering the granted state through the engine never silently rewrites the original award date.
The audit chain is appended under a Postgres transaction-scoped advisory lock, so two concurrent grants cannot read the same chain tail and fork it. The lock releases automatically on commit or rollback.
Each reward is owned by a company and that ownership is enforced. Writing a reward into a company the user is not a member of is refused, even under sudo, unless an explicit audited cross-company override is in context, and that elevation is itself logged.
Reward references draw from a single company-independent sequence prefixed RWD and padded, so numbering stays consistent and gap-free across companies sharing the database.
What is inside
Built to do the job, end to end.
- Models this module adds. One model, eh.hr.reward, carrying employee, reward type, amount, points, reason, nominated-by, granted date and the workflow state. It inherits the platform workflow, audited and company-aware mixins plus mail.thread for chatter and tracking.
- Standard Odoo models it extends. hr.employee gains a rewards list, a computed recognition-points total and a granted-rewards count, so recognition reads directly off the employee record. No parallel employee table is created.
- Workflow, sequence and security shipped. A data-defined Reward workflow (draft, nominated, approved, granted, rejected) with role-gated transitions, an auto-numbering sequence, list and form views with a status bar and action buttons, a Rewards menu under HR records, and access rules for HR admin, manager, officer and self-service employee.
- Built on the platform engines. Stands on eh_hr_core, eh_hr_compat and eh_hr_engine_workflow, and the standard hr module. It owns no workflow or audit code of its own; the state machine, the hash-chained log and the multi-company guard come from the shared engines.
Honest about the edges
What this does not do, so nothing surprises you.
- This module records and governs rewards. It does not post bonus amounts to payroll or accounting; the amount field is a recorded figure, not an automatic payslip line or journal entry.
- The recognition points are a running per-employee tally and count. There is no built-in budget cap, redemption catalogue, points expiry or store, and no public gamified leaderboard view beyond the fields on the employee record.
- Approvals here are direct, role-gated workflow transitions (officer nominates and grants, manager approves and rejects). This module does not wire in multi-step approval chains or escalation ladders from the approval engine.
- Notifications are not configured out of the box. Status changes are tracked on the chatter via mail.thread, but reminder or email routing would come from the notification engine, which this module does not depend on.
- Scope is one reward per employee record with a single reason. There is no batch nomination wizard, no recurring or scheduled rewards, and no manager self-service portal screen.
- The 16 and 17 view layers are produced from one authored source by a build step. Behaviour is covered by the platform test suite; this is governance tooling, not a financial disbursement system.
Odoo employee rewards, Odoo recognition program, employee recognition Odoo, bonus approval workflow, recognition points Odoo, Odoo HR reward module, staff reward and recognition, Odoo 19 HR rewards, employee bonus tracking, multi-company HR Odoo, audited HR records, self-hosted Odoo HR, Odoo Community HR platform, reward nomination approval, HR workflow engine Odoo
Please log in to comment on this module