PCB / MTD Income Tax — Detailed Requirements
The deep specification for Potongan Cukai Bulanan (Monthly Tax Deduction) — the LHDN-prescribed income tax withheld from each pay run. Residents are taxed by the official MTD Computerised Calculation with a year-to-date true-up so the running withholding converges on the correct annual liability; non-residents pay a flat rate. Bonuses use the LHDN differential method, and zakat offsets the tax ringgit-for-ringgit.
Monthly MTD
Annualised chargeable income with reliefs, band lookup, rebate, YTD true-up, ÷ months remaining.
Reliefs
EPF (capped), SOCSO+EIS (capped), personal / spouse / child, plus configurable item reliefs.
Bonus taxation
Additional remuneration taxed by the LHDN differential method — never smoothed or prorated.
Zakat
A salary-deducted zakat item reduces PCB ringgit-for-ringgit, not just net pay.
PCB / MTD · Detailed
Method selection TAX-D
Three computation paths, selected by residency and calculation context.
tax = round((gross + additionalGross) × 30%).- Residency comes from the employee's tax profile.
- Every calculate pass supplies the pay month, so posted runs always use the MTD method.
- Uncalculated (DRAFT) run lines display live estimated figures from this path.
- Estimates may differ from the final MTD figures — they carry no YTD true-up.
PCB / MTD · Detailed
Monthly MTD formula TAX-M
The normal-remuneration computation. With n+1 = 13 − payMonth (months remaining in the year including the current one):
| Step | Computation |
|---|---|
Annual chargeable income P | ytdGross + currentGross × (n+1) − EPF relief min(ytdEpf + currentEpf × (n+1), cap RM4,000) − annual personal relief − non-EPF statutory relief (SOCSO+EIS, cap RM350) − item reliefs ×12; floored at 0. |
| Annual tax | Band lookup on P (see TAX-B), then the s.6A rebate, floored at 0. |
| Gross MTD | (annualTax − accumulated zakat − ytdMtdPaid) / (n+1), floored at 0, rounded up to the next 5 sen. |
| Net MTD | If gross MTD < RM10 → RM0; else max(0, grossMTD − currentMonthZakat). |
- YTD figures (gross, employee EPF, tax deducted) accumulate only from this year's prior finalised runs (approved or paid) with an earlier pay date.
- The EPF relief inside
Pis derived from the unprorated full-month EPF amount ×12, capped at the configured (default RM4,000) annual limit. - A monthly MTD below RM10 before the current-month zakat offset is not remitted (RM0).
- LHDN rounding applies: truncate beyond two decimals, then round up to the next 5 sen.
- A December run divides the outstanding annual tax by 1 — absorbing all remaining liability.
- Runs approved out of chronological order distort the true-up (see Known gaps).
PCB / MTD · Detailed
Reliefs TAX-R
Reliefs reduce annual chargeable income before the band lookup. They come from four places: statutory contributions, the year's configured personal reliefs, the employee's family profile, and tax-relief payroll items.
individualRelief + spouseRelief (only when the tax category is married-spouse-not-working) + numberOfChildren × perChildRelief + the employee's ad-hoc annual relief top-up.- Relief figures come from the tax bracket configured for the pay year; family data (category, children) from the employee record.
- Tax categories:
SINGLE/MARRIED_SPOUSE_WORKING/MARRIED_SPOUSE_NOT_WORKING— only the last earns spouse relief.
- The caps are configurable on the year's tax bracket (per statutory type annual limits).
- EPF relief is applied inside the MTD formula itself; SOCSO/EIS and other statutory reliefs enter as the non-EPF statutory relief term.
- Relief type
AMOUNTuses the item value;PERCENTAGEapplies against the base with a maximum cap. - This models TP1-style approved deductions granted through payroll.
PCB / MTD · Detailed
Tax bands & rebate TAX-B
Annual tax is a progressive band walk: tax = baseTax + (P − bandMin) × rate% in the band containing P. Bands and relief values are configurable per tax year; the system auto-seeds a bracket for the current and next year from the built-in LHDN defaults at boot.
Default resident bands
| Annual chargeable income (RM) | Rate | Base tax at lower bound (RM) |
|---|---|---|
| 0 – 5,000 | 0% | 0 |
| 5,000 – 20,000 | 1% | 0 |
| 20,000 – 35,000 | 3% | 150 |
| 35,000 – 50,000 | 6% | 600 |
| 50,000 – 70,000 | 11% | 1,500 |
| 70,000 – 100,000 | 19% | 3,700 |
| 100,000 – 400,000 | 25% | 9,400 |
| 400,000 – 600,000 | 26% | 84,400 |
| 600,000 – 2,000,000 | 28% | 136,400 |
| 2,000,000 + | 30% | 528,400 |
- Administrators can configure per-year bands (min, max, base tax, rate) and relief values; the year is matched on the run's pay date.
P= RM34,000 → rebate applies; RM35,001 → no rebate.
Malaysia PCB {year} for the current and next year when none exists — carrying the default band scale and the default personal reliefs (individual RM9,000, spouse RM4,000, per child RM2,000).- Seeding is idempotent — existing brackets are never overwritten.
- Reliefs must be seeded alongside bands: the run reads reliefs from the bracket only, so a bracket left at 0 over-deducts PCB.
PCB / MTD · Detailed
Bonus / additional remuneration TAX-A
Items flagged as additional remuneration (bonus, commission, arrears) are taxed by the LHDN differential method: the tax on the bonus is the difference between the full-year tax with the bonus and the projected full-year normal MTD without it.
mtdOnAdditional = max(0, annualTaxWithBonus − (ytdMtdPaid + grossNormalMtd × (n+1))).- The month's tax deduction = normal MTD + bonus MTD − current-month zakat, floored at 0.
- The bonus and its EPF are added to the annual totals once — never projected over remaining months.
- An annual-frequency bonus item flagged additional-remuneration pays the full lump sum in the run where it is active.
- A mid-month joiner's bonus is not reduced by the proration factor.
PCB / MTD · Detailed
Zakat offset TAX-Z
Zakat paid through salary deduction plays a double role: a normal payslip deduction and a ringgit-for-ringgit offset against PCB.
- Current-month zakat is subtracted once from the rounded gross MTD (floored at 0).
- Accumulated zakat from earlier finalised runs reduces the outstanding annual tax before the ÷(n+1) division.
- The zakat amount itself still appears as a payslip deduction (it reduces both tax and net pay accordingly).
PCB / MTD · Detailed
Business rules
- Rounding is LHDN-prescribed: truncate beyond 2 decimal places, then round up to the next 5 sen. Applied to the gross MTD and the bonus MTD.
- The RM10 floor zeroes small withholdings before the zakat offset is applied.
- True-up depends on run finality. Only approved/paid earlier runs count toward YTD gross, EPF, and tax paid.
- Estimates ≠ final MTD. Draft-screen figures use the annualised shortcut; the calculate step is authoritative.
- Tax year = pay date's calendar year; each run line records the tax year it was computed under.
PCB / MTD · Detailed