Loading...
Chingola, Zambia · +260 969 787 323
Webmail Support All systems operational Operational
Sempya Systems
Guides

Zambian payroll: user guide

Running monthly payroll in Sempya CloudERP: basic pay, the allowances the law requires and their legal minimums, PAYE, NAPSA, NHIMA and SDL, deductions, and contractors who file their own returns.

Running monthly payroll in Sempya CloudERP: basic pay, the allowances the law requires and their legal minimums, PAYE, NAPSA, NHIMA and SDL, deductions, and contractors who file their own returns.

Running monthly payroll in Sempya CloudERP: you enter each employee's basic pay, the allowances agreed with them and any deductions of your own, and the system works out PAYE, NAPSA, NHIMA and the Skills Development Levy, posts everything to the right accounts and produces the payslips.

In a hurry? All of it at once: one employee, start to finish walks through a complete example — basic pay, housing, transport and lunch allowances, a salary advance and a breakage — with the payslip that comes out. If some of the people you pay are contractors who file their own returns, see Contractors; if you want the legal minimums for the allowances, see The legal minimum allowances.

This is the user guide for the Zambian payroll app in Sempya CloudERP. Inside the system the same guide is at Zambian Payroll → Payroll Guide.

This guide is for whoever runs payroll: an accountant, an accounts manager or an HR manager. It assumes nothing about Sempya CloudERP beyond being able to find a form and press Save.

Read this first: the figures have to be checked

The system arrives with the Zambian tax tables already filled in. They are a starting point, not an authority. The figures supplied are for the 2026 charge year (from the national budget presented in 2025). You are responsible for the figures your payroll actually uses.

  • Check every figure before your first payroll run, against the ZRA practice note for the year and against your own NAPSA and NHIMA employer accounts.
  • Check them again every January, and any time ZRA, NAPSA or NHIMA announce a change.
  • The NAPSA monthly ceiling for 2026 (K37,236, so a maximum of K1,861.80 each side) was checked against NAPSA's own contribution calculator in September 2026. It is still worth checking against your own NAPSA employer account.
  • NHIMA is worked out on basic salary, not on gross. That was an open question when the system was built and it is now settled: the Third Schedule to SI No. 63 of 2019 reads "1% of basic salary", for the employee share and the employer share alike. Earlier versions of this app computed it on gross, which over-deducts from anyone who has allowances.

Everything you need to change them is on one form — Payroll Rate Set — and you change it yourself, without waiting for anyone. See A new budget has been announced.

What the system works out

All figures are monthly. Each month is taxed on its own, which is what ZRA requires: there is no annual projection and no catching up over the year.

Item Employee pays Employer pays
PAYE 0% on the first K5,100; 20% from K5,100 to K7,100; 30% from K7,100 to K9,200; 37% on everything above K9,200 —
NAPSA 5% of gross, capped at K1,861.80 (reached at a gross of K37,236) 5%, same cap
NHIMA 1% of basic salary, no cap 1%, also on basic salary
Skills Development Levy — 0.5% of gross

"Gross" below means everything the employee earns in the month — basic pay plus every allowance, plus any bonus or overtime. There is no upper limit: a gross of K1,500 and a gross of K500,000 go through the same salary structure.

The three deductions do not share a base, and that is deliberate. PAYE and NAPSA are worked out on gross, the Skills Development Levy on gross emoluments, and NHIMA on basic salary alone. So an employee whose pay is part basic and part allowances pays less NHIMA than a colleague on the same gross but all basic. Do not "correct" this to make the three agree.

Some examples to check your first payslips against. These assume the whole figure is basic pay, with no allowances — that keeps the NHIMA column simple, since NHIMA follows basic. An employee on K10,000 basic with K4,000 of allowances has the K14,000 line's PAYE and NAPSA, but NHIMA of K100.00 (1% of their basic), not K140.00.

Gross PAYE NAPSA NHIMA Net pay
1,500.00 0.00 75.00 15.00 1,410.00
5,100.00 0.00 255.00 51.00 4,794.00
9,200.00 1,030.00 460.00 92.00 7,618.00
14,000.00 2,806.00 700.00 140.00 10,354.00
37,236.00 11,403.32 1,861.80 372.36 23,598.52
135,000.00 47,576.00 1,861.80 1,350.00 84,212.20
500,000.00 182,626.00 1,861.80 5,000.00 310,512.20

The K14,000 line is ZRA's own worked example: PAYE K2,806.

Setting up, once per company

An Accounts Manager, HR Manager or System Manager does this once.

Nothing works until the Set up Zambian payroll button has been pressed for your company. It is not optional and it is not automatic — installing the app does not do it, and neither does an upgrade. Until it is pressed there are no salary components to put on a payslip, so allowances cannot be entered and payroll cannot be run. If your company already has payroll, jump to Has it already been done? and check before you do anything else — it takes a minute and it is the single most common reason payroll "does not work".

  1. Open Zambian Payroll → Statutory Payroll Settings and pick your company (or create the record: the company name is the record's name).
  2. Check the Country and leave Employer contributions on ticked.
  3. Annual turnover. The Skills Development Levy is only charged to employers with an annual turnover of at least K800,000. Fill this in if you know it. If you leave it blank the levy is charged — that is deliberate: it is safer to charge it and be able to claim it back than to under-declare.
  4. NHIMA base. Leave this blank. The rate set works NHIMA out on basic salary, which is what the law says: the Third Schedule to SI No. 63 of 2019 reads "1% of basic salary" for the employee share and again for the employer share. It is only there as an override for the rare company that has been told in writing to do something else. Note that the three statutory deductions deliberately use different bases — PAYE and NAPSA on gross, SDL on gross emoluments, NHIMA on basic — so do not make them match.
  5. Press Set up Zambian payroll.

That button is safe to press at any time, as often as you like. It creates only what is missing and never changes or duplicates anything that already exists. It makes:

  • the accounts it needs, if they are not already in your chart: PAYE Payable, NAPSA Payable, NHIMA Payable, SDL Payable, and expense accounts for the employer's NAPSA, NHIMA and SDL. Where your chart is numbered, the new accounts take the next free numbers;
  • the salary components: Basic, PAYE, NAPSA, NHIMA, and the employer pairs;
  • a submitted salary structure called Zambia Monthly - Gross.

Afterwards the Components and accounts table on the settings shows exactly which account each amount posts to. To post something somewhere else, change the account in that table and press Set up Zambian payroll again.

Has it already been done?

Worth knowing how to check, because a company can look set up and not be. Two checks, quickest first.

The ten-second check. Open HR → Salary Structure Assignment → New, pick any employee, and look at the Allowances and other agreed pay table. Click Pay line on an empty row:

What you see What it means
Accommodation Allowance, Transport Allowance, Lunch Allowance ✅ set up — carry on
the list is empty, or the table is not there at all ❌ not set up — go and press the button

Then press Escape and leave without saving.

The proper check. Zambian Payroll → Statutory Payroll Settings → Pay Lines. Look at the Salary component column, for every row that has On ticked:

What you see What it means
every ticked line names a component ✅ done
a ticked line has Salary component blank ❌ that line does not exist yet

That blank column is the one to watch, and it is the trap: the settings record exists, the country and turnover are filled in, the pay lines are all listed with their amounts and minimums — everything looks finished — but with no component behind them those allowances cannot be put on anybody's pay. A company in that state can only ever enter one figure per employee, which is exactly what it looks like went wrong if you find old assignments with a single lump sum and no breakdown.

Two more things you can confirm if you want to be certain:

  • HR → Salary Structure contains Zambia Monthly - Gross, and it is Active and Submitted.
  • Opening it shows Basic plus one earning row per allowance you switched on — each with a formula like pay_component("HOUSING") — and deductions for PAYE, NAPSA and NHIMA.

If any of that is missing, press Set up Zambian payroll. It is safe at any time, as often as you like: it creates only what is missing, and it never changes or duplicates what is already there. It does not touch payslips that have already been run.

Press it again after every change to Pay Lines — switching a line on, adding one of your own, changing an account. The row in the table is only the definition; the button is what makes it real.

If your company already ran Zambian payroll by hand

Nothing is duplicated. Your existing Zambia Monthly - Gross structure keeps its name and stays submitted, all the salary assignments already made against it stay valid, and your existing components and accounts are reused. The only change is that the fixed formulas on that structure are replaced by ones that read the tax tables, so that next January you change the tables instead of the formulas.

Employee records

Under HR → Employee, for everyone you will pay:

  • Status Active, and the right Company.
  • Date of Joining correct. Someone who joins or leaves mid-month is paid for the days worked.
  • Bank or mobile-money details, if you pay from the system.
  • Under Statutory numbers: TPIN, NAPSA number and NHIMA number. These are not needed to run payroll, but the monthly returns report shows them, which saves looking them up every month.

The pay lines on your payslips

A payslip has to show what makes up the pay, not just a single figure. Zambian Payroll → Statutory Payroll Settings → Pay Lines is where you decide what those lines are. Each line has:

Field What it is
Code A short tag the salary structure uses, e.g. HOUSING. Letters, numbers, underscore. Don't change it once payroll has run.
Name on the payslip What the employee reads, e.g. Accommodation Allowance.
Kind Earning or Deduction.
How the amount is set Per employee amount — typed on each employee's assignment. Percent of basic pay — worked out automatically. Same amount for everyone — one fixed figure.
Legal minimum, percent of basic Warn when the amount is below this share of basic pay. Accommodation comes set to 30%. 0 means no check.
Account Where it posts. An earning defaults to wherever basic pay goes; a deduction must be given an account, because only you know where that money belongs.
On Untick to retire a line without deleting its history.

After adding or changing a line, press Set up Zambian payroll. That creates the salary component, its account if needed, and the row on the salary structure. Safe to press as often as you like.

Your system comes with these ready:

Code Line Set as Note
HOUSING Accommodation Allowance Per employee amount warns under 30% of basic pay
TRANSPORT Transport Allowance Per employee amount
LUNCH Lunch Allowance Per employee amount
ADVANCE Salary Advance Recovery Per employee amount off — give it an account first
BREAKAGES Breakages Per employee amount off — give it an account first
CANTEEN Canteen Per employee amount off — give it an account first

Add your own lines the same way — a responsibility allowance, an acting allowance, a staff loan recovery, a welfare contribution. There is no limit.

If you would rather just be shown, skip to All of it at once: one employee, start to finish. It does the whole thing — the two deductions switched on, the allowances typed, a one-off breakage, and the payslip that comes out — with figures you can check against your own.

The legal minimum allowances

Three allowances have a floor set by law. The instruments are made under the Employment Code Act No. 3 of 2019 — the older Minimum Wages and Conditions of Employment Act (Cap 276) was repealed by that Act, so anything still citing Cap 276 is out of date:

  • SI No. 48 of 2023, the General Order, for general workers
  • SI No. 50 of 2023, the Shop Workers Order
  • SI No. 49 of 2023, the Domestic Workers Order

All three were gazetted on 24 November 2023 and took effect on 1 January 2024. They are still the operative law: nothing since has amended these figures.

Allowance Not less than But only when
Accommodation 30% of basic pay the employer does not accommodate the employee
Transport 200.00 a month the employee lives beyond 3 km from work and the employer does not provide transport
Lunch 180.00 a month the employer does not provide a free, wholesome and adequate meal

Those conditions matter as much as the figures. None of the three is owed unconditionally. If you run a staff bus, you owe no transport allowance. If you feed people, you owe no lunch allowance. If you house them, you owe no accommodation allowance. And transport is not owed at all to someone who lives within 3 km of where they work.

Accommodation is a share of basic, so it rises with the salary. Transport and lunch are flat kwacha amounts — a large basic does not excuse them, and a small one does not reduce them.

If you type less than any of these, the system warns you, shows the figure it expected, and lets you save anyway. It also warns if you leave one empty, since an allowance the law requires is not something to forget by accident. Where one of the conditions above means it is genuinely not owed, say so rather than ignoring the warning — see below for the per-employee way, and switch the pay line off under Pay Lines when it applies to nobody in the company.

It warns rather than refuses on purpose: those Orders do not cover everybody. Under SI 48, management employees, the civil service, local-authority staff, and unionised staff whose conditions are set by collective bargaining are all outside it, as is anyone whose contract is already more favourable than the Order. For those employees, tick Not covered by the minimum wage order on the assignment and the warning stops for that person. It is also skipped entirely for a contractor, who is not an employee under the Orders at all.

Two things worth knowing if they apply to you. Domestic workers are under SI 49, which gives them the K200 transport allowance on the same 3 km test but no lunch allowance and no housing allowance at all. And the 30% housing figure is not a universal rule for every Zambian employee — it binds those SI 48 and SI 50 cover. The Employment Code Act itself sets no percentage; for staff outside those Orders, housing is whatever the contract or collective agreement says.

This guide is a description of how the software behaves, not legal advice. Check the instruments or your labour consultant before relying on any of it for a compliance decision.

The instruments themselves

You can read every one of them. We keep copies at sempya.co.zm/statutory rather than linking to the ministry, because government URLs move and disappear — the ministry's own copy of SI 49 was already unreachable when we collected these, and a compliance reference is worth nothing at the moment it 404s. Each one shows the source it came from, so you can check our copy against the original.

Document Sets
SI No. 48 of 2023 — General Order housing 30%, transport K200, lunch K180, and who is excluded
SI No. 49 of 2023 — Domestic Workers K1,100 basic and K200 transport; no lunch or housing allowance
SI No. 50 of 2023 — Shop Workers the same allowance minimums, with its own wage scale
SI No. 3 of 2025 — Truck and Bus Drivers K4,000 / K3,000 minimum basic for drivers
Employment Code Act No. 3 of 2019 the power behind all of the above, and the repeal of Cap 276

When only some of the allowances apply

Plenty of people are due housing but not transport or lunch. This is the common case, not an edge case, because each of the three has its own condition: the employee lives within 3 km so no transport is owed, or the company runs a bus, or it feeds people, or it houses them. Management on a housing-only package is the same situation by another route. The tick above is the wrong tool for any of these: it switches off all the minimums, including the 30% accommodation one, which usually still applies.

Use Allowances that do not apply on the assignment instead, and pick the ones that are not theirs:

Effect
Allowances that do not apply = Transport, Lunch Those two never warn for this person. Accommodation still has to be at least 30% of basic.
Not covered by the minimum wage order ticked Nothing warns at all — for someone the Orders genuinely do not cover.

Leaving an allowance out of an employee's pay is not the same as saying it does not apply to them: the first is an omission the system should question, the second is a fact about their contract. This field is how you tell it which one you mean.

The three figures are not fixed in the software. They sit on the pay line, next to the amount, and an accountant can change them the day an amendment to the Orders is published — the same way the PAYE bands live in the rate set rather than in the code.

If your company was already set up before this was added, the three minimums are blank on your existing pay lines and nothing will warn until you fill them in. That is deliberate — an upgrade never overwrites figures an accountant has already entered — but it does mean you have to do it once: Zambian Payroll → Statutory Payroll Settings → Pay Lines, put 30 in Legal minimum, percent of basic on Accommodation, 200 in Legal minimum, fixed amount on Transport and 180 on Lunch, and save. A company set up after the upgrade gets them already filled in.

If you pay exactly 30% and want it worked out for you, change the accommodation line's How the amount is set to Percent of basic pay and put 30 in the percentage. Then you never type it at all.

Contractors, who file their own returns

Not everyone you pay is an employee. Someone engaged under a contract for services — a consultant, a fitter on a job contract — invoices a fee and accounts to the ZRA, NAPSA and NHIMA themselves. You must not deduct those from them as well, and you must not put them on your returns: that would be paying the same liability twice.

Mark them once, on the person and not on their pay:

HR → Employee → open the person → Worker type → Contractor.

That one field changes four things, for every month from then on:

Employee Contractor
PAYE deducted yes no
NAPSA and NHIMA deducted yes no
Employer NAPSA, NHIMA, SDL added yes no
On the Statutory Returns report yes no
Minimum allowance warnings yes no — the Orders set conditions of employment

Everything else is unchanged. They go on the same salary structure, they are paid through the same Payroll Entry, they get a payslip, and any agreed deduction of yours — an advance, breakages — still comes off. The statutory lines simply read zero, which is deliberate: a zero on the payslip says nothing was withheld, where a missing line would leave the person guessing.

On the package above, a contractor would take the full 12,080.00 less only the advance and the breakages, so 11,430.00 — and the month would cost the company 12,080.00, with no employer contribution on top.

This does not cover withholding tax. WHT on many contractor services is an obligation on the payer, at a rate that depends on the service, and it is not handled by payroll. Settle that with your accountant separately — switching someone to Contractor here does not deal with it.

Step 1: enter each employee's pay

Once per employee, and again only when their pay changes.

  1. HR → Salary Structure Assignment → New.
  2. Employee: pick the employee.
  3. Salary Structure: Zambia Monthly - Gross.
  4. From Date: the first day this pay applies, normally the first of a month.
  5. Base: the monthly basic pay.
  6. Variable: leave it 0.
  7. Under Allowances and other agreed pay, add a row for each allowance agreed with this employee: pick the pay line and type the monthly amount. Only per employee amount lines appear in that list — percent-of-basic and fixed lines are worked out for everyone and must not be typed here.
  8. Total Gross Pay fills in as you type: basic pay plus every earning line. This is the figure PAYE, NAPSA and NHIMA are worked out on, so check it before saving.
  9. Income Tax Slab: leave it blank. PAYE is worked out by the structure; a tax slab would spread the tax over the year, which is wrong for Zambia.
  10. Save, then Submit.

If you used this system before allowances existed, Base was the whole monthly gross. It now means basic pay, and allowances are added on top. Nothing changed for anyone who has no allowance rows — with none, basic pay is the gross.

To move someone onto itemised pay, create a new assignment from the start of the next unpaid month, with Base set to the basic-pay part and the allowances as rows. Do not edit the Base of an assignment you have already produced a payslip from: that assignment is the record of what that payslip was worked out from. Payslips already submitted keep their own figures either way, and they are correct for the way pay was entered at the time.

When pay changes: do not cancel or edit the old assignment. Create a new assignment with the new figures and a From Date when they start. The system uses the latest assignment that has started, and payslips already produced stay as they were.

Step 1b: deductions

There are two kinds, and they are entered in different places.

The same every month — a salary advance being repaid at K500 a month, a fixed welfare contribution. Put it on the employee's assignment under Allowances and other agreed pay, exactly like an allowance; a Deduction line comes off the pay instead of adding to it. It then repeats every month until you create a new assignment without it.

Different every month — a canteen bill, breakages, a one-off recovery. Use HR → Additional Salary:

  1. HR → Additional Salary → New, before you create that month's salary slips.
  2. Employee, Salary Component (the deduction line), Amount, and Payroll Date in the month.
  3. Leave Is Recurring unticked for a one-off. For an advance repaid over a fixed number of months, tick it and set From Date and To Date — it then stops by itself.
  4. Submit.

Deductions never change gross pay, so they never change PAYE, NAPSA or NHIMA. They come off net pay.

All of it at once shows both kinds done for one employee, including switching on Salary Advance Recovery and Breakages, which arrive switched off.

Deductions from wages are regulated. The Employment Code Act limits what an employer may deduct and requires the employee's agreement for most deductions. Keep the signed authority for advances, breakages and canteen recoveries with your payroll file.

All of it at once: one employee, start to finish

Everything above in one go, with figures you can check. Say you have agreed this with someone:

Monthly
Basic pay 9,000.00 the agreed figure
Housing allowance (30% of basic) 2,700.00 the legal minimum, exactly
Transport allowance 200.00 the legal minimum
Lunch allowance 180.00 the legal minimum
Total gross pay 12,080.00

and they are also repaying a salary advance at 500.00 a month, and this month they broke something that costs 150.00.

A. Once for the company: make sure the pay lines exist

Zambian Payroll → Statutory Payroll Settings → Pay Lines. Of the four earnings, basic pay is not in this table and needs nothing done to it — it comes from Base on the employee's own assignment in part B. The other three, housing, transport and lunch, are already here. What you are adding is the two deductions.

Code Name on the payslip Kind How the amount is set Legal minimum Account On
HOUSING Accommodation Allowance Earning Per employee amount 30% of basic (defaults to Salary) ✅ already
TRANSPORT Transport Allowance Earning Per employee amount 200.00 a month (defaults to Salary) ✅ already
LUNCH Lunch Allowance Earning Per employee amount 180.00 a month (defaults to Salary) ✅ already
ADVANCE Salary Advance Recovery Deduction Per employee amount — you choose ⬜ → tick it
BREAKAGES Breakages Deduction Per employee amount — you choose ⬜ → tick it

For each of the two deductions: tick On, then give it an Account. A deduction will not save without one, because only you know where that money belongs — a salary advance is usually recovered against the advance or staff-debtor account it was paid from, and breakages usually go to other income or to the expense account that bore the cost. Ask whoever keeps the ledger if you are unsure.

Then press Set up Zambian payroll. That creates the salary components and puts them on the salary structure. Nothing appears on anybody's payslip yet.

Do not skip this, even if the company was set up long ago and the pay lines are already listed. A row in the Pay Lines table is only a definition — the button is what turns it into something you can actually put on a payslip. The giveaway is the Salary component column: if it is blank on a line that is switched on, that allowance does not exist yet and part B below will have nothing to choose from. See Has it already been done?.

Adding your own line works exactly the same way. A responsibility allowance, an acting allowance, a staff loan recovery, a welfare or union contribution — new row, pick Earning or Deduction, pick how the amount is set, give it an account, press Set up Zambian payroll. There is no limit and you do not need Sempya.

B. Once per employee: the agreed package

HR → Salary Structure Assignment → New. Employee, structure Zambia Monthly - Gross, From Date the first of the month this starts.

Field What to type
Base 9000 — basic pay only, not the total
Variable 0
Income Tax Slab leave blank

Then under Allowances and other agreed pay, one row each:

Pay line Amount
Accommodation Allowance 2,700.00
Transport Allowance 200.00
Lunch Allowance 180.00
Salary Advance Recovery 500.00

Total Gross Pay fills in as 12,080.00 — basic plus the three earnings. The advance is a deduction, so it is not in that figure. Check it against what you agreed, then Save and Submit.

If you type less than the legal minimum into any of the three — under 30% of basic for accommodation, under 200.00 for transport, under 180.00 for lunch — the system says so when you save, names the Order, and still lets you save. It is a warning because those minimums do not cover everyone: see the note below.

The advance now comes off every month until you create a new assignment without that row. That is what this table is for: amounts that are the same every month.

C. This month only: the breakages

HR → Additional Salary → New, before you create the month's payslips.

Field What to type
Employee the employee
Salary Component Breakages
Amount 150
Payroll Date any date inside the month being paid
Is Recurring leave unticked — this is a one-off
Overwrite Salary Structure Amount leave as it comes

Submit. Use this for anything that changes month to month: breakages, a canteen bill, a one-off recovery, and equally a bonus or overtime (pick an Earning component instead).

An advance repaid over a fixed number of months can go here instead, with Is Recurring ticked and a From Date and To Date — it then stops by itself. Use the assignment for an open-ended deduction, Additional Salary with an end date for one that finishes.

D. Run payroll, and check the payslip

Run the month as usual (Payroll Entry, next section). The payslip comes out like this:

Earnings Amount Deductions Amount
Basic 9,000.00 PAYE 2,095.60
Accommodation Allowance 2,700.00 NAPSA 604.00
Transport Allowance 200.00 NHIMA 90.00
Lunch Allowance 180.00 Salary Advance Recovery 500.00
Breakages 150.00
Gross Pay 12,080.00 Total Deductions 3,439.60

Net Pay: 8,640.40

Worth checking, because it is where mistakes show up:

  • PAYE and NAPSA are worked out on 12,080.00, not on 9,000.00. Every cash allowance is part of pay for tax and for the pension contribution. NHIMA is the exception: the law puts it on basic salary, so it is 1% of 9,000.00 and not of the gross. PAYE of 2,095.60 is 1,030.00 on the first 9,200 plus 37% of the 2,880.00 above it.
  • The advance and the breakages do not change PAYE, NAPSA or NHIMA. They come off after. That is the difference between an allowance and a deduction, and why the two go in different places.
  • Nothing warned, because all three allowances are exactly at their legal minimum. Type 150.00 for lunch and the system names the Order and the 180.00 it expects.
  • The employer also pays NAPSA 604.00, NHIMA 90.00 and SDL 60.40 on top, so the month costs the company 12,834.40. Those lines are on the payslip for the record and are not deducted from anyone.

Which place does it go in?

What it is Where it goes
Basic pay Base on the assignment
An allowance, same every month Contract Pay row on the assignment
An allowance that is a set % of basic for everyone a Pay Line set to Percent of basic pay — never typed per employee
A deduction, same every month (open-ended advance, welfare) Contract Pay row on the assignment
A deduction that ends after N months Additional Salary, recurring, with a To Date
Anything that changes month to month (breakages, canteen, bonus, overtime) Additional Salary for that month
PAYE, NAPSA, NHIMA, SDL nowhere — the system does these itself
Someone who files their own PAYE and NAPSA Worker type → Contractor on the Employee, not on their pay

Step 2: run payroll each month

  1. Zambian Payroll → Payroll Entry → New.
  2. Fill in:
    • Posting Date: normally the last day of the month.
    • Company, Currency ZMW.
    • Payroll Frequency: Monthly.
    • Start Date and End Date: the first and last day of the month.
    • Cost Center, if you split salaries by cost centre.
    • Payment Account: the bank account salaries are paid from.
  3. Get Employees. Everyone with a salary assignment appears. Remove anyone you are not paying.
  4. Create Salary Slips. They are created as drafts.
  5. Check the draft slips before going further (next section).
  6. Submit Salary Slip. This posts the payroll to the accounts.
  7. Make Bank Entry to record paying the net salaries out of the bank.

If a message appears saying the rates may be out of date, read A new budget has been announced before you submit. It is a warning, not a refusal: it means the tax tables in use took effect in an earlier year than the payroll month.

Checking a salary slip

Open a draft slip and look at four things.

  • Gross Pay equals the gross you entered, unless the employee joined, left or had unpaid leave during the month, in which case it is reduced for the days not paid.
  • Deductions: PAYE, NAPSA and NHIMA. Compare them with the examples table above, or work one out by hand for a round figure.
  • Net Pay is gross minus those deductions.
  • Employer Cost is the gross plus the employer's own contributions: what the month really costs the company.

You will also see lines for NAPSA Employer Contribution, NHIMA Employer Contribution, Skills Development Levy and their matching Employer Payable lines. Those are the company's costs. They are shown for the records, and they are deliberately not added to the employee's gross and not deducted from their net pay. On the Zambia Payslip print format they appear in their own block, under the net pay, so no employee mistakes them for a deduction.

To print, open the slip and choose the Zambia Payslip format.

What lands in the accounts

When the slips are submitted, the payroll entry posts one journal:

Amount Account Side
Gross salaries Salary (expense) debit
Employer NAPSA, NHIMA and SDL their own expense accounts debit
PAYE deducted PAYE Payable credit
NAPSA, employee and employer share NAPSA Payable credit
NHIMA, employee and employer share NHIMA Payable credit
SDL SDL Payable credit
Net pay Payroll Payable credit

Make Bank Entry then clears Payroll Payable against the bank.

Paying ZRA, NAPSA and NHIMA

After payroll, the balance on each payable account is the amount to pay.

  • PAYE and the Skills Development Levy go to ZRA, on the PAYE return, by the 10th of the following month.
  • NAPSA, both shares together, by the 10th of the following month.
  • NHIMA, both shares together, monthly.

Record each payment against the payable account, so it clears back to zero. If a payable account does not clear to zero, either a payment went to the wrong account or a month was not paid.

The monthly returns report

Zambian Payroll → Statutory Returns, then pick the company, year and month. One row per employee with their TPIN, NAPSA and NHIMA numbers, gross pay, PAYE, the employee and employer share of each contribution, SDL, net pay and employer cost, with a total row. This is the sheet to fill the returns from and to keep with the month's file.

The columns follow your own settings: a levy you add to the rate tables and map in the settings appears here on its own.

Bonuses, overtime and other one-off payments

Same place as a one-off deduction — HR → Additional Salary, for the employee and the month, before you create the salary slips — but pick an Earning component instead. The steps are in All of it at once, part C.

Everything then follows automatically: PAYE, the employee's NAPSA and NHIMA, and the employer's NAPSA, NHIMA and SDL all include the bonus. There is nothing to add by hand and no journal entry to write.

Remember the NAPSA cap: if the employee's gross for the month is already K37,236 or more, a bonus adds no further NAPSA on either side.

Staff promised a net amount

Some staff are promised a take-home figure — "K25,000 in the hand" — rather than a gross. A payslip has to show a real gross, and PAYE has to be paid on it, so the gross must be worked out from the net. The system does this exactly.

On the Salary Structure Assignment:

  1. Leave Base alone and fill in Guaranteed Net Pay with the promised take-home figure.
  2. Save. Base is filled in for you, and a message says what it worked out.
  3. Submit.

The button Work Out Gross From Net does the same sum without saving, if you only want to see a figure.

Worked example, on the 2026 figures: a promised net of K25,000 needs a gross of K39,496.45 — PAYE K12,239.69, NAPSA K1,861.80, NHIMA K394.96, leaving exactly K25,000. The employer's own contributions on top bring the real cost to about K41,950 a month. It is worth showing whoever agreed the figure what K25,000 net actually costs.

Because the promised net is stored on the assignment, the system can work the gross out again when the tax tables change — see the next section.

This works on basic pay alone. If the employee also has allowance lines, the system refuses the combination rather than guess, because the gross it solves for is basic pay only. Either agree the net as a basic-pay-only package, or work the gross out yourself and type the basic pay and allowances normally.

A new budget has been announced: updating the tax tables

PAYE bands, the NAPSA ceiling, the NHIMA rate and the Skills Development Levy can all change with the national budget, usually from 1 January. You do this yourself, on one form, and it takes a few minutes. You do not need Sempya and you do not need a new release of the system.

Before you start

Have the sources open, not a summary of them:

  • the ZRA practice note for the new charge year (zra.org.zm), for the PAYE bands;
  • the NAPSA notice of the new monthly ceiling, or NAPSA's own contribution calculator, which lists the ceiling for each year, or your own NAPSA employer account;
  • any NHIMA change, or your own NHIMA employer account;
  • the budget speech or the Money Bills for anything else that affects payroll.

The steps

  1. Zambian Payroll → Payroll Rate Set. Open the set in use (for example Zambia 2026).
  2. Press Copy to New Year. This makes a copy — Zambia 2027 — effective 1 January of the new year, switched off. Nothing in payroll changes yet.
  3. On the copy, edit what the budget changed:
    • PAYE bands. One row per band. From and To are monthly amounts; leave To blank on the top band, which has no upper limit. The bands must run on from each other with no gap and no overlap, starting at 0 — the form will refuse to save otherwise, and it will tell you which rows are wrong.
    • Contributions. One row each for NAPSA, NHIMA and SDL: the Employee %, the Employer %, the Monthly ceiling on the base (blank means no ceiling), and whether it is worked out on Gross or Basic pay. Untick Enabled to stop a levy being charged at all. To add a new levy, add a row with a short code of your own — it will appear on the payslips and in the returns report.
    • Sources and notes. Write down where each figure came from and the date you checked it. The next person to do this, in twelve months, may be someone else.
  4. Save, then tick Active, then Save again.
  5. If anyone is on a guaranteed net, press Guaranteed Net Salaries. It lists them with the gross they are on now and the gross the new tables need, and Create New Assignments makes new salary assignments from 1 January with the new gross. The old assignments are left alone, so last year's payslips do not change.
  6. Run January's payroll as usual and check the first few slips by hand.

What you do not have to do

  • Do not edit the formulas on the salary structure or on the salary components. They read the tax tables, so they never need changing.
  • Do not create a new salary structure, and do not cancel the one you have.
  • Do not touch the salary assignments of anyone on an ordinary gross salary.

How the system picks which tables to use

Each salary slip uses the active rate set with the latest Effective From on or before the first day of the payroll month. So:

  • a slip for December 2026 keeps using the 2026 tables even after you have activated the 2027 set;
  • re-running an old month gives the same figures as the first time;
  • a mid-year change is possible: make a set effective from, say, 1 July and tick Active, and June uses the old tables while July uses the new ones.

Only ever have one active set per country per effective date. The form refuses two.

Things not to do

  • Do not create an Income Tax Slab and do not set one on a salary assignment. Sempya CloudERP's tax slabs annualise the tax and spread it over the remaining months, which is not how Zambian PAYE works.
  • Do not put anything in Variable on a salary assignment. Everything goes in Base.
  • Do not untick "Do not include in total" on any of the employer contribution components. It would add the employer's share to the employee's gross pay and tax them on it.
  • Do not add an allowance to an existing employee without reducing their Base. Base is basic pay, and allowances are added on top, so leaving an old gross figure in Base raises their total pay.
  • Do not type a percent-of-basic or fixed allowance on the assignment. Those are worked out for everybody; the system refuses the row and tells you so.
  • Do not change a pay line's Code once payslips exist under it. The code is what the salary structure's formulas refer to. Switch the old line off and add a new one instead.
  • Do not delete a rate set that a submitted payslip was produced under. Switch it off instead, so you can still see what a past month was worked out on.

Questions

If a figure looks wrong, work one payslip out by hand first: the monthly bands make that quick, and it usually settles the matter. If it still looks wrong, or if a rate set will not save and the message does not make sense, contact Sempya at support@sempya.co.zm with the employee's gross salary and the month.

Business email
Your own domain, hosted in Zambia
K 55/mailbox/mo, ex-VAT

Migration from Google or Microsoft included, backed up nightly.

See business email →
← All blog posts