Ask a thirty-person company how it runs payroll and you will usually hear about a process, not a system: hours are exported from the time tracker into an hours sheet, the hours sheet feeds a salary sheet, the salary sheet feeds a tax workbook, and every month someone builds thirty payslips by hand from the result. It works, in the sense that people get paid. It also fails quietly in ways nobody notices until a tax certificate, a leaver or an auditor asks a question.
What four workbooks cost you
The hours sheet and the salary sheet hold the same number, typed twice. The tax workbook holds a third copy of gross pay, annualised. The medical-claim register holds each employee’s grade limit, which also lives in the grading structure. None of these copies knows about the others, so a mid-month salary change, a joiner on the 3rd or a switch of pay cycle has to be applied in four places by the one person who remembers all four.
- Formulas drift. A cell overwritten with a number in March still looks like a formula in September. The sheet keeps balancing because the total is also a formula.
- History is a folder. Last year’s salary is whatever the file named
Salary sheet Aug v3 FINALsays. There is no journal of when a salary changed or who approved it. - The employee has nothing. A payslip is a PDF someone remembered to email. Nobody can see their own year-to-date tax without asking accounts.
- Leavers are a special project. The final settlement is a fresh sheet per person, rebuilt from leave balances, advances and the last month’s hours that live in three other places.
The number that must exist exactly once
The root of the mess is not spreadsheets. It is that the facts payroll needs have no owner. Hours worked belong to attendance. The grade and the joining date belong to HR. The salary, the tax regime and the bank account belong to payroll. A payroll system earns its place when each of those facts is stored once, by the tool that owns it, and the salary sheet reads them rather than copying them.
That is the shape Orbiz takes. Hours come from AMS, where attendance and approved leave already live, so a timesheet is generated rather than exported. Grades and employment status come from HRMS. Ledgr owns the pay profile — gross salary, structure, tax settings, bank details and the increments journal — and every salary sheet is computed from those three sources on the day it is run, then frozen so it can be re-read a year later exactly as it was paid.
Rules as configuration, not as cells
Every formula in the old sheets becomes a setting the finance team can read and change without touching code: the pay cycle (a calendar month, or the 26th to the 25th, with a dated switch between them), the working day, which days are weekends, whether a public holiday is paid as worked, how many missing hours a month are forgiven before anything is deducted, and the two rates that matter most — what an unpaid hour costs and what an overtime hour pays, each expressed as a base divided by a number of hours.
Salary structures work the same way: Basic 60 percent, house rent 25, utilities 13, internet 2 is a structure any employee can be placed on, and a second structure for a different pay group is a second record, not a second sheet. Country facts — tax slabs, statutory schemes, the certificate layout — arrive as a preset you apply and can edit, so the same product serves a team in Lahore and a team in Dubai without either being an afterthought.
Approval before money moves
A spreadsheet has no notion of review. A salary sheet in Ledgr goes through one: finance generates the timesheet, sends it to a reviewer, the reviewer approves or asks for changes, and only an approved timesheet can become a salary sheet, which itself is reviewed before it is marked disbursed. Every line on the sheet carries the sentence that explains it — "40 unpaid hours at 1,278.41, gross 225,000 ÷ (22 × 8 h)" — so the reviewer never recomputes anything.
Marking the sheet disbursed is the moment the copies you used to maintain by hand write themselves: the tax ledger for the year, the statutory contribution ledger, the loan schedule, the claim register, and a payslip PDF per employee on the organisation’s letterhead, emailed and kept. The employee sees it under their own login, behind a password check, alongside every earlier one.
Moving without retyping
The move itself is smaller than it looks, because the facts already exist somewhere. If salaries were held on the HR record, they are copied into pay profiles once, each with an opening increment dated at the last change. Attendance history stays where it was. What you enter by hand is the part no workbook ever recorded properly: the opening year-to-date figures for the current tax year, so that the annualised withholding continues from where the tax workbook left off rather than starting the year again in September.
- Set the organisation’s country and currency once; every tool reads them.
- Apply the country preset and check the slab table against the current rates.
- Create the salary structure and mark it default; add a second only if a pay group really differs.
- Enter the pay-cycle history, including the date you switched cycles, so old periods keep their real dates.
- Enter opening year-to-date gross and tax per employee for the current tax year.
- Generate the first timesheet, compare it to last month’s hours sheet line by line, and only then run the salary sheet.
Who this is for
Companies between ten and a few hundred people, with salaried staff whose pay depends on hours, leave and a progressive tax table: software teams paying developers and contractors, startups whose first finance hire inherits the founder’s workbook, and professional services firms that need a defensible tax certificate for every employee at year end. If you are still deciding whether hours should come from attendance or from a timer, attendance vs time tracking vs timesheets covers that first.
Built for your industry




