Single Touch Payroll (STP) is mandatory for all Australian employers. Every time you pay your employees, you must report payroll information โ gross wages, PAYG withholding, superannuation โ directly to the ATO. STP Phase 2 (effective from January 2022) requires even more detailed reporting, including income types and country codes.
This guide covers how to set up Odoo for STP Phase 2 compliance, from initial configuration through to your first successful lodgement.
What STP Phase 2 requires
Under STP Phase 2, employers must report the following each pay run:
- Gross payments โ Salary, wages, overtime, allowances, bonuses
- PAYG withholding โ Tax withheld from each employee
- Superannuation โ Ordinary time earnings super, salary sacrifice super
- Income types โ Salary/wages (SAW), closely held payees (CHP), working holiday maker (WHM), etc.
- Tax treatment codes โ Replaces the old TFN declaration categories. Encodes residency, tax-free threshold, HELP/HECS, etc.
- Disaggregation of gross โ Separate reporting of overtime, bonuses, directors' fees, paid leave, allowances by ATO-defined types
Step 1: Install and configure the Payroll module
- Install Payroll and Australian Payroll (l10n_au_hr_payroll) modules
- Ensure the Australia - Accounting localisation is installed
- Go to Payroll โ Configuration โ Settings
- Set your business ABN and branch number
- Select your STP software ID (Odoo's registered STP solution or a third-party gateway)
Odoo's Australian payroll module (Odoo Enterprise) includes built-in STP Phase 2 reporting from Odoo 17+. If you're on Community edition, you'll need a third-party STP module or service.
Step 2: Register with the ATO
Before you can lodge STP reports, you need:
- An active ABN registered for PAYG withholding
- A Software ID โ this is issued by the ATO to your payroll software provider. Odoo Enterprise has one registered.
- Access to the ATO Business Portal or a registered tax agent for initial setup
- Your Tax Agent Number (TAN) if a tax agent is lodging on your behalf
Step 3: Set up employee records
Each employee must have complete details for STP reporting:
- Tax File Number (TFN) โ Required. If the employee hasn't provided a TFN, withhold at the maximum rate (47%).
- Date of birth
- Residential address
- Employment start date
- Tax treatment code โ This replaces the old TFN declaration checkboxes. It's a 6-character code encoding: residency status, tax-free threshold, Medicare levy, HELP debt, tax offset, and senior/pensioner status.
- Income type โ Usually SAW (Salary and Wages) for regular employees
- Superannuation fund โ The employee's nominated super fund with USI (Unique Superannuation Identifier) and member number
The tax treatment code can be generated from a completed TFN declaration form. The ATO provides a Tax treatment code generator tool on their website to help. In Odoo, set the individual components (residency, threshold, HELP) and the code is derived automatically.
Step 4: Configure salary structures and rules
Set up salary structures that correctly categorise payments for STP:
- Gross salary โ Base salary component, mapped to STP "Gross" reporting
- Overtime โ Must be reported separately under STP Phase 2 disaggregation
- Allowances โ Each allowance type (travel, tools, uniform, car, meals) must be mapped to the correct ATO allowance category
- Bonuses and commissions โ Separate category for STP reporting
- Paid leave โ Annual leave, sick leave paid out must be separately reported
- Salary sacrifice (super) โ Reported under the super category, not gross
- PAYG withholding โ Calculated per ATO tax tables, applied based on the employee's tax treatment code
Step 5: Configure superannuation
- Set the super guarantee rate โ 12% for 2025-26 (increases annually, check ATO for current rate)
- Configure Ordinary Time Earnings (OTE) calculation rules
- Set up employee super fund details: fund name, USI, member number
- Configure salary sacrifice super if applicable
- Set up the Super Clearing House connection for payments (or use the ATO Small Business Super Clearing House)
Step 6: Run a test pay run
Before lodging your first STP report, run a test pay run:
- Create a payslip batch for the pay period
- Generate payslips and review each employee's breakdown
- Verify: gross pay, PAYG withholding (matches ATO tax tables), super (correct % of OTE), net pay
- Check that all STP reporting categories are correctly populated in the payslip
- Confirm the pay run total matches your expected bank file amount
Step 7: Lodge the STP report
After confirming the payslips:
- Go to Payroll โ Reporting โ STP Submission
- Select the pay period and review the STP data
- Click Submit to ATO โ this sends the report via the registered STP channel
- Wait for the ATO acknowledgement (usually within minutes, sometimes up to 72 hours)
- If errors are returned, correct the employee data and resubmit
- STP reports must be lodged on or before pay day
Common STP error: "Tax treatment code not valid for income type." This usually means the employee's residency status or tax-free threshold setting conflicts with their income type. Review the TFN declaration and update the tax treatment code.
Step 8: End of financial year finalisation
At the end of the financial year (30 June), you must finalise STP by 14 July:
- Run the final pay run for the financial year
- Review YTD totals for each employee โ cross-check against your payroll records
- Submit the STP Finalisation event for all employees
- Employees can then access their Income Statement (replacement for payment summary/group certificate) via myGov
- For employees who left during the year, you should have already submitted a finalisation at termination time
Common STP issues and fixes
- YTD amounts don't match โ Usually caused by a mid-year switch to Odoo. Enter opening YTD balances for each employee to correct.
- ATO rejects submission โ Check the error code in the response. Common issues: invalid TFN, missing ABN, incorrect tax treatment code.
- Employee can't see income statement in myGov โ The STP finalisation must be submitted and accepted first. Check the submission status.
- Super amounts seem wrong โ Verify OTE calculations. Overtime and some allowances are excluded from OTE (and therefore super), but bonuses generally aren't.