Skip to main content

Run a payroll

A payroll run covers one pay period. It moves through a fixed sequence of statuses, and each step is a separate action with its own permission:

Draft ──generate payslips──▶ Pending ──approve──▶ Approved ──mark processed──▶ Processed

└──reject──▶ Rejected

Cancelled is available from Draft, Pending, Approved and Rejected. Processed and Cancelled are both terminal. Payslips are generated once per run, at the DraftPending transition, and nothing later in the sequence recomputes them.

Everything below happens on Payroll → Payroll Runs (/payroll-runs) and the run detail page it links to (/payroll-runs/{id}).

Before you start

Payslip generation reads live data at the moment you press the button. Get these settled first, because there is no in-place recalculation afterwards.

  1. Timesheets for the period are submitted and approved. The default Payable Timesheet Entries policy in Payroll Settings is Submitted and approved — entries that have not reached that state earn nothing and do not count as attendance for holiday eligibility. Timesheet correction lives on the HR Timesheets page, which the Payroll Administrator role cannot open.
  2. Overtime for the period is decided. Only an Approved overtime request for that exact date pays. Decide the pending ones on Overtime Requests (/overtime-requests) using the row menu's Approve and Reject actions.
  3. The holiday calendar is right for the period. Holiday dates and work suspensions drive premium pay and unworked-holiday pay; maintain them on Holiday Calendar (/holiday-calendar).
  4. Bonuses, deductions and settings are current. See Deductions, bonuses and reimbursements. Payroll Settings changes apply to payslips generated from that point on, never retroactively — the confirmation toast says so.
  5. Every employee is covered by a contribution bracket. Generation validates this before it writes anything and fails the whole run if an employee's salary falls outside the SSS, PhilHealth or Pag-IBIG tables.

Create the run

Requires payroll.manage. Without it there is no New Payroll Run button.

  1. Open Payroll → Payroll Runs.
  2. Select New Payroll Run. A drawer opens with three date fields: Payroll Run Date, Period Start Date and Period End Date.
  3. Use the shortcut buttons rather than typing dates by hand where you can. The drawer shows the next period the configured schedule calls for — "Next period on the configured schedule: … – …" — with a Use Suggested Period button that fills all three fields. On a semi-monthly schedule you also get Use 1st Cutoff and Use 2nd Cutoff, which fill the cutoff windows and pay day from Payroll Settings for the current month.
  4. Select Create Payroll Run.

The form rejects a period whose end date is before its start date. Beyond that, the server checks the period against the configured pay schedule. If it does not match, a dialog appears — "Period doesn't match the pay schedule" — with the server's explanation and two choices: Go Back, or Create Anyway for a genuine off-cycle run.

Take that dialog seriously on a weekly schedule. Which cutoff counts as the month's last one decides where the statutory contribution true-up lands, and it is derived from the configured schedule rather than from the individual period. A one-off period that drifts off the grid can leave a month without a final cutoff, and that month's contributions are then never trued up.

The new run appears with status Draft and zero payslips. It also records the pay frequency in force at creation, so changing the frequency setting later cannot reinterpret an existing run.

Generate payslips

Requires payroll.manage. Available only while the run is Draft, and only once.

  1. From the grid, open the run's row menu and choose Generate Payslips, or open the run and use the Generate Payslips button on the detail page.
  2. The confirmation dialog names the period and states plainly that this moves the run to Pending and cannot be undone. Select Generate Payslips.

One payslip is created per active employee. The engine reads settings, timesheets, overtime, leave, holidays and the rate tables in force for the period end date, then writes each payslip and its deduction items. If any employee lacks a contribution bracket, or has an hourly rate, semi-monthly rate and basic salary that are all zero, the run fails loudly and nothing is written.

Review the run

Open the run from the grid — the row menu's View, or the Run # link route /payroll-runs/{id}. The detail page carries:

  • A header with the run number, its status badge, and — once payslips exist — a View analytics button that opens Payroll Analytics filtered to this run.
  • A summary strip: Payroll Run Date, Pay Period, Pay Frequency (the one snapshotted at creation; absent on runs created before that was recorded), Payslips Generated and Created By.
  • Approval History, once a decision has been recorded, and Change Log, once a field on the run has changed.
  • The payslip register: a grid of Payslip #, Employee #, Employee Name, Position, Gross Income, Total Benefits, Total Deductions and Net Pay. Search, column filters, sorting, CSV and PDF export all work the same as elsewhere; the row menu's View (or a double-click on the row) opens the payslip itself.

What to look at before approving: the payslip count against the number of employees you expected, the net pay totals, and any row whose figures look implausible. A spot-check of one employee's payslip against their timesheet is the cheapest way to catch a settings mistake, because after this point the figures are frozen.

Approve or reject

Requires payroll.approve. Available only while the run is Pending.

From the grid's row menu, or the buttons on the detail page, choose Approve or Reject. The dialog names the period and the payslip count and asks you to confirm. Either decision is recorded in the run's Approval History with the approver and timestamp.

Rejecting does not delete the payslips. A rejected run can still be cancelled, which is usually what you want — see When a run is wrong.

Mark the run Processed

Requires payroll.manage. Available only while the run is Approved.

Choose Mark as Processed from the row menu, or Mark Processed on the detail page, and confirm. Processed is terminal: the run cannot be cancelled or deleted afterwards, and this is the status that says the money went out.

Two things become available once a run is Processed:

  • Recognition & Awards appears on the detail page, if the Enable recognition & awards toggle is on in Payroll Settings. See Recognition awards below.
  • The run's payslips are what the year-end forms and the monthly remittance reports read. Note that those reports filter by period, not by run status, so a cancelled run's payslips still count — the reason cancelling is not enough on its own when you need to redo a period.

Cancel a run

Requires payroll.manage. Available from Draft, Pending, Approved and Rejected — anything except Processed and Cancelled.

Choose Cancel from the row menu, or Cancel Payroll Run on the detail page. The dialog requires a Reason for cancelling before the confirm button becomes active, and says the change cannot be undone.

Cancelling does not delete the run's payslips. It changes the run's status and nothing else. Every report that reads payslip data — 1601-C, the alphalist, 2316, 13th month, the remittance reports, the year-to-date aggregates — selects by year and month and never looks at the parent run's status. Create a second run for the same period after cancelling the first and the period is double-counted everywhere.

Delete a run

Requires payroll.manage. The Delete action is hidden unless the run has zero payslips and is not Processed; the server refuses the deletion otherwise regardless of status, so the action is never offered for a run it could not remove. The dialog requires a Reason for deletion.

In practice this means: a Draft run created with the wrong dates can be deleted outright. A run that has already generated payslips cannot.

When a run is wrong

There is no in-place recalculation anywhere in the application, and no endpoint edits or regenerates the payslips of a run that has left Draft. That is deliberate.

For a run that has not generated payslips yet, delete it and create it again.

For a run whose payslips are already wrong — a bad rate table, a settings mistake discovered late — the old payslip rows have to actually be gone before a replacement run is created, otherwise the period is double-counted. Cancelling the run is not sufficient on its own, for the reason given above. The system deliberately exposes no way to delete non-Draft payroll data, so this is an operator-level task rather than something you can do from these pages. The procedure is written up for engineers in Regenerating payroll runs; talk to whoever operates your installation.

Two habits avoid the situation entirely: check the compliance checklist on Payroll Settings before the first run of a new statutory year, and spot-check one payslip before approving.

Recognition awards

Only when Enable recognition & awards is on in Payroll Settings, and only on a run with status Processed. The section renders on the run detail page below the payslip register; when the toggle is off, it is not rendered at all.

With payroll.manage, Generate Awards computes four categories for the period — Perfect Attendance, Most Punctual, Overtime Champion and Top Hours Worked — and the dialog offers an Email certificates to winners checkbox. Emailing requires outgoing mail to be configured, and winners without a user account are skipped.

Once awards exist, the section lists winners by category with their metric and rank, and offers Download All (ZIP), Regenerate (which replaces the existing awards for the run) and Delete Awards. Individual certificates download from the icon button on each winner's row. Deleting does not recall certificates already emailed.

Employees see their own awards on /my-awards.

Downloading from a run

Two buttons appear on the detail page once the run has payslips:

  • Download All Payslips (ZIP) — every payslip in the run as an individual PDF, rendered in the browser using the active payslip template.
  • Download Payroll Summary — a one-page PDF summary of the run.

The register grid's Table menu additionally offers Export CSV and Export PDF of the rows currently in view.

Payroll Analytics

Payroll → Payroll Analytics (/payroll-analytics) builds a dashboard from a single run's payslips: totals, a department breakdown, deduction composition and salary distribution. Pick the run from the dropdown at the top right — only runs with generated payslips are listed — or arrive pre-filtered from a run's View analytics button. Download PDF exports the dashboard.

Reference

  • The API behind each step, including the exact status transitions each endpoint allows: Payroll API.
  • The arithmetic: Business Rules.