EH HR Payroll New Zealand
A ready New Zealand salary structure that computes PAYE on progressive marginal brackets, the ACC earner levy, and the KiwiSaver employer contribution, with the rate tables you can edit and keep current.
Why this module
EH HR Payroll New Zealand
PAYE the way IRD intends
Period income is annualised, each marginal bracket taxes only its own slice, then the result divides back to the pay period. This is the progressive method, not a flat or coefficient shortcut, and a test reproduces the published IRD figure of 13,220.50 on a 70,000 annual income.
Rates are data, not buried code
The PAYE thresholds and marginal rates live on an editable bracket model with its own admin screen, and the ACC rate, ACC cap, and KiwiSaver rate are company settings. When IRD or ACC revise figures, you update values, not source.
One payroll engine, one localization
PAYE, ACC, and KiwiSaver are exposed to the salary rules through the engine extension seam, so the New Zealand structure runs in the same computed, sequenced payslip pipeline as every other EH HR payroll country pack.
Day in the life
A monthly run in practice
You assign the New Zealand Standard structure to an employee and compute the payslip. The engine reads the period span, infers twelve monthly periods, annualises the gross, and walks the IRD brackets slice by slice for PAYE. The ACC line caps liable earnings at your configured maximum before applying the levy, and KiwiSaver posts as an employer-side contribution on gross. Net is gross less PAYE and ACC, since KiwiSaver sits on the employer side. Before a new tax year you open the PAYE Brackets screen, confirm the thresholds and rates against current IRD figures, and adjust the ACC rate and cap in company settings.
Edge cases
The cases most modules quietly ignore.
In the shipped code today, each one a place where a cheaper module silently does the wrong thing.
PAYE taxes each band only on the income that falls inside it. Income at exactly the top of a band, such as 53,500, returns the precise boundary figure of 8,270.50 with no overlap or double counting.
New Zealand taxes from the first dollar. The lowest bracket starts at zero, so even small earnings carry PAYE, matching IRD treatment rather than assuming an allowance.
The engine infers pay periods per year from the date span (weekly, fortnightly, monthly, annual), so the same brackets produce the correct period PAYE whether you run weekly or monthly, with the annual figure divided back to the period.
The earner levy applies only up to the maximum liable income. Annual earnings above the cap stop accruing levy, so high earners are levied on the capped base, not full gross.
PAYE and ACC return zero for non-positive income and skip computation when the period count is missing, so empty or malformed periods do not raise or produce spurious tax.
KiwiSaver is computed as an employer contribution category, so it does not reduce employee net pay. Net is gross less PAYE and ACC only, keeping the employer cost separate from the take-home figure.
PAYE, ACC, and KiwiSaver reach the salary rules through the engine helper seam as closed callables over read-only proxies, so localization formulas cannot mutate records or reach outside the payslip namespace.
ACC rate, ACC cap, and the KiwiSaver rate are read from the payslip company, so each company on the database runs against its own configured New Zealand figures.
What is inside
Built to do the job, end to end.
- PAYE bracket model and screen. eh.hr.paye.bracket holds the marginal thresholds and rates with an editable list view and an admin-only menu under the payroll root. Brackets are seeded as a 2025-26 template from the IRD tax tables and ordered by upper bound, with the top band carrying a very large bound to cover all higher income.
- Progressive compute methods. compute_annual_paye walks the brackets and taxes each slice at its own rate; compute_period_paye annualises the period gross, taxes annually, and divides back. Both are model methods, unit tested against published IRD figures and boundary cases.
- ACC and KiwiSaver helpers. The payslip extension exposes paye, acc, and kiwisaver_rate to the salary rules. ACC annualises, caps liable earnings at the configured maximum, applies the levy, and divides back; KiwiSaver passes the employer rate through to the structure rule on gross.
- New Zealand Standard structure. A seeded salary structure wires Basic, Gross, KiwiSaver employer contribution, PAYE deduction, ACC deduction, and Net in sequence, each rule calling the engine helpers so the payslip computes end to end out of the box.
- Company settings. res.company gains the ACC earner levy rate, the ACC maximum liable income, and the KiwiSaver employer rate, each with help text pointing back to the current ACC and IRD figures to verify.
- Role-scoped access. Bracket records are readable by self-service employees, editable by HR officers, and fully managed by HR admin, using the EH HR core groups so the New Zealand data inherits the suite security model.
Honest about the edges
What this does not do, so nothing surprises you.
- Seeded PAYE brackets, ACC rate, ACC cap, and KiwiSaver rate are a 2025-26 template. You must verify them against current Inland Revenue and ACC figures before each tax year. The computation method is fixed; the rate tables are yours to keep current.
- This pack covers PAYE, the ACC earner levy, and the KiwiSaver employer contribution only. It does not model employee-side KiwiSaver deductions, ESCT on employer contributions, the student loan repayment, secondary tax codes, or independent earner tax credits.
- There is no Inland Revenue filing, payday filing, or e-file integration. The module computes payroll figures; it does not transmit returns to IRD.
- Holiday pay, leave accruals, and the Holidays Act calculations are out of scope. The structure computes pay from contract wage, not from leave balances.
- KiwiSaver is computed as an employer contribution at a single configured rate. Per-employee opt-out, contribution rate tiers, and the employer superannuation contribution tax are not handled.
- Requires the eh_hr_payroll engine and hr. It is a localization layer, not a standalone payroll application.
- Built and tested for Odoo 17 Community.
New Zealand payroll Odoo 17, NZ PAYE calculation, progressive marginal tax brackets, ACC earner levy Odoo, KiwiSaver employer contribution, IRD tax tables payroll, Inland Revenue income tax rates, NZ salary structure Odoo, New Zealand payroll localization, pay period annualisation PAYE, editable PAYE brackets, Odoo 17 Community payroll, no tax-free threshold New Zealand, ACC maximum liable income
Need this fitted to the way you work?
ERP Heritage delivers end to end Odoo work: Odoo Implementation, Customization and Development, Integration, Migration, Consultation, Support and Training. We help teams put this module into production, shape it to their process, and keep it running.
We work with businesses across Australia (Melbourne, Sydney, Brisbane, Perth, Adelaide, Canberra) and the Middle East (Dubai, Abu Dhabi, Riyadh, Jeddah, Doha, Kuwait City, Muscat). Start a conversation at erpheritage.com.au or email info@erpheritage.com.au.
Languages
Available in 19 languages
The interface ships translated out of the box. Switch language in Odoo and the fields, menus, and messages follow.
Modules teams pair with this one.
Premium ERP Heritage modules that extend the same stack, each built to the same engineering bar.
Inbound webhook receiver for the Employment Hero people and payroll platform on Odoo 17 Community
Real-time fiscalisation of customer invoices and credit notes with the Mauritius Revenue Authority e-Invoicing (E...
The Canada country pack for the ERP Heritage Employment Hero integration
Imports finalised pay run journals from the Employment Hero payroll platform (KeyPay) into Odoo Community account...
Please log in to comment on this module