Frequently asked questions
The questions Malaysian employers actually ask us.
Every answer below comes from a real conversation with a buyer or a customer — 143 of them, grouped by topic. If yours is not here, ask us directly.
Jump to
Pricing and plansClocking in and attendanceOvertimeShifts and schedulesAllowances and deductionsRunning payrollEPF, SOCSO, EIS, PCB and HRDFYear-end and tax formsLeave, claims and benefitsGetting started and migrationGroup companies, foreign workers and accessThe product, support and the company
Pricing and plans
How much does Pandahrms cost, and how is the price calculated?
It is per employee, per month.
The price is based on the headcount you subscribe for and the modules you switch on.
The Essentials bundle — Time & Attendance, Payroll and Leave together — is priced by headcount band:
- RM9 per employee per month for 10 to 100 staff
- RM8 for 101 to 200
- RM7 for 201 to 500
- RM6 for 501 and above
Any single module on its own is RM5 per employee per month, except Performance at RM8. If you are on Essentials, the add-on modules are cheaper:
- Claim RM3 per employee per month
- Training RM3 per employee per month
- Performance RM5 per employee per month
Rates are before 8% SST, and there is a one-time setup fee in your first year.
Can I buy just one module? I only need attendance and payroll, not the whole thing.
Yes, modules are sold a-la-carte.
Each module is RM5 per employee per month (Performance is RM8), so you can take Time & Attendance only, or Payroll only, and add the rest later.
Once you want two or more, the Essentials bundle is usually the cheaper route — Time & Attendance + Payroll + Leave together is RM9 per employee per month, against RM10 for any two single modules.
Tell our team which modules you actually need and the quotation is built around that.
Min kena 10 employees ke? My company only has 7 staff.
The minimum billing is 10 headcounts.
If you have 7 staff you can still subscribe, but the invoice is calculated on 10.
There is no maximum and no cut-off at 100 staff — the rate simply moves down the ladder as your headcount grows.
Is SST charged on top? Any other hidden charges I should know about?
Yes, 8% SST is added on top.
8% SST is added on top of both the subscription and the setup fee, so the per-employee rates quoted above are before tax. On a standard subscription the only other cost is the one-time setup fee in year one.
Three things sit outside standard scope and are quoted separately:
- Customisation or non-standard report formats
- Biometric hardware
- A one-off integration setup fee if you connect a biometric device that was not bought from us
Ask for the line-by-line breakdown before you sign.
Can I pay monthly, or must it be a full year upfront?
It must be a full year upfront.
We do not offer monthly billing. The per-employee rate is quoted monthly for easy comparison, but the invoice is that rate multiplied by your headcount and by 12 months, paid one year in advance.
The setup fee is invoiced with it and settled before onboarding work starts.
What is the setup fee for, and do I pay it again every year?
It is a one-time charge in your first year, not yearly.
The setup fee covers:
- Account and domain setup
- Configuration to your company’s rules
- Migration of your existing employee and payroll data
- Training for your team
It is settled before onboarding work begins and it is not charged again at renewal.
We do not publish it as a fixed figure because it depends on your headcount and how much data has to be migrated — it is quoted together with your plan.
What happens at renewal, and what if my headcount goes up or down during the year?
You pay the subscription only, on the same rate card.
At renewal you pay the subscription for the coming year only — the rate card does not change and there is no second setup fee. Your per-employee rate follows your headcount band at renewal, so a team that has grown past a band boundary renews at that band’s rate.
If you hire during the year, additional headcount is bought in blocks of 5 minimum and quoted by our team at the same rate card, so it is a short request, not something you self-serve in the system.
When someone leaves, run the Cessation process: once their final payroll cycle is closed the system marks them Resigned and that headcount is released for a new joiner.
The system warns you when you reach your licensed headcount, and the first thing to check then is whether any cessations are still pending.
Can I try it before I pay?
No — there is no free trial; we demo it live instead.
We do not hand out trial logins. Pandahrms is subscribed a year at a time, and an HR system nobody has been shown looks broken even when it is working — so what you get before you commit is a live online demo built around your own situation: your shift patterns, your allowances, how your payroll runs today. If your management needs to see it before deciding, we are happy to run a second demo for them.
Some companies reduce the risk by starting smaller instead — a first batch of staff or one outlet first, with the rest added later. That is a normal paid subscription quoted for that headcount, not a free trial, and the minimum is 10 staff.
Once you do subscribe, you are not left to sink or swim. Training is live and guided, our team runs the first payroll together with you, and you can process a month in parallel with your current system before switching off the old one.
Can I use my HRD Corp levy to pay for Pandahrms?
Not for the software itself — only the training part of onboarding.
The HRD Corp levy funds training, so it cannot pay for the software. The subscription and the setup fee are always invoiced to you directly, and that part of the quotation never goes through HRDF.
The training part of onboarding is different. Pandaworks is an HRD Corp Registered Training Provider, so the guided training you receive during onboarding can be quoted as a training programme and submitted as an HRDF levy claim under SBL-Khas.
Two things to know before you count on it. Tell us up front that you intend to claim, because a quotation meant for an HRDF claim is prepared separately from a standard invoice. And the approval decision always rests with HRD Corp, not with us — we prepare the training quotation and walk you through the claim process, but we never promise a claim will be approved.
If we claim it through our HRD Corp levy, is the price the same?
No — an HRDF quotation is priced higher than the standard one.
First, what the levy can actually cover: the training portion of your onboarding, claimed under HRD Corp’s SBL-Khas scheme — Pandaworks is an HRD Corp Registered Training Provider. The monthly subscription and the setup fee are not claimable, so those are invoiced and paid the normal way whichever route you take.
For the training itself we issue a separate HRDF quotation, and it carries a markup over the standard figure. The reason is plain arithmetic: HRD Corp deducts a service charge from what it disburses, so what leaves your levy and what reaches us are not the same amount, and the markup covers that gap. The exact figure is stated on your quotation before you commit. If your levy balance is lower than the approved cost, you pay the difference yourself.
We prepare the quotation and the supporting documents for the e-TRiS application, but the approval decision always rests with HRD Corp — we will never promise it in advance. If you would rather skip the paperwork, paying directly on the standard quotation is the lower headline figure.
Clocking in and attendance
Do we have to buy a punch card machine, or can staff just clock in with their phones?
No, you do not need to buy a machine.
Staff clock in and out from the Pandahrms mobile app. The app only accepts a clocking inside the GPS boundary set for their workplace under Setting > Attendance > Geo Fencing.
A biometric terminal is optional. We supply ZKTeco fingerprint and face terminals for sites where phones are not practical, and both methods feed the same timesheet.
What is not supported is running your own iPad or tablet as a shared kiosk for everyone to tap on. For a shared clocking point it has to be a terminal.
We have a few outlets. Can we set GPS clock-in so staff can only punch inside their own outlet?
Yes.
Each site is set up as a geofence under Setting > Attendance > Geo Fencing with its address or GPS coordinates and a radius you choose. Real customer setups run from about 100 m to 500 m.
There is no limit on how many locations, and each employee is assigned the geofence they are meant to clock at, so a KL outlet’s staff cannot clock at the Johor outlet.
When you open a new outlet, send us the address or a Google Maps pin and we will add the geofence for you. Your admin can also create it in Settings, and we have a short video guide for that.
My salesmen and site staff are never at the office. How do they clock in if they are outside the boundary?
There are three ways, depending on how often it happens.
For the occasional trip, the employee ticks “Weak GPS signal or out of fence” in the app, picks the location they are supposed to be clocking at, and submits in real time. The record sits pending until an admin approves it, and the app still records the actual address it captured.
For staff who are always on the road, we can instead set them a deliberately wide boundary, up to the whole of Malaysia, so they clock normally without triggering approvals.
For a planned trip there is also an Outstation Application under Attendance Menu, so the day shows as Outstation in the timesheet rather than Absent. That one is submitted and approved on the web, not in the app.
Some of my workers don’t have a smartphone. How do they punch?
They use a biometric terminal at the door instead.
For those staff you use a fingerprint or face terminal, and you can mix both methods in one company: we run companies where a couple of staff still clock on the app while everyone else is restricted to the fingerprint machine, all feeding one timesheet.
We supply ZKTeco terminals — the SenseFace and MB series are the ones our customers run — and quote them with your plan.
What we cannot offer is a shared phone or tablet running the Pandahrms app as a common clocking point. That is not supported, so a shared clocking point has to be a terminal.
We already have FingerTec / ZKTeco machines. Can we keep using them instead of buying new ones?
Send us the brand and model first.
We check every device before committing, and we have had to tell a customer their machine simply cannot be integrated.
Where it works, FingerTec comes in through our Ingress Downloader reading the file Ingress exports, and ZKTeco through our TA Downloader or ZK.Biotime. Either way a small downloader is installed on the PC connected to your terminal over a remote session, so keep an AnyDesk ID handy.
Newer ZKTeco units need a ZK.Biotime licence of their own, and a one-off integration setup fee normally applies — it is quoted with your plan.
Our team is more experienced with ZKTeco than with FingerTec, so for FingerTec sites expect us to confirm the model before we commit.
One of my staff forgot to clock out. What happens, and how do we fix it before payroll?
That day is flagged as Odd Clocking.
The system reads time logs in pairs (1st = in, 2nd = out), so from an unpaired record it cannot calculate work hours, overtime or attendance allowances.
There are two ways to clear it. The employee submits a Backdated Clock Time Application in the mobile app and an admin approves it, or the admin edits the log directly under Attendance Menu > Process > Timesheet Adjustment or in the Timesheet report.
If the clocking came from a biometric terminal, tick “Manual Edited” when you save, otherwise the next raw-data sync restores the original timing.
Clear all Odd Clocking before you run the payroll import, because a day left in that state carries no hours or overtime into payroll.
Must staff take a selfie every time they clock in? Does the app recognise their face?
No, the selfie is a setting, not a requirement.
“Must submit selfie when clock in/out in mobile app” is a company-level system parameter, and you ask us to switch it on or off. When it is on, the app takes two photos, one selfie and one of where the employee is standing; when it is off, the photo disappears for everyone, including out-of-fence clockings, as it cannot be set per employee.
The app does not do face recognition or face matching. The photos are simply there for you to review alongside the address the app captured.
Under Attendance Menu > Report > Timelog Transaction you can see which records came in with a remark such as “Out of fence” or “Camera broken”, or with no photo at all, which is how HR spots staff who are routinely bypassing normal clocking.
I corrected the attendance but the payroll figures did not change. What did I miss?
Press Refresh Attendance — an edit does not recalculate on its own.
Editing a clock time only changes the record. Click the day on the timesheet, make the correction, then press Refresh Attendance so the system reworks the working hours, the lateness and the overtime for that day. Reload the report and the corrected figures appear.
Refresh Attendance works on one employee and one day at a time. If many people or dates changed — after fixing a schedule or adding a missed holiday, say — run Attendance > Process > Timesheet Calculation for the date range instead, which refreshes everyone at once.
If the payroll cycle was already calculated, refreshing the timesheet alone will not change it. Attendance reaches payroll through Import From Module, and that import locks the timesheet data as at the moment it ran. Run Reverse Transfer for the affected employee, correct and refresh the attendance, then run Import From Module again and click Calculate.
Bear in mind that Reverse Transfer reverses every module transferred for that employee, not just attendance, so keep it to the people affected. And once the payroll cycle has been Closed, those days are locked and cannot be adjusted afterwards — make attendance corrections while the month is still open.
If HR edits someone’s clock time, is there a record — or can attendance be quietly changed?
Yes. Edits are recorded, and an edited day is marked as manual.
When an admin edits or adds a clock time, that day is flagged as a manual time log in the attendance reports, so it stands out from a normal clocking. Behind the reports, Pandahrms keeps an audit trail of who signed in, what they changed and at what time, which is how a disputed record gets traced back to the account that made the change.
The two routes leave different trails. A Backdated Clock Time Application submitted by the employee carries the reason they gave and shows who approved it. A time keyed in directly by an admin is logged in the audit trail against that admin’s account.
This is worth setting up properly at the start. Give each admin their own login rather than sharing one, so the trail shows which person made each change.
My managers and chefs do not punch at all. Can I exempt them but still pay them normally?
Yes — set their schedule to Ignore Absenteeism.
Pandahrms has a schedule setting called Ignore Absenteeism, built for exactly this. Staff on such a schedule are not expected to clock: days with no punches are never flagged as absent, and because there is no clock-in there is no lateness to measure either. A common setup runs office and management this way while floor staff on the same payroll clock in as normal.
Pay is not affected. Payroll runs on basic salary and fixed allowances as usual, and nothing is deducted for the missing punches. The one thing that cannot follow is a conditional attendance allowance, since that is earned from clocking data.
Leave still works normally, which is usually the real requirement: you keep tracking annual leave and MC for management without asking a chef to clock in and out of a kitchen.
Can my salesman record which customer or site he was at when he clocked in?
No — the clocking captures the GPS address, not a site name.
Attendance records the GPS coordinates and the street address of each mobile clocking. There is no field for the employee to type in a customer, project or site name against a clock in.
What you can do is see where each person went across the day. Your admin can open Attendance Menu > Report > Timelog Transaction on the web, filter one employee and a date range, and read the captured addresses in order — that answers where did he actually go, even though it does not label the stops.
If selfie capture is switched on for your company, each clocking also takes two photos, one of the employee and one of where he is standing, and you can review them alongside the address. Address and photos together are usually enough to tell which customer or site a stop was.
How do I know staff aren’t faking their clock-ins with an old photo or a fake location?
The selfie must be taken live, and every punch records GPS.
With selfie capture switched on — a company-level setting you ask us to enable — the photos must be snapped on the spot, inside the app. There is no option to upload a picture from the gallery, so an old photo cannot be reused; the app in fact takes two photos, one selfie and one of where the employee is standing. It does not recognise faces, though: a person reviews the photos, not an algorithm.
Location is handled by geofencing. You define each clock-in location with its own radius and choose which group of staff it applies to, so every employee is tied to the areas you have approved. Clocking outside the fence is not silent: the employee has to tick “Weak GPS signal or out of fence”, the record sits pending until an admin approves it, and the app still captures the actual GPS address they were at.
Everything lands in the Timelog Transaction report under Attendance Menu > Report, where HR sees each punch with its time, address, photos and any remark such as “Out of fence”. A punch that looks wrong can be deleted before it flows into overtime or payroll, and any manual change to a clock time is flagged and kept in the audit trail — so quiet fiddling shows up either way.
Our outlet is inside a mall and the GPS signal is weak. How do staff clock in?
Widen the geofence, and use the weak-signal option when it fails.
Each location’s geofence radius is adjustable, and for an indoor outlet the usual fix is simply a bigger circle. We advise against a tight one: every phone captures GPS a little differently, and readings right at the edge of the boundary turn inaccurate. Customers typically set anywhere from roughly 100 m up to 500 m, so a mall outlet deserves a generous circle rather than a precise one.
On a day the signal still refuses to lock, the app has a built-in fallback. The employee selects Weak GPS signal or out of fence when clocking, chooses the outlet they should be at, and the punch goes through in real time — nothing is lost. It lands as a pending request for an admin to approve, and whatever location the phone did manage to read stays on the record for review.
If an outlet is a permanent GPS dead zone, a biometric terminal at the door takes GPS out of the picture entirely. Staff scan a fingerprint at the terminal — ZKTeco hardware we supply — instead of using the phone, and as long as it is powered on and connected to Wi-Fi it syncs attendance to the system automatically.
Can we put one shared tablet or phone at the door for everyone to clock in?
No — there is no kiosk mode; each app login is personal.
No. The Pandahrms mobile app has no kiosk mode, and a shared phone or tablet as a common clocking point is not supported. Every clocking is tied to the employee’s own login, so passing one device around would mean each worker signing in with their own username and password and signing out for the next person — far too slow for a queue at the door.
For a fixed clock-in point the answer is a biometric terminal, such as the ZKTeco fingerprint and face terminals we supply. Terminal punches feed the same timesheet as app clockings, and a terminal also covers workers who do not carry a smartphone at all. One thing to know: terminal punches sync into the system at intervals, so they appear a little later than app clock-ins, which show up in real time.
Where staff do have their own phones, the app stays the simpler route, with nothing to buy or mount at the door. The GPS boundary controls where the punch can happen, the personal login ties it to the person who made it, and if selfie capture is switched on for your company you also get a photo to review.
Overtime
Does the system calculate OT automatically from the clock-in and clock-out, or must staff apply for it?
Either — it is a setting on each work schedule.
The setting is called Require OT Application. With it off, overtime appears in the timesheet on its own as long as that day has a complete pair of clockings.
With it on, the employee submits an Overtime Application on the web or the Pandahrms mobile app, and the hours only count once the approver on your Approval Route approves — backdated applications included.
Applied hours are still trimmed to the real time logs. Apply for 8:00–10:00am but clock in at 9:43am and only 17 minutes is counted.
You can see who applied and who approved under Attendance Menu > Report > Overtime Application Listing. Approved OT flows into payroll through Import From Module — get it approved before that import runs, because the import locks the timesheet for that period.
We only pay OT if staff work at least 30 minutes past knock-off. Can the system follow that, and how does it round the hours?
Yes.
Each schedule carries a minimum time required before OT starts counting, and anything shorter is simply not counted. 30 minutes, 1 hour, 1 hour 45 minutes and 2 hours are all in live use.
Rounding is a separate rule on the same schedule, with these options:
- Exact minutes
- Round down to 30 minutes (3 hours 40 becomes 3 hours 30)
- Round to the nearest 30 minutes
- Round down to the hour
- A banded table such as 0–29 min to 0, 30–54 min to 30, 55–59 min to a full hour
Both the minimum and the rounding rule are set per schedule code by our support team during setup or on request, not by you in the UI, so they match your existing OT policy.
Can we cap OT so nobody claims more than a set number of hours in a month?
Yes — a Max Overtime Hour Setting caps it.
The Max Overtime Hour Setting caps the overtime the timesheet generates. One customer runs a 26-hour monthly ceiling, with anything beyond that needing a separate OT application.
By default that cap also counts overtime submitted through the Overtime Application. If you want applied OT to sit outside the ceiling, our team creates a second OT transaction code for it so the two are tracked apart — that two-code split is set up by Pandahrms support, not a switch you flip.
One honest limitation: it does not on its own stop normal OT and applied OT both landing on the same day — that the two are separated during setup, so tell us your OT policy up front and we configure it with you.
Can we set different OT rates for a normal day, off day, rest day and public holiday?
Yes.
The OT multiplier is set per schedule code and per day type. A typical Malaysian setup is:
- 1.5 on a normal working day
- 1.5 for Saturday as an off day
- 2.0 for Sunday as a rest day
- 3.0 on a public holiday
Rest day and public holiday overtime can also be set to require an approved OT application before it shows in the timesheet, if you do not want it counted automatically.
The rates are yours to decide and our team configures them per schedule — confirm them against the Employment Act 1955 for your own staff.
What formula does the system use for the OT hourly rate?
Basic salary ÷ 26 ÷ daily hours, times the OT rate.
Ordinary rate of pay is monthly basic salary divided by 26, divided by the daily working hours, then multiplied by the OT rate and the OT hours. On RM1,700 with an 8-hour day that is 1,700 ÷ 26 ÷ 8 = RM8.17 an hour, and RM12.26 an hour at 1.5.
The divisor 26 follows section 60I of the Employment Act 1955, and support will not change it to your own number of working days.
The daily-hours divisor lives in the OT transaction code, which our team sets to match your schedule — 7.5, 8, 8.5, 9 and 10-hour days are all in live use. One legal check: for staff the Employment Act overtime provisions cover (those earning up to RM4,000 a month, and manual workers at any wage), the Act caps normal hours at eight for this formula, so a divisor above eight would understate their OT rate — keep those staff at eight or less. Any change beyond that formula is an emailed customisation request, not a setting.
Our factory runs a night shift that finishes the next morning. Will the OT still be captured?
Yes, with setup.
Schedule codes can be built to cross midnight with the OT band defined across the day boundary — for example work ending 8:00pm and OT running 8:00pm to 2:00am.
The setting that decides whether the next-morning clock-out lands on the right day is the Time Log Capture Range on that schedule. It defaults to roughly four hours either side of the shift and has to be widened for you — for instance 04:00 to 01:30 to catch a clock-out at midnight or 1:00am. The capture range does not support a full 24-hour window.
Overnight shifts are configured by our team and then checked against a real week of your clockings before you rely on them.
Only some of my staff should get OT. Can I switch it off for sales but keep it for the workshop?
Yes — overtime is set per schedule, not company-wide.
Each schedule carries its own overtime configuration, and employees are assigned to schedules. Your workshop schedule can calculate overtime automatically while the sales schedule does not calculate it at all.
You can also require an approved application before overtime is paid on one schedule and let it calculate straight from the clockings on another. If only a few people within one schedule should be excluded, an Entitled for OT flag on each employee’s profile overrides the schedule.
One check before you switch a group off. The Employment Act 1955 still entitles employees earning up to RM4,000 a month — and manual workers at any wage — to overtime pay, so make sure the staff you exclude fall outside those groups.
Shifts and schedules
We run 24 hours. Can the system handle a night shift that crosses midnight, like 11pm to 7am?
Yes, using a schedule code that crosses midnight.
You use a schedule code whose working time crosses midnight, and the clock-out the following morning is matched back to the correct working day. Late-in, early-out, break and OT are judged against that shift rather than the calendar day.
Schedule codes already in live customer use include:
- 11pm-7am
- 6pm-2am
- 5pm-1am
- 3pm-11pm
- 1pm-12am
There are two real limits. A single schedule cannot run longer than 24 hours, and the time log capture range cannot cover a full 24 hours – so a normal day shift cannot also be stretched to catch OT running right through to the next morning.
If your staff genuinely work through the night, tell us and we set it up as an overnight schedule code rather than as an extended day shift.
Our staff rotate shifts every week. Do I have to key in the roster for each person one by one?
Only for the people who actually rotate.
Staff on a fixed pattern go into a Group Duty Roster under Attendance Menu > Group Duty Roster, where one roster covers the whole group and can be plotted over a long date range – one customer has theirs set 01/01/2026 to 31/12/2027.
Staff whose shift changes week to week go into an Individual Duty Roster instead, where you plot each week according to their rotation.
If a day has no roster at all, the timesheet shows status U, Undefined Schedule, and the system cannot calculate working hours or leave hours for that day until a schedule is plotted.
Our JB branch knocks off at 6pm but KL and Penang finish at 5.30pm. Can the system follow each branch?
Yes, through a separate schedule code per branch.
There is no branch-hours screen as such. You create a separate schedule code for each set of working hours and assign each outlet’s staff to their own code, usually through one Group Duty Roster per outlet.
From then on the system compares every employee’s clock-in and clock-out against their own scheduled shift, so late-in, early-out, over-break and OT are judged by the right hours at each location.
If a code was assigned wrongly, correct it and re-run Timesheet Calculation for those dates and the statuses are re-evaluated. The one exception: if that payroll period has already been closed and imported to payroll, those days are locked and cannot be adjusted afterwards.
How do I create a new schedule code? We keep needing new ones, like 10am to 6.30pm or a part-timer 10am to 3pm.
Schedule codes live under Setting Menu > Attendance > Schedule.
Schedule codes live under Setting Menu > Attendance > Schedule, and we have step-by-step guides for setting up a new schedule and for editing an existing one, so your HR admin can do it themselves.
In practice most customers just WhatsApp us the hours, break and OT rule and our support team sets the code up for them – that is how the majority of new codes get created.
If someone has no fixed start and end time and only needs to complete a set number of hours a day, a Flexi Schedule is used instead, where you set the required daily working hours rather than fixed in and out times.
How is break time set up? Some of our shifts have a fixed lunch, some let staff take one hour whenever they like.
Break is its own code attached to the schedule code.
A break code is created under Setting Menu > Attendance > Break and then attached to the schedule code, so two shifts with the same hours but different breaks are simply two codes.
A break can be fixed to a window or set as a flexible one hour taken any time within the shift, and you choose whether the break hour is included in or excluded from working hours.
Each break code has its own capture window, which must sit inside the schedule’s time log capture range, and staff back later than the allowed break show as Over Break in the timesheet.
One condition worth knowing: Over Break only works if staff actually clock out and in for their break and the Time Log First In Last Out setting is switched off. With that setting on, the system keeps only the first and last clocking of the day and the Over Break column stays empty.
My staff clocked out at 1am but the timesheet shows nothing. Why is the clocking missing?
Almost always the Time Log Capture Range on the schedule code.
The Time Log Capture Range decides which clockings get pulled into that day’s timesheet. It is generated automatically from the in and out times you key in, normally about four hours before and four hours after the shift, so a clocking outside that window simply is not picked up.
For an 8am-4pm shift where people sometimes finish at midnight, the range can be widened to 4:00-1:30 and the late clock-out is then captured against the correct day.
The range can be extended but not to a full 24 hours, and the Rest Day and Public Holiday versions of the schedule need the same treatment or their ranges overlap and pull clockings onto the wrong date.
So tell us your earliest clock-in and latest clock-out and we will set it.
My staff only took 20 minutes of the one-hour lunch break. Is the full hour still deducted?
Yes — a short break is not refunded.
Where the break is set to deduct automatically, the full hour comes off whether the person took twenty minutes or sixty. The system is not watching the break — it is applying the schedule.
If you want the actual break measured, staff punch out and back in for it. A long break then shows as Over Break on the timesheet, which you can leave as information or set to reduce that day’s overtime.
The break also matters for pay, because in the usual setup the break hour is excluded from working hours. A shift from 7am to 5pm with a one-hour break is then a nine-hour day, and the daily-hours divisor in the overtime calculation follows the schedule — nine, not ten. For staff covered by the Employment Act overtime provisions (up to RM4,000 a month, and manual workers at any wage) the Act caps the divisor at eight, so tell us if that applies and we set their OT code accordingly.
Allowances and deductions
Can the system pay an attendance allowance only if the staff has no late-in, no absent and no MC that month?
Yes, but our support team writes the formula for you.
A conditional attendance allowance is set up in the Attendance Incentive module as a formula that reads your attendance and leave data directly. The variables it can read are:
- Late In
- Early Out
- Over Break
- Absent
- Unpaid leave
- Annual leave
- Medical leave
- Emergency leave
It can pay the full amount, a reduced amount or nothing, so a rule like RM100 for a clean month, RM50 if only part of the criteria are met and RM0 otherwise works. The result flows into payroll without HR re-keying it.
Two limits up front. The cycle is monthly, so a rolling three-month accumulation pool is not supported, and there is no “incomplete working hours” variable — Late In, Early Out and Over Break are the metrics available.
Writing the formula is our support team’s job; it is not something you build in the screen yourself.
We pay RM5 a day for night shift. Must HR key that in every month?
No, it attaches to the shift code and counts automatically.
A per-day allowance is attached to the work schedule code as a Schedule Allowance. On any day an employee is plotted on that night shift code it is counted on the timesheet as one day’s entitlement, and it carries into payroll when attendance is imported — the same way daily meal, transport and cashier allowances are handled. Entitlement can also be narrowed to a specific Employee Group.
One thing to check with us first: a Schedule Allowance is driven by the day’s attendance record, so on a day with odd clocking (a missed punch) it may not compute. Cases like that are handled through the Attendance Incentive module instead.
We create the schedule and transaction codes for you (for example ALLOW_NS) and confirm with you whether the item contributes to EPF, SOCSO, EIS, PCB and the HRD levy before it goes live.
We give a fixed RM100 allowance every month. Do I have to key it in for every payroll, and what happens if someone joins or resigns mid-month?
No re-keying — you set it up once as a recurring transaction.
A fixed monthly allowance is created once under Payroll Menu > Entry > Recurring Transaction with an effective date, and it then populates into the payroll dashboard automatically each month. Your own admin can create these records — there is a short video guide — provided the user account is not set to read-only.
Note that it applies from the payroll month of its effective date onward, so a record created after a month’s payroll has been processed only shows up from the following month.
By default the system prorates a recurring allowance for new joiners and leavers based on the join or last working date. If you want the full amount paid regardless, there is a “Don’t prorate on new join / leaving employee” option that can be enabled on that item.
Our policy is that we only start deducting after 10 minutes late. Can the system follow that, and what does it deduct from?
Yes, each schedule code carries a late-in tolerance.
Each work schedule code carries a Tolerance Late In and Tolerance Early Out in hours and minutes, and anything inside that tolerance is not treated as lateness at all. Set 10 minutes and a 9-minute late-in produces nothing — it will not even appear on the timesheet.
Past the tolerance the deduction is a formula. Some customers deduct on actual minutes, such as Basic Salary / 26 / 8 x minutes late, while others round the excess up to the nearest 30 minutes, and the divisor can be 26 days or the calendar days of the month depending on your policy.
Tolerance, rounding and the formula are configured by our support team on your written instruction, not toggled by the HR admin.
Can we switch off automatic deduction for late clock-in, early clock-out and over break?
Yes — leave the formula unconfigured and nothing is deducted.
Deduction only happens where a formula is configured for that tardiness type, so leaving one unconfigured means no salary is deducted for it. In live setups one customer deducts on late-in but has no formula on over break, so over break shows on the timesheet without touching pay, and another has early out recorded but never deducted.
It can also be scoped — for example salesmen with no late-in or early-out deduction while the rest of the company keeps it.
These are configuration changes our team makes on your instruction. The records still appear in the timesheet report, so you keep the visibility without the deduction.
How does the system work out the unpaid leave deduction?
By formula, with the base set to match your policy.
Unpaid leave is deducted by formula and the base is set to match your policy — Basic Salary / 26 x UPL days, or Basic Salary / calendar days in that month x UPL days. It can be changed later; one customer moved from a 26-day base to calendar days from the July 2026 payroll onward.
Half-day and part-day unpaid leave uses a separate hourly code, for example UPL-H at Basic Salary / calendar day / 8 hours x hours taken.
Once the unpaid leave application is approved it feeds into the payroll run and appears on the payroll ledger and payslip with nothing to key in by hand. The formula itself is set up or amended by our support team on your request.
We allow 10 minutes’ grace. If someone is 13 minutes late, do we deduct 3 minutes or 13?
Thirteen — grace is a threshold, not a free allowance.
Inside the grace period — the Tolerance Late In setting on each work schedule — nothing is recorded at all: three minutes late with a ten-minute grace simply does not appear on the timesheet. Once the lateness passes the threshold, the whole lateness is recorded, not just the part above it.
So with a ten-minute grace, 13 minutes late shows as 13 minutes of lateness, and 24 minutes late shows as 24. It is worth telling staff this before the first payroll, because it is easy to assume the first ten minutes are always subtracted.
What those minutes cost in salary is a separate matter. A deduction only happens where a lateness formula has been configured, and our support team sets both the tolerance and the formula on your written instruction. Some companies deduct on the actual minutes, others round the excess up to the nearest 30 minutes, and some keep the record without deducting at all.
How late does someone have to be before the system counts it as half a day absent?
There is no fixed point — it is a setting on the schedule.
Lateness on its own stays lateness. An hour or two late is recorded in hours and minutes on the timesheet and, if your company deducts for lateness, deducted by formula — the status does not turn into absence.
Half day absent comes from a separate setting on the schedule. You choose an hours threshold, and when the hours actually worked that day fall below it — below four hours, say, or below three — the day is marked half day absent and the deduction becomes half a day’s salary. Because the trigger is hours worked, it catches leaving very early just as it catches arriving very late.
The two never stack. Once the half day absent status appears, the late or early minutes for that day are dropped and only the half day is deducted, so nobody is penalised twice for the same morning. Agree the threshold at setup and tell your staff, because a day that crosses it reads very differently from one that does not.
If a staff member just does not turn up, does the system deduct his pay automatically?
Yes — the absent day is deducted when attendance imports into payroll.
A day with no clocking and no approved leave is marked absent on the timesheet. At month end the absence flows into payroll through Import From Module, and the amount is worked out the same way as unpaid leave, on the deduction base set for your company. There is nothing to key in by hand.
The import is a step you run, not a background job, so check the timesheet before you run it. A day where someone worked but never clocked in or out, or where a leave application is still pending approval, also reads as absent until it is corrected — fix those first, and only genuine absences reach payroll.
Absence and unpaid leave cut pay by the same arithmetic, but they are separate records. Unpaid leave is an approved application; absent means nobody was told. The payslip shows which one it was, which matters when someone asks why a particular day was cut.
Hourly-paid staff are the exception — they are simply paid on the hours they worked, with no absent deduction line. And whether fixed allowances are also cut on an absent day depends on how your allowances are configured, so agree that at setup.
My petrol and travelling allowance is tax free up to a limit. Does the system track the yearly total?
Yes — tag it exempt and it carries to the EA form.
LHDN exempts petrol, travelling allowance and toll payments combined up to RM6,000 a year where the travel is for official duties. Above that, the employee may still claim a deduction in their own tax filing for what was actually spent on official duties.
In Pandahrms the exemption is a property of the transaction code, and our support team sets it up with you. Tagged correctly, the allowance is not taxed monthly and the system watches the yearly total against the cap for you. At year end the exempt portion lands in the exemption section of the EA form.
Two things to note. Records supporting the claim must be kept for seven years in case of an audit, and the exemption does not apply to employees who have control over the company, or to sole proprietors and partners.
Should this be an allowance or a reimbursement? Does it matter?
It matters — allowances and reimbursements are treated differently by statute.
A fixed amount paid every month regardless of what was spent is an allowance. Money paid back against a receipt is a reimbursement. The two are treated differently for EPF, SOCSO and tax.
Name it for what it is, and keep the receipts behind every reimbursement. If a payment is only made when a receipt is produced, calling it an allowance while deducting nothing statutory is the combination an auditor will query first.
In Pandahrms, each transaction code carries its own tick boxes for EPF, SOCSO, EIS, SKBBK, Tax and HRD levy. Classify the payment honestly, then set the ticks to match — the treatment follows the ticks, and the name should tell the same story.
Can an approved outstation trip pay the travel allowance automatically?
Yes, through the Claim module — approved amounts reach payroll without re-keying.
The trip goes on record first. A planned trip is submitted as an Outstation Application under Attendance Menu — on the web, not in the app — and once it is approved the day shows as Outstation in the timesheet rather than Absent, so nothing is deducted from pay even when there is no clock-in that day.
The allowance itself travels through the Claim module. Staff submit an outstation or travelling claim, and a default amount can be set on the claim type so they pick the item instead of typing the figure. Once the claim is approved it links to a payroll transaction code, and the amount reaches the payslip when you run the month — nobody re-keys the money.
One honest caveat: approving the trip application does not, by itself, pay the allowance — the application records the day and protects the pay, and the claim carries the money. If you pay a flat rate per outstation day and would rather not run it through claims, tell our support team your rate; allowance rules in Pandahrms are configured by our team rather than switched on in a screen, and we will tell you straight how best to set yours up.
If someone takes unpaid leave, is their fixed allowance cut too?
Not by default — the unpaid leave deduction touches basic salary only.
The standard unpaid leave deduction is a formula on basic salary, so a fixed monthly allowance keeps paying in full even when someone takes a day of no-pay leave. Nothing comes off the allowance unless your policy says it should.
If your policy does cut it, our support team writes that rule into the pay item for you. The usual approach is to prorate by days: the monthly amount divided by the calendar days in that month, multiplied by the days that still count. Whether rest days and public holidays still count is part of the rule — a common set-up pays them and skips only days of unpaid leave or absence. A RM155 allowance in a 31-day month with one day of unpaid leave would pay RM150.
Some companies go further and withhold the allowance entirely if attendance is not perfect that month — a conditional formula, the same mechanism as an attendance allowance. Either way, an allowance that reacts to attendance is calculated in a monthly batch before the payroll run, so the figure reflects that month’s actual clocking, leave and absences. A fixed allowance with no attendance rule needs no monthly step at all.
Because the rule sits on each pay item, you can mix policies: prorate the transport allowance, withhold the attendance allowance, and leave a phone allowance untouched. Tell our team your policies during onboarding and each rule is written once.
Staff come in late but stay back after work. Can the system offset that instead of deducting their pay?
Yes — the Work Replacement setting covers the late-in with stay-back time.
The function is called Work Replacement. When it is switched on, the extra time an employee works after knock-off is used to cover the late-in first, and only the balance is treated as overtime. Come in an hour late, stay back two hours, and the day ends with the lateness covered and one hour of OT — no deduction.
You can see it happen on the timesheet: the covered time is marked with the word Replace, so HR and the employee both know the lateness was made up rather than deducted. Extra time from another day can also be used to cover a late-in, within a window of days you choose, and you can set a minimum number of minutes before a stay-back counts as replacement.
Two things still follow your other rules. You decide which employees are entitled to replacement — it does not have to be everyone. And if your work schedule requires overtime to be applied for and approved, that approval has to happen before the extra time can be used to offset the lateness.
If there is nothing to replace with — the employee was late and left on time — your normal late-in deduction applies, or nothing at all if you have not configured one. Some companies prefer the opposite policy: deduct the lateness and pay the overtime in full, separately. Both work; tell our team which way you want during setup.
Is it actually legal to deduct salary for lateness in Malaysia?
Not automatically — the Employment Act tightly restricts what you may deduct.
Section 24 of the Employment Act 1955 only permits certain deductions from wages — statutory contributions such as EPF, SOCSO, EIS and PCB, recovery of overpayments and advances, and a short list of others, some needing the employee’s written request or the Director General of Labour’s approval. Arriving late is not the same as being absent: if the employee still worked the rest of the day, an automatic cut for the minutes missed can be challenged as an unlawful deduction. We are HR software, not lawyers — for a ruling on your own policy, ask the Labour Department (JTK).
That is why many of our customers handle lateness without touching basic salary at all. Common approaches the system supports:
- Make-up time — a work replacement setting offsets a late-in against overtime the employee works back, so nothing is deducted.
- Unpaid leave by the hour — the employee applies for the time missed, so there is a record and an agreement behind it.
- A punctuality-linked allowance — pay an attendance allowance only in months with no late-in, instead of cutting salary.
If your contract and written policy do provide for deduction, the system calculates it to the minute — and if they do not, automatic late-in deduction can be switched off entirely. Our guide on deducting salary for lateness walks through the legal position in more detail.
Running payroll
How does a payroll run actually work in Pandahrms — what are the steps?
Attendance first, then import, calculate, check, lock and close.
You finalise and review the month’s attendance first, then work through the payroll cycle in this order:
- Go to Payroll Menu > Import From Module to transfer the approved overtime, leave, absence and tardiness figures into payroll.
- In Payroll Dashboard, create the cycle and click Calculate.
- Check the figures in the Payroll Ledger and the payslip report.
- Lock the dashboard, then generate the bank file and payslips.
- Close it only after the payment has gone out and been checked.
At the Calculate step the system pulls each employee’s basic salary from Employee Profile > Job & Service, applies the allowances and works out EPF, SOCSO, EIS, SKBBK and PCB.
Note that Import From Module locks the timesheet for the period it covers, so any attendance correction after that point needs a Reverse Transfer and a re-import.
I’ve already run the payroll and then found a mistake. Can I redo it?
Yes, unless the dashboard is already Closed.
While the dashboard is still Open or Locked you can unlock it, correct the entry and click Calculate again. If the wrong figures came from attendance, you run Reverse Transfer for those days or that employee, fix the timesheet, then Import From Module again.
Be aware that a Reverse Transfer reverses every module that was transferred for that employee — not just attendance — and wipes the matching Express Entry records, so we don’t recommend using it routinely.
Once a dashboard is Closed you cannot reopen it yourself, because the transactions inside it (including Express Entry records) are cleared. Our support team can revert a closed cycle back to Locked, but we check the case first, so treat Close as final and only close after the payment is confirmed.
How do my staff get their payslips?
Posted to their app, emailed, or printed as PDF.
Payslips are generated under Payroll Menu > Report > Payslip and can be printed or saved as PDF.
Once the payroll dashboard is Locked you click Post Now and the payslip appears in each employee’s Pandahrms app, where it stays and is not auto-deleted — but note that unlocking the dashboard withdraws the posted payslips immediately.
Payslips can also be emailed if the ‘Email Payslip’ system parameter is switched on and the employee’s email is filled in on the profile; the PDF is automatically password-protected with the employee’s NRIC or passport number.
The payslip layout can be adjusted for your company — for example showing annual leave and sick leave balances, or carrying your signature and company stamp — and our team makes those format changes for you rather than it being a self-serve setting.
Can Pandahrms produce the bank file so I don’t key in salaries one by one?
Yes, under Payroll Menu > Autopay Generator.
Bank payment files are generated under Payroll Menu > Autopay Generator, and you pick the payroll date matching a Locked payroll dashboard; a dashboard still in Open status will not flow into the file.
We configure the file to your bank’s format (for example CIMB BizChannel, including the DuitNow Bulk Payment template, and Public Bank), and staff banking with different banks can sit in the same file.
You upload the file to your bank portal yourself — Pandahrms generates the file, it does not make the payment. If your bank uses a layout we have not built yet, send us their specification and we will review it; we cannot promise every format, as some bank layouts fall outside what the generator produces.
One of my staff is leaving. How do I do the final pay and pay out the balance annual leave?
Create the Cessation record before you run the payroll.
Create the record under HR Menu > Cessation with the tender date, last working day and last payroll day before you run the payroll. Then run Leave Menu > Leave Calculation with the Leave Computation Date set to the last working day so the balance is re-prorated — skip this and the encashment can show the full year’s balance.
The cessation then works out the final month’s salary, the short-notice deduction — measured against the resign notice period on the employee profile — and the annual leave encashment.
Encashment is calculated as basic salary divided by 26, multiplied by the days encashed; if your policy divides by calendar days instead, tell us and our team amends the setting for you.
You can still amend the days encashed under Payroll Menu > Entry > Express Entry before calculating, and the employee’s status changes to Resigned once that payroll dashboard is closed.
We backdate increments, and sometimes OT gets approved after I’ve already transferred the attendance. Does the system catch up?
Yes, if the retro setup was done before the transfer.
Salary changes go under HR Menu > Process > Salary Adjustment with an effective date, and the proration follows that date against your payroll cut-off — so an increment effective mid-month on a 21st-to-20th cycle is split correctly instead of paid for the whole month.
Retro pay for attendance approved after Import From Module does exist, but it only works if the retro back-pay and deduction transaction codes were set up before the transfer, and a date that has already been retro-calculated once will not be picked up a second time. Overlapping retro periods between cycles are allowed.
It is a setup we configure with you rather than something to switch on mid-cycle — several cases have needed our team to re-run or patch the retro flag — so raise it at implementation if you rely on it.
Can it handle bonus, advance salary and company car BIK, or only normal monthly pay?
Yes — bonus, advance salary and BIK each have their own setup.
For bonus you create a separate payroll dashboard with the Payroll Type set to Bonus — that produces a separate payslip and keeps the bonus EPF and PCB distinct. Put bonus and salary in one dashboard and the statutory figures come out combined and cannot be split afterwards.
Pick the type carefully: the payroll type cannot be changed once the dashboard is created, and an employee can only sit in one dashboard per payroll type.
Advance salary runs under its own dashboard, which must be closed before you calculate the month-end payroll for the repayment (ADV-) to flow in.
Benefit-in-kind such as a company car uses a dedicated BIK transaction code that our team sets up: it is taxable but non-cash, so it raises the employee’s monthly PCB and lowers net pay without adding to the cash gross salary.
What is the difference between locking and closing a payroll month?
Lock freezes the figures; close finalises the month.
Lock stops the figures changing while you check them — Calculate no longer runs, so nobody edits or recalculates the cycle by accident. It is reversible: unlock, correct, calculate again.
Close finalises the cycle once the salaries have been paid out. A closed month can no longer be edited by your admins — only our support team can reopen one. Closing a leaver’s final cycle is also what completes their cessation and frees that headcount slot for a new joiner.
Close each month before you create the next one. The system will let the next month run with the previous one merely locked, but a cycle left open can affect the following month’s calculation. The habit our team teaches: lock as soon as the figures look right, close once the money has gone out.
Our cut-off is the 21st to the 20th, not the calendar month. Can payroll follow that?
Yes — you set the import period and the payroll date.
When you import attendance into payroll you choose the exact date range, so a 21st-to-20th cycle is just a different range. The system uses that period’s attendance, overtime and leave to work out the month’s pay, and anything pro-rated — salary, allowances, leave — follows the same cut-off.
The payroll date you set on the cycle is your salary cut-off date — the 20th in this example — not the day wages are paid. The actual payment date is picked separately when you generate the bank file.
Someone who joins after the cut-off is simply paid in the following cycle. Each company in a group runs its own cycle and chooses its own period each time, so different cut-offs can live side by side — local staff closing on the 20th while foreign workers run to month-end, for example.
We pay commission in the middle of the month and salary at month end. Can the system do both?
Yes — run an ad-hoc cycle for the mid-month payment.
Create an ad-hoc payroll dashboard for the commission, then run the normal month-end cycle separately. Each cycle produces its own payslip and its own bank file, and the ad-hoc run carries its own payment date, so the commission can go out mid-month.
Watch the statutory side. EPF is worked out on total wages for the month, so when a bonus or commission is paid in the same month as salary, the two have to be considered together against the KWSP schedule rather than separately.
Close the previous dashboard before you create the next one. If you are still checking the figures, lock it first and close it when you start the following cycle.
Staff asked for an advance. Can the system take it back over several months?
Yes — set the advance and its repayment in one record.
Under Payroll > Entry > Advance Salary you record what is being paid out, as a fixed amount or a percentage of basic, and when.
The same record sets the repayment: in full on a date you choose, or by instalment across several months. The advance runs under its own dashboard, and once that dashboard is closed each repayment flows into the month-end payroll as a deduction the employee sees on the payslip. The system also keeps an advance salary ledger, so HR can check what has been borrowed and what has come back.
Recording it here is what prevents the common accident — money paid out through the bank that nobody remembered to deduct back.
I found a mistake after the payroll was locked. Can my own admin fix it, or must I call you?
Yes for a locked month; a closed month needs our support team.
While the cycle is only Locked, your admin fixes it without us: unlock the dashboard, correct the source — the timesheet, the employee profile, the payroll entry — then click Calculate again. That is the normal correction route, and you do not need to raise a support request for it.
A Closed month is different. You cannot reopen it yourself; our support team can revert a closed cycle back to Locked, but we check the case first. So treat Close as final, and only close once the payment has gone out and been checked.
One thing no recalculation can fix: statutory files you have already uploaded to KWSP, PERKESO or LHDN do not change when the payroll changes. Correct the payroll and regenerate the file in Pandahrms, then amend the earlier submission with the portal or department concerned.
What does our bank need from us before the salary file will work?
A corporate ID, payroll upload enabled, and your bank’s file format confirmed.
Three things are settled with your bank, not with us:
- Your corporate ID, which the bank issues — usually the same ID your company uses to log in to the bank’s portal
- Confirmation of which payee group or file format your account uses
- Salary or bulk-payment upload switched on for your business account — you have to ask the bank to enable it
Some bank templates also ask for a client batch ID. That is normally a batch reference you set yourself — it just has to be unique — but every bank’s template asks for different details, so confirm the exact fields with your banker. Sending your banker a photo of the fields the template asks for settles it fastest.
Once those are in place, Pandahrms generates the file and you upload it through your bank’s portal yourself. Mind the bank’s own cut-off time: a file uploaded late in the day can land the next working day rather than the same day.
Every salesperson earns commission at a different rate. Can the system calculate it?
Yes — set one pay code per rate, key the units, it multiplies.
Commission is handled through payroll transaction codes. Create one code per rate — say RM1.00, RM1.20 and RM1.50 per unit — key in each person’s quantity for the month, and the system multiplies quantity by rate for you. During setup a rate can also be tied to an employee category, so the right rate follows each salesperson automatically instead of you having to remember who earns what.
You do not have to key figures in one by one either: monthly quantities can be uploaded from an Excel file in one go. Each commission line then appears on the payslip, and every transaction code carries its own statutory settings, so the EPF, SOCSO, EIS and PCB on commission are calculated in the same run. If you pay commission mid-month, it runs as a separate ad-hoc payroll cycle from the month-end salary.
The honest limit: the system does not work out the commission entitlement itself. If it depends on tiered targets, margins or KPIs, you work out the units or the final amount from your sales records first, then key or upload the result — the system handles the multiplication, the payslip and the deductions from there. Commission also does not feed into the overtime rate.
How is an hourly worker paid — and what about absence, lateness and public holidays?
By clocked hours: no hours worked, no pay.
Set Salary Count By to Hourly in the employee profile and key the rate per hour into the Basic Salary field. Payroll then pays whatever attendance recorded: when attendance imports into the payroll run, an hourly worker comes in as a total of hours worked, where a monthly worker would come in as an absent-day deduction.
That one principle answers most of the rest. An absent day is zero hours, so zero pay — an absence letter explains the absence but does not make the day paid, because hourly staff earn only for hours actually worked. Lateness normally needs no separate deduction either: arriving late simply means fewer clocked hours, though a per-minute lateness deduction can be configured if that is your policy.
Public holidays and extra hours are multipliers our team sets to match your policy. If your hourly staff get double the rate for working a public holiday, the system pays double; hours beyond the normal shift can run at 1.0 or 1.5 times. One honest caveat: a genuine part-timer under the Employment (Part-Time Employees) Regulations 2010 has statutory minimums your policy must not fall below, including pro-rated paid public holidays — our answer on part-timers’ overtime, leave and EPF covers those floors in detail.
Hourly and monthly staff run in the same payroll cycle with a single import, so you do not process them twice. EPF and SOCSO still apply to hourly staff under a contract of service, with the statutory ticks controlled per person on the employee profile.
Can I upload an Excel of OT and allowances instead of keying 50 staff one by one?
Yes — and for overtime you usually do not even need Excel.
Overtime rarely needs a spreadsheet at all. Because OT is calculated from each employee’s clocking records, you pull it into payroll with Import From Module rather than keying it: pick the cut-off period, preview what will transfer, and confirm. The hours land against every employee in one go.
For amounts the system cannot work out on its own — commissions, incentives, ad-hoc allowances — there is an Excel file you fill in and import as a single batch, instead of typing entry by entry. Unit-based items work too: key in the quantity and the system multiplies it by the rate you have set for that transaction code.
Every import carries a batch number, so you can check the entries afterwards in Express Entry and edit or remove one line without disturbing the rest. Bulk Excel import also covers leave adjustments and time logs, so a fifty-person key-in session becomes one file.
Can I put our own logo on the payslip?
Yes. Send us your logo and we add it for you.
Send your company logo to our support team as a PNG or JPG file and we place it on your payslips for you — there is no setting you need to configure yourself. Most customers hand the logo over during onboarding together with their payroll data, but you can send it any time after you go live too.
One honest limit: the payslip follows a standard format, so you cannot replace it with your full company letterhead or redesign the slip from scratch. Our team can make certain adjustments for you — such as showing leave balances or adding a signature and company stamp — but these are format changes we make on our side rather than options you switch on yourself.
If your logo comes out looking odd on the slip — too small, stretched or blurry — send us a higher-resolution version and we will swap it in.
If I upload the salary file to the bank late on Friday, will staff still be paid the same day?
That depends on your bank’s processing window, not on Pandahrms.
Pandahrms prepares the salary file under Payroll Menu > Autopay Generator, but it does not move the money. You upload the file to your own bank’s corporate portal, and from that point the timing is in the bank’s hands.
In the file you set a payment date — the day salaries should reach your staff. If the file goes in before your bank’s cut-off, staff are normally paid on that date, and some banks credit it in the early hours of the morning. Upload late in the day and some banks push the whole file to the next processing run, so a Friday-evening upload can slip to the next working day.
Three habits keep paydays safe:
- Ask your bank for its daily cut-off time and upload before it.
- If payday falls on a weekend or public holiday, set the payment date to a working day.
- If your bank offers an instant mode alongside the scheduled one, ask which your account has enabled.
We pay salaries on the 25th, before the month ends. What about the last few days’ overtime?
Run payroll early and give overtime its own earlier cut-off.
You can process payroll before the month ends. Basic salary is not the obstacle — it does not depend on clocking records, so the salary itself can still be calculated for the full calendar month. The catch is overtime and attendance-based allowances: the system works those out from actual clocking data, and days that have not happened yet have nothing to calculate from.
The usual fix is to give overtime and allowances their own earlier cut-off period when you import attendance into payroll. Paying on the 25th, you might import overtime from the 21st of last month to the 20th of this month, while basic salary stays on the calendar month. The tail days’ overtime is not lost — it simply falls into the next month’s import period. Some companies move the whole payroll cut-off earlier instead, and salary, allowances, leave and anything else that pro-rates then follow that one period.
If you only need to run payroll early but the money goes out after month end, there is another route: import attendance in two batches — the bulk first, then the remaining days as a second import before you finalise. Either way, anything that falls after your cut-off is picked up in the following month’s run rather than dropped.
Where do I key the hourly rate for a part-timer?
In the employee’s profile — set Salary Count By to Hourly.
Open the part-timer’s employee profile, set Salary Count By to Hourly, and key the per-hour amount into the Basic Salary field. For someone on RM10 an hour, key in 10 — not a full monthly figure. Once the count is hourly, the system reads Basic Salary as the rate per hour.
Payroll then follows the hours actually worked. Total working hours come off the timesheet and reach payroll through the attendance import, so each part-timer is paid on the time they really clocked. A late start normally just means fewer paid hours rather than a separate lateness deduction, though a per-minute deduction can be configured if that is your policy.
The flip side: an hourly worker who does not clock in earns nothing for that day, and a missing punch leaves the day flagged as Odd Clocking with no hours calculated. Clear it before the payroll import — the employee submits a Backdated Clock Time Application in the mobile app, or an admin corrects the timesheet. Monthly-salaried staff work the other way round: full pay unless a deduction applies.
One person’s pay is wrong. Do I have to recalculate the whole company?
No — tick just that employee and calculate.
When you calculate a payroll cycle, you tick the employees you want and click Calculate — the system reworks only the people you selected. Everyone else’s figures stay exactly as they were, so fixing one person does not disturb a payroll you have already checked.
Where the fix starts depends on where the mistake came from. An amount you keyed in yourself is corrected in Express Entry, then you recalculate that employee. If the error came from attendance — a missed overtime entry, a corrected clocking — the earlier import has locked that timesheet data, so run Reverse Transfer for that employee first, fix the attendance, then run Import From Module for just that person and recalculate.
A locked month must be unlocked before anything recalculates, and a closed month can only be reopened by our support team. Before you recalculate, note the employee’s current net pay so you can confirm afterwards that the change is exactly the one you intended.
Can you just run the payroll for us every month instead?
Yes. We offer payroll outsourcing as a separately quoted service.
Some companies simply have nobody to run payroll — no HR person yet, or the boss has no time. For them we can take over the monthly run: our team does the calculation on Pandahrms, cross-checks it against the payroll reports, and your staff still receive their payslips in the app as usual.
You are never locked out of your own numbers. You keep a login, so you can open the payroll reports, check any figure and print what your management asks for. The statutory files for EPF, SOCSO, EIS and PCB come out of the same run — we generate them for you to upload and pay, and if you would rather we handled the submissions too, we can quote that as part of the service.
Outsourcing is quoted case by case on headcount and scope, separately from the software subscription — ask us for a quotation. Honestly, most customers do not need it: once attendance flows into payroll and the statutory calculations are automatic, running the month yourself is a short job, and we teach your team to do it during onboarding.
It can also work the other way round. An outsourcing firm or staffing agency can run the companies it serves on Pandahrms, with each one set up as its own company profile under one account — the same multi-company setup our group customers use.
Can the Excel payroll report show the formula behind each number, like a prorated salary?
No — the exports carry the final figures, not the formulas.
The two payroll reports — the Master Payroll Report, a summary per employee, and the more detailed Payroll Ledger — both download as Excel or PDF. The cells hold the computed amounts, not live spreadsheet formulas, so a prorated salary for a mid-month joiner appears as the final figure only.
The workings are on screen instead. Open the payroll cycle and click the employee, and you can see how each line was arrived at before you pay out.
Every pay element is driven by a formula on its transaction code — unpaid leave, for example, is basic salary divided by 26 or by the month’s calendar days, whichever matches your policy — and those formulas can be adjusted. If you need the workings in writing for an auditor or a client, ask our support team and they will set the formula out for you.
EPF, SOCSO, EIS and PCB are different: they follow the official statutory schedules rather than a simple percentage, so there is no single formula to show. EPF in particular comes off the KWSP Third Schedule’s wage bands, which is why a straight percentage in your own spreadsheet can be a few sen out — the system’s figure follows the schedule.
EPF, SOCSO, EIS, PCB and HRDF
Does the system calculate EPF, SOCSO, EIS and PCB automatically, or do I still key them in myself?
They are calculated automatically the moment you calculate a payroll.
The moment you calculate a payroll, the system works out the statutory items using the current statutory schedules:
- EPF
- SOCSO
- EIS
- SKBBK
- PCB
- The HRD levy
For example, on the KWSP Third Schedule a staff member whose EPF wage is below RM5,000 gets the 13% employer rate, and above RM5,000 gets 12%. You do not key any of it in, and you can check every figure per employee under Payroll Menu > Statutory Listing before you pay anything out.
One honest caveat on PCB: it is only as right as the employee’s tax profile. Marital status, dependants and any previous employment income for the year have to be entered correctly, otherwise the monthly PCB will not match what LHDN expects.
Some of my staff should not contribute — part-timers over 60, directors, foreign workers. Can I switch it off just for them?
Yes, per person.
Go to HR Menu > Employee Profile > Statutory, untick what does not apply, then go back to the Payroll Dashboard, select that employee and click Calculate to refresh the figures. That screen has separate tabs for:
- EPF
- PERKESO (SOCSO, EIS, SKBBK)
- Tax
The EPF employee, employer and floating percentages are fields on that same screen, so a non-standard rate is set there per employee.
Be clear on one thing: the system does not work out exemptions for you from age or nationality — deciding who is exempt is still HR’s job.
Which allowances count towards EPF, SOCSO and PCB? My petrol and phone allowance keep messing up the numbers.
It is decided per pay item, not per employee.
Each transaction code carries its own tick boxes for:
- EPF
- SOCSO
- EIS
- SKBBK
- Tax
- HRD levy
So a night shift allowance can contribute to everything while a gratuity payment is set to PCB only. Whatever is ticked is added into the contribution wage, so if basic plus the EPF-enabled allowances crosses RM5,000 the employer rate moves to 12% that month. SKBBK follows SOCSO: if a code contributes to SOCSO it contributes to SKBBK too.
You can view these settings under Settings Menu > Transaction Code, but in practice our support team creates and edits the codes for you. We will always ask you to confirm what is subject to what, because that call belongs to your company and your tax agent, not to us.
Will it submit EPF, SOCSO, EIS and PCB straight to KWSP, PERKESO and LHDN for me?
No. You upload the files yourself.
Pandahrms generates the submission files under Payroll Menu > Autopay Generator:
- The KWSP file for batch upload to the KWSP portal
- The PERKESO text file for the ASSIST portal
- The PCB file for LHDN’s e-PCB / e-Data PCB
- The bank autopay file
Two real gotchas. The PERKESO portal file is the combined SOCSO + EIS + SKBBK format, but the bank payment formats only combine SOCSO + SKBBK, so if you pay through your bank you download and submit EIS as a separate file. And if no employee has any PCB deduction that month, no PCB file is generated at all, so a nil declaration has to be done by hand in e-PCB.
Also download the EPF CSV and upload it straight to the portal without opening it in Excel first, or Excel reformats the 12-digit IC numbers and the portal rejects them.
PERKESO changed the Lindung 24 Jam rules halfway through the year. Who updates the system when things like this change?
We do, through a versioned system update.
And we tell you what changed. SKBBK (Lindung 24 Jam) was built and tested for the June 2026 payroll, and when PERKESO made participation voluntary for local employees from 8 July 2026, version 26.7.1 on the night of 17 July 2026 added an SKBBK Declaration.
With it, employees declare from their ESS dashboard, and HR reviews all the responses in one place and applies them to profiles in bulk.
Two practical notes. The declaration is submitted on the ESS website, not the mobile app. And you do not have to use it at all, since HR can just untick Entitle SKBBK under Employee Profile > Statutory > PERKESO for the few who opt out.
Updates are applied per site, so if your version is behind, ask support to upgrade you.
My HRDF levy in the system does not tally with the eTris portal by a few cents. Is it wrong?
It is not an error, it is two different rounding methods.
Pandahrms calculates the 1% HRD levy on each employee’s wages individually and then totals them — HRD Corp confirmed to us in writing that this is the correct method. The eTris portal takes the combined total wages and calculates 1% once, so with a dozen staff the two can differ by a few sen.
The HRDF report shows that variance on purpose so you can see exactly where it comes from. If your company is not liable, you can untick HRD at the employee level.
Your HRD Corp employer reference number sits in your company profile. Our team fills it in during setup, so send it to support if it needs changing.
Is EPF worked out on basic salary or on total wages?
On total wages, not basic salary alone.
EPF is calculated on wages: basic salary plus every transaction flagged as contributing, such as allowances and bonus, less any contributing deduction. Working it out on basic salary alone gives a different and lower number.
The contribution then comes off the KWSP Third Schedule rather than a straight percentage of that figure. Before the rate is applied, wages are rounded up to the next RM20 at or below RM5,000, and to the next RM100 above it — so wages of RM9,220 are treated as RM9,300.
This is one of the most common reasons a figure looks wrong at first glance. An online calculator, or a straight percentage of basic salary, will not always match the schedule — to check a contribution, total the contributing wages first and read the amount off the Third Schedule itself.
We paid a bonus and the tax on it looks far too high. Can that be spread?
The year’s tax is the same; only the timing of the deduction changes.
When a bonus is calculated as its own cycle, the PCB for that cycle can look alarming to the employee. The Isolate Payroll option changes how the withholding is spread between the bonus cycle and the salary cycle.
The total tax for the year does not change either way. What changes is how much comes off on the day the bonus is paid, which is usually what the employee is actually complaining about.
If salary and bonus are paid in the same month, they must be summed before checking the EPF schedule — checking the bonus on its own puts it in the wrong band.
There is a new SOCSO line on my staff’s payslip. What is it, and can we opt out?
It is SKBBK. Malaysians could opt out until 31 August 2026.
SKBBK, also called Lindung 24 Jam, started on 1 June 2026 and covers accidents outside working hours that are not related to the job. It is paid entirely by the employee; the employer deducts and remits it but contributes nothing. In the current phase the rate is 0.75% of wages, on a wage ceiling of RM6,000 a month, so the deduction is at most RM45.
On 8 July 2026 PERKESO made participation voluntary for Malaysian employees while keeping it mandatory for foreign workers. The way out was a release of liability notice, submitted through the PERKESO LINDUNG Faedah portal or at a PERKESO counter within the window PERKESO set — 13 July to 31 August 2026. Anyone who did nothing stays in the scheme, and PERKESO has revised the dates and forms more than once, so check its current guidance before advising staff either way.
In Pandahrms the SKBBK declaration is made from the ESS dashboard on the website, not the mobile app. For an employee whose opt-out PERKESO has confirmed, HR unticks Entitle SKBBK under Employee Profile > Statutory > PERKESO, then selects that employee in the Payroll Dashboard and clicks Calculate to refresh the figures.
Half my crew are part-timers. Do they get overtime, annual leave and EPF?
Yes to all three — the Employment Act sets the rates.
Under the Employment (Part-Time Employees) Regulations 2010, a part-timer is someone working between 30% and 70% of a full-timer’s normal hours. Overtime beyond their own normal hours is paid at not less than 1.0× the hourly rate while it stays within a full-timer’s normal hours, and at not less than 1.5× once it goes past them.
Annual leave, sick leave and public holidays apply too, pro-rated below a full-timer’s entitlement. In Pandahrms part-timers are normally given their own leave settings, so their balances carry the pro-rated days rather than the full-timers’ table.
On EPF and SOCSO, a part-timer under a contract of service contributes like anyone else — being part-time is not by itself a reason to skip them. The statutory ticks sit on each employee’s profile, so someone genuinely exempt can still be switched off individually.
In the system, set Salary Count By to Hourly and key the hourly rate into the Basic Salary field; pay then follows the hours actually clocked, so a late start usually just means fewer paid hours, though a per-minute lateness deduction can be configured if that is your policy. The overtime rule sits on the part-timers’ own work schedule — our team sets it to match your policy and the calculation then runs automatically.
Does overtime pay attract EPF and SOCSO? What about pay for working a public holiday?
Overtime attracts SOCSO and EIS but not EPF; holiday work pay too.
EPF and SOCSO define wages differently, which is why the same payslip treats overtime two ways. Under the EPF Act, overtime payments are not wages, so overtime does not attract EPF — and KWSP counts the extra pay for working a rest day or public holiday as overtime for this purpose, so it is excluded too. Under the SOCSO and EIS legislation, wages expressly include overtime and payment for extra work on holidays, so both contributions are due on it. Overtime is also taxable income, so it does feed the PCB calculation.
Pandahrms follows this split by default. Overtime pay items contribute to SOCSO, EIS and SKBBK but not EPF, so the month’s SOCSO wage is salary plus overtime while the EPF wage leaves the overtime out. Seeing two different contribution bases on one payslip is therefore correct, not a rounding error.
As with allowances, the statutory ticks sit on each pay item, so if your company chooses to contribute EPF on overtime voluntarily, that can be switched on for your codes. Our support team sets the overtime codes up with you and will ask you to confirm anything that departs from the statutory default.
If salary and bonus are paid in the same month, how is EPF calculated?
Together — the Third Schedule is read on the combined wages.
When salary and bonus fall in the same month, the system totals every EPF-contributing item — basic salary, the bonus and any contributing allowances, less contributing deductions — and reads the KWSP Third Schedule on that combined figure. This holds even when the bonus runs as its own payroll cycle. Each cycle shows its own EPF line, but the lines add up to the contribution due on the month’s combined wages. That is why a staff member’s EPF is higher in a bonus month even though the basic salary has not changed.
It also means a single cycle cannot be checked in isolation. Looking up the bonus gross on its own lands the wages in a lower band of the schedule, and the Third Schedule’s rounding means the result is not a straight percentage either. If the bonus pushes the month’s total past RM5,000, the employer rate for that month moves from 13% to 12%.
To verify a figure, check the month rather than the cycle: total the contributing wages across both cycles and look that single number up on the Third Schedule. In the system, Payroll Menu > Statutory Listing shows the contribution cycle by cycle, and the Master Payroll report totals the cycles together.
We already submitted our EPF and PCB, then found a mistake. What do we do?
Correct the payroll record, then settle the difference with the statutory body.
There are two versions of this problem, with different fixes. If the amount you actually paid to KWSP or LHDN was right and it is Pandahrms showing a different figure, align the system to what was really paid. Your admin can key the actual amounts through Express Entry, and if the month is already closed, the differences go into a separate ad hoc payment cycle instead. This matters at year end, because the EA Form and Form E are built from the figures in the system.
If the submission itself was wrong, fix the payroll first. A locked month your own admin can unlock, correct and recalculate; a closed month you do not reopen yourself — the usual route is the same ad hoc payment cycle, keyed with just the differences, and our support team can walk you through it the first time. Once the figures are right, generate a fresh statutory file for the affected staff only — if you pay in more than one cycle, select just those employees so amounts already paid are not counted twice.
What Pandahrms cannot do is recall a file you have already uploaded. We generate the EPF, SOCSO, EIS and PCB files, but submission and payment happen on the statutory bodies’ own portals, so any over- or under-payment is settled directly with KWSP, PERKESO or LHDN under their own correction procedures. Our support team can help you work out the exact difference to declare.
Our new hire has no EPF number yet. Can I still run their payroll?
Yes — enter zero in the EPF number field for now.
The EPF number is a required field when you create an employee, so a blank will stop the profile from saving. Put zero in the field for now; the profile saves normally and you can run payroll for that employee like anyone else.
When the real number arrives, open the employee profile, scroll to the Statutory section and key it in. To spot anyone still missing a number, use Data Export under the HR menu to download every employee’s profile into one Excel file and scan the EPF column.
Two things to watch. Correct the number before you upload to KWSP — the submission file carries each employee’s member number, and after fixing a profile you can re-download the file for just the affected employees. And do not switch EPF off for the employee to get around it: anyone with EPF off is left out of the contribution figures and the submission file entirely, and EPF is due from the first month’s wages, not only after confirmation.
LHDN sent a CP38 instruction for one of my staff. Can the system deduct it?
Yes. CP38 is a standard deduction code in the system.
A CP38 is a direction from LHDN telling you, the employer, to deduct a fixed monthly instalment from one named employee’s salary to settle that employee’s outstanding tax, on top of the normal PCB. Pandahrms already has CP38 as a standard deduction code, so there is nothing new to create.
Because the instalment is the same amount each month, you set it up once under Payroll Menu > Entry > Recurring Transaction: create the record, pick the employee, choose the CP38 transaction code and key in the amount from the letter. Set the start and end dates to match the instalments on the letter — a recurring record with no end date keeps deducting every month. For a one-off amount, or a final instalment that differs from the rest, use Payroll Menu > Entry > Express Entry instead.
Recording it under the CP38 code matters, because the statutory payment file you upload to LHDN reports PCB and CP38 in separate positions — the amount only reaches the file when it sits under the CP38 code, not a general deduction.
One honest limit: the company cannot absorb a CP38 as an employer cost inside payroll. The instruction is issued on the employee’s own tax file, so the system deducts it from the employee’s salary.
Year-end and tax forms
At year end, does the system actually give me the EA Form, Form E and CP8D, or do I still have to key everything in myself?
Yes, it generates them from your payroll records.
Pandahrms generates the EA Form, Form E, CP8D, CP22 and CP22A from your payroll records, under the Payroll menu — Payroll Menu > EA, and Payroll Menu > Yearly Report for the year’s summary.
The order matters. CP8D and Form E are built from the EA Form records, so each employee’s EA has to be generated and posted before they appear in the CP8D. Regenerating an EA reverts it from Posted to Unposted, so you re-post it and then regenerate the CP8D.
Which transaction codes land on which EA line is controlled by EA Code Mapping. So if an allowance was set as non-taxable and you want it on a past year’s EA, our support team has to update the mapping and run a data patch for you.
Form E is kept current with LHDN’s version through system updates — the 2025 Form E, for example, came in from version v26.2.0. Pandahrms does not submit for you: you download the forms and files and upload them to MyTax yourself.
How do I export the PCB file to submit to MyTax?
From Payroll Menu > Payment File Export > Auto Pay Generator.
Two things must be in place first: the month’s Payroll Dashboard has to be in Locked status, because the tax file only picks up locked payroll records, and the employees’ Payment Method must be set to Bank Transfer.
Then go to Payroll Menu > Payment File Export > Auto Pay Generator and:
- Pick GENERAL STATUTORY BODY FILE FORMAT.
- Fill in the Payroll Date (your cut-off) and the Payment Date.
- Tick TAX, plus EPF or SOCSO + EIS + SKBBK if you need those too.
- Click Download.
The .txt file reports PCB and CP38 in separate header positions, and any CP38 amount has to exist as a CP38 transaction record to appear. You upload the file yourself to LHDN through e-PCB / e-Data PCB on MyTax.
If no employee has a PCB deduction that month, no file is produced, so a nil declaration has to be keyed in directly at LHDN’s portal.
My staff already resigned. How do I close her tax file, I mean the PCB and the CP22?
Start with the cessation, not the payroll.
Go to HR Menu > Cessation, create the cessation, process her final payroll, then close that payroll dashboard before the next month’s run.
Her CP22A is then generated from the Payroll menu, and you submit it yourself at mytax.hasil.gov.my under ezHasil Services > e-SPC > Permohonan Secara Kelompok > CP22A, keying in the details or uploading the file and saving the acknowledgement.
Note that the CP22/CP22A transaction-code mapping is a one-time setup our support team performs for your company. If Part B comes out empty, that mapping has not been done yet, so message us and we will set it up.
CP22 for new hires works the same way: pick a report date and a date-joined period, and everyone who joined in that window comes out on the form. A mid-year leaver’s EA form can be generated for the months she was paid, without waiting for December.
If we want to include our part-timers in Form E at the end of the year, how does Panda handle this?
The same way as anyone else, through the Payroll module.
A part-timer flows into Form E and CP8D like any other employee: they need an employee profile and their pay must run through the Payroll module. As long as there are payroll records for the year an EA form can be generated, and once that EA is posted they appear in the CP8D and Form E.
For hourly staff, key the hourly rate into the Basic Salary field and set Salary Count By to Hourly, otherwise the payroll run skips them.
Also check that Tax contribution is enabled under HR Menu > Employee Profile > Payroll > Statutory > Tax — if it is switched off, the EA form will not generate for that person.
Can my staff download their own EA form, or must HR print one for every single person?
Staff download it themselves from the mobile app.
Employees download their own EA form from the Pandahrms mobile app, in the same place they get their payslip, clock in and apply for leave.
It appears once HR has generated and posted that year’s EA under Payroll Menu > EA. If the EA is unposted for a correction, it disappears from the employee’s side until it is posted again.
Staff who have gone through cessation can still log in to view their payslip and EA form, which saves HR digging out copies for ex-staff — though we can block a leaver’s login if you prefer.
Leave, claims and benefits
Why is everyone showing the same 14 days annual leave? Our policy gives more after 2 years and 5 years.
Annual leave is tiered per leave code, not one figure for everyone.
Annual leave is set per leave code with tiers by years of service — for example 14 days for 0–2 years, 16 for 2–5 and 18 for 5 years and above. Where different groups of staff sit on different ladders, our support team creates separate employee categories or leave entitlement groups, each with its own tier table, and you then assign employees into them.
You also choose how the entitlement behaves:
- Computed by calendar year or anniversary year
- Granted upfront or earned by month
- Whether only confirmed staff carry a balance, so people on probation show zero
If your figures look wrong it is almost always one of those settings, or a Service Effective Date that does not match the join date, and support will check the leave code with you.
One limit to know: the system cannot split one year into two entitlements (for example 20 days January–April then 22 days from May) — the change applies to the whole leave year.
Can staff bring forward last year’s unused annual leave, and what happens if they don’t use it?
Yes, but you must run the carry forward at year end.
It is a year-end action, not silent automation. At year end you run the carry forward from Leave Menu, and the carried days are held under Leave Menu > Process > Carry Forward Adjustment with a maximum number of days and an Effective From / Effective To window (for example 1 January to 31 December 2026).
Anything still unused after the Effective To date is forfeited. When an employee takes leave the system deducts the carry-forward balance first, before touching the current year’s entitlement.
If someone needs more time, the expiry date can be edited in that same screen, or the days treated as advance leave that the employee earns back over the year.
One case to raise with us: a leave applied before the Effective To date but taken after it needs the carry-forward window set correctly, so check the balance after year-end.
If someone joins in June or resigns in July, is their annual leave prorated automatically?
Yes, for both joiners and leavers.
A mid-year joiner is prorated by calendar days from the join date — 8 days entitlement from 25 February 2026 gives 8 / 365 x 310 = 6.79 days, not an even monthly split. If the figure looks wrong, the join date or Service Effective Date is usually the cause.
For a leaver you create the cessation under HR Menu > Cessation and set the Leave Computation Date to the last working day. The system re-prorates the entitlement and works the unused balance into annual leave encashment, calculated as basic salary / 26 x encashment days.
Please still check that encashment figure against the prorated balance. If the cessation was created after payroll ran, it can be reverted, corrected and recalculated.
Staff who work on a rest day get replacement leave — how does the expiry work?
Expiry runs from the date worked, not the application date.
Replacement leave is credit-based: the staff member raises a Replacement Leave Request for the day worked, and once the supervisor approves it a credit appears in their balance.
Expiry runs from the date actually worked plus the effective period you set — 27 June 2025 with a 12-month period expires 26 June 2026, not 12 months from the application date — and unused credit is forfeited. Once a credit has expired the date cannot be extended; the workaround is to create a fresh credit starting from the original expiry date. Expiry runs from the replacement date rather than a fixed calendar year.
Note two things: replacement leave must go through the Replacement Leave function rather than the general Leave Application, and the replacement leave request itself cannot carry an attachment today.
Can we create our own leave types? We need one for prolonged illness and one for work from home.
Yes, our support team builds the new leave code with you.
Codes such as Work From Home, Examination Leave, Convocation Leave, On-Site and Quarantine Leave have all been set up for clients. In practice our support team builds the new code with you after confirming the rules:
- Entitlement days
- Whether half-day and backdated applications are allowed, and how far back
- Notice days required
- Who it applies to
- Any extra HR approval step
An admin with access can view and edit those settings afterwards under Setting Menu > Leave > Leave Code, and a code can be linked to a payroll transaction code so the leave lands as the right payment or deduction in payroll.
For six months full pay then six months half pay, the set-up is two codes — full pay 182 days and half pay 183 days. But be clear on this: the system will not switch from one code to the next when the first runs out, so HR has to make sure the full-pay code is used first.
Leave already approved but staff wants to cancel — how do we take it back?
Yes, an approved application can still be cancelled.
If the employee cancels it themselves it goes to Pending Cancellation and waits for the approver or HR to approve before the days return to the balance. If HR or the admin cancels on their behalf, no cancellation route is needed and the status shows Cancelled by Admin.
You do it from Leave Menu > Leave Application: select the application, click Edit and pick the specific date to remove, so a two-day application can be part-cancelled.
Once the leave has been transferred into a payroll run, only the HR admin can cancel it — the employee can no longer withdraw it, and employees cannot withdraw it themselves at that stage.
Can we set our own claim types, make staff attach the receipt, and cap medical at RM400 a year?
Claim types and caps, yes; a compulsory receipt, no.
Claim codes such as mileage, parking, meal and dental are set up for you, and staff submit a claim with the receipt date, amount, remarks and a photo of the receipt. There is no setting that makes the attachment compulsory, so a claim can still be submitted without one — approvers reject it if your policy requires the receipt. Attachments upload from the web system only — the mobile app does not yet support attaching documents to a claim or leave application.
Each claim runs through your approval route, usually HOD, and you can switch on two further HR stages in the system parameters: Verification (typically accounts payable) and Admin Approval, which is also where a wrongly chosen claim code gets corrected. A claim code cannot be edited by the employee once submitted, so otherwise it must be cancelled and re-submitted.
Approved claims link to a payroll transaction code so the amount reaches the payslip, or export through Claim Payment to be marked as paid, with everything traceable in the Claim Application Report.
A yearly or per-employee cap — medical RM400 a year, or dental by job grade — sits in the Benefit module instead: a benefit code with a Benefit Entitlement per job grade, applied under Benefit Menu > Application > Benefit Application, with the amount used deducted from the remaining balance.
Half my workers will not use the app. Can HR key the leave in for them?
Yes — HR applies on their behalf and it is approved at once.
Under Leave Menu > Create Leave Application an admin selects the employee, the leave type and the dates. The screen shows that employee’s usable balance, and the system blocks the application if the balance is not enough.
There is no approval step for admin-entered leave — the application is approved immediately and the balance comes down straight away. The record shows the requester as the admin rather than the employee, so months later it is still clear who entered it.
Staff who do use the app carry on applying for themselves, and they can also apply through the website. Both routes feed the same leave records and reports, so you do not need every employee on the app for the records to be correct.
Can we force staff to apply for leave a few days ahead, and block last-minute annual leave?
Yes — set a minimum notice period on each leave type.
Every leave code has its own days-required-before-applying setting. Annual leave might need three days or a week, while sick leave needs none. An application that breaks the rule is blocked at the point of applying, so HR is not the one saying no.
The rule is one number per leave code — it cannot vary with how long the leave is. A company that wants a month’s notice for long unpaid leave but only a few days for a single day off handles it with separate leave codes, each carrying its own notice rule.
For genuine emergencies, pair the notice rule with an emergency leave code that has no notice requirement and shares the annual leave balance, so a last-minute day still comes off annual leave. The rule governs future-dated applications only; whether leave already taken can be keyed in afterwards is a separate backdating setting on the leave code.
My staff cannot apply for replacement leave — the balance shows zero.
Replacement leave is two steps — the credit has to be requested first.
Working on a rest day or a public holiday does not create a leave day by itself. The employee first raises a Replacement Leave Request for the day worked — this goes through the Replacement Leave function, not the general leave application. Once that request is approved, the credit appears in their balance.
Only then can the day off be applied for, as a leave application that uses the earned replacement credit. Until the request has been approved, the balance stays at zero and there is nothing to apply against. An admin can also add the credit for an employee from the Leave menu, which helps when the day worked was never requested at the time.
Many new admins trip on this, because requesting the credit and applying for the leave feel like one action. If the balance shows zero, check whether a request for the day worked was ever submitted and approved.
What is emergency leave, and does it come out of the annual leave balance?
It can — sharing the annual leave balance is a setting.
Emergency leave is for the person who only finds out that morning and so cannot meet the advance-notice rule on annual leave. Many companies set the emergency leave code to share the annual leave balance, so a day of emergency leave reduces annual leave by a day — it is not an extra pot of days.
With that setup, once annual leave runs out the system blocks emergency leave too, and the only option left is unpaid leave. Other companies prefer the opposite: emergency leave that leaves annual leave untouched and is deducted from salary instead, like unpaid leave. Both are settings on the leave code, so the system follows your own policy.
A company can also make an attachment compulsory on the application — a letter or a photo. That too is a setting on the leave code.
My staff didn’t come in the day before a public holiday. Why is the holiday marked absent too?
That is the sandwich rule, and it is deliberate.
Under the Employment Act, an employee who is absent without the employer’s consent or a reasonable excuse on the working day immediately before or after a public holiday is not entitled to holiday pay for that holiday. Pandahrms follows this by default: when the timesheet shows an unexcused absence next to a public holiday, the holiday itself is marked absent as well, and both days are deducted when attendance is imported into payroll.
Approved leave is different. If the employee applied for leave and it was approved for the day before or after, the company has consented to the absence, so the public holiday stays paid. It is the approval that clears the marking — an application still waiting for approval reads as absent until it is approved.
If your own policy is more forgiving, an admin with the right access can amend that day on the timesheet and the holiday is paid as normal. As with any attendance edit, the change is recorded.
Can staff submit a claim without attaching a receipt?
Yes — the system accepts it, so approvers enforce your receipt rules.
There is no setting today that makes a receipt attachment compulsory on a claim, so a claim submitted without one will go through. Your receipt policy is enforced at approval instead. Whoever approves — the HOD, plus the Verification and Admin Approval stages if you have switched those on in the system parameters — sees every item with its attachment. Any item that arrives without a receipt can be rejected with a remark, and the employee resubmits it properly.
Attachments work one receipt per claim item. If an employee has several receipts under the same claim type — say three petrol receipts — they submit three items with the same claim code inside one draft, each item carrying its own receipt. Everything in that draft shares a single claim number, but approval is item by item, so one missing receipt does not sink the whole claim. At the Admin Approval stage, HR can amend an item’s amount or claim code but not its attachment — the fix for a missing receipt is to reject that item and key it in afresh with the receipt, which HR can do on the employee’s behalf.
Leave is different: a leave type can require an attachment, so sick leave, for example, can be blocked until the MC is uploaded. Claims do not have that switch yet — if a receipt must be checked before money moves, make the Verification stage (typically accounts payable) your checkpoint.
Can we stop two staff from taking leave on the same day?
Yes for a named colleague, through the backup person setting.
Each leave type carries an Enable Backup Person setting. When it is switched on, a staff member applying for leave can name a colleague as their backup for those dates, right on the application form. That colleague is then blocked from applying leave on the same days — the system rejects the application with an error.
It works one-to-one. If one supervisor takes a festival day off and names a second supervisor as backup, the second cannot apply for that day, but nobody else in the department is affected. The backup is chosen by the applicant at the point of application, not keyed in by HR — so the block only bites when a backup is actually named.
There is no department-wide quota — you cannot set a rule such as a maximum of two people from one team on leave per day. That judgement stays with the approver: a staff-on-leave calendar shows whose leave is already approved on any date, so a clashing application can simply be rejected. If your worry is last-minute leave rather than clashes, a minimum notice period can also be set on each leave type.
If we rehire a former employee, does their annual leave start from zero again?
Only if you choose — one profile date decides it.
Pandahrms keeps two dates on the employee profile: the join date and the Service Effective Date. For most staff they are identical. For a rehire they can differ, and that difference is what decides the leave calculation.
If your policy is that a returning employee starts fresh, set both dates to the new joining date and the annual leave entitlement is calculated from zero, prorated from the day they return. If you recognise their earlier service, keep the Service Effective Date at the original joining date — the system then counts the earlier years towards their service, so any higher leave entitlement tier their combined service has earned applies straight away.
Either way, you reactivate the old profile rather than creating a new one — the system will not accept a second profile with the same IC number. That also keeps a clear record of the resignation and the rejoin in one place. Our support team can walk you through the reactivation steps when it happens.
Can staff on probation take annual leave and MC?
MC yes, from day one; annual leave depends on your setting.
Each leave type in Pandahrms is a leave code with its own rules, including which employment status qualifies for it. In the most common setup, sick leave is open to everyone from the start, so staff on probation apply for MC as usual, while annual leave is reserved for confirmed staff.
That mirrors what many Malaysian companies practise: annual leave builds up during probation but is taken only after confirmation. If your handbook is different — say probationers may take annual leave straight away, or replacement leave is earned regardless of status — the leave rules are configured to match your policy during onboarding, so tell us your probation policy up front.
The probation itself is tracked for you. Each employee profile carries a probation period in months, and the dashboard flags staff who are due for confirmation. You then confirm them — or extend the probation — from the HR Menu rather than editing the profile by hand. Once confirmed, staff apply for annual leave like any other confirmed employee.
Getting started and migration
How long before we can actually start using it?
Our internal target is go-live within about two months.
Once your subscription starts you get a named onboarding PIC and a kickoff meeting covering system setup, the migration template and the timeline. Our internal target is go-live within about two months of your subscription date.
Honestly, though, the pace is set by how fast your side returns the completed template. Accounts where the data does not come back sit unfinished for far longer, and that is the single biggest cause of delay.
If you have a particular month in mind for going live, tell us and we will work backwards from it, so the handover lands at the start of a payroll cycle rather than in the middle of one.
What data do we need to give you to get set up?
Employee, attendance, leave and payroll data, plus company details.
The standard set is:
- Employee master data
- Current-month attendance records
- This year’s leave entitlements and balances
- This year’s payroll history
- Any existing HR reports or exports
We also collect your company details (registration number, address, financial start month), your EPF, SOCSO, LHDN and HRD Corp employer reference numbers, your payroll cut-off period, public holiday dates, work schedules and duty rosters, and the site addresses for geofenced clock-in.
We email you a migration template — fill in the green tab only — and you send it back to support@pandaworks.net. If you already hold the same information in your own reports, send those instead; you do not have to retype anything into our format.
We are using SQL Payroll / UBS / just Excel now. Can you pull our data out?
Yes, we extract it for you.
For UBS Payroll & HR we work from your backup files, or you share an AnyDesk ID and we extract the data remotely with you on the call.
For SQL and other on-premise systems we schedule a remote session (UltraViewer or AnyDesk) and export the employee master data with you.
If you are on another payroll system or on nothing but Excel, send us the payroll listing in Excel and our team does the mapping into our template — you do not do it yourself.
If we only start in the middle of the year, can you bring in the payroll we already ran for January onwards?
Yes, and you should.
Send this year’s payroll listings in Excel and we migrate them month by month, so year-to-date figures are in place and PCB, EPF, SOCSO and EIS keep calculating correctly from your first live run. Migrated months sit in the system and payslips can be generated for them.
If an employee’s earlier months were paid by a different company, those go in as Previous Employment Income instead — the amounts count towards tax but no payslip is produced, and the employee gets two EA Forms.
Flag any corrections to the earlier months before go-live, because PCB from your first live payroll is only as accurate as the history we load.
Can we run it side by side with our current system first before we fully switch over?
Yes, and we plan for it.
We schedule a parallel run session online, process that month’s payroll in Pandahrms while your existing system runs as usual, then compare results line by line.
Expect differences at first, usually because OT, incentives or commission are not imported yet, or a statutory setting still needs adjusting.
Groups with several outlets or entities normally parallel one or two outlets first rather than everything at once. Cutting over at the start of a payroll cycle is cleanest; going live mid-cycle means running two systems for a month.
Is there proper training, or do we just watch YouTube ourselves? And what does the setup fee actually cover?
Training is live and guided, not self-serve.
Sessions run online over Google Meet, module by module — the first covers HR, Leave and Attendance plus a review of your settings, the next covers Payroll — and we follow up with meeting minutes and the session recording. A physical session can be arranged instead if you prefer.
Written user guides and video walkthroughs at pandahrms.com/youtube-video/ sit on top of that, not in place of it.
The setup fee is one-time and paid before work starts. It covers domain setup, system configuration, data migration, and the training sessions including your first payroll run; it is quoted with your plan, and there is no second setup fee at renewal.
What if the migrated figures don’t match what we actually paid our staff?
We trace every difference to its cause before you go live.
Differences in the first month are normal — the parallel run exists to surface them, and each one is treated as work to finish, not something you live with. To make checking easy, our team can arrange a payroll report with the same columns as your old system’s — send us a sample of the old layout — so you put the two side by side and see straight away which employees are out.
Tell us who differs and we go through those employees with you, tracing each gap to its cause instead of patching the figure. The usual culprits are:
- A setting not configured yet — an overtime or deduction formula, or a statutory tick on a pay item that does not match your old system’s
- An item that missed the import — a commission or ad-hoc deduction, which is keyed back in through Express Entry
- Migrated history — for example, previous income on an employee’s profile pulling the PCB a different way
Occasionally the two systems genuinely calculate differently — daily-rate rounding is the classic case — and then we show you both workings and agree the approach with you, rather than pretend the cents will ever match. Either way, you do not cut over until you are satisfied the figures tally.
How do my staff log in the first time, and what is the password?
Their employee number, and the last six digits of their IC.
There is nothing for staff to register. As soon as an employee profile is created in the system, the account already exists — staff download the PandaHRMS app, scan the company QR code we give you once during setup, then sign in with their employee number as the username and the last six digits of their IC as the default password.
Foreign workers without a Malaysian IC use their year and month of birth (YYYYMM) as the default password instead, and no personal email address is needed.
After the first login, staff can change the password themselves from the setting menu in the app. Admin accounts work differently — admins sign in through the web browser, and we hand over the admin login link and details during onboarding.
Group companies, foreign workers and access
I have four companies and twelve branches. Can I run them all in one Pandahrms account?
Yes, one account can hold all of them.
Each company is set up as its own company profile with its own registration number and its own EPF, SOCSO, LHDN and HRD Corp employer reference numbers, so payroll, statutory files and bank files are produced separately per company.
You work in one company at a time, picking it from the company selection page after you log in. There is no combined cross-company payroll view, and cross-company reporting is a known rough edge our clients have raised.
New company profiles are created by our team, so send us the registration and employer reference numbers and we will build it. For some groups we recommend the opposite approach — one consolidated company profile with Cost Centre separating the entities — and we will advise which suits you before we build.
One of my staff draws a salary from Company A and also from Company B. How does the system handle that?
He gets a separate employee profile under each company.
He has his own employee number in each company, and each company runs its own payroll and issues its own payslip for him.
This needs the system parameter “Create Employee Profile – Prevent Duplicate NRIC across Companies” switched off first, which we set for you.
In the app he cannot see both companies’ payslips at once — he selects the company he wants to view. Where a contribution only needs to be made once across the group, such as SKBBK, you nominate the single company profile it is deducted under.
If I move a staff from Company A to Company B in the group, does he lose his leave and records?
No, records can be brought across, but external transfers are fiddly.
There are two transfer types at HR Menu > Process > Employee Transfer. Internal Transfer is a move inside the same company — department, division or category — where service years and entitlement carry on and only one EA form is produced.
External Transfer moves him to another company in the group: his clock-in/out records and applied leave can be brought across based on the effective date, and if he already has a profile there you tick “Link to Existing Employee Profile”. Because the two companies are separate employers he gets two EA forms, and the old profile is set Inactive from the transfer date so payroll can no longer be run there.
External transfers are fiddly in practice — every pending leave, clock-time and claim application must be cleared first, and leave entitlement does not always carry over when the new profile has a later date joined — so run the first ones with us rather than on your own.
Most of my workers are foreign workers with no IC and no email address. Can they still use the system?
Yes, and no personal email address is needed.
Leave the NRIC field blank — this is not optional, because a filled NRIC makes the system treat them as local — and record the passport under the Immigration section of the profile.
Their app login is their employee number with a default password of their birth year and month (YYYYMM), against IC last 6 digits for locals.
Date of birth, gender and marital status must be keyed in, because SOCSO category and PCB are worked out from them.
How does the system handle EPF, SOCSO and tax for foreign workers?
EPF is not chosen by nationality — it is set per employee.
The employee and employer percentages are set per employee at HR Menu > Employee Profile > Statutory. HR keys in the rate that applies and payroll then calculates it every cycle.
For SOCSO, the 12-digit Foreign Worker Social Security Number PERKESO issues at registration goes into the SOCSO account number field in the same Statutory tab, otherwise the PERKESO file is rejected on upload.
Tax residency is separate, under Employee Profile > Profile > Personal Info: a non-resident is taxed at a flat 30% with no personal reliefs. Once the worker has actually been in Malaysia 182 days or more in the tax year you change the residency status and recalculate the payroll dashboard.
Note the system generates the statutory files — you still upload them to KWSP, PERKESO and LHDN yourself.
I want my branch manager to see attendance but not salary. Can I control who sees what?
Yes — two separate settings do it.
The Module Access Template controls which menus a user gets (full Attendance, no Payroll, for example), while Access Level and the Profile Access Template control which employees she can open at all, so an outlet admin can be limited to her own outlet and blocked from opening her own profile.
Payroll Profile Access is the permission that exposes salary figures, so it stays off for anyone who should not see pay. One honest catch: a few reports, such as Confirmation Due Listing, will not return data without it, and for those we have someone with access run the report instead.
If you run several companies, an admin account can be restricted to named companies only. Tell us what each account should do and we will build the templates.
Our leave has to go to the HOD first, then HR. Can the system follow that approval route?
Yes — each employee is assigned to an Approval Route Group.
The group defines the levels — Level 1 HOD, Level 2 HR, Level 3 Management, as many layers as you need — with the application only moving up as each level approves.
The same routes drive leave, overtime, claim and clock-time applications. Claims has two further optional stages after the route: Verification, usually done by Accounts Payable, and Admin Approval.
Route groups span the whole account, so assigning an employee to the wrong group can put an approver from another company on his route. If someone’s leave or clock-in applications sit unapproved and never reach anyone, the usual cause is that the employee was never assigned to a route group at all.
What happens to leave and overtime approvals when the manager is on leave?
Set a backup approver, or let an admin approve on behalf.
An Approval Route can carry a backup approver alongside the main one. If the main approver takes no action within the number of days you set, the pending application passes to the backup automatically — and it stays with the backup rather than bouncing back. There is also a CC setting, so someone else is notified as each approval is made.
Instead of levels, a route can also be set so that either of two named approvers clears the application — once one approves, the other does not need to act. That suits a manager who is often travelling. It is a choice made when the route is set up; a multi-level route, HOD first and then HR, still approves in turn.
An admin can also approve a pending application on behalf of whoever it is waiting on, because admin accounts see the pending applications of every employee under their access — an HR admin across the whole company. On a multi-level route the sequence still runs, so approving on behalf of Level 1 moves the application on to Level 2 rather than clearing the whole chain.
Which of these you rely on is worth deciding at setup. Otherwise the first time a manager goes on leave, a fortnight of applications sits waiting.
Can my managers share one admin login to approve OT and leave?
You can, but you should not — each approver gets their own login.
Nothing physically stops a few managers passing one username around, but every approval then carries that single name. The system keeps a record of who approved and who changed what, and a shared login makes that record useless — when a figure is questioned later, you cannot tell which manager did it.
The proper setup is one account per approver, each restricted to their own team. A manager then sees and approves only the applications of the employees placed under them — OT, leave, clock time and the rest — while your HR admin keeps full access across everyone. There is no rule of one admin per company; it is normal to run several admin accounts side by side.
Not every approver needs a full admin account either. Approval rights can be attached to a manager’s ordinary employee account, which is often the safer choice, because an admin account carries wider access than an approver needs. Tell our support team who should approve what, and they will set the accounts up for you.
Will the system remind us before a work permit or passport expires?
Yes. Record the expiry date and the system reminds you in advance.
Each employee’s profile has an Immigration section where you record passport, visa and work permit details together with their expiry dates. You choose how far ahead of the expiry date you want to be notified, and the system watches the calendar for you.
The reminders surface as due tasks on the HR dashboard. You see a list of the employees whose documents are coming up for renewal and can click through to act on each one. The same area also flags probation ends and upcoming retirements, so document renewals sit alongside your other HR deadlines.
To be clear, the system tracks and reminds — it does not file anything on your behalf. The actual permit or visa renewal still goes through the relevant authorities or your agent.
The product, support and the company
Who is actually behind Pandahrms? Can you send me something on your company background?
Pandaworks Sdn Bhd, a Malaysian company in HR and payroll since 2012.
Pandahrms is built and run by Pandaworks Sdn Bhd, a Malaysian company that has been in the HR and payroll business since 2012.
Pandaworks is also an HRD Corp Registered Training Provider, so the training we run can be submitted as an HRDF levy claim, though the approval decision always rests with HRD Corp.
The system is 14 modules, and you can start with only the modules you need. They cover:
- HR records
- Payroll
- Time attendance
- Leave
- Claims
- Training
- Performance
Is this a cloud system or do we have to install it on our own server? Where is our payroll data kept?
It is cloud-based — there is nothing for you to install.
Your company gets its own web address (for example yourcompany.pandahrms.com). HR and admin staff log in through a normal browser, employees use the mobile app, and there is no server for you to maintain.
The servers are run by our hosting provider. Backups are taken so the system can be restored to a recovery point if there is an incident, and updates are pushed centrally with a release note.
We used to sell an on-premise version installed on the customer’s own server. It reached end of life on 31 July 2026 and is no longer offered, and existing on-premise sites have to migrate to our hosted environment — a chargeable migration — to get mobile app features at all.
What can my staff actually do in the app, and do all of them need an email address to use it?
No email address is needed.
Staff download the PandaHRMS app, scan the QR code we give you once during setup, then log in with their employee number and a default password — the last six digits of the IC for local staff, or year and month of birth (YYYYMM) for foreign workers.
In the app they can:
- Clock in and out with GPS inside the geofence you set
- Apply for leave
- Submit claims — the receipt photo is uploaded from the web system, not the app
- Download their own payslip and EA Form
Admin work is web-only — admin accounts cannot log into the app. Staff who have left keep app access to view past payslips and EA Forms unless you ask us to block them.
Can the reports come out in the format we want? My boss wants specific columns every month.
Yes for most, but our team sets the layout up for you.
Every module has its own reports and most can be printed or exported to Excel.
On payroll, Payroll Menu > Report > Master Payroll runs off report templates whose columns can be arranged to suit you — for example moving a paid medical claim into the Allowance column, or splitting allowance and deduction listings. Our support team sets that up on request rather than you configuring it yourself.
Send us a sample of the layout your accounts or audit team needs and we will tell you straight what is possible. Some things genuinely are not — signature columns on the Timesheet Listing report, for instance, are not supported — and anything beyond the standard templates may carry an additional charge, which we quote before starting.
Can Pandahrms link with our accounting system and with the thumbprint machine we already have? Do you have an API?
Devices often yes; accounting systems, no live link.
On devices: FingerTec terminals sync through our TA Downloader / Ingress, which our team installs on the PC connected to the clock. ZKTeco terminals can push to us by pointing the device’s cloud server address at timebridge.pandahrms.com. Send us the brand and model first, because not every device is supported and we will tell you straight if yours is not.
On accounting, there is no live link into SQL Account or AutoCount. You export payroll to Excel and your accounts team keys or imports it, with the Master Payroll report giving the summarised figures.
We also have JSON data endpoints for Employee, Leave and Timesheet master data that a customer feeds into Power BI, released on request and issued with an access key by our team.
Pandahrms does not issue or submit e-Invoices to MyInvois — that stays with your accounting or ERP system.
After we go live, who do we call when something goes wrong with payroll?
A dedicated WhatsApp group with a named onboarding PIC and our support team.
That group stays open after go-live, and most customers simply ask there. You can also email support@pandaworks.net, which raises a ticket on our side; office hours are Monday to Friday, 9.00am to 6.00pm.
Training is run with your team during onboarding and can be repeated later for new admin staff. There are also step-by-step videos on our YouTube channel for the app and the main payroll functions.
For payroll matters you would rather keep private, we set up a separate confidential group with only the people you name. And if you would rather not run payroll in-house at all, we also offer a fully outsourced payroll service, quoted separately from the software.
Does the system track probation and generate the confirmation letter?
Yes — it tracks probation due dates and issues the confirmation letter.
Set each employee’s probation period, in months, in their profile. When the probation falls due, the dashboard flags it for you — the system never confirms anyone automatically, because every company handles this differently. You decide what happens next: confirm the employee, confirm them early, or extend the probation.
Confirmation is done through the Employee Confirmation screen rather than by editing the profile directly, so the change is recorded in the employee’s job history along with any salary revision that comes with it. If someone is not ready, choose the extend option instead and the probation is pushed out until you confirm them later.
On letters, the system currently supports the confirmation letter, the salary adjustment or increment letter and the promotion letter, produced on your own template — give us your letterhead or letter template and we load it into the system. The letter is generated as part of the confirmation step and posted to the employee’s profile, where they can view and download it once the confirmation is done. Offer letters and bonus letters are not built in, so those still come from your own documents.
Do you have a performance appraisal module?
Yes — a dedicated module for KPIs and appraisals.
The performance module has two halves: KPIs and appraisals. Admins assign KPIs with a target and a weightage, and employees update their own progress at the frequency you set — monthly or quarterly, for example. Employees can propose their own KPIs too, with edits going to their manager for approval.
Appraisal cycles are built from the pieces you choose:
- KPI scores — pull an employee’s active KPIs into the form so achievement feeds the rating
- Competencies — qualitative measures such as teamwork, communication and leadership
- 360 feedback — structured forms sent to colleagues, not just the direct superior
- Self-reflection — free-text questions the employee answers about their own year
One cycle can serve different purposes — probation confirmation, annual review, promotion, or a performance improvement plan — and ends with the appraiser’s recommendation to HR. It costs RM8 per employee per month, or RM5 as an add-on to an Essentials plan.
Two honest notes: this is our newest module, so we would rather walk you through it live than describe it. And appraisal scores do not automatically drive bonuses or increments in payroll — most companies weigh other factors too — though you can export the results to Excel.
Can I send an announcement to just one outlet, or a document to one employee’s phone?
Yes — the notice board targets any employee group, even a single person.
The notice board sits in the HR hub that comes with Pandahrms. You post a notice with a title, a message, an effective date and an attachment, and your employees see it under News in the Pandahrms mobile app. They can open and download the attachment, so it works for a PDF memo, a policy document or a public-holiday notice.
Each notice carries a target, so it does not have to go to everyone. You can target by employee group, category or access level — one outlet’s staff can be a group that receives its own notices. There is no targeting by individual employee number, but the same approach reaches one person: create an employee group containing just that employee and target the notice at it.
One honest limit: do not count on a pop-up alert. Employees see the new notice flagged in the News tab the next time they open the app, and if you delete a notice on the web it disappears from their phones as well.
After we go live, is support included in the price or do you charge each time we ask for help?
Included — ongoing support is not billed per question.
Day-to-day support is part of your subscription. Questions in your support WhatsApp group, guidance on settings and help when a figure looks wrong are all covered, and we do not bill them one by one or set a quota of questions. When something is too complicated to sort out in chat, we move to a Google Meet session, again at no extra charge.
Training works the same way. Your onboarding training, including running your first payroll together with our team, is covered by the one-time setup fee, and we do not cap it at a fixed number of sessions — a refresher later, for example when a new admin takes over, is handled as support rather than billed.
What is quoted separately is distinct work, never routine help:
- the one-time setup fee at the start, covering account and domain setup, configuration, data migration and your training
- custom report layouts beyond our standard templates, which may carry an additional charge
- the fully outsourced payroll service, if you would rather not run payroll in-house
We quote any of these before starting, so there is no surprise invoice. From the second year onwards you pay the per-employee subscription only — there is no second setup fee.
Can my workers use the app in Malay or Chinese?
Yes — the mobile app comes in English, Malay and Chinese.
Each employee switches the language inside their own app, so your Malay-speaking crew and your Chinese-speaking staff can each run it in the language they read best, independently of everyone else. Clocking in, applying for leave, checking payslips and submitting claims all work the same in any of the three.
The web portal is English only, and that applies to everyone — the admin screens HR uses and the browser version employees can sign in to. There is no Malay or Chinese edition of the website.
There is no Malay or Chinese version of payslips or the standard reports either — those documents are produced in English. In short: workers on their phones get their own language, while anything on the web or in a document is in English.
Can Pandahrms track company assets like laptops and phones we issue to staff?
Yes — each employee profile keeps a company asset register.
Every employee profile in Pandahrms has a vehicle and asset section, part of HR Hub, the core employee database. You record what the company has issued — a laptop, a phone, an access card, a company car — along with the date it was handed over, and you can attach supporting documents to each entry. If an item type is not on the list, you can create your own.
The register earns its keep when someone leaves. When you create the leaver’s record under HR Menu > Cessation, the process shows a pending asset list of everything that employee is still holding and must return, so HR sees it before the last day instead of after. That saves you keeping a separate Excel file for it.
HR Hub is included with every subscription at no extra charge, so the register is not a paid add-on. To be honest about the limits: it is an issue-and-return record, not a full asset-management system. There is no dedicated form — the usual approach is to snap a photo of your own paperwork and attach it to the entry.
My workers are older and not good with phones. Do they all have to use the app?
No. The app is optional for each worker.
The mobile app is there for staff who want it, not a condition of using Pandahrms. The day-to-day essentials all have a route that skips the phone, so a worker who never opens the app can still be clocked, paid and given leave correctly.
- Clocking in — they punch at a biometric terminal at the door instead of using a phone.
- Leave — HR applies on their behalf, and the application is approved on the spot.
- Payslips — payslips can be emailed or printed as PDF, not only posted to the app.
For workers who are willing but hesitant, what they actually have to do in the app is small — clock in, clock out, check a payslip or a leave balance. Training during onboarding is live and guided, and there are step-by-step videos for the app that staff can follow at their own pace.
The one practical limit is the handset itself. The phone route needs a phone that can get online and run the app, so a very old device may not cope — those workers simply use the terminal instead.
No question matches that. Try a shorter word, or ask us directly.
Still not sure it fits your payroll?
Bring us the rule your current system cannot handle — the stacked OT, the outlet roster, the group entity split. We will show you how it runs.

