Module · Pro +

Payroll

Monthly payroll runs that take actual hours from Shifts, gross-from-contract from HR, and let you layer manual deductions, bonuses and advances before locking the period and exporting CSV. Pro-tier and up.

Where it lives

  • /payroll — month picker and per-employee row view.
  • /employee-wages — hourly rate management and wage history.
  • /staff/panel — "Earnings" section shows the staff member their own wages for the current and past periods.

A monthly cycle

  • Open — pick the month from /payroll. The system pre-populates a row for every active employee with gross derived from the contract: hourly employees get hourly_rate × actual hours; salaried employees get the monthly gross from their contract.
  • Adjust — add deductions, bonuses, or advances per employee as line items on their row. Each adjustment has a description and amount; the row total updates inline.
  • Review — the page totals at the bottom by brand and by location. Compare against the prior month to catch outliers.
  • Lock — locking the month freezes every row. Editing a locked period requires unlocking, which writes an entry to the activity log.
  • Mark paid — flag each row paid with a method (bank transfer, cash, in kind). Staff see the paid status on their own panel.
  • Export — CSV with one row per employee (gross, deductions, bonuses, net, payment method, payment date). Hand to your accountant or upload to your bank's bulk-pay tool.

Who sees what

  • Company portal — full payroll detail.
  • Staff portal — own row only, on /staff/panel. Other employees' wages are never visible.
  • Accountant portal — does not see payroll detail. The accountant scope is intentionally limited to invoices and KSeF.

Where actual hours come from

Hours that drive hourly payroll come from the Shifts module:

  • Tablet check-in / check-out captured during the shift.
  • Manual edits via /edit-hours when reality didn't match the plan.
  • Auto-checkout entries from the daily cron (capped at the 30-minute post-end window).

If actual hours are missing for a paid hourly employee on the day of payroll, the row flags red and you have to resolve before locking.

Where to go next

Something still unclear?

Open a workspace and try it, or email us with your scenario — we reply in hours, not days.