Title: | Australian Tax Policy Analysis |
---|---|
Description: | Utilities to cost and evaluate Australian tax policy, including fast projections of personal income tax collections, high-performance tax and transfer calculators, and an interface to common indices from the Australian Bureau of Statistics. Written to support Grattan Institute's Australian Perspectives program, and related projects. Access to the Australian Taxation Office's sample files of personal income tax returns is assumed. |
Authors: | Hugh Parsonage [aut, cre], Tim Cameron [aut], Brendan Coates [aut], Matthew Katzen [aut], William Young [aut], Ittima Cherastidtham [dtc], W. Karsten [ctb], M. Enrique Garcia [ctb], Matt Cowgill [aut] |
Maintainer: | Hugh Parsonage <[email protected]> |
License: | GPL-2 |
Version: | 2024.1.0 |
Built: | 2024-11-22 03:22:02 UTC |
Source: | https://github.com/hughparsonage/grattan |
Grattan package
Tax modelling and other common tasks for Australian policy analysts, in support of the Grattan Institute, Melbourne. <https://grattan.edu.au>
grattan.verbose
(FALSE
) Emit diagnostic messages (via cat()
))
grattan.assume1901_2100
(TRUE
) Assume yr2fy
receives an integer >= 1901 and <= 2100.
grattan.taxstats.lib
Package library into which taxstats
packages will
be installed. If NULL
, a temporary directory is used.
Useful links:
Report bugs at https://github.com/HughParsonage/grattan/issues
Age grouper
age_grouper( age, interval = 10, min_age = 25, max_age = 75, breaks = NULL, labels = NULL, below = "Below\n", exp_min_age = 1L, exp_max_age = 100L, threshold = 10000L )
age_grouper( age, interval = 10, min_age = 25, max_age = 75, breaks = NULL, labels = NULL, below = "Below\n", exp_min_age = 1L, exp_max_age = 100L, threshold = 10000L )
age |
A numeric age (in years). |
interval |
How big should the age range be. 25-34 means interval = 10. |
min_age |
What is the upper bound of the lowest bracket? ( |
max_age |
What is the lower bound of the highest bracket? ( |
breaks |
Specify breaks manually. |
labels |
Specify the labels manually. |
below |
String giving the prefix for the lowest bin. (Only applicable
if |
exp_min_age , exp_max_age
|
Integers specifying the lowest/highest expected
age in |
threshold |
An integer, the minimum length at which the calculation will be accelerated. |
An ordered factor giving age ranges (separated by hyphens) as specified.
age_grouper(42) age_grouper(42, interval = 5, min_age = 20, max_age = 60)
age_grouper(42) age_grouper(42, interval = 5, min_age = 20, max_age = 60)
Age of eligibility for the Age Pension
age_pension_age(when = Sys.Date(), sex = "male")
age_pension_age(when = Sys.Date(), sex = "male")
when |
Either a Date (or a character vector coercible to such) or a financial year, when the age of eligibility of Age Pension is requested. Defaults to current date. |
sex |
A character vector the same length as |
A numeric vector, the age of eligiblity for the Age Pension for each when
.
https://guides.dss.gov.au/social-security-guide/3/4/1/10
age_pension_age() # Current age of eligiblity age_pension_age("1995-12-31") age_pension_age("2013-14")
age_pension_age() # Current age of eligiblity age_pension_age("1995-12-31") age_pension_age("2013-14")
Mutate a sample file to reflect particular caps on concessional contributions and applications of Division 293 tax.
apply_super_caps_and_div293( .sample.file, colname_concessional = "concessional_contributions", colname_div293_tax = "div293_tax", colname_new_Taxable_Income = "Taxable_income_for_ECT", div293_threshold = 3e+05, cap = 30000, cap2 = 35000, age_based_cap = TRUE, cap2_age = 59, ecc = FALSE, use_other_contr = FALSE, scale_contr_match_ato = FALSE, .lambda = 0, reweight_late_lodgers = FALSE, .mu = 1.05, impute_zero_concess_contr = FALSE, .min.Sw.for.SG = 450 * 12, .SG_rate = 0.0925, warn_if_colnames_overwritten = TRUE, drop_helpers = FALSE, copyDT = TRUE )
apply_super_caps_and_div293( .sample.file, colname_concessional = "concessional_contributions", colname_div293_tax = "div293_tax", colname_new_Taxable_Income = "Taxable_income_for_ECT", div293_threshold = 3e+05, cap = 30000, cap2 = 35000, age_based_cap = TRUE, cap2_age = 59, ecc = FALSE, use_other_contr = FALSE, scale_contr_match_ato = FALSE, .lambda = 0, reweight_late_lodgers = FALSE, .mu = 1.05, impute_zero_concess_contr = FALSE, .min.Sw.for.SG = 450 * 12, .SG_rate = 0.0925, warn_if_colnames_overwritten = TRUE, drop_helpers = FALSE, copyDT = TRUE )
.sample.file |
A data.table containing at least the variables |
colname_concessional |
The name for concessional contributions. |
colname_div293_tax |
The name of the column containing the values of Division 293 tax payable for that taxpayer. |
colname_new_Taxable_Income |
The name of the column containing the new Taxable Income. |
div293_threshold |
The Division 293 threshold. |
cap |
The cap on concessional contributions for all taxpayers if |
cap2 |
The cap on concessional contributions for those above the age threshold. No effect if |
age_based_cap |
Is the cap on concessional contributions age-based? |
cap2_age |
The age above which |
ecc |
(logical) Should an excess concessional contributions charge be calculated? (Not implemented.) |
use_other_contr |
Make a (poor) assumption that all 'Other contributions' ( |
scale_contr_match_ato |
(logical) Should concessional contributions be inflated to match aggregates in 2013-14? That is, should concessional contributions by multiplied by
. |
.lambda |
Scalar weight applied to |
reweight_late_lodgers |
(logical) Should WEIGHT be inflated to account for late lodgers? |
.mu |
Scalar weight for WEIGHT. ( |
impute_zero_concess_contr |
Should zero concessional contributions be imputed using salary? |
.min.Sw.for.SG |
The minimum salary required for super guarantee to be imputed. |
.SG_rate |
The super guarantee rate for imputation. |
warn_if_colnames_overwritten |
(logical) Issue a warning if the construction of helper columns will overwrite existing column names in |
drop_helpers |
(logical) Should columns used in the calculation be dropped before the sample file is returned? |
copyDT |
(logical) Should the data table be |
A data table comprising the original sample file (.sample.file
) with extra superannuation policy-relevant variables for the policy specified by the function.
Hugh Parsonage, William Young
Australia's population
aus_pop_qtr(date_quarter, allow.projections = TRUE)
aus_pop_qtr(date_quarter, allow.projections = TRUE)
date_quarter |
A character string (YYYY-QQ). |
allow.projections |
If the date is beyond the ABS's confirmed data, should a projection be used? |
The population at date_quarter
, or at the most recent year in the data if projections are disallowed.
Australian estimated resident population by age and date
aus_pop_qtr_age( date = NULL, age = NULL, tbl = FALSE, roll = TRUE, roll.beyond = FALSE )
aus_pop_qtr_age( date = NULL, age = NULL, tbl = FALSE, roll = TRUE, roll.beyond = FALSE )
date |
A vector of dates. If |
age |
A vector of (integer) ages from 0 to 100 inclusive. If |
tbl |
Should a table be returned? If |
roll |
Should a rolling join be performed? |
roll.beyond |
Should inputs be allowed to go beyond the limits of data (without a warning)?
This is passed to |
A data.table
or vector
with values of the estimated resident population.
aus_pop_qtr_age(date = as.Date("2016-01-01"), age = 42)
aus_pop_qtr_age(date = as.Date("2016-01-01"), age = 42)
Adult weekly ordinary-time earnings
awote( Date = NULL, fy.year = NULL, rollDate = "nearest", isMale = NA, isAdult = TRUE, isOrdinary = TRUE )
awote( Date = NULL, fy.year = NULL, rollDate = "nearest", isMale = NA, isAdult = TRUE, isOrdinary = TRUE )
Date , fy.year
|
When the AWOTE is desired. |
rollDate |
How should the |
isMale |
(logical, default: |
isAdult |
(logical, default: |
isOrdinary |
Use ordinary weekly earnings? |
awote() # Current AWOTE
awote() # Current AWOTE
Beneficiary tax offset
bto( benefit_amount, fy.year = NULL, rate1 = 0.15, benefit_threshold = 6000, tax_threshold = 37000, rate2 = 0.15 )
bto( benefit_amount, fy.year = NULL, rate1 = 0.15, benefit_threshold = 6000, tax_threshold = 37000, rate2 = 0.15 )
benefit_amount |
The amount of Tax Offsetable benefit received by the taxpayer during the income year. |
fy.year |
The income year. Not used by default. |
rate1 |
The coefficient in Division 2, section 13(2) of the Income Tax Assessment (1936 Act) Regulation 2015 (the regulations). |
benefit_threshold |
The amount of benefits above which the offset applies. |
tax_threshold |
The threshold at the upper conclusion of the lowest marginal tax rate in the words of the section 13(3) of the regulations. |
rate2 |
The second coefficient in section 13(3) of the regulations. |
The beneficiary tax offset.
This function disagrees with the ATO online calculator.
Forecasting capital gains
CG_population_inflator( x = 1, from_fy, to_fy, forecast.series = "mean", cg.series ) CG_inflator(x = 1, from_fy, to_fy, forecast.series = "mean")
CG_population_inflator( x = 1, from_fy, to_fy, forecast.series = "mean", cg.series ) CG_inflator(x = 1, from_fy, to_fy, forecast.series = "mean")
x |
To be inflated. |
from_fy , to_fy
|
Financial years designating the inflation period. |
forecast.series |
One of |
cg.series |
(Not implemented.) |
For CG_population_inflator
, the number of individuals estimated to incur capital gains in fy_year
.
For CG_inflator
, an estimate of the nominal value of (total) capital gains in to_fy
relative to the nominal value in from_fy
.
To determine the effects of bracket creep on a proposed tax policy, a common task is calculate the change in the average tax rates for each percentile. This function accepts a sample file and a baseline sample file, and returns a 100-row table giving the mean change in average tax rates for each percentile, compared to the baseline.
compare_avg_tax_rates(DT, baseDT, by = "id", ids = NULL)
compare_avg_tax_rates(DT, baseDT, by = "id", ids = NULL)
DT |
A single |
baseDT |
A |
by |
How to separate |
ids |
Subset |
Deprecated in favour of grattanInflators::cpi_inflator
cpi_inflator_general_date(from_nominal_price = 1, from_date, to_date, ...)
cpi_inflator_general_date(from_nominal_price = 1, from_date, to_date, ...)
from_nominal_price |
(numeric) the nominal prices to be converted to a real price |
from_date |
(character, date-like) the 'date' contemporaneous to |
to_date |
(character, date-like) the date at which the real price is valued (where the nominal price equals the real price). Same forms as for |
... |
other arguments passed to |
A vector of real prices in to_date
dollars.
CPI inflator when dates are nice
cpi_inflator_quarters( from_nominal_price = 1, from_qtr, to_qtr, adjustment = c("seasonal", "trimmed", "none"), useABSConnection = FALSE )
cpi_inflator_quarters( from_nominal_price = 1, from_qtr, to_qtr, adjustment = c("seasonal", "trimmed", "none"), useABSConnection = FALSE )
from_nominal_price |
(numeric) the nominal prices to be converted to a real price |
from_qtr |
(date in quarters) the dates contemporaneous to the prices in from_nominal_price. Must be of the form "YYYY-Qq" e.g. "1066-Q2". Q1 = Mar, Q2 = Jun, Q3 = Sep, Q4 = Dec. |
to_qtr |
(date in quarters) the date to be inflated to, where nominal price = real price. Must be of the form "YYYY-Qq" e.g. "1066-Q2". |
adjustment |
Should there be an adjustment made to the index? Adjustments include 'none' (no adjustment), 'seasonal', or 'trimmed' [referring to trimmed mean]. By default, |
useABSConnection |
Ignored.
The internal data was updated on 2022-01-03 to 2021-Q3.
Using |
A vector of real prices.
Apply differential uprating to projections of the Sw_amt
variable.
differentially_uprate_wage(wage = 1, from, to, ...)
differentially_uprate_wage(wage = 1, from, to, ...)
wage |
A numeric vector to be uprated. |
from |
The financial year contemporaneous to wage, which must be a financial year of an available sample file – in particular, not after 2016-17. |
to |
The target of the uprating. Passed to |
... |
Other arguments passed |
See vignette("differential-uprating")
.
The vector wage
differentially uprated to to_fy
.
Hugh Parsonage and William Young
ws <- c(20e3, 50e3, 100e3) from <- "2013-14" to <- "2016-17" differentially_uprate_wage(ws, from, to) differentially_uprate_wage(ws, from, to) / (ws * wage_inflator(from, to))
ws <- c(20e3, 50e3, 100e3) from <- "2013-14" to <- "2016-17" differentially_uprate_wage(ws, from, to) differentially_uprate_wage(ws, from, to) / (ws * wage_inflator(from, to))
Gross domestic product, at contemporaneous prices (called ‘current prices’ by the ABS).
gdp_qtr(date, roll = "nearest") gdp_fy(fy_year)
gdp_qtr(date, roll = "nearest") gdp_fy(fy_year)
date |
A Date vector or character coercible thereto. |
roll |
Passed to |
fy_year |
Character vector of financial years. |
For gdp_qtr
, the quarterly GDP for the quarter date nearest (or otherwise using roll
).
For gdp_fy
the sum over the quarters in the financial year provided.
If fy_year
would provide incomplete data (i.e. only sum three or fewer quarters), a warning is issued.
Dates or fy_year outside the available data is neither a warning nor an error, but NA
.
Australian Bureau of Statistics, Catalogue 5206.0. Series A2304350J.
Used to inflate variables in the sample file when there is no clear existing index. Note this is an unexported function: it is not available to the end-user.
generic_inflator( vars, h, fy.year.of.sample.file = "2012-13", nonzero = FALSE, estimator = "mean", pred_interval = 80 )
generic_inflator( vars, h, fy.year.of.sample.file = "2012-13", nonzero = FALSE, estimator = "mean", pred_interval = 80 )
vars |
A character vector of those variables within |
h |
An integer, how many years ahead should the inflator be targeted. |
fy.year.of.sample.file |
A string representing the financial year of |
nonzero |
Should the forecast be taken on all values, or just nonzero values? |
estimator |
What forecast element should be used: the point estimate ( |
pred_interval |
If |
A data table of two columns: variable
containing vars
and inflator
equal to the inflator to be applied to that variable to inflate it ahead h
years.
Gross national income, at contemporaneous prices (called 'current prices' by the ABS).
gni_qtr(date, roll = "nearest") gni_fy(fy_year)
gni_qtr(date, roll = "nearest") gni_fy(fy_year)
date |
A Date vector or character coercible thereto. |
roll |
Passed to |
fy_year |
Character vector of financial years. |
For gni_qtr
, the quarterly GNI for the nearest quarter date.
For gni_fy
the sum over the quarters in the financial year provided.
If fy_year
would provide incomplete data (i.e. only sum three or fewer quarters), a warning is issued.
Dates or fy_year outside the available data is neither a warning nor an error, but NA
.
Australian Bureau of Statistics, Catalogue 5206.0. Series A2304354T.
Income tax payable
income_tax( income, fy.year = NULL, age = NULL, .dots.ATO = NULL, System = NULL, return.mode = c("numeric", "integer", "sum", "mean"), nThread = getOption("grattan.nThread", 1L) )
income_tax( income, fy.year = NULL, age = NULL, .dots.ATO = NULL, System = NULL, return.mode = c("numeric", "integer", "sum", "mean"), nThread = getOption("grattan.nThread", 1L) )
income |
The individual assessable income. |
fy.year |
The financial year in which the income was earned. Tax years 2000-01 to 2018-19 are supported, as well as the tax year 2019-20, for convenience.
If |
age |
The individual's age. Ignored if |
.dots.ATO |
A data.frame that contains additional information about the individual's circumstances, with columns the same as in the ATO sample files. Age variables in |
System |
A |
return.mode |
The mode (numeric or integer) of the returned vector. |
nThread |
Number of threads to use. |
The function is inflexible by design.
It is designed to return the correct tax payable in a year, not to model the tax payable
under different tax settings. (Use model_income_tax
for that purpose.)
The function aims to produce the personal income tax payable for the inputs given
in the tax year fy.year
. The function is specified to produce the most accurate
calculation of personal income tax given the variables in the ATO's 2% sample files.
However, many components are absent from these files, while other components could
not be computed reliably.
For the 2018-19 tax year, the function calculates
The tax as specified in Schedule 7 of the Income Tax Rates Act 1986 (Cth).
See medicare_levy
for details.
See lito
for details.
See sapto
. For years preceding the introduction of SAPTO,
the maximum offset is assumed to apply to those above age 65 (since the sample files only provide 5-year
age groups).
See small_business_tax_offset
for details.
The flood levy and the temporary budget repair levy.
Notably, when used with a 2% sample file, the function will not be able to correctly account for different tax rates and offsets among taxpayers with dependants since the sample files (as of 2015-16) do not have this information.
The total personal income tax payable.
Tim Cameron, Brendan Coates, Matthew Katzen, Hugh Parsonage, William Young
## Income tax payable on a taxable income of 50,000 ## for the 2013-14 tax year income_tax(50e3, "2013-14") ## Calculate tax for each lodger in the 2013-14 sample file. # library(data.table) # library(taxstats) # s1314 <- as.data.table(sample_file_1314) # s1314[, tax := income_tax(Taxable_Income, "2013-14", .dots.ATO = s1314)]
## Income tax payable on a taxable income of 50,000 ## for the 2013-14 tax year income_tax(50e3, "2013-14") ## Calculate tax for each lodger in the 2013-14 sample file. # library(data.table) # library(taxstats) # s1314 <- as.data.table(sample_file_1314) # s1314[, tax := income_tax(Taxable_Income, "2013-14", .dots.ATO = s1314)]
Inflate using a general index
inflator( x = 1, from, to, inflator_table, index.col = "Index", time.col = "Time", roll = NULL, max.length = NULL )
inflator( x = 1, from, to, inflator_table, index.col = "Index", time.col = "Time", roll = NULL, max.length = NULL )
x |
The vector to be inflated. |
from |
The contemporaneous time of x. |
to |
The target time (in units of the |
inflator_table |
A |
index.col |
The column in |
time.col |
The column in |
roll |
If |
max.length |
(Internal use only). If not |
A vector of inflated values. For example, inflator_table = grattan:::cpi_seasonal_adjustment
,
index.col = "obsValue"
, time.col = "obsTime"
, gives the CPI inflator.
The taxstats packages provide the sample files as released by the ATO. These packages are used for testing, but are not available through CRAN as they are too large.
install_taxstats(pkg = c("taxstats"), ...)
install_taxstats(pkg = c("taxstats"), ...)
pkg |
The package to install such as |
... |
Arguments passed to |
Inverse average tax rate
inverse_average_rate(average_rate, ..., .max = 1e+08)
inverse_average_rate(average_rate, ..., .max = 1e+08)
average_rate |
The average tax rate ( |
... |
Parameters passed to |
.max |
The maximum income to test before ending the search. (Used only to prevent infinite loops.) |
The minimum income at which the average tax rate exceeds average_rate
.
inverse_average_rate(0.2, fy.year = "2014-15")
inverse_average_rate(0.2, fy.year = "2014-15")
Inverse income tax functions
inverse_income( tax, fy.year = "2012-13", zero.tax.income = c("maximum", "zero", "uniform", numeric(1)), ... )
inverse_income( tax, fy.year = "2012-13", zero.tax.income = c("maximum", "zero", "uniform", numeric(1)), ... )
tax |
The tax payable. |
fy.year |
The relevant financial year. |
zero.tax.income |
A character vector, ("maximum", "zero", "uniform", numeric(1)) Given that many incomes map to zero taxes, the |
... |
Other arguments passed to |
This function has an error of $2.
The approximate taxable income given the tax payable for the financial year. See Details.
From grattan v1.7.1.4, these are reexports from the fy-package
.
yr_ending |
An integer representing a year. |
fy.yr |
A string suspected to be a financial year. |
date |
A string or date for which the financial year is desired. Note that |
assume1901_2100 |
For |
The following forms are permitted: 2012-13
, 201213
, 2012 13
, only.
However, the 2012-13
form is preferred and will improve performance.
For is.fy
, a logical, whether its argument is a financial year.
The following forms are allowed: 2012-13
, 201213
, 2012 13
, only.
For fy.year
, yr2fy
, and date2fy
, the financial year.
For the inverses, a numeric corresponding to the year.
fy.year
is a deprecated alias for yr2fy
, the latter is slightly more efficient, as well as more declarative.
fy2yr
converts a financial year to the year ending: fy2yr("2016-17")
returns 2017. yr2fy
is the inverse: yr2fy(fy2yr("2016-17")) == "2016-17"
.
fy2date
converts a financial year to the 30 June of the financial year ending.
date2fy
converts a date to the corresponding financial year.
is.fy("2012-13") is.fy("2012-14") yr2fy(2012) fy2yr("2015-16") date2fy("2014-08-09")
is.fy("2012-13") is.fy("2012-14") yr2fy(2012) fy2yr("2015-16") date2fy("2014-08-09")
The Low Income Tax Offset (LITO) is a non-refundable tax offset to reduce ordinary personal income tax for low-income earners.
N.B. Since v2.0.0, lito
only calculates the actual LITO, rather than
an offset with custom parameters. For such functionality, use (unexported) Offset
.
lito(income, fy.year = NULL) lmito(income, fy.year = NULL)
lito(income, fy.year = NULL) lmito(income, fy.year = NULL)
income |
The income on which the offset is applied. |
fy.year |
The financial year for which the LITO is desired. |
The LITO or LMITO for the given income and tax year.
Data maximum super contribution base.
max_super_contr_base
max_super_contr_base
A data frame with 25 rows and 2 variables:
The financial year.
Maximum superannuation guarantee per quarter.
ATO.
The (actual) amount payable for the Medicare levy.
medicare_levy( income, fy.year = "2013-14", Spouse_income = 0L, sapto.eligible = FALSE, sato = NULL, pto = NULL, family_status = "individual", n_dependants = 0L, is_married = NULL, .checks = FALSE )
medicare_levy( income, fy.year = "2013-14", Spouse_income = 0L, sapto.eligible = FALSE, sato = NULL, pto = NULL, family_status = "individual", n_dependants = 0L, is_married = NULL, .checks = FALSE )
income |
|
fy.year |
|
Spouse_income |
|
sapto.eligible |
|
sato , pto
|
Is the taxpayer eligible for the Senior Australians Tax Offset or Pensions Tax Offset?
|
family_status |
(Deprecated: use 'is_married' and 'n_dependants' instead) |
n_dependants |
|
is_married |
|
.checks |
Whether or not to perform checks on inputs. |
The Medicare levy for individuals is imposed by the Medicare Levy Act 1986 (Cth).
The function only calculates the levy for individuals (not trusts).
It includes the s 7 Levy in cases of small incomes, including the differences for those
eligible for sapto
.
s 8 Amount of levy—person who has spouse or dependants (though the number of dependants
is not a variable in the sample files).
The function does not include the Medicare levy surcharge; it assumes that all persons (who would potentially be liable for it) avoided it.
The Seniors and Pensioners Tax Offset was formed in 2012-13 as an amalgam
of the Senior Australians Tax Offset and the Pensions Tax Offset.
Medicare rates before 2012-13 were different based on these offsets.
For most taxpayers, eligibility would be based on whether your age is over the pension age (currently 65).
If sato
and pto
are NULL
, sapto.eligible
stands for eligibility for the sato
and not pto
.
If sato
or pto
are not NULL
for such years, only sato
is currently considered.
Supplying pto
independently is currently a warning.
See http://classic.austlii.edu.au/au/legis/cth/consol_act/mla1986131/ for the Medicare Levy Act 1986 (Cth).
The Medicare levy payable for that taxpayer.
The income tax payable if tax settings are changed.
model_income_tax( sample_file, baseline_fy, elasticity_of_taxable_income = NULL, ordinary_tax_thresholds = NULL, ordinary_tax_rates = NULL, medicare_levy_taper = NULL, medicare_levy_rate = NULL, medicare_levy_lower_threshold = NULL, medicare_levy_upper_threshold = NULL, medicare_levy_lower_sapto_threshold = NULL, medicare_levy_upper_sapto_threshold = NULL, medicare_levy_lower_family_threshold = NULL, medicare_levy_upper_family_threshold = NULL, medicare_levy_lower_family_sapto_threshold = NULL, medicare_levy_upper_family_sapto_threshold = NULL, medicare_levy_lower_up_for_each_child = NULL, lito_max_offset = NULL, lito_taper = NULL, lito_min_bracket = NULL, lito_multi = NULL, offsets = NULL, Budget2018_lamington = FALSE, Budget2019_lamington = NA, Budget2018_lito_202223 = FALSE, Budget2018_watr = FALSE, Budget2019_watr = FALSE, sapto_eligible = NULL, sapto_max_offset = NULL, sapto_lower_threshold = NULL, sapto_taper = NULL, sapto_max_offset_married = NULL, sapto_lower_threshold_married = NULL, sapto_taper_married = NULL, sbto_discount = NULL, cgt_discount_rate = NULL, calc_baseline_tax = TRUE, return. = c("sample_file", "tax", "sample_file.int"), clear_tax_cols = TRUE, warn_upper_thresholds = TRUE, .debug = FALSE )
model_income_tax( sample_file, baseline_fy, elasticity_of_taxable_income = NULL, ordinary_tax_thresholds = NULL, ordinary_tax_rates = NULL, medicare_levy_taper = NULL, medicare_levy_rate = NULL, medicare_levy_lower_threshold = NULL, medicare_levy_upper_threshold = NULL, medicare_levy_lower_sapto_threshold = NULL, medicare_levy_upper_sapto_threshold = NULL, medicare_levy_lower_family_threshold = NULL, medicare_levy_upper_family_threshold = NULL, medicare_levy_lower_family_sapto_threshold = NULL, medicare_levy_upper_family_sapto_threshold = NULL, medicare_levy_lower_up_for_each_child = NULL, lito_max_offset = NULL, lito_taper = NULL, lito_min_bracket = NULL, lito_multi = NULL, offsets = NULL, Budget2018_lamington = FALSE, Budget2019_lamington = NA, Budget2018_lito_202223 = FALSE, Budget2018_watr = FALSE, Budget2019_watr = FALSE, sapto_eligible = NULL, sapto_max_offset = NULL, sapto_lower_threshold = NULL, sapto_taper = NULL, sapto_max_offset_married = NULL, sapto_lower_threshold_married = NULL, sapto_taper_married = NULL, sbto_discount = NULL, cgt_discount_rate = NULL, calc_baseline_tax = TRUE, return. = c("sample_file", "tax", "sample_file.int"), clear_tax_cols = TRUE, warn_upper_thresholds = TRUE, .debug = FALSE )
sample_file |
A sample file having at least as many variables as the 2012-13 sample file. |
baseline_fy |
If a parameter is not selected, the parameter's value in this tax year is used. Must be a valid tax year and one for which |
elasticity_of_taxable_income |
Either
where For example, if, for a given taxpayer,
the tax settings would otherwise result in a 2% decrease of disposable income
under the tax settings to be modelled, and If |
ordinary_tax_thresholds |
A numeric vector specifying the lower bounds of the brackets for "ordinary tax" as defined by the Regulations. The first element should be zero if there is a tax-free threshold. |
ordinary_tax_rates |
The marginal rates of ordinary tax. The first element should be zero if there is a tax-free threshold. Since the temporary budget repair levy was imposed on a discrete tax bracket when it applied, it is not included in this function. |
medicare_levy_taper |
The taper that applies between the |
medicare_levy_rate |
The ordinary rate of the Medicare levy for taxable incomes above |
medicare_levy_lower_threshold |
Minimum taxable income at which the Medicare levy will be applied. |
medicare_levy_upper_threshold |
Minimum taxable income at which the Medicare levy will be applied at the full Medicare levy rate (2% in 2015-16). Between this threshold and the |
medicare_levy_lower_sapto_threshold , medicare_levy_upper_sapto_threshold
|
The equivalent values for SAPTO-eligible individuals (not families). |
medicare_levy_lower_family_threshold , medicare_levy_upper_family_threshold
|
The equivalent values for families. |
medicare_levy_lower_family_sapto_threshold , medicare_levy_upper_family_sapto_threshold
|
The equivalent values for SAPTO-eligible individuals in a family. |
medicare_levy_lower_up_for_each_child |
The amount to add to the |
lito_max_offset |
(deprecated) The maximum offset available for low incomes. |
lito_taper |
(deprecated) The taper to apply beyond |
lito_min_bracket |
(deprecated) The taxable income at which the value of the offset starts to reduce (from |
lito_multi |
No longer supported. |
offsets |
A list of lists created by |
Budget2018_lamington |
No longer supported |
Budget2019_lamington |
No longer supported. |
Budget2018_lito_202223 |
No longer supported. |
Budget2018_watr |
No longer supported |
Budget2019_watr |
No longer supported. |
sapto_eligible |
Whether or not each taxpayer in |
sapto_max_offset |
The maximum offset available through SAPTO. |
sapto_lower_threshold |
The threshold at which SAPTO begins to reduce (from |
sapto_taper |
The taper rate beyond |
sapto_max_offset_married , sapto_lower_threshold_married , sapto_taper_married
|
As above, but applied to members of a couple |
sbto_discount |
The |
cgt_discount_rate |
(numeric(1)) The capital gains tax discount rate, currently 50%. |
calc_baseline_tax |
(logical, default: |
return. |
What should the function return? One of |
clear_tax_cols |
If |
warn_upper_thresholds |
If |
.debug |
Return a data.table of |
library(data.table) library(hutils) # With new tax-free threshold of $20,000: # if (requireNamespace("taxstats", quietly = TRUE) && FALSE) { # library(taxstats) # library(magrittr) # # model_income_tax(sample_file_1314, # "2013-14", # ordinary_tax_thresholds = c(0, 20e3, 37e3, 80e3, 180e3)) %>% # select_grep("tax", "Taxable_Income") # # }
library(data.table) library(hutils) # With new tax-free threshold of $20,000: # if (requireNamespace("taxstats", quietly = TRUE) && FALSE) { # library(taxstats) # library(magrittr) # # model_income_tax(sample_file_1314, # "2013-14", # ordinary_tax_thresholds = c(0, 20e3, 37e3, 80e3, 180e3)) %>% # select_grep("tax", "Taxable_Income") # # }
Model changes to the contributions cap, Division 293 threshold and related modelling. Note: defaults are relevant to pre-2017 for compatibility.
model_new_caps_and_div293( .sample.file, fy.year, new_cap = 30000, new_cap2 = 35000, new_age_based_cap = TRUE, new_cap2_age = 49, new_ecc = FALSE, new_contr_tax = "15%", new_div293_threshold = 3e+05, use_other_contr = FALSE, scale_contr_match_ato = FALSE, .lambda = 0, reweight_late_lodgers = TRUE, .mu = 1.05, impute_zero_concess_contr = TRUE, .min.Sw.for.SG = 450 * 12, .SG_rate = 0.0925, prv_cap = 30000, prv_cap2 = 35000, prv_age_based_cap = TRUE, prv_cap2_age = 49, prv_ecc = FALSE, prv_div293_threshold = 3e+05 ) n_affected_from_new_cap_and_div293(..., adverse_only = TRUE) revenue_from_new_cap_and_div293(...)
model_new_caps_and_div293( .sample.file, fy.year, new_cap = 30000, new_cap2 = 35000, new_age_based_cap = TRUE, new_cap2_age = 49, new_ecc = FALSE, new_contr_tax = "15%", new_div293_threshold = 3e+05, use_other_contr = FALSE, scale_contr_match_ato = FALSE, .lambda = 0, reweight_late_lodgers = TRUE, .mu = 1.05, impute_zero_concess_contr = TRUE, .min.Sw.for.SG = 450 * 12, .SG_rate = 0.0925, prv_cap = 30000, prv_cap2 = 35000, prv_age_based_cap = TRUE, prv_cap2_age = 49, prv_ecc = FALSE, prv_div293_threshold = 3e+05 ) n_affected_from_new_cap_and_div293(..., adverse_only = TRUE) revenue_from_new_cap_and_div293(...)
.sample.file |
A |
fy.year |
The financial year tax scales. |
new_cap |
The proposed cap on concessional contributions for all taxpayers if |
new_cap2 |
The proposed cap on concessional contributions for those above the age threshold. No effect if |
new_age_based_cap |
Is the proposed cap on concessional contributions age-based? |
new_cap2_age |
The age above which |
new_ecc |
(logical) Should an excess concessional contributions charge be calculated? (Not implemented.) |
new_contr_tax |
A string to determine the contributions tax. |
new_div293_threshold |
The proposed Division 293 threshold. |
use_other_contr |
Should |
scale_contr_match_ato |
(logical) Should concessional contributions be inflated to match aggregates in 2013-14? That is, should the concessional contributions by multiplied by the internal constant
. |
.lambda |
Scalar weight applied to |
reweight_late_lodgers |
(logical) Should WEIGHT be inflated to account for late lodgers? |
.mu |
Scalar weight for WEIGHT. ( |
impute_zero_concess_contr |
Should zero concessional contributions be imputed using salary? |
.min.Sw.for.SG |
The minimum salary required for super guarantee to be imputed. |
.SG_rate |
The super guarantee rate for imputation. |
prv_cap |
The comparator cap on concessional contributions for all taxpayers if |
prv_cap2 |
The comparator cap on concessional contributions for those above the age threshold. No effect if |
prv_age_based_cap |
Is the comparator cap on concessional contributions age-based? |
prv_cap2_age |
The age above which |
prv_ecc |
(logical) Should an excess concessional contributions charge be calculated? (Not implemented.) |
prv_div293_threshold |
The comparator Division 293 threshold. |
... |
Passed to |
adverse_only |
Count only individuals who are adversely affected by the change. |
For model_new_caps_and_div293
, a data.frame
, comprising
the variables in .sample.file
, the superannuation variables generated by
apply_super_caps_and_div293
, and two variables, prv_revenue
and new_revenue
,
which give the tax (income tax, super tax, and division 293 tax) payable by
that taxpayer in the comparator scenario and the proposed scenario, respectively.
For n_affected_from_new_cap_and_div293
, the number of individuals affected by the proposed changes.
For revenue_from_new_cap_and_div293
, the extra revenue expected from the proposed changes.
# if (requireNamespace("taxstats", quietly = TRUE)) { # library(data.table) # s1314 <- taxstats::sample_file_1314 # s1314[, WEIGHT := 50L] # revenue_from_new_cap_and_div293(s1314, new_cap = 12e3, "2016-17") # revenue_from_new_cap_and_div293(s1314, new_contr_tax = "mr - 15%", "2016-17") # }
# if (requireNamespace("taxstats", quietly = TRUE)) { # library(data.table) # s1314 <- taxstats::sample_file_1314 # s1314[, WEIGHT := 50L] # revenue_from_new_cap_and_div293(s1314, new_cap = 12e3, "2016-17") # revenue_from_new_cap_and_div293(s1314, new_contr_tax = "mr - 15%", "2016-17") # }
Financial functions from Excel. These functions are equivalent to the Excel functions of the same name (in uppercase).
npv(rate, values) irr(x, start = 0.1) fv(rate, nper, pmt, pv = 0, type = 0) pv(rate, nper, pmt, fv = 0, type = 0) pmt(rate, nper, pv, fv = 0, type = 0)
npv(rate, values) irr(x, start = 0.1) fv(rate, nper, pmt, pv = 0, type = 0) pv(rate, nper, pmt, fv = 0, type = 0) pmt(rate, nper, pv, fv = 0, type = 0)
rate |
Discount or interest rate. |
values |
Income stream. |
x |
Cash flow. |
start |
Initial guess to start the iterative process. |
nper |
Number of periods |
pmt |
Payments. |
pv |
Present value. |
type |
Factor. |
fv |
Future value. |
Enrique Garcia M. [email protected]
Karsten W. [email protected]
npv(0.07, c(1, 2)) irr(x = c(1, -1), start = 0.1) fv(0.04, 7, 1, pv = 0.0, type = 0) pv(rate = 0.08, nper = 7, pmt = 1, fv = 0.0, type = 0) pmt(rate = 0.025, nper = 7, pv = 0, fv = 0.0, type = 0)
npv(0.07, c(1, 2)) irr(x = c(1, -1), start = 0.1) fv(0.04, 7, 1, pv = 0.0, type = 0) pv(rate = 0.08, nper = 7, pmt = 1, fv = 0.0, type = 0) pmt(rate = 0.025, nper = 7, pv = 0, fv = 0.0, type = 0)
Compute the progressivity
progressivity(income, tax, measure = c("Reynolds-Smolensky", "Kakwani"))
progressivity(income, tax, measure = c("Reynolds-Smolensky", "Kakwani"))
income |
Pre-tax income. |
tax |
Tax paid. |
measure |
Currently, only "Reynolds-Smolensky" progressivity is calculated:
where |
The progressivity measure. Positive for progressive tax systems, and higher the value the more progressive the system.
I <- c(10e3, 20e3, 50e3, 100e3, 150e3) progressivity(I, 0.3 * I) # zero progressivity(I, income_tax(I, "2017-18"))
I <- c(10e3, 20e3, 50e3, 100e3, 150e3) progressivity(I, 0.3 * I) # zero progressivity(I, income_tax(I, "2017-18"))
Tests whether any vectors have zero length.
prohibit_length0_vectors(...)
prohibit_length0_vectors(...)
... |
A list of vectors |
An error message if any of the vectors ...
have zero length.
Tests whether all vectors have the same length.
prohibit_unequal_length_vectors(...)
prohibit_unequal_length_vectors(...)
... |
Vectors to test. |
An error message unless all of ...
have the same length in which case NULL
, invisibly.
Simple projections of the annual 2% samples of Australian Taxation Office tax returns.
project( sample_file, h = 0L, fy.year.of.sample.file = NULL, WEIGHT = 50L, excl_vars = NULL, forecast.dots = list(estimator = "mean", pred_interval = 80), wage.series = NULL, lf.series = NULL, use_age_pop_forecast = FALSE, .recalculate.inflators = NA, .copyDT = TRUE, check_fy_sample_file = TRUE, differentially_uprate_Sw = NA, r_super_balance = 1.05, r_generic = NULL )
project( sample_file, h = 0L, fy.year.of.sample.file = NULL, WEIGHT = 50L, excl_vars = NULL, forecast.dots = list(estimator = "mean", pred_interval = 80), wage.series = NULL, lf.series = NULL, use_age_pop_forecast = FALSE, .recalculate.inflators = NA, .copyDT = TRUE, check_fy_sample_file = TRUE, differentially_uprate_Sw = NA, r_super_balance = 1.05, r_generic = NULL )
sample_file |
A |
h |
An integer. How many years should the sample file be projected? |
fy.year.of.sample.file |
The financial year of |
WEIGHT |
The sample weight for the sample file. (So a 2% file has |
excl_vars |
A character vector of column names in |
forecast.dots |
A list containing parameters to be passed to |
wage.series |
See |
lf.series |
See |
use_age_pop_forecast |
Should the inflation of the number of taxpayers be
moderated by the number of resident persons born in a certain year? If |
.recalculate.inflators |
(logical, default: |
.copyDT |
(logical, default: |
check_fy_sample_file |
(logical, default: |
differentially_uprate_Sw |
(logical, default: Selecting |
r_super_balance |
The factor to inflate super balances by (annualized).
Set to |
r_generic |
(Present from version 2024.1.0) The factor to inflate other
columns. Subject to change in future versions. If |
Currently components of taxable income are individually inflated based on their historical trends in the ATO sample files, with the exception of:
differentially_uprate_wage
.Sw_amt
wage_inflator
Alow_ben_amt
, ETP_txbl_amt
, Rptbl_Empr_spr_cont_amt
, Non_emp_spr_amt
, MCS_Emplr_Contr
, MCS_Prsnl_Contr
, MCS_Othr_Contr
cpi_inflator
WRE_car_amt
, WRE_trvl_amt
, WRE_uniform_amt
, WRE_self_amt
, WRE_other_amt
lf_inflator_fy
WEIGHT
CG_inflator
Net_CG_amt
, Tot_CY_CG_amt
Superannuation balances are inflated by a fixed rate of 5% p.a.
We recommend you use sample_file_1213
over sample_file_1314
,
unless you need the superannuation variables,
as the latter suggests lower-than-recorded tax collections.
However, more recent data is of course preferable.
A sample file with the same number of rows as sample_file
but
with inflated values as a forecast for the sample file in to_fy
.
If WEIGHT
is not already a column of sample_file
, it will be added and its sum
will be the predicted number of taxpayers in to_fy
.
Simple projections of the annual 2% samples of Australian Taxation Office tax returns.
project_to(sample_file, to_fy, fy.year.of.sample.file = NULL, ...)
project_to(sample_file, to_fy, fy.year.of.sample.file = NULL, ...)
sample_file |
A |
to_fy |
A string like "1066-67" representing the financial year for which forecasts of the sample file are desired. |
fy.year.of.sample.file |
The financial year of |
... |
Other arguments passed to |
A sample file with the same number of rows as sample_file
but
with inflated values as a forecast for the sample file in to_fy
.
If WEIGHT
is not already a column of sample_file
, it will be added and its sum
will be the predicted number of taxpayers in to_fy
.
Rebate income
rebate_income( Taxable_Income, Rptbl_Empr_spr_cont_amt = 0, All_deductible_super_contr = 0, Net_fincl_invstmt_lss_amt = 0, Net_rent_amt = 0, Rep_frng_ben_amt = 0 )
rebate_income( Taxable_Income, Rptbl_Empr_spr_cont_amt = 0, All_deductible_super_contr = 0, Net_fincl_invstmt_lss_amt = 0, Net_rent_amt = 0, Rep_frng_ben_amt = 0 )
Taxable_Income |
the taxable income |
Rptbl_Empr_spr_cont_amt |
The reportable employer superannuation contributions amount |
All_deductible_super_contr |
deductible personal superannuation contributions |
Net_fincl_invstmt_lss_amt |
Net financial investment loss |
Net_rent_amt |
(for Rental deductions) |
Rep_frng_ben_amt |
Reportable fringe-benefits |
Original URL was https://www.ato.gov.au/Individuals/Tax-return/2015/Tax-return/Tax-offset-questions-T1-T2/Rebate-income-2015/
Used in lieu of simply library(taxstats)
to
handle cases where it is not installed, but should not be installed
to the user's default library (as during CRAN checks).
require_taxstats() require_taxstats1516()
require_taxstats() require_taxstats1516()
TRUE
, invisibly, for success. Used for its side-effect: attaching the taxstats
package.
Residential property prices indexes for the capital cities of Australia, and a weighted average for the whole country. Last updated 2018-07-06.
residential_property_prices
residential_property_prices
A data.table
of three columns and 522 observations:
Date of the index
Capital city (or Australia (weighted average)
)
An index (100 = 2011-12-01) measuring the price change in all residential dwellings.
ABS Cat 6416.0. https://www.abs.gov.au/statistics/economy/price-indexes-and-inflation/residential-property-price-indexes-eight-capital-cities/latest-release.
Revenue foregone from a modelled sample file
revenue_foregone(dt, revenue_positive = TRUE, digits = NULL)
revenue_foregone(dt, revenue_positive = TRUE, digits = NULL)
dt |
A |
revenue_positive |
If |
digits |
If not |
Seniors and Pensioner Tax Offset
sapto( rebate_income, fy.year, fill = 0, sapto.eligible = TRUE, Spouse_income = 0, family_status = "single", on_sapto_cd = "A", .check = TRUE )
sapto( rebate_income, fy.year, fill = 0, sapto.eligible = TRUE, Spouse_income = 0, family_status = "single", on_sapto_cd = "A", .check = TRUE )
rebate_income |
The rebate income of the individual. |
fy.year |
The financial year in which sapto is to be calculated. |
fill |
If SAPTO was not applicable, what value should be used? |
sapto.eligible |
Is the individual eligible for sapto? |
Spouse_income |
Spouse income whose unutilized SAPTO may be added to the current taxpayer. Must match |
family_status |
Family status of the individual. |
on_sapto_cd |
SAPTO claim code type (for non-veterans). A
letter A-E. A = single, B = lived apart due to illness and spouse was eligible,
C = lived apart but spouse ineligible, D = lived together, both eligible for sapto,
E = lived together, spouse ineligible. Only |
.check |
Run checks for consistency of values. For example, ensuring no
single individuals have positive |
Create parameters for tax offsets.
set_offset( offset_1st = integer(1), thresholds = integer(), tapers = double(), refundable = logical(1) ) set_offsets( ..., yr = NULL, lito_max_offset = NULL, lito_taper = NULL, lito_min_bracket = NULL, lito_multi = NULL ) the_MAX_N_OFFSETN()
set_offset( offset_1st = integer(1), thresholds = integer(), tapers = double(), refundable = logical(1) ) set_offsets( ..., yr = NULL, lito_max_offset = NULL, lito_taper = NULL, lito_min_bracket = NULL, lito_multi = NULL ) the_MAX_N_OFFSETN()
offset_1st |
|
thresholds |
|
tapers |
|
refundable |
|
... |
A set of offsets created by |
yr |
|
lito_max_offset , lito_taper , lito_min_bracket , lito_multi
|
deprecated arguments to adjust (single-threshold) LITO. |
set_offset
A list of four elements, offset_1st
,
thresholds
, tapers
, refundable
.
set_offsets
A list of lists created by set_offset
.
the_MAX_N_OFFSETN
The maximum number of offsets that may be used.
Small Business Tax Offset
small_business_tax_offset( taxable_income, basic_income_tax_liability, .dots.ATO = NULL, aggregated_turnover = NULL, total_net_small_business_income = NULL, fy_year = NULL, tax_discount = NULL )
small_business_tax_offset( taxable_income, basic_income_tax_liability, .dots.ATO = NULL, aggregated_turnover = NULL, total_net_small_business_income = NULL, fy_year = NULL, tax_discount = NULL )
taxable_income |
Individual's assessable income. |
basic_income_tax_liability |
Tax liability (in dollars) according to the method in the box in s 4.10(3) of the Income Tax Assessment Act 1997 (Cth). In general, |
.dots.ATO |
A If |
aggregated_turnover |
A numeric vector the same length as Aggregated turnover of a taxpayer is the sum of the following:
Original URL was https://www.ato.gov.au/Business/Research-and-development-tax-incentive/Claiming-the-tax-offset/Steps-to-claiming-the-tax-offset/Step-3—Calculate-your-aggregated-turnover/ |
total_net_small_business_income |
Total net business income within the meaning of the Act. For most taxpayers, this is simply any net income from a business they own (or their share of net income from a business in which they have an interest). The only difference being in the calculation of the net business income of some minors (vide Division 6AA of Part III of the Act). |
fy_year |
The financial year for which the small business tax offset is to apply. |
tax_discount |
If you do not wish to use the legislated discount rate from a particular |
Basic income tax method s4-10(3) http://classic.austlii.edu.au/au/legis/cth/consol_act/itaa1997240/s4.10.html.
Explanatory memorandum https://github.com/HughParsonage/grattan/blob/master/data-raw/parlinfo/small-biz-explanatory-memo-2015.pdf from the original http://parlinfo.aph.gov.au/parlInfo/download/legislation/ems/r5494_ems_0a26ca86-9c3f-4ffa-9b81-219ac09be454/upload_pdf/503041.pdf
.
FUNCTION_DESCRIPTION
System( yr, ordinary_tax_thresholds = NULL, ordinary_tax_rates = NULL, medicare_levy_taper = NULL, medicare_levy_rate = NULL, medicare_levy_lower_threshold = NULL, medicare_levy_lower_sapto_threshold = NULL, medicare_levy_lower_family_threshold = NULL, medicare_levy_lower_family_sapto_threshold = NULL, medicare_levy_lower_up_for_each_child = NULL, medicare_levy_upper_sapto_threshold = NULL, medicare_levy_upper_family_threshold = NULL, medicare_levy_upper_family_sapto_threshold = NULL, medicare_levy_upper_threshold = NULL, Offsets = NULL, sapto_max_offset = NULL, sapto_lower_threshold = NULL, sapto_taper = NULL, sapto_max_offset_married = NULL, sapto_lower_threshold_married = NULL, sapto_taper_married = NULL, sapto_max_offset_illness = NULL, sapto_lower_threshold_illness = NULL, sapto_pension_age = NULL, fix = 0L )
System( yr, ordinary_tax_thresholds = NULL, ordinary_tax_rates = NULL, medicare_levy_taper = NULL, medicare_levy_rate = NULL, medicare_levy_lower_threshold = NULL, medicare_levy_lower_sapto_threshold = NULL, medicare_levy_lower_family_threshold = NULL, medicare_levy_lower_family_sapto_threshold = NULL, medicare_levy_lower_up_for_each_child = NULL, medicare_levy_upper_sapto_threshold = NULL, medicare_levy_upper_family_threshold = NULL, medicare_levy_upper_family_sapto_threshold = NULL, medicare_levy_upper_threshold = NULL, Offsets = NULL, sapto_max_offset = NULL, sapto_lower_threshold = NULL, sapto_taper = NULL, sapto_max_offset_married = NULL, sapto_lower_threshold_married = NULL, sapto_taper_married = NULL, sapto_max_offset_illness = NULL, sapto_lower_threshold_illness = NULL, sapto_pension_age = NULL, fix = 0L )
yr |
|
ordinary_tax_thresholds |
A numeric vector specifying the lower bounds of the brackets for "ordinary tax" as defined by the Regulations. The first element should be zero if there is a tax-free threshold. |
ordinary_tax_rates |
The marginal rates of ordinary tax. The first element should be zero if there is a tax-free threshold. Since the temporary budget repair levy was imposed on a discrete tax bracket when it applied, it is not included in this function. |
medicare_levy_taper |
The taper that applies between the |
medicare_levy_rate |
The ordinary rate of the Medicare levy for taxable incomes above |
medicare_levy_lower_threshold |
Minimum taxable income at which the Medicare levy will be applied. |
medicare_levy_lower_sapto_threshold , medicare_levy_upper_sapto_threshold
|
The equivalent values for SAPTO-eligible individuals (not families). |
medicare_levy_lower_family_threshold , medicare_levy_upper_family_threshold
|
The equivalent values for families. |
medicare_levy_lower_family_sapto_threshold , medicare_levy_upper_family_sapto_threshold
|
The equivalent values for SAPTO-eligible individuals in a family. |
medicare_levy_lower_up_for_each_child |
The amount to add to the |
medicare_levy_upper_threshold |
Minimum taxable income at which the Medicare levy will be applied at the full Medicare levy rate (2% in 2015-16). Between this threshold and the |
Offsets |
List of offsets created by |
sapto_max_offset |
The maximum offset available through SAPTO. |
sapto_lower_threshold |
The threshold at which SAPTO begins to reduce (from |
sapto_taper |
The taper rate beyond |
sapto_max_offset_married , sapto_lower_threshold_married , sapto_taper_married , sapto_lower_threshold_illness , sapto_max_offset_illness
|
As above, but applied to members of a couple. |
sapto_pension_age |
The age at and above which the SAPTO is to apply. |
fix |
|
A list describing a tax system
Many functions expect Dates. Determining that they are validly entered is often quite computationally costly, relative to the core calculations. These internal functions provide mechanisms to check validity quickly, while still providing clear, accurate error messages.
validate_date(date_to_verify, from = NULL, to = NULL, deparsed = "Date")
validate_date(date_to_verify, from = NULL, to = NULL, deparsed = "Date")
date_to_verify |
(character) A user-provided value, purporting to be character vector of dates. |
from , to
|
Indicating the range of years valid for |
deparsed |
The name of variable to appear in error messages. |
date_to_verify
as a Date object, provided it can be converted
to a Date and all elements are within the bounds from
and to
.
validate_date("2020-01-01")
validate_date("2020-01-01")