Payroll
39 min
the payroll module is for paying your staff — instructors, coaches, managers, front desk team it generates payslips (or whatever document name you choose), tracks payment status, and supports several common pay structures payroll is an optional module turn it on under settings → modules → payroll if you pay any of your team if you're a solo operator, you can leave it off 🚀 getting started after enabling the module, you'll see payroll in the sidebar with these sub pages sub page purpose dashboard at a glance pay totals and recent activity generate create a new payroll record (single or batch) records full list of all payroll records, filterable staff everyone payable — instructors and team members marked for payroll month audit downloadable monthly breakdown of gross, statutory deductions, net, paid, and outstanding settings pay types, allowances, custom deductions, statutory contributions, pay cycle, document numbering 👥 who appears in payroll staff the payroll staff list is the union of all active instructors — they're always payable team members marked for payroll — opt in via a checkbox on the team member's edit dialog (see below) each entry shows a instructor or team badge so you can tell them apart at a glance including a team member in payroll by default, team members aren't on payroll — most don't get paid (e g volunteers, owner family) for those who are paid go to settings → team click manage on the team member in the dialog, find the payroll section switch on include in payroll click save changes they now appear in the payroll staff list this doesn't change your billing team members already count toward your team member seat limit regardless of the checkbox — the toggle only changes whether you can issue them payslips 🏷️ pay types a pay type defines what a payment is for and how the amount is calculated manage them in payroll → settings → pay types calculation methods method when to use example flat (fixed) salary or one off payment rm 3,000 monthly salary per hour hourly pay tied to attendance rm 80/hour × 22 hours taught manual per hour hourly pay where you enter the hours yourself rm 20/hour × 15 hours typed in when generating per class pay per class taught rm 100/class × 18 classes % of student fees commission from student payments 30% of fees collected for this instructor's classes per hour, manual per hour, per class, and % of student fees only work for instructor payees — they pull data from class attendance, student payments, or per instructor rate lists, which team members don't have team members can only be paid using flat pay types per hour vs manual per hour there are two ways to pay by the hour — pick whichever matches how you work per hour — remmu reads the instructor's attended hours from attendance records and multiplies by their rate fully automatic, no typing manual per hour — finance staff enter the hours worked by hand when generating payroll the instructor can have several named rates (e g rm 10/hr, rm 20/hr, rm 50/hr) and hours are entered against each best when hours aren't tracked through attendance, or when different work is paid at different rates rates for manual per hour pay types are configured in payroll → settings → hourly rates (see below) — not as a single default amount on the pay type statutory deductions malaysian statutory contributions — epf, socso, eis, pcb — are controlled in payroll → settings → statutory deductions each is a master on/off switch for your whole organisation epf, socso and eis auto calculate from gross taxable earnings; pcb is entered manually per record each pay type separately marks which schemes it counts toward (the green tags on the pay types list) the two work together the pay type's tag says "include this pay in the epf base " the statutory deductions switch says "epf applies to this organisation at all " a deduction only happens when both are on if a pay type shows an epf tag but epf is switched off in statutory deductions, the tag appears struck through as epf (off) and nothing is deducted to start deducting epf, turn it on in statutory deductions — you don't need to touch each pay type document label each pay type has a document label (e g "payslip", "payment voucher", "commission statement") this is what prints as the heading on the pdf — set it to match what your business calls the document for that pay type recurring pay types pay types can be marked recurring when recurring, remmu auto generates a payroll record every month for any staff member who has a rate set for that pay type — no manual entry needed payroll runs on a monthly cycle; for weekly or one off pay, create the record manually instead the pay cycle is the same for every pay type and every staff member all recurring payroll — fixed salary, hourly, per class and commission — generates on one configured day of the month, billing for the month that just ended so if your pay cycle is the 3rd, then on the 3rd of june every may payslip is created together this is set once in payroll → settings → pay cycle and applies to your whole organisation generating after month end means attendance and commission figures are final before payslips are created pick a slightly later day (e g the 3rd or 5th) if you want a buffer to correct attendance first recurring also controls which staff appear in bulk generate , and which allowances/deductions ride along on a payslip to bulk generate or auto generate hourly, per class, or commission pay — or to have an allowance applied every month — edit that pay type and turn recurring on non recurring pay types and allowances are entered manually ➕ allowances allowances are extra earnings added on top of base pay — travel allowance, phone allowance, meal allowance, bonuses manage them in payroll → settings → allowances each allowance has field notes name e g "travel allowance", "phone allowance" default amount (rm) used when no per staff amount is set recurring when on, the allowance is added to every monthly payslip for staff who have a rate set subject to statutory epf / socso / eis / pcb toggles — off by default , since most allowances (reimbursements) aren't statutory switch on for allowances that genuinely count toward a scheme's base, e g a fixed living allowance allowances appear as separate earning lines on the payslip and in the bulk generate breakdown ➖ custom deductions custom deductions are take backs subtracted from pay — late penalties, salary advance repayments, uniform fees, loan instalments manage them in payroll → settings → custom deductions each deduction has field notes name e g "salary advance repayment", "uniform fee" default amount (rm) used when no per staff amount is set recurring when on, repeats every month — useful for instalment style repayments subject to statutory epf / socso / eis / pcb toggles — off by default turn on only for pre tax deductions that reduce a scheme's base (e g an approved medical insurance scheme) allowances and custom deductions are statutory aware the "subject to" toggles decide whether each line is included when epf / socso / eis / pcb are calculated — letting you model exactly which earnings are statutory and which aren't ⏱️ hourly rates hourly rates power the manual per hour calculation method instead of one rate per instructor, you keep a list of named rates — and finance staff enter hours against each rate when generating payroll manage the tenant wide list in payroll → settings → hourly rates it's a simple repeater — add a row for each rate field notes rate name what the rate is for, e g "standard", "private", "workshop" amount per hour (rm) the hourly rate add as many rows as you need, then save rates this list becomes the default every instructor uses for manual per hour payroll custom rates per instructor an instructor can have their own rate list instead of the global one on the instructor's profile, the manual hourly rates section shows using global rates — the instructor inherits the tenant wide list (the default) custom rates — an admin has set a custom list just for this instructor to set custom rates open the instructor's profile, find manual hourly rates , click edit , and add/rename/remove rows freely click save to go back to the shared list, click reset to global only admins manage hourly rates — both the global list and per instructor overrides an empty custom list always means "use the global list " 💸 generating a payroll record go to payroll → generate and fill in field notes staff pick from the unified payroll staff list (instructors + included team members) pay type filtered by what's compatible with the selected staff (team members only see flat) reference month the month this pay record relates to period start / end required for hourly / per class — the window to pull attendance from amount auto filled from the staff member's rate when available adjustment (+/−) bonuses, deductions, allowances optional reason field due date when you intend to pay description / notes optional context auto fill from attendance (per hour / per class) for rate based pay types, click fetch from attendance remmu counts the instructor's attended sessions in the period and multiplies by the configured rate auto fill from student payments (commission) for percentage based pay types, click fetch from student payments remmu sums all paid student payments for classes this instructor teaches in the period and applies the configured percentage bulk generate to create payroll entries for many staff in one go, go to payroll → generate → bulk generate pick the reference month the payslips are for remmu shows a preview split into two groups calculated pay — staff with a recurring fixed / attendance / commission rate each row shows the net pay , calculated automatically every eligible row is pre selected manual per hour — every active instructor with hourly rates configured each row expands to an hours input per rate — type the hours worked against each rate, and the row total updates live expand any calculated row to see the full breakdown — base pay, each allowance, epf / socso / eis / pcb, gross, and net for manual per hour rows, expand and enter hours — the row becomes selectable once it has hours hours are autosaved as a draft , so you can come back later and pick up where you left off untick anyone you want to leave out, then click generate entries bulk generate uses the exact same calculation as the automatic monthly run, so the previewed gross and net pay match what the generated payslip will show allowances and deductions added to a staff member under allowances & deductions (on their instructor/team profile) are automatically included on every generated payslip — provided the allowance/deduction pay type has recurring switched on and the adjustment's date range covers the reference month each row in that panel is tagged recurring or one off so you can tell which auto apply they appear as separate lines in the breakdown staff who already have an entry for the chosen month are listed under will be skipped and are never duplicated all bulk generated entries are created as unpaid (pending) — mark them paid from the payroll list once each staff member has been paid manual hour drafts (resumable) when you enter hours for instructors paid per hour, your input auto saves as a draft keyed by month and instructor if you leave the bulk generate page and come back later, your previously entered hours are pre filled drafts are cleared once the payroll record is generated this means you can stage payroll over several sessions — gather attendance figures, review with the manager, adjust — without losing what you've already entered ✅ approval workflow (team generated records) team members with payroll permissions can generate records but cannot self approve records they create start in an awaiting approval state awaiting records are flagged in the payroll list and month audit with an awaiting badge only an admin can approve them — admin opens the record and clicks approve only approved records can be marked as paid this adds a sign off step when payroll is delegated to a team member records generated directly by an admin are already approved and skip this step 📊 payroll month audit payroll → month audit gives finance a full, downloadable breakdown of one month's payroll pick the reference month and see summary tiles — staff count, gross, statutory deductions (epf + socso + eis + pcb), net, paid, outstanding itemised table — document number, staff name, location chips, pay type, gross, deductions, net, status (including awaiting / approved / paid) download pdf — exports the full month audit as a single document each record's location chips show which location(s) the pay relates to — derived from the record's earning lines (which class the hours/sessions were for) and falling back to the instructor's assigned locations ✅ approval workflow when a team member (a staff member with the manage payroll permission, not a full admin) generates payroll, those records need an admin to approve them before they can be marked paid this lets finance staff prepare the payroll while an admin signs it off admin generates payroll → records are approved immediately and can be paid right away team member generates payroll → records are marked awaiting approval and cannot be marked paid until an admin approves them if a team member edits a record that was already approved, it drops back to awaiting approval so the admin re confirms the change to approve records , an admin can click the shield icon (or approve in the ⋯ menu) on any awaiting record in the records list, or use approve all in the month overview card on the payroll dashboard to clear the whole month's queue at once a record showing the amber awaiting approval badge cannot be marked paid approve it first 📅 month overview the payroll dashboard shows a month overview card for the selected month — a cross team snapshot staff count and number of records total payroll (gross, all records) paid so far still to pay (net of unpaid records) an approval banner when records are awaiting sign off — with an approve all button for admins a team member sees only the staff in their assigned locations; an admin sees everyone 📄 pdf document every payroll record generates a pdf using the document label from its pay type the layout includes tenant header (logo, name, registration number) from / pay to parties (tenant pays staff) date issued, paid date, pay period body specific to the pay type flat → single line with the amount per hour / per class → "n units × rate" calculation line % of student fees → "rate% × revenue" line adjustments (with reason if provided) total footer note from your payroll settings paid / unpaid / cancelled watermark to download from any record, open the menu (⋯) and click download 💳 marking as paid once you've actually paid the staff member open the payroll record click mark as paid fill in payment method, reference (transfer ref / cheque number), and paid date click confirm the status flips to paid , the staff member receives an email and in app notification, and a paid side document number is stamped if you've enabled remittance numbering 🔢 document numbering configure under payroll → settings → document settings setting what it does document prefix e g pv {year} resolves to pv 2026 001 number padding pad to n digits — 001 , 010 , 100 reset counter never / yearly / monthly (must include {year} or {month} in prefix) payment due days default days from issue to due date document note footer note printed on every pdf paid side documents (remittance advice) optional when enabled, marking a record as paid also stamps a separate numbered receipt style document (with its own prefix and counter), useful for accounting or compliance when disabled, the same record just flips status to paid — no second number 🚫 cancelling a record if a record was created in error or is no longer needed open the record menu → cancel pick a reason (duplicate invoice, billing error, requested by customer, etc ) — required add optional notes the record is marked cancelled and a cancellation block is printed on the pdf for audit you can't cancel a record that's already paid — refund or reissue separately if needed 🧑💼 per staff payroll setup each instructor's profile has a payroll section (visible when the payroll module is on) click edit to configure field notes monthly salary set a fixed monthly salary to auto generate a payslip every month hourly rate reference rate used to autofill amounts when creating an hourly pay record per class rate reference rate for per class pay records (shown only if per class rates are enabled) commission % reference percentage of student fees (shown only if a commission pay type exists) payroll generates on day of month for this staff member's auto generation — 1st / 3rd / 5th, or "use tenant default" reference rates autofill amounts when an admin manually generates an ad hoc record the per staff generates on day overrides the tenant pay cycle for that individual the instructor profile also has a manual hourly rates section — the list of named per hour rates used for manual per hour payroll by default it inherits the tenant wide list from payroll → settings → hourly rates ; an admin can set a custom list here instead see hourly rates docid\ hvsf4t4mdgbx3wolf9pq6 above 🇲🇾 statutory profile (per staff) each instructor also has a statutory profile section storing their identification numbers and tax settings — used to calculate epf, socso, eis, and pcb and to print on payslips identification numbers (printed on payslips) ic / passport, epf member no , socso no , eis no , income tax no epf — mark the staff member exempt (no epf deducted), or set a custom rate to add a voluntary percentage on top of the standard 11% employee rate socso — mark exempt , or pick a scheme category 1 (employment injury + invalidity, standard for staff under 60) or category 2 (employment injury only, for staff 60+) eis — mark exempt for exempt categories pcb (income tax) — remmu auto calculates monthly pcb using lhdn's mtd method from tax category — single / married (spouse not working) / married (spouse working) children relief — number of dependent children malaysian citizen — non citizens use the flat rate age category — below 60 / 60 and above allowable deduction (rm/month) — life insurance, prs, approved premiums zakat (rm/month) — reduces pcb ringgit for ringgit a manual pcb override field lets you enter a fixed monthly amount that replaces the auto calculation a pcb estimate preview shows the projected tax for a sample gross amount if you don't customise anything, malaysian defaults apply — epf 11%, socso category 1, standard eis the statutory profile only needs attention for exemptions, voluntary rates, or specific tax circumstances 🎯 per class instructor rates for instructors paid per class or per hour , you can set a different rate for each class they teach — instead of one rate across all classes first enable it edit the relevant pay type in payroll → settings → pay types and turn on per class rates then, when assigning an instructor to classes ( assign to classes dialog) each ticked class shows a pay rate (rm) input below it enter a custom rate to override for that class only leave it blank to use the instructor's reference rate from their payroll setup for example, an instructor might earn rm 150/class for an advanced class but their default rm 100/class everywhere else payroll calculation uses the per class rate where set, and the reference rate otherwise 👤 staff view — my payroll instructors and team members included in payroll get a dedicated my payroll page in their portal, showing only their own payslips the page opens with three summary cards paid this year — total paid in the current year, with the last paid date pending — total unpaid amount and how many records are awaiting payment total records — all time count of payslips issued to them below is a table of every payslip — reference month, document number, pay type, net pay, and status clicking a row (or view ) opens the payslip detail pay type and reference month amount breakdown — base amount, adjustments, line items (earnings and deductions), gross statutory deductions (epf, socso, eis, pcb) where applicable net pay payment details once paid — method, date, reference download pdf of the payslip staff with both instructor and team roles can use the role switcher to view payroll for each role separately staff can never see other people's payroll records 📊 reporting the payroll dashboard summarises total paid in the selected period total pending record counts by status per staff breakdown when you drill into a staff member's profile (total paid, pending, all time totals)