HR Lawsuit and Legal Case Tracker
Track labour, civil and criminal cases from filing to closure on a tamper-evident, officer-gated workflow.
Why this module
HR Lawsuit and Legal Case Tracker
A register, not a law firm
This module records cases and tracks their status. It captures the case type, court, filed date, amount claimed and the subject employee, then drives each case through a fixed lifecycle. It does not bill hours, store privileged documents, or compute legal outcomes.
It borrows the heavy machinery
The workflow, the audit chain and the multi-company guard all live in the shared HR Platform engine. This module wires a Lawsuit document onto them, so the same hardened transition, audit and scoping code that runs the rest of the suite runs here too.
Every change leaves a mark
State changes, edits, creates and deletes are written to an append-only, sha256 hash-chained audit log. A single advisory lock serialises appends so concurrent writes cannot fork the chain, and verify_chain reports the first row that was altered out of band.
Day in the life
From filing to verdict, on the record
An HR officer opens a new Lawsuit. The reference number (LAW/2026/00001) is stamped automatically and the case sits in Draft. They record the title, pick labour as the case type, link the subject employee, name the court and enter the amount claimed. Open Case moves it to Open; when a hearing is scheduled, To Court moves it to In Court. After the ruling, Close marks it final, or earlier, if the matter falls away, Dismiss closes it from Open. Each button is restricted to HR officers, each transition is tracked in the chatter, and every field change is captured in the hash-chained audit log so the history of the case cannot be quietly rewritten.
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.
Closed and Dismissed are marked is_final in the workflow definition. The engine refuses any further transition out of a final state, even one a misconfigured definition might declare, so a settled case cannot be silently reopened through the normal buttons.
Each audit row stores the sha256 of the previous row plus its own fields. Any out-of-band edit that does not recompute the whole downstream chain is caught by verify_chain, which walks the log with keyset pagination and returns the id of the first broken row.
A hash chain is inherently serial. Appends take a transaction-scoped Postgres advisory lock (pg_advisory_xact_lock) so two concurrent transactions cannot read the same tail and fork the chain. The lock releases automatically on commit or rollback.
company_id is required and defaults to the active company. Writing a case into a company the user does not belong to is rejected, even under sudo, unless an explicit allow_cross_company override is set, and that elevation is itself written to the audit log with every affected record id.
Every transition (Open Case, To Court, Close, Dismiss) is gated to the HR Officer group. A user outside the transition's allowed groups is refused with a clear error rather than silently advancing the case.
The LAW reference is assigned only when name is left as New, is copy-protected, and falls back to LAW/AUTO if the sequence is unavailable, so a duplicated record never reuses or collides with an existing case number.
A case can be filed with no linked employee (civil or external matters), and the employee link uses ondelete restrict so an employee tied to a live case cannot be deleted out from under it.
What is inside
Built to do the job, end to end.
- The Lawsuit record. One model, eh.hr.lawsuit, with an auto-numbered reference, a required title, an optional subject employee, a case type (labour, civil, criminal, other), the court or tribunal, the filed date, the amount claimed and a free-text description. List and form views with a status bar and a chatter, filed under HR records.
- The lifecycle. Five states (Draft, Open, In Court, Closed, Dismissed) and four transitions. Open Case and To Court advance a live case, Close settles it from In Court, and Dismiss ends it early from Open. Closed and Dismissed are terminal.
- Audit and tracking. Inherits the platform audited mixin, so state, title, employee, case type, court, filed date and amount are snapshotted on every create, write and delete into the hash-chained audit log. Key fields also track to the mail.thread chatter for a readable timeline.
- Access model. HR officers and managers can read, create and edit cases and run the transitions. Only HR administrators can delete a case. The case sequence is company-agnostic so numbering stays continuous across companies.
Honest about the edges
What this does not do, so nothing surprises you.
- This is a case register and status tracker, not a document management or legal billing system. It stores a description and the headline facts, not pleadings, evidence files or time entries.
- The lifecycle is fixed in data (Draft, Open, In Court, Closed, Dismissed). There is no in-product UI to design custom states or branches for this document type.
- Lawsuit transitions are gated by user group and advance directly. This module does not route cases through the multi-step approval engine, even though the underlying platform supports gated approvals for other documents.
- amount_claimed is a single plain monetary figure with no currency field, no settlement or awarded-amount tracking, and no accounting posting.
- There is no built-in reminder, hearing-date calendar, statute-of-limitation alert or escalation cron. Tracking of dates beyond the filed date is manual.
- Requires the EH HR Platform (eh_hr_core, eh_hr_compat, eh_hr_engine_workflow) and the standard hr app. It is not a standalone install.
HR lawsuit tracking Odoo, legal case management, employee litigation register, labour dispute tracking, court case workflow, tribunal case log, employment claim register, case status workflow, tamper-evident audit trail, hash-chained audit log, multi-company legal cases, Odoo 19 HR legal module, disciplinary lawsuit log, Fair Work claim tracking, case lifecycle workflow
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