payroll-accounting2026-07-22

Employment Act 1955 Overtime & Public Holiday Pay: Accounting Journal Postings

Calculate Malaysian normal-day, rest-day, and public-holiday pay with 1.5x, 2.0x, and 3.0x rates, then post the payroll journal without overstating expense.

GetPay Accounting Team
Updated: 2026-09-20

TL;DR (Key Takeaways)

  • For a monthly-paid employee, start with ordinary rate of pay = monthly wages ÷ 26, then hourly rate of pay = ordinary rate ÷ normal daily hours.
  • Normal-day overtime is at least 1.5 times the hourly rate; hours beyond normal hours on a rest day are at least 2.0 times; hours beyond normal hours on a paid public holiday are at least 3.0 times.
  • Public-holiday work is not simply every hour multiplied by 3.0: a monthly-paid employee's holiday pay is already in monthly wages, work within normal hours adds two days' wages, and only excess hours use 3.0x.
  • GetPay's current code does not calculate overtime categories. Prepare an approved hours worksheet, enter the resulting total as the employee's gross for that run, and retain the worksheet as payroll evidence.
  • In GetPay's posted-ledger workflow, employee gross is debited to 5100, employer EPF/SOCSO/EIS to 5200, HRDF to 5210, and the balanced total is credited to 2500 before bank settlement.

Start with the employee, day type, and normal hours

The practical calculation is:

Ordinary rate of pay (ORP) = monthly wages ÷ 26
Hourly rate of pay (HRP)   = ORP ÷ normal hours per day

Normal-day overtime        = qualifying hours × HRP × 1.5
Rest-day excess hours      = excess hours × HRP × 2.0
Public-holiday excess      = excess hours × HRP × 3.0

Do not apply those three multipliers to every employee or every hour without first classifying the case. Under JTKSM's published explanation of the amended First Schedule, private-sector employees are covered generally, but an employee earning more than RM4,000 per month is not eligible for statutory overtime, rest-day, or paid-holiday payments unless the employee falls within an applicable category such as manual work. Contractual terms can still provide a better benefit.

The Employment Act 1955 framework discussed here applies to Peninsular Malaysia and the Federal Territory of Labuan. Sabah and Sarawak have their own labour legislation. Confirm the governing law, wage threshold, job category, collective agreement, contract, and any substituted holiday before approving payroll.

This article uses a monthly-paid employee with:

  • monthly wages of RM3,120.00;
  • eight normal working hours per day;
  • three overtime hours after a normal working day;
  • ten hours worked on a designated rest day; and
  • ten hours worked on a paid public holiday.

What records must be frozen before doing the overtime math?

An audit-ready calculation begins with evidence, not a multiplier. Freeze these fields for each line of overtime:

FieldExampleWhy it matters
employee_idInternal employee referencePrevents a payment being assigned to the wrong worker
work_dateActual calendar dateDetermines normal day, rest day, or paid holiday
day_typeNORMAL, REST_DAY, PUBLIC_HOLIDAYSelects the statutory calculation branch
normal_hours8.00Forms the hourly rate and excess-hours boundary
clock_in / clock_outApproved attendance recordSupports hours actually worked
unpaid_break_hoursExcluded from work hoursStops breaks being paid as overtime
approved_hoursHours authorised for payrollCreates a controlled payroll input
monthly_wagesRM3,120.00Forms the ordinary rate for this example
rate_basisEA 1955 / contract if betterExplains why the selected rate applies
approverManager or payroll controllerEstablishes review responsibility

How do you derive the daily and hourly rates?

Section 60I's monthly-paid formula divides the monthly rate by 26. The hourly rate is then the ordinary daily rate divided by normal daily hours.

For RM3,120 per month and eight normal hours:

ORP = RM3,120.00 ÷ 26
    = RM120.00 per day

HRP = RM120.00 ÷ 8 hours
    = RM15.00 per hour

How is normal working-day overtime calculated at 1.5x?

Overtime beyond normal daily hours on a normal working day is paid at not less than 1.5 times the hourly rate.

For three approved overtime hours:

Normal-day OT = 3 hours × RM15.00 × 1.5
              = RM67.50

The RM67.50 is additional gross remuneration. Do not replace the employee's base monthly wages with this number, and do not post it directly as net cash. It must join the month's other gross earnings before employee deductions and employer contributions are finalised.

How does rest-day pay differ from ordinary overtime?

Rest-day work has a tiered rule for a monthly- or weekly-paid employee:

  • work not exceeding half the normal daily hours: half the ordinary daily rate;
  • work exceeding half but not exceeding normal daily hours: one ordinary daily rate; and
  • work beyond normal daily hours: add at least 2.0 times the hourly rate for the excess hours.

With an eight-hour normal day, four hours is the half-day boundary. If the employee works ten hours on the rest day:

Payment for work up to 8 hours = 1 × RM120.00
                               = RM120.00

Excess rest-day hours          = 10 - 8
                               = 2 hours

Excess payment                 = 2 hours × RM15.00 × 2.0
                               = RM60.00

Total additional rest-day pay = RM120.00 + RM60.00
                               = RM180.00

Do not multiply all ten hours by 2.0. That would produce RM300.00 and ignore the statutory daily-rate branch. Conversely, paying only RM60.00 would omit the amount due for work within the normal hours.

How is public-holiday work split between 2.0x and 3.0x?

Public-holiday pay is commonly misdescribed as “triple pay.” The statutory structure is more precise.

A monthly-paid employee who receives the month's wages without abatement is deemed to have received holiday pay. When that employee works on a paid public holiday, the additional payment for work within normal hours is two days' wages at the ordinary rate, regardless of whether the work period is shorter than normal hours. Work beyond normal hours adds at least 3.0 times the hourly rate.

For ten hours worked:

Holiday pay already in monthly wages       = RM120.00
Additional pay for work within normal hours = 2 × RM120.00
                                            = RM240.00

Excess public-holiday hours                 = 10 - 8
                                            = 2 hours

Excess payment                              = 2 × RM15.00 × 3.0
                                            = RM90.00

Additional amount added to payroll          = RM240.00 + RM90.00
                                            = RM330.00

The employee's total economic pay associated with that holiday includes the RM120.00 holiday pay already embedded in monthly wages, but the payroll addition is RM330.00. Adding another RM120.00 as if the monthly salary did not include holiday pay would double-count it.

What does the complete gross-pay worksheet show?

Combining the example's three events:

Earnings componentFormulaAdditional gross (RM)
Normal-day overtime3 × 15 × 1.567.50
Rest-day work120 + (2 × 15 × 2.0)180.00
Paid public-holiday work(2 × 120) + (2 × 15 × 3.0)330.00
Total additional earnings577.50

The month's gross payroll input is:

Base monthly wages          RM3,120.00
Additional approved earnings   577.50
Gross for this payroll run  RM3,697.50

Keep ordinary OT, rest-day pay, and public-holiday pay as separate worksheet columns even if the payslip or GL ultimately aggregates them. The separation proves which rate produced each amount.

How should overtime and holiday pay enter the GL?

Under GetPay's shared GL conventions, approved overtime and holiday pay form part of EMPLOYEE.gross. The payroll run aggregates employee gross into account 5100 rather than creating separate hard-coded OT accounts.

Let:

  • S = employer EPF + employer SOCSO + employer EIS returned for the run; and
  • H = HRDF returned for the run.

The earned payroll journal for this one-employee example is:

GL accountDebit (RM)Credit (RM)
5100 Salary, Allowance & Wage3,697.50
5200 EPF & SocsoS
5210 HRDF LevyH
2500 Accrued Expenses3,697.50 + S + H

Do not invent S or H from the overtime multipliers. They come from the applicable statutory payroll calculation and current employee facts. Employee-side EPF, SOCSO, EIS, and PCB reduce net salary, but they are already inside gross and are not extra expense debits.

If management wants OT reporting by department or type, keep a payroll subledger or approved worksheet keyed to the journal. Creating an unseeded GL code merely for the article would violate the chart of accounts and fragment salary expense.

What does GetPay currently automate?

The current payroll code accepts per-employee overrides containing employee_id, gross, excluded, and skip_statutory. The payroll dialog exposes the amount as “Gross This Run.” It then calculates current statutory fields from the chosen gross and records whether gross differs from the employee's base salary.

There is no verified field for overtime_hours, day_type, a rest-day tier, a holiday multiplier, or a timesheet import in the payroll calculator. Therefore the defensible workflow is:

  1. calculate and approve OT outside GetPay using the hours worksheet;
  2. add base wages and approved additional earnings;
  3. enter RM3,697.50 as “Gross This Run” for this example;
  4. review the recalculated deductions, net pay, employer cost, and payslip preview;
  5. run payroll only after the gross input ties to the worksheet; and
  6. retain the worksheet with the run's supporting documents.

In posted-ledger mode, the route creates one aggregated payroll journal, debiting 5100 for employee gross, 5200 for employer EPF/SOCSO/EIS, 5210 for HRDF, and crediting 2500 for the total. The code treats journal creation as a downstream, fail-soft step: if auto-posting fails, the payroll run can still exist and the journal gap must be investigated or posted manually. Do not interpret a completed payslip as proof that the GL journal succeeded.

How is the accrued payroll cleared against the bank?

The earned entry credits 2500. Cash settlement later debits 2500 and credits the mapped bank account:

Dr 2500 Accrued Expenses
    Cr mapped bank account

The debit to 2500 may be split across net salary, EPF, SOCSO/EIS, PCB, and HRDF payments. The total of all settlement debits must eventually equal the original payroll credit for the run.

GetPay's bank-import settlement code requires both a salary-related category and a payroll-related description keyword before automatically clearing the accrual. It also refuses to guess an unknown bank mapping. Those controls matter because an apparently plausible bank debit is not sufficient evidence that a specific payroll liability was settled.

Month-end overtime and public-holiday checklist

  • Confirm the employee's statutory eligibility and governing location.
  • Freeze the rest-day roster and paid-holiday calendar before classifying time.
  • Reconcile clocked hours, unpaid breaks, approved hours, and approver.
  • Derive ORP from monthly wages divided by 26 and HRP from normal daily hours.
  • Apply 1.5x only to qualifying normal-day overtime hours.
  • Apply the rest-day daily-rate tier before applying 2.0x to excess hours.
  • For a paid public holiday, separate holiday pay already in monthly wages, the two-day additional payment, and 3.0x excess hours.
  • Tie all event lines to additional earnings and then to “Gross This Run.”
  • Debit total employee gross to 5100; do not post net pay as salary expense.
  • Use actual employer statutory and HRDF amounts for 5200 and 5210.
  • Confirm the payroll journal is posted and balanced against credit 2500.
  • Match every debit clearing 2500 to real employee or agency bank evidence.
  • Preserve the worksheet, attendance, approval, payslip, journal ID, and settlement evidence as one audit trail.

Frequently Asked Questions

What is the Employment Act 1955 overtime calculation for a monthly-paid employee?

Divide monthly wages by 26 to obtain the ordinary daily rate, then divide that rate by the employee's normal daily hours. Multiply qualifying normal-day overtime hours by at least 1.5 times that hourly rate. Confirm that the employee and employment location fall within the applicable statutory rules before using the result.

Is all work on a rest day paid at two times the hourly rate?

No. For a monthly- or weekly-paid employee, work up to half the normal daily hours attracts half the ordinary daily rate, while work above half but not beyond normal hours attracts one ordinary daily rate. Only hours beyond the normal daily hours are paid at not less than two times the hourly rate.

Is public-holiday work always calculated as three times every hour worked?

No. A monthly-paid employee who receives the month's wages is deemed to have received holiday pay. Work on the paid holiday adds two days' wages at the ordinary rate even if the work is shorter than normal hours. Only work beyond the normal hours on that holiday is paid at not less than three times the hourly rate.

Which account should overtime and public-holiday pay be posted to?

Under GetPay's shared chart-of-accounts convention, the employee's total gross remuneration, including approved overtime and public-holiday pay, is debited to 5100 Salary, Allowance & Wage. Employer EPF/SOCSO/EIS is separately debited to 5200, HRDF to 5210, and the balanced payroll obligation is credited to 2500 Accrued Expenses.

Does GetPay automatically calculate overtime from timesheets?

Not in the current code. GetPay accepts an editable gross amount for each employee in a payroll run and calculates its current statutory fields from that gross, but it has no verified overtime, rest-day, public-holiday, or timesheet calculation engine. Keep the approved hours calculation outside the system and enter only its reconciled gross result.

Sources & Ground Truth

Direct LHDN MyInvois Submission Engine

Ready to automate your Malaysian e-invoicing & bookkeeping?

GetPay handles 100% compliant e-invoices, multi-bank reconciliation, and statutory payroll out of the box.

Get Started Free

Related Articles