EH HR Payroll Australia
PAYG withholding by the ATO statement-of-formulas method and superannuation guarantee on ordinary time earnings, computed inside the EH salary-rule engine.
Why this module
EH HR Payroll Australia
PAYG the ATO way
Withholding is the published statement-of-formulas calculation: x is whole-dollar weekly earnings plus 99 cents, y equals coefficient a times x minus b for the matching bracket, rounded to the nearest dollar and floored at zero. The method is fixed in code; a test pins it to ATO Schedule 1 Example 1, where $1,333.45 on the threshold scale withholds exactly $250.
Contributions on OTE
Superannuation guarantee is an employer contribution computed on ordinary time earnings, basic pay plus ordinary-time allowances, not basic alone. The OTE base is a memo line that lifts the contribution without touching gross or net, so an allowance raises super correctly and a future overtime rule would be excluded by design.
Rates are data
The bracket coefficients live in an editable table gated to HR admins. The seeded rows are the ATO's published scale-2 values for the current schedule. Because the ATO revises coefficients each financial year, you confirm the rows against the current Schedule 1 rather than waiting on a code release.
Day in the life
A monthly run that reconciles to the ATO
You compute a payslip on the Australia - Standard structure. The engine reads the period span, infers twelve pay periods a year, and annualises the monthly gross to a weekly figure. PAYG is withheld on that weekly figure by the statement-of-formulas method, then scaled back to the month. Superannuation is contributed at the configured rate on ordinary time earnings, so a site allowance lifts both gross and the super base while leaving the employee's withholding scale untouched. The employer contribution shows on the slip without reducing take-home, and the PAYG line matches the figure the ATO method produces.
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.
Non-weekly pay is annualised to a weekly figure, withheld weekly by the ATO method, then scaled back to the period, which is how the schedule handles fortnightly and monthly pay. The engine infers 52, 26 or 12 periods from the payslip date span.
Ordinary time earnings is a memo category that does not appear on the payslip and stays out of gross and net. Super is computed on OTE, so ordinary-time allowances raise the contribution while a future overtime line would feed gross but not the super base.
Superannuation is posted under the employer category, so it never reduces net pay. Total deductions equal the PAYG line alone, which the tests assert directly.
The withholding mirrors the ATO arithmetic exactly: earnings reduced to whole dollars plus 99 cents, the linear formula applied, the result rounded half-up to the nearest dollar and floored at zero, so the figure ties back to the published schedule.
Lookup finds the first bracket whose upper bound exceeds the earnings; if none matches it falls back to the top bracket for the scale, and if a scale has no rows seeded it withholds nothing rather than erroring.
The coefficient table is readable by self-service but writable only by HR officers and admins, and the maintenance menu is gated to HR admins, so the rate table cannot be edited by ordinary staff.
What is inside
Built to do the job, end to end.
- The PAYG calculator. eh.hr.payg.bracket holds the coefficients and exposes compute_weekly_payg and compute_period_payg. The weekly method applies x equals whole dollars plus 99 cents, y equals a times x minus b, rounded and floored. The period method annualises, withholds weekly, and scales back.
- The Australian structure. A seeded Australia - Standard structure wires BASIC, an ordinary-time allowance fed from a payslip input, GROSS, an OTE memo line, SUPER, PAYG and NET in sequence, each rule reading the running category totals from the one before it.
- The engine seam. The AU payslip override adds two callables to the rule sandbox: payg(gross) using the employee's tax scale and the period count, and super_rate from the company. The structure rules call these, so no Australian logic is hard-coded in the engine.
- Configuration surface. PAYG scale is a per-employee field (no threshold, threshold claimed, or foreign resident) and the superannuation rate is a per-company percentage defaulting to 12. The coefficient table is editable in the HR admin area.
Honest about the edges
What this does not do, so nothing surprises you.
- Only the scale-2 (tax-free threshold claimed) coefficient rows are seeded. Scales 1 and 3 are selectable on the employee but ship with no bracket rows; add rows from the current ATO schedule before using them, or they withhold nothing.
- The seeded coefficients are the ATO's published values for the current Schedule 1. The ATO revises them each financial year, so you must confirm or update the table for the relevant year. The withholding method is fixed; the rate table is yours to maintain.
- Scope is PAYG withholding and superannuation guarantee only. There is no Medicare levy variation, HELP or STSL component, tax offsets, leave loading, or termination and ETP handling in this layer.
- There is no Single Touch Payroll lodgement, payment summary, or ATO reporting file. This module computes the payslip figures; it does not transmit anything to the ATO.
- No overtime rule ships in the Australian structure. The engine supports feeder inputs, but overtime is not wired here, so any overtime line is yours to add.
- Requires the eh_hr_payroll engine. It is a localization layer, not a standalone payroll, and is licensed LGPL-3.
- Concurrency, cron isolation and savepoint behaviour belong to the underlying engine and core, not to this Australian layer, which adds calculation and data only.
australian payroll odoo, PAYG withholding odoo 17, statement of formulas withholding, ATO Schedule 1 NAT 1004, superannuation guarantee odoo, super on ordinary time earnings, tax-free threshold scale 2, foreign resident withholding, weekly fortnightly monthly payroll, odoo 17 salary structure australia, PAYG coefficient table, employer superannuation contribution
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.
Please log in to comment on this module