# Pay runs

A pay run holds the payslips of every employee for one period. **People** → **Pay runs** (`/m/payroll/runs`) lists your runs with **Period**, **Kind** (**Regular** or **Correction**), **Status** (**Draft** or **Finalized**), **Payslips**, **Gross** and **Net**. Filter on **Status** in the toolbar; a row opens the run.

## Create a pay run

- **New pay run** creates a draft for the next period to pay: the period after your last finalized regular run, or the period that contains today when there is none yet.
- **For another period** opens **Pay run for another period**: pick the first day of the period under **Period start** (only period start dates can be picked) and click **Create pay run**.

You can have one regular draft at a time. While a regular draft run exists, both buttons are disabled with "Finalize or delete the draft run first." A draft [correction](#corrections) does not block them. A period that is already finalized cannot get a second regular run ("This period is already finalized."): use a [correction](#corrections) instead. Nor can a period that overlaps a finalized regular run ("This period overlaps a finalized pay run.").

Periods are named after your pay period setting: `2026-10` for monthly pay, `2026-P11` for four-weekly periods, `2026-W43` for weekly pay. See [Pay periods](/docs/payroll/settings#periods).

## What a draft run calculates

The run gets one payslip for every employee in service on at least one day of the period. Each payslip starts with:

| Line | Section | How it is calculated |
| --- | --- | --- |
| Salary | Earnings | The **Salary per period**, pro-rated by calendar days when the employee starts or leaves in the period |
| Hours worked | Earnings | The hours you enter times the **Hourly rate** (hourly workers) |
| Holiday pay payout | Earnings | Only in the payout month or on the final payslip; see [Holiday pay](#holiday-pay) |
| Holiday pay reserve | Reservations | The holiday pay rate of the employee (or from the settings) times the earnings, the payout and expense allowances left out |
| Your line presets | Any section | A fixed amount, or a percentage of the earnings (expense allowances left out); see [Line presets](/docs/payroll/settings#line-presets) |
| Wage tax, Zvw contribution | Deductions | 0.00 until you fill them in; see [Wage tax and Zvw](#wage-tax-and-zvw) |

Each payslip shows **Gross**, **Deductions**, **Net** and **Employer cost**, and the run shows the same totals for all payslips under **Totals**. Gross is the sum of the earnings, net is gross minus the deductions, and employer cost is gross plus the employer contributions. Reservations, such as the holiday pay reserve, are put aside: they do not change this payslip's net pay. An **Expense allowance** line counts in gross and net pay, but holiday pay and percentage presets are not calculated over it: it reimburses costs and is not wage.

Lines carry a mark for where they come from, explained under each payslip (**Line source**). Calculated lines are marked **Computed** and the lines from your presets **Preset**; a calculated or preset line you changed is marked **Changed by hand**. Lines you added yourself and the tax rows have no mark.

**Notes** on the run are internal notes, never printed on a payslip, saved when you leave the field. They can be edited on a finalized run too.

## Hours for hourly workers

An hourly worker's payslip has a **Hours worked** field. Type the hours and leave the field to save them ("Saved when you leave the field."). If the employee did not work this period, switch on **No pay this period**: the payslip stays at zero and needs no hours.

Until one of the two is done, the payslip shows "Enter the hours worked." and the run cannot be finalized.

A salaried employee's hours follow their contract hours and cannot be typed in.

## Change a line by hand

In a draft, every line has an amount field. Type a new amount and leave the field to save it.

- A computed or preset line you change is marked **Changed by hand**. It keeps your amount when the run is recalculated and when it is finalized, and the lines calculated from it follow your amount: change the **Salary** and the holiday pay reserve and percentage presets follow. When the calculated amount later differs from yours (say the salary was raised afterwards), the draft shows it under the amount, for example **Computed: € 3.100,00**, so you can decide whether to reset the line.
- **Reset to computed** (the arrow button next to the amount) puts the line back on the calculated amount ("Line reset to the computed amount").
- **Add line** under a payslip adds a line of your own: pick a **Section** (**Earnings**, **Deductions**, **Reservations**, **Employer contributions**) and a **Type** (for example **Overtime**, **Expense allowance**, **Pension contribution (employee)**, or **Other** with your own **Description**), then the **Amount**, and optionally **Quantity** and **Rate**. To take out a line you added, click **Remove line** (the bin button next to its amount); it is removed at once ("Line removed.").

Amounts are entered like `125.00` (in Dutch and Turkish `125,00`). A deduction is entered as a positive amount: it is subtracted from the gross.

## Wage tax and Zvw

Borkol does not calculate tax in this version. Every payslip of a regular run gets a **Wage tax** row and a **Zvw contribution** row under **Deductions**, at 0.00. Fill in the amounts your accountant or the tax tables give you; both are deducted from the net pay, and the wage tax counts toward the year-to-date **Wage tax** on the payslip. Recalculating keeps what you entered.

## Recalculate

**Recalculate** builds the draft again from the current data: employees who joined the period get a payslip, employees no longer in it lose theirs, and salaries, rates, holiday pay and presets are calculated again. What you changed by hand, the lines you added and the tax amounts stay.

## Finalize

**Finalize** asks **Finalize this pay run?** ("Payslips get their numbers and PDFs and can no longer change. A mistake afterwards needs a correction run."). Finalizing:

1. Recalculates every payslip from the current employee data first. Lines you changed by hand are kept.
2. Checks the run. Anything blocking is listed under **This pay run cannot be finalized yet**, per employee: "Enter the hours worked.", "Net pay is below zero." or, for an empty run, "There are no payslips in this run." Nothing is numbered until the run passes.
3. Numbers the payslips in employee number order, without gaps, from your payslip series (`LS2026-0001` by default; see [Numbering](/docs/payroll/settings#numbering)). A number is never reused, and a finalized run is never undone.
4. Locks the payslips, with the employee and employer details as they are now, and makes a PDF of each.

If a PDF could not be made, the payslip has no **Open PDF** button yet. **Render missing PDFs** under **More actions** tries again; the numbers stay as they are.

On a finalized run, **Send by email** is the main button and **Download PDFs** sits beside it. See [Payslips](/docs/payroll/payslips).

## Delete a draft

**Delete draft** under **More actions** removes the draft run and all its payslips, including your changes, after **Delete this draft pay run?**. A finalized run cannot be deleted.

## Corrections

A finalized payslip never changes. To fix a mistake, open the finalized run and choose **Create correction** under **More actions**. **Create a correction run?** explains it: a new draft copies the finalized payslips of that period. Then:

1. Change what was wrong on the payslips that need it. Every copied line counts as a line you entered, so nothing is recalculated: the holiday pay reserve and percentage presets are not recomputed when you change, say, the salary. Change those lines yourself too. The same goes for hours: changing the hours of an hourly worker does not change the **Hours worked** amount. A copied line can be taken out with **Remove line**.
2. Remove the employees that need no correction: **Remove from correction** in the **⋯** menu of their payslip. Their finalized payslip stays as it is.
3. Finalize the correction run.

Each corrected payslip gets a new number, shows **Corrects LS2026-0007** on the run screen and prints "Replaces LS2026-0007" on the PDF. It replaces the original payslip: the year-to-date totals, the holiday pay balance, the downloads and email sending use the new payslip from then on. The original stays visible on its run, muted and marked **Replaced by LS2026-0012** (the number of the new payslip), but is left out of that run's downloads and of **Send payslips by email**.

There can be one draft correction per period at a time.

## Holiday pay

Every payslip reserves holiday pay: the holiday pay rate times the earnings of the payslip (the payout itself left out), shown as **Holiday pay reserve** under **Reservations**.

The reserved amount is paid out as a **Holiday pay payout** line under **Earnings**:

- in the month you choose under **Holiday pay is paid in** in the [settings](/docs/payroll/settings#periods), on the payslip of the period that contains the first day of that month, and
- on the final payslip of an employee who leaves, whatever the month.

The payout is everything still owed: what was reserved minus what was paid, across years (the balance does not reset on 1 January), including the opening balances and this payslip's own reserve. A payout line you add by hand counts as paid. With **By hand (add a payout line)** chosen, only the final payslip pays out automatically: add a **Holiday pay payout** line yourself when you pay it.
