EH HR Payroll Malaysia
EPF, SOCSO, EIS and PCB computed on a sandboxed salary-rule engine, with every band and bracket editable as data you keep current.
Why this module
EH HR Payroll Malaysia
Real EPF banding and capped contributions
EPF employer steps 13 percent at or below RM5,000 to 12 percent above, employee 11 percent. SOCSO and EIS are fixed-amount band tables capped at the RM6,000 monthly ceiling, so a high wage pays the top band, not a percentage of the wage.
Bands and brackets are editable data
The SOCSO and EIS Jadual Caruman tables and the LHDN tax brackets are seeded as records you can edit from admin screens. The lookup and tax methods are fixed; the figures are yours to confirm against the current schedules.
Computed on a closed rule sandbox
Every line is produced by the EH salary-rule engine, which exposes only read-only proxies to rules, no raw recordsets. Shipped tests pin the published EPF, SOCSO, EIS and MTD figures so the math stays honest across upgrades.
Day in the life
A monthly RM5,000 run, end to end
Create a payslip on the Malaysia Standard structure and compute it. The engine runs the rules in sequence: BASIC and GROSS, then EPF employee at 11 percent (RM550) and employer at the low band 13 percent (RM650), SOCSO and EIS as the seeded fixed amounts for that wage band, and PCB by the simplified MTD formula. Employee EPF, SOCSO, EIS and PCB reduce net; the employer EPF is a company contribution that does not. Net falls out as gross minus the employee deductions, and each amount traces back to a band row or bracket you can open and inspect.
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 wage over RM6,000 returns the top SOCSO and EIS band's fixed amount, not a percentage of the higher wage. If the wage falls in no band, the lookup falls back to the highest seeded band so a contribution is always returned.
The employer EPF rate steps from 13 percent at or below the RM5,000 threshold to 12 percent above it, so the employer contribution can be lower in absolute terms just above the threshold. Both rates and the threshold are company settings.
A wage of zero or below returns an empty band and a zero contribution, and the MTD formula returns zero rather than erroring, so blank or malformed slips compute cleanly.
When annualised income minus the standard individual relief and the capped EPF relief is at or below zero, PCB is zero. Low earners produce a clean nil deduction instead of a negative tax.
MTD annualises the period wage using the engine's inferred pay periods (12 monthly, 26 fortnightly, 52 weekly) from the period span, then divides the annual tax back down, so a non-monthly period is annualised consistently.
The band and bracket tables are editable by HR admin and officer roles and read-only to employee self-service, so the statutory data can be curated without exposing edit rights to everyone.
What is inside
Built to do the job, end to end.
- Malaysia Standard salary structure. A MY_STANDARD structure with eleven sequenced rules: BASIC, GROSS, EPF employee and employer, SOCSO employee and employer, EIS employee and employer, PCB, and NET. Each rule calls a named helper so the math lives in audited Python, not in formula strings.
- SOCSO and EIS band tables. Sixty-three seeded contribution bands each for SOCSO Category 1 and EIS, generated from the statutory rates and capped at the RM6,000 ceiling, with editable list views and a band lookup that selects the row containing the wage.
- LHDN tax brackets and MTD formula. A ten-row resident progressive bracket schedule and a simplified MTD method that annualises, deducts the RM9,000 individual relief and the EPF relief capped at RM4,000, taxes progressively, and divides by pay periods.
- Company EPF settings. Employee rate, the two employer rates, and the wage threshold are fields on the company, defaulted to the current statutory figures so the wage-banded employer logic is configurable per company.
- Security and admin screens. Access rules for HR admin, officer and employee-self roles across all three tables, plus menu items under the Payroll root for maintaining SOCSO bands, EIS bands and income tax brackets.
- Shipped test suite. Eight tests pin the published EPF banding, the SOCSO and EIS fixed-amount caps above the ceiling, the LHDN progressive figures, and a full structure run where employer EPF is excluded from net.
Honest about the edges
What this does not do, so nothing surprises you.
- The SOCSO and EIS amounts are generated from the statutory rates rounded to the nearest 5 sen and must be verified against the current PERKESO Jadual Caruman before use; the seeded figures are yours to keep current.
- PCB uses the simplified computerised formula with only the standard individual relief and the EPF relief, not the full official MTD schedule. Reliefs for spouse, children, lifestyle and similar are out of scope.
- SOCSO and EIS are modelled for Category 1 (employees below age 60); other categories are not seeded.
- This module computes statutory deductions and net pay. It does not produce statutory e-filing, EA forms, Borang E, or bank contribution file exports.
- It runs on the EH payroll engine, not on Odoo Enterprise hr_payroll, and targets Odoo 16 Community.
- The tax bracket and relief figures should be confirmed against the current LHDN schedule for the assessment year before running live payroll.
Malaysia payroll Odoo 16, EPF KWSP Odoo, SOCSO PERKESO payroll, EIS SIP contribution, PCB MTD Potongan Cukai Bulanan, LHDN income tax Odoo, Jadual Caruman, Malaysia salary structure Odoo, EPF employer rate 13 12 percent, Malaysia statutory deductions, RM6000 SOCSO ceiling, Odoo Community payroll Malaysia
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.
A reusable two way synchronisation engine that keeps Odoo in step with the people and payroll platform, idempoten...
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...
| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Employees (hr)
• Discuss (mail) |
| Community Apps Dependencies | Show |
| Lines of code | 3510 |
| Technical Name |
eh_hr_payroll_my |
| License | LGPL-3 |
| Website | https://www.erpheritage.com.au/ |
Please log in to comment on this module