Generating Payroll
This is the heart of the Payroll module: producing payslips for a pay period, reviewing them, marking them paid, and sharing them with employees. This article is a full, step-by-step walkthrough.
Before you start: Generation only works once setup is complete. Every employee you want to pay must have a salary, the right pay cycle, and Allow Generate Payroll = Yes. If you haven't done this yet, read Getting started with Payroll first.
Understanding the page
The Payroll page has two parts:
- A "Generate Payroll" card at the top (only visible if you have Add Payroll permission) where you choose options and run the generation.
- A filter bar and a table below it listing the payslips that already exist for the selected year, cycle and month.
The filter bar
At the top of the page you choose what you are looking at and what you will generate for:
| Filter | Purpose |
|---|---|
| Year | The year (current year and the four previous years). |
| Salary Cycle | Monthly, Weekly, Bi-weekly or Semi-monthly. This controls the next box. |
| Month / Week / Range | What the box offers depends on the cycle: a month for monthly, a week for weekly/bi-weekly, or a date range for semi-monthly. This is the period you generate and view. |
| Search | Find a payslip by employee. |
Important: The Salary Cycle you pick here decides which employees are included. Only employees whose own salary cycle matches this selection (and who are allowed for payroll) are generated.
Step 1 — Choose your generation options
In the Generate Payroll card, set the three options at the top:
| Option | What it does | Default |
|---|---|---|
| Include Expense Claims | Adds the employee's approved, claimable expenses for the period to their slip as reimbursement. | On |
| Add timelogs to salary | Adds earnings from the employee's project time logs in the period (and shows total hours on the slip). | Off |
| Use Attendance | Pays employees only for the days they were present or on paid leave. Absent days become an "Unpaid Days Amount" deduction. Leave this off to pay the full period regardless of attendance. | Off |
Step 2 — Choose who to generate for
Still in the card, you can narrow down the run:
- Department — limit generation to one department, or leave as
--for everyone. - Employees — pick one or more specific employees. Only employees who match the selected cycle and are allowed for payroll appear here.
Tip: Leave both Department and Employees empty to generate for everyone on the selected cycle who is allowed for payroll. Pick specific people only when you want to run a subset.
Step 3 — Generate
- Confirm the Year, Salary Cycle and Month/Week/Range in the filter bar are the period you want.
- Set your options (Step 1) and audience (Step 2).
- Click Generate.
The system creates one payslip per included employee and the table refreshes to show them.
What the system calculates for each slip
For every employee it works out:
- Basic Pay and the earning/deduction components from their salary group.
- Pro-rating for anyone who joined or left part-way through the period (a "Prorated Amount" line), or, if Use Attendance is on, an "Unpaid Days Amount" for absent days.
- Expense Claims, Time Logs, Overtime and Leave Reimburse earnings where applicable.
- TDS (tax) if TDS is switched on and the employee's annual salary is above the threshold.
- Gross Earning, Total Deductions and Net Salary.
Note: Generation will not overwrite a slip that is already marked Paid for the same period. Existing slips that are not yet paid are replaced when you re-generate. This makes it safe to re-run after fixing a salary or adding overtime.
Re-generating for selected employees
If you only need to refresh a few slips after a change:
- Tick the checkboxes next to those rows in the table.
- In the Select Action dropdown above the table choose Regenerate Payslip.
- Click Apply. Only the ticked, not-yet-paid slips are rebuilt.
Step 4 — Review the payslips
Each row in the table shows:
| Column | Meaning |
|---|---|
| Name | The employee. |
| Net Salary | Take-home pay. |
| CTC | The gross earning for the slip. |
| Duration | The period the slip covers. |
| Paid On | The date paid (blank until you mark it paid). |
| Status | Where the slip is in its lifecycle (see below). |
| Action | View, Edit or Delete. |
Open a slip with View (the eye icon) to see the full earnings and deductions breakdown. From that view you can also Download the payslip PDF.
Adjusting amounts on a single slip
Use Edit on a slip to fine-tune it — for example to add a one-off bonus, an extra deduction, or change the Special Allowance. The slip's net, gross and total deductions recalculate when you save.
Note: A slip can only be edited while it is Generated or Review. Once a slip is Locked or Paid, the Edit option disappears so finalized pay can't be changed by accident.
Step 5 — Move slips through their statuses
A payslip moves through four statuses. To change status, tick one or more slips, choose Change Status in the Select Action dropdown, click Apply, then pick the new status:
| Status | What it means | Who can see the slip |
|---|---|---|
| Generated | The default after generating. Use this while you are still making changes (bonuses, deductions). | Admin only |
| Review | You have finalized the figures and want employees to check them. | The respective employee |
| Locked | Pay is final and you don't want any further change requests. | The respective employee |
| Paid | Pay has been finalized and paid out. | The respective employee |
Tip: A typical flow is Generated → Review → Paid. Use Locked when you want a final state but aren't recording the payment yet. When you move a slip out of Generated, the employee is notified by email.
Step 6 — Mark as Paid (and optionally post the expense)
When you set the status to Paid, extra fields appear in the Change Status window:
| Field | Purpose |
|---|---|
| Paid On | The payment date (defaults to today). |
| Salary Payment Method | How it was paid (Bank Transfer, Cash, Cheque, PayPal, etc.). |
| Bank Account | Shown when the method is Bank Transfer — the account the money came from. |
| Add Amount to Expenses | Yes records the total as a company expense automatically; No skips that. |
| Category / Expense Title | The expense category and title (auto-filled, e.g. "Salary for the month of …") used when "Add Amount to Expenses" is Yes. |
- Tick the slips you are paying.
- Change Status → Paid, Apply.
- Fill in Paid On, the payment method (and bank account if Bank Transfer), and decide whether to add the amount to expenses.
- Click Save.
Important: If the method is Bank Transfer and you choose to add the amount to expenses, you must select a Bank Account or the save is blocked.
If you chose to add the amount to expenses, a single expense record is created for the run and linked to the slips. You can find these in Payroll Expenses.
Note: When a slip with a Leave Reimburse earning is marked Paid, the employee's reimbursable leave balance is reset to zero so it isn't paid twice.
Step 7 — Payslips and what employees see
- A slip in Review, Locked or Paid status is visible to that employee; a Generated slip is not.
- Employees can open their own payslip and download it as a PDF.
- The payslip PDF shows: company details, the employee's ID, name, department, designation and joining date, the earnings table (Basic Pay, components, Special Allowance, time logs, overtime, etc.), the deductions table, Gross Earning, Total Deductions, any Expense Claims reimbursement, and the final Net Salary.
Deleting a slip
Use Delete in the Action menu (requires Delete Payroll permission). This removes that single payslip. Deleting does not undo any expense already posted.
Common questions
An employee I expected isn't in the run. Check three things on the Employee Salary page: they have a salary, their Salary Cycle matches the cycle you selected, and Allow Generate Payroll is set to Yes.
I re-generated but a slip didn't change. That slip is probably already Paid — paid slips are never overwritten. Change it from Paid first, or delete and regenerate.
Someone joined mid-month. Generation pro-rates their pay automatically based on joining (and last) date, or based on attendance if Use Attendance is on.