EH HR Service Request
Employee HR requests for ID cards, salary certificates, experience letters and NOCs, routed through a configurable workflow with a hash-chained audit trail.
Why this module
EH HR Service Request
Every request follows the same path
Requests move draft to submitted to in progress to done, with a reject branch from submitted. The states and the order between them come from a workflow definition record, so the path is configurable without code rather than hardcoded in the model.
Transitions gated by HR role
Employees can submit their own request, but only HR officers can take, complete or reject it. The engine checks the user's groups on every transition and refuses anyone outside the allowed set, so the queue cannot be advanced by the wrong person.
A trail you can verify
Each create, write and state change is captured into an append-only, sha256 hash-chained audit log that records who changed what and when. A single edit to any past row is detectable by walking the chain, which gives a cheap integrity check independent of the chatter.
Day in the life
From request to completed certificate
An employee opens a service request, picks Salary certificate, and adds a short note that it is for their bank. On save the record gets a year-prefixed reference like SRV/2026/00042 and sits in Draft. They press Submit and it moves to Submitted. An HR officer opens the queue, presses Take to claim ownership and move it to In progress, prepares the certificate, then presses Complete to mark it Done. If the request cannot be honoured, the officer rejects it from Submitted instead. Every one of those steps, plus the employee and request type behind them, lands in the hash-chained audit log, so months later anyone reviewing the request can see exactly who did what and confirm the record was not altered after the fact.
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 request reaches Done or Rejected, the engine refuses any further transition, even one a misconfigured definition might declare from a final state. The is_final marker is the authoritative terminal check.
The submit transition is granted to the employee self group while take, complete and reject are granted only to the HR officer group. A user outside a transition's allowed groups is rejected with a clear error, with an explicit admin bypass for support.
Audit appends are serialized by a transaction-scoped Postgres advisory lock, so two concurrent transactions cannot read the same chain tail and fork it. The lock releases automatically on commit or rollback.
Every audit row stores the previous row's hash plus its own canonical material. verify_chain walks the log with keyset pagination and returns the id of the first broken row, so any silent edit downstream is caught without loading the whole table.
company_id is required and defaults to the active company. A write that moves a request into a company the user does not belong to is refused, even under sudo, unless an explicit audited override context is set, and the elevation is itself written to the audit log.
The reference number is assigned only when the field is still New, drawn from a company-independent sequence with a year prefix and five-digit padding, so saved requests keep a stable, non-copyable identifier.
What is inside
Built to do the job, end to end.
- Request model. eh.hr.service.request with employee, request type (ID card, salary certificate, experience letter, NOC, other), free-text description and an assigned-to HR member, all on mail.thread with tracking on the fields that matter.
- Workflow definition data. A seeded workflow definition with five states (draft, submitted, in progress, done, rejected) and four transitions (submit, take, complete, reject), each carrying the group allowed to fire it. Loaded noupdate so your runtime tweaks survive upgrades.
- Shared platform engines. Depends on eh_hr_engine_workflow for the state machine and eh_hr_core for the audited and company-aware mixins and the hash-chained audit log. This module adds no workflow or audit logic of its own.
- Backend views and menu. List and form views with a status bar and header buttons that appear only in the state where each transition is valid, plus an officer-gated Service Requests menu under the HR requests section.
- Security and tests. Access rules for HR admin, officer and employee-self groups, and a post-install test suite covering reference generation, the default request type, the full complete path and the reject path.
Honest about the edges
What this does not do, so nothing surprises you.
- This module records and routes requests; it does not generate the ID card, certificate or letter document itself. The output is a tracked, completed request, not a rendered PDF.
- No approval chain is wired in this module. The workflow engine supports gated, approval-routed transitions and a self-approval guard, but none of this module's transitions enable them; take, complete and reject are direct officer actions.
- There is no cron, SLA timer, escalation ladder or automatic reminder. Requests advance only when a person presses a button.
- There is no portal or public web form. Employees raise and view requests through the backend, and the menu is officer-gated.
- Requires the EH HR Platform base (eh_hr_core, eh_hr_compat, eh_hr_engine_workflow) and the standard hr module; it is not a standalone helpdesk.
odoo 18 hr service request, employee document request odoo, salary certificate request, experience letter request, no objection certificate odoo, noc request hr, id card request employee, hr request workflow odoo, hr helpdesk ticket, human resources self service odoo, hr audit trail, hash chained audit log, multi company hr odoo, configurable workflow engine, hr officer request queue
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.
The Australia country pack for the ERP Heritage Employment Hero integration
Sync certifications, qualifications and employee document metadata from the Employment Hero people platform into...
Sync Employment Hero leave categories, leave requests and leave balances into the standard Odoo Time Off app, wit...
Show the Hijri (Umm al-Qura) date alongside Gregorian dates across Odoo 18
Connect Odoo partner records to the Saudi SPL National Address service and the Wathq commercial registry
One click install of the full Employment Hero integration for Odoo Community, covering the connector, two way syn...
| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Employees (hr)
• Discuss (mail) |
| Community Apps Dependencies | Show |
| Lines of code | 1334 |
| Technical Name |
eh_hr_service_request |
| License | LGPL-3 |
| Website | https://www.erpheritage.com.au/ |
Please log in to comment on this module