About this tool
The Overtime Pay Calculator prices the hours a Cambodian employee works beyond the normal schedule, using the multipliers in the Labour Law rather than a figure the employer invents. Enter a base hourly rate, or let the page derive one from a period’s pay, paid days and standard hours per day, then enter hours in each of the three buckets the law distinguishes: ordinary overtime, regular night work and overtime worked at night or during the weekly rest day. The page returns the multiplier, the rate and the subtotal for each bucket, and the total gross pay for those hours. It is built for the people who argue about these numbers every month: a garment worker checking a payslip, a payroll clerk with a mixed shift pattern, an employer costing a peak production week, or a union representative testing whether a settlement matches Articles 139 and 144. It does not compute public-holiday pay, does not decide whether a given hour was overtime or a rest day, does not check hours against the limits in a contract or collective agreement, and does not handle fixed-duration contract termination pay or seniority indemnity. It is not a payroll system and does not issue a payslip — the payslip generator does that. None of it is legal or tax advice.
How it works
The arithmetic lives in `lib/finance/overtime.ts` and runs entirely in the browser. If you type a base hourly rate the page uses it; if you leave it empty it derives one as total pay for the period ÷ (paid days × standard hours per day), so a 1,200,000 KHR month over 26 paid days at 8 hours gives 5,769.23 KHR an hour. Each bucket is then base × multiplier × hours: ordinary overtime at 1.5, regular night work at 1.3, and overtime at night or during weekly rest at 2.0. The subtotal is the full gross pay for those hours, not only the premium — at 8,000 KHR an hour, ten hours of ordinary overtime is 120,000 KHR, of which 40,000 is the premium. Buckets are added only when the hours are greater than zero, so an empty bucket produces no line. Hours are clamped at zero, the derived rate is zero when paid days or hours per day are zero or negative, and no line appears until a usable base rate exists. There is no fetch and therefore no loading, refresh or failure state.
Use cases
- A garment worker in Phnom Penh checking that ten hours of overtime were paid at 150% and not at the plain hourly rate
- A payroll clerk calculating a mixed month of day overtime, night shifts and Sunday overtime for one team
- A factory manager costing a peak production week before approving extra shifts
- A restaurant owner working out what a late-night closing shift really costs per month
- A union representative comparing a member’s payslip with the Article 139 and 144 multipliers
- An employee on a daily wage deriving an hourly rate from monthly pay, paid days and hours per day
- An NGO or hotel HR officer documenting how a night-shift rota translates into pay for a donor audit
Frequently asked questions
What multipliers does Cambodian law set for overtime?
Article 139 of the Labour Law (Royal Kram NS/RKM/0707/020) sets ordinary overtime at an increase of 50%, so 150% of the base hourly rate, and overtime worked at night or during the weekly rest day at an increase of 100%, so 200%. Article 144 defines night work as the period from 22:00 to 05:00 and pays regular night work — night hours that are not overtime — at 130% of the day wage.
Is the total the premium only, or the full pay for those hours?
It is the full gross pay for those hours, not just the extra. At a base rate of 8,000 KHR an hour, ten hours of ordinary overtime shows 120,000 KHR, which is 8,000 × 1.5 × 10. Of that, 80,000 KHR is the pay those hours would have earned anyway and 40,000 KHR is the 50% premium. If you need the premium alone, subtract base × hours from the subtotal.
Why is there no public-holiday calculation?
Article 164 of the Labour Law leaves the public-holiday indemnity to a separate implementing instrument, and this tool does not apply an unverified formula to a day that carries a different rate. Public-holiday work therefore produces no line here. Do not assume a public holiday pays the same as weekly-rest overtime: treat that case separately and check the instrument in force before you pay it.
How is the hourly rate derived from a monthly salary?
Total pay for the period ÷ (paid days × standard hours per day). The page does not assume 26 days or 8 hours — you supply both, so a six-day week or a seven-hour shift is priced correctly. A 1,200,000 KHR month over 26 paid days at 8 hours gives 5,769.23 KHR an hour, and the same salary over 22 days at 8 hours gives 6,818.18 KHR, which is why the divisor matters more than the salary.
Does night overtime get both the night premium and the overtime premium?
No. The page applies one multiplier per bucket. Overtime worked between 22:00 and 05:00 goes in the night-or-weekly-rest overtime bucket at 2.0 and is not also given the 130% regular night rate. That matches the reading that Article 139 sets the rate for overtime at night, while Article 144 sets the rate for night hours that are not overtime. If your payroll system stacks the two, the figures here will be lower.
Does the calculator check that the hours are legal?
No. It prices whatever hours you type and does not compare them with the overtime limits in the Labour Law, an employment contract or a collective agreement, and it does not check rest-day entitlements. It also cannot tell whether a particular hour was ordinary overtime or weekly-rest overtime — you choose the bucket. Those judgements belong to the employer and, where there is a dispute, to the labour inspectorate.
Is this an official figure I can rely on in a dispute?
No. It is an unofficial calculator built from the published articles, and it does not carry the authority of the Ministry of Labour and Vocational Training or the Arbitration Council. It is useful for checking arithmetic and for preparing a question; it is not evidence of entitlement. For a dispute, keep the payslips, the attendance record and the contract, and take advice from the labour inspectorate or a union.
What happens if I leave a field empty?
An empty bucket is skipped and produces no line. If no usable base rate exists — the direct rate is empty and the derived pay, paid days or hours per day are missing or zero — the page shows an empty result rather than dividing by zero. Negative hours are treated as zero, and the calculation never leaves the browser, so nothing is submitted or stored.
Data and accuracy
No external data is fetched. The multipliers and the night-work window are hard-coded in `lib/finance/overtime.ts` (OVERTIME_RATE_SET, last reviewed 2026-08-26) from Article 139 of the Labour Law (Royal Kram NS/RKM/0707/020) for the 50% and 100% overtime increases and from Article 144 for the 22:00–05:00 night window and the 130% regular night rate. Both articles are published in the Ministry of Labour and Vocational Training’s English translation linked below; this page was checked against them on 21 October 2026.
Sources
- Labour Law (Royal Kram NS/RKM/0707/020), Article 139 — overtime multipliers — Ministry of Labour and Vocational Training
- Labour Law (Royal Kram NS/RKM/0707/020), Article 144 — night work definition and rate — Ministry of Labour and Vocational Training
Content last reviewed 21 October 2026