The awkward thing about staff records is that the same person is already in your system - as a contact, on a project team, on a timesheet. Keeping a second copy in an HR tool is how one person becomes two people with different spellings.
So an employee here isn’t a new record. It’s the person you already have, with employment attached.
What you can do
- Build an employee register from contacts that already exist, so nobody gets retyped.
- Organize people into departments with a real parent structure, and name a manager.
- Define your own leave types - annual, sick, unpaid, casual - in days or hours.
- Accrue entitlement period by period, with a carry-over limit you set.
- Let people request leave and have it approved, rejected or cancelled.
- Read a balance you can actually check: accrued, carried over, pending and taken.
- Keep company non-working days, so a bank holiday doesn’t come out of anyone’s allowance.
- Take expense claims from receipt to approval to reimbursement, with the books following.
- See who’s away when you’re planning project capacity.
How it works in practice
Create people from the contacts you have (HR → Employees). You search for the existing contact rather than typing a name, then add the employment: number, type, department, hire date. The directory lists everyone with their status, and status, department and employment type can be changed straight from the list. Someone who leaves is marked terminated rather than deleted, because their payslips and leave history still have to make sense.
Set up departments if you use them (HR → Departments). Name, code, optional parent. It replaces the free-text department field that every system accumulates and nobody can report on.
Decide what leave means here (HR → Leave). Nothing is created for you, on purpose: a year’s entitlement is a different number of days in every country. For each type you set the unit, whether it’s paid, how much accrues each run, and how much can carry into next year.
Run the accrual when a period turns. It grants one period’s entitlement to every active employee, and it’s the one button to be careful with, because running it twice grants twice and no balance row can tell a duplicate from a legitimate catch-up. It asks before it does anything.
Then people request, and someone answers. Requests, approvals, rejections and cancellations all happen on the same table.
Read the balance when something looks wrong. Days sit in four buckets - accrued, carried over, pending and taken - and what’s available is accrued plus carried over, minus taken, minus pending. The important part is that days are reserved when leave is requested, not when it’s approved, which is what stops two requests over the same week both passing the check while nobody has answered either.
Refusals tell you what to do about them, naming the days left against the days asked for, or the booking that overlaps.
Record the days you don’t work (at the foot of HR → Leave). Company-wide non-working days are skipped when leave quantities are worked out, so a public holiday inside somebody’s week off doesn’t come out of their allowance. Quantities already stored on existing requests are never rewritten.
Claims are money owed to a person (HR → Expense claims), which is not the same as the expenses under Finance - those are things the company already paid. Build a draft with a line per receipt, each with its own expense account, because one trip is a flight, a hotel and a dinner. Submit it, and an approver approves, rejects or sends it back.
Approval moves the cost; reimbursement moves the cash. Approving posts the expense against employee reimbursements payable. Marking it reimbursed posts the payment and clears exactly what approval accrued, never the cost twice. The screen tells you which of those happened rather than leaving you to work it out from the ledger.
Good to know
- You’ll need the Operations extension switched on (Settings → Extensions), the same switch as projects and timesheets. They share the same people, so they’re one module rather than two.
- Running leave accrual twice grants twice. Nothing can tell a second run from a deliberate catch-up, so it asks first. Decide who runs it and when.
- A claim line with no expense account approves but posts nothing. The claim still works as a record, there’s simply no accounting entry and therefore nothing for reimbursement to clear. The screen says so, and it’s the sort of message to read the first time rather than the tenth.
- Leave is deducted in working days, Monday to Friday, minus the holidays you entered. If your business works Saturdays, that’s the assumption to check before you rely on the balances.
- An employee is one person, once. Provisioning the same contact twice returns the employee that already exists rather than making a second one. That’s why the register is built from contacts rather than typed.
- Approved leave feeds project capacity as time away, where the person is linked to a project team. Somebody not linked to an employee shows as unknown rather than as zero days away, because a blank is better than a confident wrong number.