Skip to main content

Payroll

Payroll is where your workspace turns each employee's salary into a monthly pay run: it calculates gross pay, applies attendance-based proration, deducts tax and other statutory amounts, produces salary slips, and records how each person was paid.

All screens below live under Payroll in the admin sidebar (/admin/payroll/...). The exact deductions and tax math follow your workspace's country pack — for example, workspaces set to a Gulf country such as the UAE have no income tax, while a Pakistan workspace runs progressive tax slabs. You never pick these formulas by hand; they come from the country set on your company profile.

note

Menu items and buttons only appear if your role has the matching payroll permission (view, process, approve, lock, manage, configure). If a page is missing, ask an admin to grant the permission.

The big picture

A typical month runs in this order:

  1. Set up components and structures (one-time, then occasional edits).
  2. Assign a salary to each employee.
  3. Add any increments, bonuses or adjustments for the month.
  4. Process the payroll run for the month.
  5. Review → Approve → Lock the run — approval runs automatic pre-flight checks and is refused while any blocking problem remains.
  6. Mark as paid (disburse) and optionally generate the bank file.
  7. Send salary slips; employees acknowledge them in their portal.

1. Salary components

Screen: /admin/payroll/components

A component is a single line that can appear on a pay slip — Basic, House Rent, Provident Fund, Tax, EOBI, and so on. Click Add Component and fill in:

FieldWhat it does
Name / CodeLabel shown on slips; the short code (e.g. BASIC, TAX) is used by formulas
TypeEarning, Deduction, or Employer contribution
CalculationFixed, % of Basic, % of Gross, or Formula
TaxableWhether the amount is included in taxable income
Contributes toFlags for EOBI, Provident Fund, Overtime, and Gratuity bases
tip

The component with the code TAX is special: income tax is only deducted from an employee whose salary structure includes a TAX component. A structure built without it is treated as fully tax-exempt.

2. Salary structures

Screen: /admin/payroll/structures

A structure is a reusable template that bundles several components together (for example "Standard Employee"). Click Add Structure, give it a name, then add components one by one. For each row you set the calculation type and a value (or a formula) and whether it is mandatory. Click a structure to see its full component breakdown.

3. Assign salaries to employees

Screen: /admin/payroll/salaries

Click Assign Salary and choose the employee, the structure, the gross salary, and the effective-from date. This becomes the basis for every future pay run.

To give someone a different template later, use Change Structure on their row — it creates a new assignment from the effective date you pick, so history is preserved.

4. Increments, bonuses and adjustments

These optional items feed into the pay run for their month.

  • Increments/admin/payroll/increments A permanent salary change going forward (types: annual, promotion, performance, adjustment). Enter the employee, the new salary and the effective date.
  • Bonuses/admin/payroll/bonuses A one-time payment for a chosen month (performance, festival, annual, signing, spot, or custom). Bonuses move through pending → approved → paid.
  • Adjustments/admin/payroll/adjustments A low-ceremony one-off addition or deduction for a month, with a taxable flag. Use it for corrections and edge cases.

Bonuses and adjustments attached to a run are settled (marked paid) automatically when the run is locked or disbursed, after which they can no longer be edited.

5. Process a monthly payroll run

Screen: /admin/payroll/process

Pick the month and year (the picker defaults to the previous month, since a month's payroll is normally run after it closes) and click Process Payroll. The system calculates every eligible employee and shows totals for employees, gross, deductions and net. If any employee was skipped, a note tells you to open the run and see why.

If your workspace has enabled it in settings, a Skip attendance deductions checkbox appears — ticking it pays everyone in full for that run, ignoring absences, late days and unpaid leave.

Presence-based proration (the "sandwich" rest-day rule)

Payroll prorates pay on a calendar-day basis: each employee earns payable days out of the month's total days, and pay is scaled by that ratio.

  • Working days are paid according to attendance (present days count, absent days do not, half-days count as half).
  • Rest days (weekly offs and holidays) are paid only when they sit between two earned days. An absence directly next to a weekend or holiday forfeits that rest day — this is the "sandwich" rule.
  • Mid-month joiners and leavers are prorated for the days they were actually employed.

Rest-day swaps (a worked weekend traded for a different day off) are honoured in the same calculation. If Skip attendance deductions was used, everyone counts as fully present and no proration is applied.

Income tax and statutory amounts

Tax and other statutory figures come from your country pack:

  • Income tax — progressive slabs, a flat percentage, or none (for example, the Gulf states), depending on your country. Tax is applied only if the structure carries a TAX component (see the tip above). Where the statute taxes pay net of the employee's statutory contributions (the Philippines), those lines are taken off before the tax table is applied. German and French workspaces are asked to enter their own bracket table before approval — see the pre-flight table below.
  • Provident Fund, Gratuity, and social-security / EOBI contributions are computed using the country's rules and the component flags you set.

If your country levies no income tax through payroll (for example the UAE or Saudi Arabia — or Singapore, where employers never withhold and IRAS assesses each employee directly), the tax screens are not just inert — they are removed. The whole Tax section vanishes from the admin sidebar (Tax Slabs, Tax Certificates, Adjustments, Templates), Tax Reports disappears from Reports, and employees do not see Tax Certificates in their portal. An old bookmark opens a Not applicable in <your country> page instead of an error, and the underlying API answers 404.

note

Nothing is wrong and there is nothing to configure — this is driven by the country on your company profile, not by permissions or your plan, and no admin can turn it on.

Tax slabs and the new fiscal year

Your fiscal year now advances automatically each year — the platform opens the next year the day after the current one ends (see Company Setup → Fiscal Years). But in a progressive-tax country the slab table follows each year's Finance Act, so the new year does not automatically come with brackets.

warning

Seeded data currently covers Pakistan through FY 2026-27 (Finance Act 2026) and the UK through 2026-27. Before processing the first run of a new fiscal year, open Tax → Tax Slabs (/admin/tax/slabs), pick the new year and confirm brackets exist. A fiscal year with no slabs computes zero income tax for everyone — the platform logs an error when this happens, but the run itself will not invent a number. If slabs are missing, contact support or enter the year's brackets on that page.

Fixing a run before approval

While a run is still in draft, processing or review, you can open it (/admin/payroll/runs/{id}) and Reprocess one or more selected employees without disturbing the rest. Once approved, locked or disbursed, entries are protected from reprocessing.

6. Review, approve, lock and disburse

Open a run from the history list (/admin/payroll/history) or straight after processing. A run moves through these statuses:

StatusMeaning
ReviewFreshly processed; still editable
ApprovedSigned off; ready to lock or pay
LockedFrozen — no further changes
DisbursedPayments recorded as made

Buttons appear according to the current status:

  • Approve a run in review. You can Send back to review an approved run to edit it again. Approval is subject to the pre-flight checks below — if a blocking issue exists you will see an error explaining each problem, and the run stays in review.
  • Lock an approved run to freeze it.
  • Mark as Paid opens the disburse dialog — enter the payment date, payment method (bank transfer, cheque, cash or wallet), an optional bank account and reference, and whether to email employees. This marks every entry paid and moves the run to Disbursed.
  • Finalize Run is used when each entry was already marked paid individually (e.g. imported history): it moves the run to Disbursed without overwriting per-entry payment details.
  • You can also mark or un-mark individual entries as paid from the run detail.

Print produces a clean payroll register, and Export downloads every column for all employees as a CSV.

Pre-flight checks — why an approval can be refused

The most damaging payroll mistakes look completely normal on a payslip. An employee with no shift is never marked present, so payroll reads the whole month as absence and deducts nearly the entire salary — and the slip still looks ordinary. Before a run can be approved, the system checks the month and refuses approval while any blocking problem remains. Warnings are surfaced but never stop payday.

When you click Approve with problems present, approval fails and you'll see an error listing each problem. Every finding explains what is wrong, why it matters in money terms, and what to fix — the person running payroll is often not the person who configured the workspace.

Blockers — approval is refused until these are fixed:

What stops approvalHow to fix
This workspace has no default shiftCreate a shift under Attendance → Shifts (/admin/attendance/shifts) and mark it as the default. Without one, new employees get no working pattern.
Employee(s) have no shift assignedNo shift means no attendance is ever recorded, so payroll treats every day as absence and deducts almost the whole salary. Assign a shift on each employee's profile.
Employee(s) have no attendance at all this monthNot a single day is recorded, so the month is treated as unworked. Mark the days on Mark Attendance (/admin/attendance/mark), or switch their shift to auto-present if they are not expected to clock in.
No fiscal year is marked currentSet it under Company → Fiscal Years (/admin/company/fiscal-years).
No income tax slabs configured for the current fiscal yearOnly raised where your country levies income tax. Without slabs, income tax computes as zero for everyone — silent under-withholding. Add them at Tax → Tax Slabs (/admin/tax/slabs).
Income-tax brackets for your country are yours to enterRaised instead of the row above for Germany and France, whose income tax no bracket table can express (German tax classes; the French per-employee withholding rate). Enter your own approximation at Tax → Tax Slabs — or, if you run tax entirely outside the product, a single 0% row for the year, and post each employee's tax as a payroll adjustment deduction.
A statutory deduction has no salary component to post throughYour country pack computes a contribution (UK National Insurance, US FICA, Canada CPP/EI, Saudi GOSI, India EPF, Australian Medicare levy, German RV/KV/PV/AV, French vieillesse/AGIRC-ARRCO/CSG, NZ ACC levy, Singapore CPF, Philippine SSS/PhilHealth/Pag-IBIG) but no active deduction component with its code exists, so nothing would be deducted and take-home would come out too high with no line explaining why. Create the component under Payroll → Salary Components and link it to the structures it applies to.
Employee(s) have no nationality recorded, and a contribution is levied on nationals onlySaudi GOSI comes out of Saudi nationals' pay and Singapore CPF out of Singapore citizens' pay; a foreign employee contributes nothing. With nationality blank, neither deducting nor skipping can be justified, so payroll deducts nothing for those employees and refuses approval. Set Nationality on each employee's profile, then reprocess.

Warnings — shown with the findings but never block approval:

  • Employees still pending activation will not be paid by this run — activate them first if they should be paid (see the Employees guide).
  • More than one shift is flagged as the default.
  • Employees with no active salary structure are skipped by the run entirely — not paid zero, but absent from the totals, which is easy to miss when reviewing.
  • One or more employees lose over 60% of gross to deductions. The message notes when the bulk is an absence deduction, which usually means missing attendance rather than genuine absence.

A large deduction can be genuine — a mid-month joiner, unpaid leave, a loan recovery — so warnings never block; blocking them would train people to route around the check.

Who is checked. Employees pending activation are excluded from the per-employee checks — payroll never pays them, and they get their own warning instead. The attendance check only covers people this run will actually pay: joined by the end of the month, holding an active salary structure, and not on a Punch Not Required (attendance-exempt) shift — exempt staff never produce attendance rows by design, so they are not flagged. Per-person findings name up to 8 employees, then collapse to a count.

The same checks are available any time via the API (GET payroll/preflight?month&year) so problems can be caught while the month is being set up.

7. The bank payment file

When a run is locked or disbursed, use Download Bank File on the run detail page to generate the Standard Chartered Straight2Bank / iPayments salary CSV for bulk upload. You choose the company bank account to pay from and can optionally set a value date, city and purpose of payment. A preview lists who will be paid and who is skipped (and why) before you download. See also /docs/payroll/bank-payment-file.

8. Salary slips

Screen: /admin/payroll/slips

Each processed entry produces a salary slip. From this page you can:

  • View a slip, download its PDF, or email it to one employee.
  • Select several and Download ZIP or Email All at once.

Slip layout is controlled by your slip template (/admin/payroll/slip-templates).

Acknowledgment flow

When you disburse a run with emails enabled, each employee gets an acknowledgment-request email (no PDF) linking to their portal at /portal/salary. After the employee confirms receipt there, the system emails the signed slip PDF with an e-signature stamp and records the acknowledgment (with timestamp and IP) for your records.

Provident Fund ledger

Screen: /admin/payroll/pf-ledger

If your components contribute to Provident Fund, this page shows each employee's running PF balance. Click an employee to open their full ledger of contributions and movements at /admin/payroll/pf-ledger/{employeeId}.

Importing historical salary

Screen: /admin/payroll/salary-history-import

To backfill past pay records for an employee (for example when migrating onto Operentra), download the CSV template, pick the employee, upload the filled file, preview the parsed rows and warnings, then import to commit them. Each import is tracked as a batch you can revert in one click if something looks wrong. A setting controls whether the Provident Fund column is treated as a real ongoing balance or a legacy cash refund.

Payroll settings

Screen: /admin/payroll/settings

Workspace-wide options that affect every run:

  • Rounding method — round, floor or ceil.
  • Rounding precision — number of decimal places.
  • Pay day — the day of the month salaries are due.
  • Allow skip attendance deductions — whether the "pay in full" option shows on the Process Payroll screen.