| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Discuss (mail)
• Employees (hr) |
| Community Apps Dependencies | Show |
| Lines of code | 2833 |
| Technical Name |
wt_hrms_payroll |
| License | OPL-1 |
| Website | https://way4tech.com |
| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Discuss (mail)
• Employees (hr) |
| Community Apps Dependencies | Show |
| Lines of code | 2833 |
| Technical Name |
wt_hrms_payroll |
| License | OPL-1 |
| Website | https://way4tech.com |
WT HRMS Payroll — Country-Agnostic Payroll Engine for Odoo 19 Community
Salary structures, a sandboxed Python rule engine, batch payslip generation, audit trail, and a 4-state payslip lifecycle. Build any country's payroll on top — or use the dedicated WT HRMS Payroll — Pakistan add-on for FBR + EOBI + PF out of the box.
payroll · payslip · salary structure · payroll rule · safe_eval · batch payroll · HR community · HRMS Odoo 19 · salary calculation · Odoo 19 · Odoo 18 · community edition · enterprise alternative · open hrms · HR software · HR automation · way4tech
Live Preview
A real screenshot from a working WT HRMS install on Odoo 19.
The Problem This Solves
Odoo Community ships no payroll. Enterprise's hr_payroll is closed-source and locked behind a paywall.
Community has zero payroll
Out of the box, Odoo Community ships no payroll calculation, no payslip, no rule engine. Most teams end up in Excel.
Enterprise payroll is overkill & opaque
hr_payroll is bundled with the Enterprise stack — you can't customize the rule engine, can't read the source, and pay per user even if you just need a payslip.
No safe place to write tax logic
Country tax slabs and provident-fund rules need real code. You need a sandboxed safe_eval, not arbitrary Python in your DB.
The Solution — A Real Payroll Engine, LGPL, Audited
5 models. 3 computation types. 4-state payslip lifecycle. Batch processing. Mail thread. safe_eval sandbox.
- ✓ Salary Structures — reusable bundles of rules (e.g. "Standard Local", "Expat", "Intern")
- ✓ Payroll Rules with 7 categories: Basic, Allowance, Deduction, Gross, Net, Employer Contribution, Other
- ✓ 3 computation types: Fixed Amount, Percentage of Another Rule, Python Expression (sandboxed)
- ✓ safe_eval sandbox — rules can read
wage,basic,gross,worked_days,leaves,overtime_hours, plusrulesdict of prior-rule outputs - ✓ Defensive evaluation — if a Python rule raises, payslip continues with 0 for that line and the exception is logged with rule code & inputs
- ✓ Sequenced execution — rules run in order; later rules can reference earlier rule outputs by code
- ✓ Payslip workflow: Draft → Computed → Confirmed → Paid (plus Cancelled / Reset)
- ✓ Auto-numbered payslips with monthly sequence
SLIP/YYYY/MM/#### - ✓ Compute on demand — one button regenerates lines from the structure for the chosen period
- ✓ Worked days, leave days, overtime hours editable on every payslip — available to rule formulas
- ✓ Auto Gross / Deductions / Net computed from line categories — no manual totaling
- ✓ Payslip Batch — one click Generate Payslips for all active employees with an
hr.version - ✓ Bulk operations: Compute All / Confirm All / Mark All Paid on the batch
- ✓ Mail thread & chatter on payslip + batch — full audit log
- ✓ HR User & HR Manager permissions out of the box — manager-gated Confirm / Mark Paid actions
Step-by-Step User Guide
Install & check the menus
Apps → "WT HRMS Payroll" → Install. The new WT HRMS → Payroll top-level menu appears with Payslips and Batches; configuration sub-menus appear under WT HRMS → Configuration → Payroll Config.
Define your payroll rules
Go to Configuration → Payroll Config → Payroll Rules. Create at minimum: BASIC (Python: wage), one or more allowances (Percentage / Fixed), deductions (e.g. tax), GROSS (Python: sum(...)), NET (Python: gross minus deductions). Each rule has a sequence — lower numbers run first.
Bundle rules into a salary structure
Go to Configuration → Payroll Config → Salary Structures. Create one (e.g. "Standard 2026") and add every rule you want it to compute. You can have multiple structures — e.g. one for permanent staff, one for interns.
Run a single payslip (sanity check)
Open WT HRMS → Payroll → Payslips → New. Pick employee, structure, date range. Optionally adjust worked days, leave days, overtime hours. Click Compute. Inspect the lines. Click Confirm, then Mark Paid.
Process a full month batch
Go to WT HRMS → Payroll → Batches → New. Name the batch (e.g. "April 2026"), pick the structure, set Date From / Date To. Click Generate Payslips — one row per active employee with a current hr.version. Then Compute All → Confirm All → Mark All Paid.
Layer add-ons (optional)
Install WT HRMS Payroll — Pakistan for FBR / EOBI / PF rules; WT HRMS Payroll — Accounting Integration to post payslips as account.move; WT HRMS Payroll — Bank Disbursement Files for HBL / MCB / UBL / Meezan CSV; WT HRMS Payroll — Employee Portal for self-service payslip download.
Every Feature That Matters
Sandboxed Rule Engine
Python rules run inside Odoo's safe_eval — no os, sys or open(). Errors logged, not raised.
3 Computation Types
Fixed Amount (e.g. PKR 5,000 conveyance), Percentage of Another Rule (e.g. 45% of BASIC), full Python expression.
7 Rule Categories
Basic, Allowance, Deduction, Gross, Net, Employer Contribution, Other — powers automatic Gross/Deductions/Net totals.
4-State Payslip
Draft → Computed → Confirmed → Paid; plus Cancel and Reset for re-runs.
Batch Processing
One-click "Generate Payslips" for all employees with a hr.version. Bulk Compute / Confirm / Mark Paid.
Wage Pulled from hr.version
Compute reads employee_id.current_version_id.wage — no double-entry of basic salary.
Configurable Period Inputs
Per-payslip worked days, leave days, overtime hours — available to every Python rule.
Auto Totals
Gross = sum of basic+allowance+gross categories; Deductions = sum of deduction lines; Net = NET line if present, else Gross - Deductions.
Auditable Mail Thread
Both payslip and batch inherit mail.thread — every state change is logged.
Compatibility & Requirements
| Odoo Edition | Community & Enterprise |
| Odoo Version | 19.0 |
| Dependencies | wt_hrms_core (which pulls hr, mail, base) |
| Python Packages | None — uses only stdlib + dateutil (already in Odoo) |
| External Services | None |
| License | LGPL-3 |
About Waqas Riasat & Way4Tech
WT HRMS is a community-first HR + payroll suite for Odoo 19. The Payroll module is the country-agnostic engine; install WT HRMS Payroll — Pakistan, Accounting Integration, Bank Disbursement Files, and Employee Portal on top to build out your full payroll stack.
way4tech.com · info@way4tech.com · WhatsApp +92 315 411 4748
Odoo Proprietary License v1.0 This software and associated files (the "Software") may only be used (executed, modified, executed after modifications) if you have purchased a valid license from the authors, typically via Odoo Apps, or if you have received a written agreement from the authors of the Software (see the COPYRIGHT file). You may develop Odoo modules that use the Software as a library (typically by depending on it, importing it and using its resources), but without copying any source code or material from the Software. You may distribute those modules under the license of your choice, provided that this license is compatible with the terms of the Odoo Proprietary License (For example: LGPL, MIT, or proprietary licenses similar to this one). It is forbidden to publish, distribute, sublicense, or sell copies of the Software or modified copies of the Software. The above copyright notice and this permission notice must be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Please log in to comment on this module