HR & Payroll
The HR & Payroll module manages your employee register, records daily attendance, runs monthly payroll with Tanzania statutory compliance built in, tracks leave requests and staff loans, and produces printable payslips — all inside the same ERP as your Accounting and Logistics data, so payroll's GL entries land in the same General Ledger as everything else.
Included free in the Full Suite — Premium package. With Accounting, Transport & Clearing Combined or Point of Sale it's a paid add-on at TZS 2,500 per employee per month (employees on payroll, not system users). It's also available on its own as the HR & Payroll plan (see Billing →).
The HR & Payroll menu holds: Dashboard, Employees, Leave, Payroll, Attendance, Staff Loans (when enabled for your company), Reports, and HR Settings. Each entry only appears if you have the permission for it.
Employees
Register every employee with:
- Employee number — auto-assigned sequentially (
EMP-0001,EMP-0002, …) - Name, phone, email, national ID, TIN, NSSF number
- Department and job title — department reuses the same tenant-editable department list Requisitions' Head-of-Department approval stage already uses
- Employment type — Permanent, Fixed-Term, Probation, Casual, or Consultant
- Status — Active, On Leave, Suspended, or Terminated
- Hire date and, once applicable, termination date
- Store / location (optional) — shown when your company has stores or properties; pick the one this person works at
- Profile photo (optional)
- Bank name and account number — for reference; the platform does not initiate bank transfers
- Basic salary
- Social security fund — NSSF or PSSSF, with NSSF's employer/employee contribution split configurable per employee (see Statutory compliance below)
- NHIF registration and student loan (HESLB) flags — both drive optional per-employee payroll deductions
- Link to Driver (optional) — if your tenant also has the Fleet module, an employee record can be linked to an existing Driver record so the same person's operational and payroll data can be cross-referenced. This is a plain reference only — linking does not flow a driver's pay through payroll automatically
Department, store and driver are searchable lookups — type part of the name to find it.
Allowances & deductions
Each employee can carry compensation items that feed straight into every payroll run:
- Allowances — Transport, Housing, Airtime, Meal, Responsibility, or Other, each independently marked taxable or non-taxable
- Deductions — Loan, Advance, Disciplinary, Uniform, or Other
Every item applies to each payroll run until you remove it. One-off adjustments (e.g. a single bonus) aren't supported yet — add the item, then remove it after that month's run.
If Staff Loans is switched on for your company, record loans there instead of as a Loan deduction: payroll then stops deducting automatically once the loan is repaid.
Leave balance
An employee's detail page shows their current-year annual leave balance, computed live from your tenant's configured annual leave entitlement (see Statutory compliance) minus their Approved 'Annual' leave requests for the year — never a stored, potentially stale number.
Payroll runs
Go to HR & Payroll → Payroll and click + New Payroll Run. Pick the period (month) and pay date, then Save as Draft. Runs are numbered PR-0001, PR-0002, … and there can only be one run per month (a voided run doesn't count). A run moves through a fixed lifecycle:
| Status | Meaning |
|---|---|
| Draft | Just created, not yet calculated — click Calculate |
| Calculated | Every active employee's payslip has been computed for the period. Re-calculate fully replaces its payslips rather than accumulating duplicates |
| Approved | Locked against further recalculation — the figures are final |
| Posted | Posted to the General Ledger with Post to GL (only shown if your company has the Accounting module — see GL posting below) |
| Void | Reversed — only possible from Approved or Posted, needs a reason, and reverses the GL entries too if the run had been posted |
Only Active employees are included in a run — On Leave, Suspended and Terminated employees are left out. Click a run to expand it and review each employee's gross pay, PAYE, NSSF and net pay before approving. A posted run has a GL Entries → link.
Unpaid leave
An employee's Unpaid leave days for the period reduce their basic salary before tax — not a flat deduction bolted on afterward, so PAYE and NSSF are correctly computed on what they actually earned that period. Every other leave type (Annual, Sick, Maternity, Paternity, Compassionate) is treated as a paid entitlement and does not affect the payslip.
Payslips
Each payslip shows basic salary, allowances, gross pay, PAYE-taxable income, employee NSSF contribution, PAYE, other deductions (NHIF, HESLB, loans/advances), and net pay — plus the employer-side cost (employer NSSF, SDL, WCF) for the business's own records. In an expanded payroll run, click View → on an employee's row to open their payslip, then 🖨 Print / PDF to print it on A4 or save it as a PDF. Viewing payslips needs payslip.view.all.
Leave management
Log a leave request against an employee — Annual, Sick, Maternity, Paternity, Compassionate, or Unpaid — with a date range and reason. Requests move through Pending → Approved/Rejected, and a rejected request can carry a reason. A pending request can also be Cancelled. Filter the list by status. Leave is logged on an employee's behalf by HR or a manager — there is no employee self-service leave-request submission yet.
Attendance
HR & Payroll → Attendance keeps a daily register of who came to work.
- Daily Register — pick a date to see every active employee. Set each person's status (Present, Absent, Late, Half Day, or On Leave) and their clock-in and clock-out times; hours worked are calculated for you. A summary shows how many are present, absent and on leave. Export ↓ downloads that day's register to Excel.
- Import Biometric — upload the raw ATTLOG file from a ZKTeco fingerprint device (
.csv,.txtor.dat, comma- or tab-separated). Each punch is matched to an employee by Employee #, so the number on the device must match the one in the ERP. The earliest clock-in and latest clock-out per day are kept; anyone clocking in after 08:30 is marked Late. Importing again for the same employee and date replaces that day's record. Numbers the ERP doesn't recognise are listed and skipped.
Attendance is a record only — it doesn't change payslips. Unpaid absences still need to be logged as Unpaid leave to reduce pay.
Staff loans
When Staff Loans is switched on for your company (ask your provider), HR & Payroll → Staff Loans tracks money lent to employees and recovers it through payroll.
- Click + Issue Loan and choose the employee, the loan amount, the monthly deduction, the issue date, the first month to deduct, and an optional reason.
- Every payroll run from that month on adds the monthly deduction to the employee's payslip as a Loan deduction. The last deduction is reduced to whatever is left, and a deduction never takes net pay below zero.
- Once the balance reaches zero the loan shows Paid Off and deductions stop.
Repayments are counted only from Approved or Posted payroll runs, so voiding a run gives its deductions back to the loan balance. Each loan's page shows its repayment history (deductions in runs not yet approved show as Pending). The employee's profile lists their loans too.
- Edit — the employee, loan amount and issue date lock once payroll has deducted from the loan or it has been posted to the GL.
- Write Off — stops further deductions (a reason is required). A write-off posts nothing to the GL.
- Delete — only possible while a loan has no deductions and no GL posting.
- Export to Excel from the list.
If your company has Accounting and a Staff Loans Receivable account is set in Posting Setup, issuing a loan can also post it to the GL (debit Staff Loans Receivable, credit your default bank / cash account), and payroll credits that account with each run's loan repayments.
Statutory compliance
Every statutory rate driving payroll calculations is tenant-editable under HR & Payroll → HR Settings (needs payroll.settings.manage or settings.manage), not hardcoded — a tenant that has never opened that screen gets the platform's verified default rates automatically:
| Item | Default | Notes |
|---|---|---|
| PAYE | 5 progressive monthly bands (0%, 8%, 20%, 25%, 30%) | Applied to taxable income (gross pay minus the employee's NSSF contribution) |
| NSSF | 20% of wage total, split 10% employee / 10% employer by default | Per-employee configurable split: 10/10, 5% employee / 15% employer, or the employer remitting the full 20% itself |
| PSSSF | 5% employee / 15% employer, fixed | The public-sector equivalent of NSSF — set via an employee's Social Security Fund field |
| SDL (Skills Development Levy) | 3.5% of gross emoluments, employer-only | Only applies once your active employee count reaches a configurable threshold (default 10) |
| WCF (Workers Compensation Fund) | 0.5% of gross income, employer-only | Applies uniformly regardless of sector |
| NHIF | 3% employee / 3% employer | Opt-in per employee (NHIF Registered flag) — not a blanket tenant setting |
| HESLB (student loan) | 15% of basic salary | Only applies to employees flagged as having an outstanding student loan |
| Annual leave entitlement | 28 days/year | Feeds every employee's leave balance calculation |
HR Settings also lets you edit the 5 PAYE bands directly — each band's floor is derived automatically from the previous band's ceiling, so an edit can never accidentally open a gap or overlap in the tax calculation. A ↺ Reset to Verified Defaults button is always available if you want to revert to the platform's own TRA/NSSF/WCF/HESLB-sourced figures.
GL posting
Posting needs the Accounting module. Clicking Post to GL on an Approved run creates a balanced journal entry in your General Ledger, using the account mapping configured under Accounting → Posting Setup → Payroll Account Mapping:
| GL line | Account | Required? |
|---|---|---|
| Debit | Salaries & Wages Expense (gross pay) | Required — payroll cannot post without this |
| Debit | Employer NSSF Contribution Expense | Optional — folds into Salaries & Wages Expense if unset |
| Debit | SDL Expense | Optional — folds into Salaries & Wages Expense if unset |
| Debit | WCF Expense | Optional — folds into Salaries & Wages Expense if unset |
| Credit | PAYE Payable | Optional — folds into Salaries Payable if unset |
| Credit | NSSF Payable | Optional — folds into Salaries Payable if unset |
| Credit | SDL Payable | Optional — folds into Salaries Payable if unset |
| Credit | WCF Payable | Optional — folds into Salaries Payable if unset |
| Credit | Other Deductions Payable | Optional — folds into Salaries Payable if unset |
| Credit | Staff Loans Receivable (staff loan repayments) | Optional, Staff Loans only — if unset, loan repayments fold into Other Deductions Payable |
| Credit | Salaries Payable (net pay owed) | Required — payroll cannot post without this |
Only the two required accounts need to be configured for a run to post — every optional line simply folds into whichever required account is on the matching debit/credit side. Voiding a Posted run reverses its GL entries automatically.
Dashboard & Reports
HR & Payroll Dashboard — the module's landing page: quick actions (Add Employee, Log Leave, New Payroll Run, HR Reports), stat tiles (Active Employees, Pending Leave, On Leave Today, Latest Payroll Run), a Pending Leave Approvals list, an On Leave Today list, and the latest payroll run's headline figures.
HR & Payroll → Reports, each exportable to Excel with ⇩ Export:
- Payroll Register — every payslip for a chosen period
- Statutory Remittance — PAYE/NSSF/SDL/WCF totals owed for a period
- Headcount — active employee counts by department, employment type, and status
- Journal Export (needs
payroll.export) — downloads posted payroll GL entries for a range of months as a CSV for QuickBooks Online, Xero, or Microsoft Business Central. An Account Mapping table lets you give each payroll account its code in the other system; unmapped accounts export with their own account number.
Permissions
| Permission | What it allows |
|---|---|
employee.view | View the employee register and profiles |
employee.create | Add new employee records |
employee.edit | Edit employee profile and compensation details |
employee.delete | Archive (soft-delete) an employee record |
leave.view | View the leave request list and each employee's leave balance |
leave.create | Log a leave request on behalf of an employee |
leave.edit | Edit or cancel a leave request while it is still Pending |
leave.approve | Approve or reject a pending leave request |
payroll.view | See the payroll run history and its payslips |
payroll.run | Create a new payroll run and calculate it for the period |
payroll.approve | Approve a calculated payroll run, locking it against further edits — also required to post an approved run to the General Ledger |
payroll.void | Void an approved or posted payroll run, reversing its General Ledger entries if any |
payslip.view.all | View and print any employee's payslip |
payroll.settings.manage | Access HR Settings — edit PAYE bands, SDL/WCF/NHIF/HESLB rates, and annual leave days |
payroll.reports.view | Access HR Reports — Payroll Register, Statutory Remittance, and Headcount |
payroll.export | Use the Journal Export tab and edit its account mapping |
attendance.view | View the attendance register |
attendance.create | Log attendance and import biometric files |
attendance.edit | Correct a logged attendance record |
loan.view | View staff loans, balances, and repayment history |
loan.manage | Issue, edit, write off, and delete staff loans |
The default HR Officer role holds every permission above except employee.delete and payroll.void, which stay Tenant Admin-only — the same "narrower role, admin retains the consequential action" pattern used elsewhere in the platform (e.g. gl.void, asset.dispose).