| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Employees (hr)
• Discuss (mail) |
| Community Apps Dependencies | Show |
| Lines of code | 1403 |
| Technical Name |
eh_hr_salary_advance |
| License | LGPL-3 |
| Website | https://www.erpheritage.com.au/ |
| Versions | 16.0 17.0 18.0 19.0 |
Salary Advance for HR
Request, approve and recover employee cash advances on a governed workflow with a tamper-evident audit trail.
Why this module
Salary Advance for HR
Every step is role-gated
Submit, approve, pay and recover are separate transitions, each restricted to a specific HR group. The employee submits, a manager approves or rejects, an officer pays and recovers. Nobody can skip a step or fire a transition their group does not own.
Schedules that always sum back
Split an advance across any number of monthly installments. The generator divides evenly and lets the final row absorb the rounding remainder, so the lines always add back to the exact advance amount. Mark each installment paid as payroll recovers it and the balance updates live.
An audit trail you can verify
Creates, edits, transitions and deletes are written to an append-only, hash-chained log under a Postgres advisory lock. Any silent edit to a past row breaks the chain and is caught by verification. The advance reference, amount, employee and state changes are all captured.
Day in the life
From emergency request to fully recovered
An employee raises a 500 advance for a car repair and submits it. The advance gets an automatic reference like ADV/2026/00042 and lands in the manager's queue. The manager approves it (or rejects it back with a reason in the chatter). An HR officer marks it paid, then generates a three-month repayment schedule that splits the amount evenly. As each payroll cycle recovers an installment, the officer ticks it paid; the outstanding balance drops automatically. When the last installment clears, the advance flips itself to recovered. Every one of those steps is on the chatter and in the hash-chained audit log.
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.
A 300 advance over 3 installments produces clean rounded rows, with the final row absorbing any remainder so the schedule always sums back to the exact advance amount, never one cent short or over.
When the final installment is marked paid, the advance detects that its whole schedule is settled and transitions itself from paid to recovered automatically, so a fully recovered advance never sits stuck in the paid state.
The real submitter is captured before the workflow engine elevates to sudo, so a user who fired a gated transition cannot later approve their own request even if they happen to hold the approver group.
Recovered and rejected are marked final. Even a misconfigured definition that declares a transition out of them is refused, so a closed advance cannot be reopened or pushed forward by accident.
Each advance is owned by a company and cross-company writes are refused by default, even under sudo, unless an explicit audited override context is set, which is itself logged.
Audit appends serialize through a fixed Postgres transaction-scoped advisory lock, so concurrent transitions on different advances cannot interleave and corrupt the hash chain.
A database CHECK constraint rejects negative advance and installment amounts at the storage layer, not just in the UI, so bad values cannot be written by import or script.
What is inside
Built to do the job, end to end.
- Workflow-driven state machine. States and transitions (draft, submitted, approved, paid, recovered, rejected) are defined as data in the EH HR workflow engine, not hard-coded. The status bar, transition buttons and allowed-group checks all read from that definition, so the lifecycle is configurable without touching Python.
- Single or installment recovery. Set the number of installments and the starting payroll month, then generate a per-month repayment schedule. Each installment carries its own due date, amount and paid flag. Recovered total and outstanding balance are stored computes derived from the paid lines.
- Sequence-numbered references. Every advance gets an automatic, year-prefixed reference (ADV/YYYY/00001) from a dedicated sequence on save, so advances are easy to cite in payroll, email and conversation without manual numbering.
- Append-only hash-chained audit. The audited mixin snapshots state, employee, amount, recovery month and installment count on every change and writes before and after payloads to a sha256 hash-chained log that can be verified end to end for tampering.
- Chatter and tracking. Key fields are tracked and the record carries a full mail thread, so approvals, rejections, amount changes and recovery progress are visible inline with messages and follower notifications.
- Strict multi-company scoping. Advances are company-owned through the platform company-aware mixin, which refuses unaudited cross-company writes and logs any sanctioned elevation, closing the null-company leak pattern common in other HR suites.
Honest about the edges
What this does not do, so nothing surprises you.
- Does not post to accounting journals or create journal entries. Recovery is tracked inside the advance (installments and balance); ledger posting is left as a future integration seam.
- Does not auto-deduct from payslips. Marking an installment paid is a manual or scripted action; there is no built-in payroll run that ticks installments for you.
- Charges no interest and applies no fees. This is a plain cash advance recovered at face value, not a lending product with a rate or amortization.
- Ships no scheduled job. Nothing runs in the background; advances move only when a user (or your own automation) fires a transition or marks an installment paid.
- Repayment schedule rows are generated in equal monthly steps from the start month. Custom or irregular per-row amounts and dates can be edited by hand but are not auto-planned.
- Requires the EH HR Platform core, compat and workflow engine modules; it is not a standalone drop-in onto stock Odoo HR alone.
salary advance, employee salary advance, payroll advance, salary advance request, advance against salary, wage advance, advance recovery, installment repayment schedule, payroll deduction, HR advance approval workflow, employee cash advance, advance balance tracking, Odoo HR salary advance, salary advance audit trail, multi company HR advance
Please log in to comment on this module