---
title: Payroll
slug: payroll
createdAt: 2026-04-25T02:16:18.686Z
---

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.

:::hint{type="info"}
**Payroll is an optional module.** Turn it on under **Settings → General → Modules** 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        |
| **Cost Forecast** | Forward-looking view of expected monthly payroll cost by pay type and instructor                 |
| **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 (always payable) and team members opted in via a checkbox on their edit dialog. Each entry shows an **Instructor** or **Team** badge.

### Including a Team Member in Payroll

By default, team members aren't on payroll — most don't get paid (e.g. volunteers, owner family). To include one:

1. Go to **Team** (sidebar)
2. Click **Manage** on the team member
3. In the dialog, find the **Payroll** section
4. Switch on **Include in payroll**
5. Click **Save Changes**

:::hint{type="success"}
**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                     | Monthly salary                                    |
| **Per hour**          | Hourly pay tied to attendance                 | Rate × hours taught                               |
| **Manual per hour**   | Hourly pay where you enter the hours yourself | Rate × hours typed in when generating             |
| **Per class**         | Pay per class taught                          | Rate × classes taught                             |
| **% of student fees** | Commission from student payments              | % of fees collected for this instructor's classes |

:::hint{type="warning"}
**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:

- **Per hour** — REMMU reads the instructor's attended hours from attendance records and multiplies by their rate. Fully automatic.
- **Manual per hour** — finance staff enter the hours worked by hand when generating payroll. The instructor can have several named rates, and hours are entered against each. Best when hours aren't tracked through attendance, or different work is paid at different rates.

Rates for manual per-hour pay types are configured in **Payroll → Settings → Hourly Rates**.

### 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 unless auto-PCB is set up.

Each pay type separately marks which schemes it counts toward. A deduction only happens when both the pay type's tag and the organisation-wide switch are on — turning EPF on in Statutory Deductions starts deducting it for every pay type already tagged, no need to touch each one.

### Document Label

Each pay type has a **Document Label** (e.g. "Payslip", "Payment Voucher", "Commission Statement") — what prints as the heading on the PDF.

### 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. Payroll runs on a monthly cycle configured once in **Payroll → Settings → Pay Cycle**, billing for the month that just ended.

:::hint{type="info"}
Generating *after* month-end means attendance and commission figures are final before payslips are created.
:::

***

## ➕ Allowances

**Allowances** are extra earnings added on top of base pay — travel, phone, meal allowances, bonuses. Manage them in **Payroll → Settings → Allowances**. Each has a name, a default amount, a recurring toggle, and statutory toggles (off by default — turn on for allowances that genuinely count toward a scheme's base).

***

## ➖ Custom Deductions

**Custom Deductions** are take-backs subtracted from pay — late penalties, salary advance repayments, uniform fees. Manage them in **Payroll → Settings → Custom Deductions**, with the same name/amount/recurring/statutory structure as allowances.

***

## ⏱️ Hourly Rates

**Hourly Rates** power the **Manual Per Hour** calculation method — instead of one rate per instructor, keep a list of named rates (e.g. "Standard", "Private", "Workshop"), and finance staff enter hours against each when generating payroll.

Manage the tenant-wide list in **Payroll → Settings → Hourly Rates**. An instructor can also have their own custom rate list instead of the global one, set from their profile's **Manual Hourly Rates** section.

***

## 💸 Generating a Payroll Record

Day-based payments can carry a **Work date** (optional) so you can say which day, or range of days, a payment is for instead of typing it into the description. Enter it on the entry form for flat/manual pay types, or in **Edit** for any type. The Work date shows as a tag under the pay type in the Records list, in the record details, and on the payslip's Pay Period (a single day prints as that day rather than the month). The Records list also has a **Work date** range filter.

Go to **Payroll → Generate**, pick the staff member and pay type, set the reference month and (for hourly/per-class) the period, and REMMU auto-fills the amount where possible. Use **Fetch from attendance** or **Fetch from student payments** to pull rate-based amounts automatically.

### Bulk Generate

To create payroll entries for many staff at once, go to **Payroll → Generate → Bulk Generate**: pick the reference month, optionally pick specific pay types, and REMMU shows a preview split into calculated pay (pre-selected, ready to go) and manual per-hour (enter hours per rate). Expand any row to see the full breakdown, then untick anyone to exclude and click **Generate entries**.

Staff who already have an entry for the month are skipped automatically. All bulk-generated entries start as unpaid.

### Manual hour drafts (resumable)

Hours entered for per-hour instructors auto-save as a draft, so you can leave and come back later without losing your work.

***

## ✅ Approval workflow (team-generated records)

Team members with payroll permissions can generate records but can't self-approve — their records start in an **Awaiting Approval** state until an admin approves them. Records generated directly by an admin are already approved. Admins approve individual records or use **Approve all** on the Payroll dashboard.

***

## 📈 Cost Forecast

**Payroll → Cost Forecast** shows what payroll will cost for the selected month — cost so far, projected month-end, and remaining to incur — broken down by pay type and instructor. It's a read-only planning view that never creates records, and honours your calendar (holidays/closures subtracted).

A class only appears in the forecast while it has a live, active student — no need to archive a class to keep it out of the forecast; setting the enrollment or student inactive is enough.

***

## 📊 Payroll Month Audit

**Payroll → Month Audit** gives finance a full, downloadable breakdown of one month's payroll — staff count, gross, statutory deductions, net, paid, and outstanding, with a per-record itemised table and a PDF export.

***

## 📄 PDF Document

Every payroll record generates a PDF using the document label from its pay type, with your tenant header, pay period, a calculation line specific to the pay type, adjustments, total, and a paid/unpaid/cancelled watermark.

***

## 💳 Marking as Paid

Once you've paid a staff member, open the record, click **Mark as Paid**, fill in payment method, reference, and paid date, and optionally attach a payment proof. The status flips to Paid and the staff member is notified automatically.

To pay several records at once, select them and use the bulk **Mark as Paid**. You can **Attach payment proof** (an image or PDF, e.g. a single bank transfer receipt covering the batch) and it's attached to every record. If the proof upload fails, the records are still marked paid — the dialog lists which ones need the proof attached again.

***

## 🔢 Document Numbering

Configure prefix, padding, reset schedule, and default payment due days under **Payroll → Settings → Document Settings**. Optionally enable a separate numbered remittance-advice document stamped when a record is marked paid.

***

## 🚫 Cancelling a Record

If a record was created in error, open the record menu → **Cancel**, pick a reason, and add optional notes. 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 module is on) for setting their monthly salary, hourly rate, per-class rate, and commission %, plus which day of the month their payroll generates on (or use the tenant default). It also has a **Manual Hourly Rates** section for their named per-hour rates, inheriting the tenant-wide list by default.

***

## 🇲🇾 Statutory Profile (per staff)

Each instructor also has a **Statutory Profile** storing their identification numbers and tax settings — used to calculate EPF, SOCSO, EIS, and PCB and printed on payslips.

**EPF** — mark exempt, or set a custom voluntary rate on top of the standard employee rate.

**SOCSO** — mark exempt, or pick a scheme (standard for staff under 60, or the reduced scheme for staff 60+).

**EIS** — mark exempt for exempt categories.

**PCB (income tax)** — REMMU can auto-calculate monthly PCB using LHDN's MTD method from tax category, children relief, citizenship, age category, and allowable deductions/zakat. A manual override lets you enter a fixed monthly amount instead.

:::hint{type="info"}
If you don't customise anything, Malaysian defaults apply. 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 flat rate everywhere. Enable it on the pay type in **Payroll → Settings → Pay Types**, then set a custom rate per class when assigning the instructor — leave it blank to use their reference rate.

***

## 👤 Staff View — My Payroll

Instructors and team members included in payroll get a dedicated **My Payroll** page showing their own payslip history — paid this year, pending amount, and total records — with a downloadable PDF per payslip. Staff can never see other people's payroll records.

***

## 📊 Reporting

The Payroll Dashboard summarises total paid, total pending, record counts by status, and a per-staff breakdown when you drill into a staff member's profile.
