Skip to contents

generate_pit_itr() writes synthetic Income Tax Return (PIT_ITR) product tables. The covered population contains people who lodged an individual income tax return. Each record represents one person in one financial year. The data does not include non-lodgers.

Usage

generate_pit_itr(
  spine = NULL,
  seed = 42L,
  years = 2010:2024,
  output_dir = NULL,
  format = c("parquet", "csv"),
  return_data = FALSE
)

Arguments

spine

A data frame from generate_spine(), or NULL. If the value is NULL, the function reads the spine from the run directory.

seed

An integer random seed.

years

A vector of financial-year end years.

output_dir

The base output directory, or NULL.

format

The output format. This function supports "parquet" only.

return_data

This argument has no effect. The function always writes the data to disk.

Value

An invisible metadata list with n_filers, n_by_year, years, and path.

Details

The function reads PIT_PS files where that source covers the requested year. For other years covered by PIT_ITR, it uses the shared employment panel and wage ledger without writing additional payment-summary products. The Rust pipeline writes four product-table types per financial year.

Dataset and variable information

The ABS administrative income sources website gives information about this dataset. Use dataset_info("PIT_ITR") for dataset information. Use variable_info("PIT_ITR") for variables, sources, value support, and topic tags.

Occupation codes are not ANZSCO

IDV_OCPTN_CD and the other occupation fields hold ATO salary and wage occupation codes, not ANZSCO. Taxpayers choose a six-digit code from the ATO's own published list at question 1 of the individual return, and that list does not map one-to-one onto ANZSCO: of the 1,167 ATO codes for 2025-26, 951 are also valid ANZSCO 2019 codes and 216 are not.

Each person carries an ANZSCO occupation on the shared spine. The ATO products map it onto a real ATO code through a bundled crosswalk, resolving up the code hierarchy when there is no exact counterpart. The person's occupation therefore stays consistent across products while the code system matches the source. Regenerate the crosswalk with data-raw/update_ato_occupation_codes.R.