diff --git a/CHANGELOG.md b/CHANGELOG.md index 85018867b..99a4d7ff0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.1.4] - 2023-09-20 16:00:00 + +### Added + +- Added Louisiana state income tax logic with credits and refunds + ## [0.1.3] - 2023-09-19 12:00:00 ### Added diff --git a/changelog.yaml b/changelog.yaml index be41fe7d4..0b4bde84d 100644 --- a/changelog.yaml +++ b/changelog.yaml @@ -124,3 +124,8 @@ - Updates in PR 33 that update the VA tax logic - Updates in PR 32 that update the MN tax logic date: 2023-09-19 12:00:00 +- bump: patch + changes: + added: + - Added Louisiana state income tax logic with credits and refunds + date: 2023-09-20 16:00:00 diff --git a/changelog_entry.yaml b/changelog_entry.yaml deleted file mode 100644 index ffc84ae4f..000000000 --- a/changelog_entry.yaml +++ /dev/null @@ -1,5 +0,0 @@ -- bump: patch - changes: - added: - - Updated SNAP intro and citations in documentation - - Updated TANF documentation diff --git a/fiscalsim_us/parameters/gov/states/la/tax/income/agi/subtractions/sources.yaml b/fiscalsim_us/parameters/gov/states/la/tax/income/agi/subtractions/sources.yaml new file mode 100644 index 000000000..a8eaa6aa1 --- /dev/null +++ b/fiscalsim_us/parameters/gov/states/la/tax/income/agi/subtractions/sources.yaml @@ -0,0 +1,16 @@ +description: Louisiana allows these subtractions (exemptions) from taxable income +values: + 2021-01-01: + - us_govt_interest + - tax_unit_taxable_social_security + - la_state_employee_retirement_benefits + - la_state_teacher_retirement_benefits + - la_federal_retirement_benefits + - la_other_subtractions + +metadata: + unit: variable + label: Louisiana subtractions from income + reference: + - title: Louisiana Form IT-540 Schedule F - Refundable credits + href: https://revenue.louisiana.gov/TaxForms/IT540iWEB(2022)D1.pdf diff --git a/fiscalsim_us/parameters/gov/states/la/tax/income/credits/nonrefundable_p3/nonrefundable_child_care/above_threshold_max.yaml b/fiscalsim_us/parameters/gov/states/la/tax/income/credits/nonrefundable_p3/nonrefundable_child_care/above_threshold_max.yaml new file mode 100644 index 000000000..6d5aeb95f --- /dev/null +++ b/fiscalsim_us/parameters/gov/states/la/tax/income/credits/nonrefundable_p3/nonrefundable_child_care/above_threshold_max.yaml @@ -0,0 +1,16 @@ +description: Louisiana limits its child and dependent care credit to this maximum amount for filers above the income threshold + +values: + 2006-01-01: 25 + +metadata: + period: year + unit: currency-USD + label: Louisiana nonrefundable child care credit max above income threshold + reference: + - title: §297.4. Reduction to tax due; certain child care expenses, part (A)(4) + href: http://legis.la.gov/Legis/Law.aspx?d=101769 + - title: 2022 Louisiana Resident Income Tax Return, page 16-2A + href: https://revenue.louisiana.gov/TaxForms/IT540WEB(2022)%20F%20D2.pdf + - title: 2021 Louisiana Resident Income Tax Return, page 16-2A + href: https://revenue.louisiana.gov/TaxForms/IT540WEB(2021)%20F.pdf diff --git a/fiscalsim_us/parameters/gov/states/la/tax/income/credits/nonrefundable_p3/nonrefundable_child_care/income_floor.yaml b/fiscalsim_us/parameters/gov/states/la/tax/income/credits/nonrefundable_p3/nonrefundable_child_care/income_floor.yaml new file mode 100644 index 000000000..eca04f790 --- /dev/null +++ b/fiscalsim_us/parameters/gov/states/la/tax/income/credits/nonrefundable_p3/nonrefundable_child_care/income_floor.yaml @@ -0,0 +1,16 @@ +description: Louisiana makes its child and dependent care credit refundable for incomes under the income floor using slightly different logic found in the la_refundable_childcare variable + +values: + 2006-01-01: 25_000 + +metadata: + period: year + unit: currency-USD + label: Louisiana non-refundable child care credit income floor + reference: + - title: §297.4. Reduction to tax due; certain child care expenses, part (B) + href: http://legis.la.gov/Legis/Law.aspx?d=101769 + - title: 2022 Louisiana Resident Income Tax Return, page 14,16 + href: https://revenue.louisiana.gov/TaxForms/IT540WEB(2022)%20F%20D2.pdf + - title: 2021 Louisiana Resident Income Tax Return, page 14,16 + href: https://revenue.louisiana.gov/TaxForms/IT540WEB(2021)%20F.pdf diff --git a/fiscalsim_us/parameters/gov/states/la/tax/income/credits/nonrefundable_p3/nonrefundable_child_care/income_mult.yaml b/fiscalsim_us/parameters/gov/states/la/tax/income/credits/nonrefundable_p3/nonrefundable_child_care/income_mult.yaml new file mode 100644 index 000000000..bff0df44f --- /dev/null +++ b/fiscalsim_us/parameters/gov/states/la/tax/income/credits/nonrefundable_p3/nonrefundable_child_care/income_mult.yaml @@ -0,0 +1,29 @@ +description: Income multiplier for Louisiana non-refundable child care tax credit + +brackets: + - threshold: + 2006-01-01: 25_000 + amount: + 2006-01-01: 0.3 + - threshold: + 2006-01-01: 35_000 + amount: + 2006-01-01: 0.1 + - threshold: + 2006-01-01: 60_000 + amount: + 2006-01-01: 0.1 + +metadata: + type: single_amount + threshold_unit: currency-USD + amount_unit: /1 + period: year + label: Louisiana non-refundable child care credit income multiplier + reference: + - title: §297.4. Reduction to tax due; certain child care expenses, part (A)(2)-(4) + href: http://legis.la.gov/Legis/Law.aspx?d=101769 + - title: 2022 Louisiana Resident Income Tax Return + href: https://revenue.louisiana.gov/TaxForms/IT540WEB(2022)%20F%20D2.pdf#page=16 + - title: 2021 Louisiana Resident Income Tax Return + href: https://revenue.louisiana.gov/TaxForms/IT540WEB(2021)%20F.pdf#page=16 diff --git a/fiscalsim_us/parameters/gov/states/la/tax/income/credits/nonrefundable_p3/nonrefundable_child_care/income_threshold.yaml b/fiscalsim_us/parameters/gov/states/la/tax/income/credits/nonrefundable_p3/nonrefundable_child_care/income_threshold.yaml new file mode 100644 index 000000000..734d3936d --- /dev/null +++ b/fiscalsim_us/parameters/gov/states/la/tax/income/credits/nonrefundable_p3/nonrefundable_child_care/income_threshold.yaml @@ -0,0 +1,16 @@ +description: Louisiana limits the amount of the non-refundable child care credit for tax units with agi above this limit + +values: + 2006-01-01: 60_000 + +metadata: + period: year + unit: currency-USD + label: Louisiana non refundable child-care tax income threshold + reference: + - title: §297.4. Reduction to tax due; certain child care expenses, part (A)(4) + href: http://legis.la.gov/Legis/Law.aspx?d=101769 + - title: 2022 Louisiana Resident Income Tax Return, page 16-2A + href: https://revenue.louisiana.gov/TaxForms/IT540WEB(2022)%20F%20D2.pdf + - title: 2021 Louisiana Resident Income Tax Return, page 16-2A + href: https://revenue.louisiana.gov/TaxForms/IT540WEB(2021)%20F.pdf diff --git a/fiscalsim_us/parameters/gov/states/la/tax/income/credits/nonrefundable_p3/sources.yaml b/fiscalsim_us/parameters/gov/states/la/tax/income/credits/nonrefundable_p3/sources.yaml new file mode 100644 index 000000000..42340a449 --- /dev/null +++ b/fiscalsim_us/parameters/gov/states/la/tax/income/credits/nonrefundable_p3/sources.yaml @@ -0,0 +1,13 @@ +description: Louisiana provides these non-refundable priority 3 tax credits. +values: + 2021-01-01: + - la_nonrefundable_childcare + - la_other_nonrefundable_p3 + +metadata: + unit: variable + label: Louisiana refundable priorty 3 tax credits + reference: + - title: Louisiana Form IT-540 Schedule J - Refundable credits + href: https://revenue.louisiana.gov/TaxForms/IT540iWEB(2022)D1.pdf + diff --git a/fiscalsim_us/parameters/gov/states/la/tax/income/credits/refundable_p2/eitc_mult.yaml b/fiscalsim_us/parameters/gov/states/la/tax/income/credits/refundable_p2/eitc_mult.yaml new file mode 100644 index 000000000..9acf147e6 --- /dev/null +++ b/fiscalsim_us/parameters/gov/states/la/tax/income/credits/refundable_p2/eitc_mult.yaml @@ -0,0 +1,16 @@ +description: Multiplier for the amount of the federal EITC that Louisiana allows taxfiliers for a refundable credit +values: + 2018-01-01: 0.035 + 2019-01-01: 0.05 + +metadata: + period: year + unit: /1 + label: Louisiana EITC multiplier + reference: + - title: Louisiana legal code| RS 47:297.8, part (A) + href: https://www.legis.la.gov/legis/Law.aspx?d=453085 + - title: Louisiana State Inncome Tax Form IT-540 2021 + href: "https://revenue.louisiana.gov/TaxForms/IT540WEB(2021)%20F.pdf" + - title: Louisiana State Inncome Tax Form IT-540 2022 + href: "https://revenue.louisiana.gov/TaxForms/IT540WEB(2022)%20F%20D2.pdf" diff --git a/fiscalsim_us/parameters/gov/states/la/tax/income/credits/refundable_p2/refundable_child_care/child_age_limit.yaml b/fiscalsim_us/parameters/gov/states/la/tax/income/credits/refundable_p2/refundable_child_care/child_age_limit.yaml new file mode 100644 index 000000000..c335db0bd --- /dev/null +++ b/fiscalsim_us/parameters/gov/states/la/tax/income/credits/refundable_p2/refundable_child_care/child_age_limit.yaml @@ -0,0 +1,13 @@ +description: Louisiana allows refundable childcare credit for childcare expenses for children under this age limit +values: + 2021-01-01: 13 + +metadata: + period: year + unit: year + label: Louisiana refundbale childcare age limit + reference: + - title: Louisiana Resident Income Tax Return Tax Table 2021 + href: "https://revenue.louisiana.gov/TaxForms/IT540TT%20(2021).pdf" + - title: Louisiana Resident Income Tax Return Tax Table 2022 + href: "https://revenue.louisiana.gov/TaxForms/IT540(2022)%20Tax%20Table.pdf" diff --git a/fiscalsim_us/parameters/gov/states/la/tax/income/credits/refundable_p2/refundable_child_care/expense_limit.yaml b/fiscalsim_us/parameters/gov/states/la/tax/income/credits/refundable_p2/refundable_child_care/expense_limit.yaml new file mode 100644 index 000000000..28f377ee6 --- /dev/null +++ b/fiscalsim_us/parameters/gov/states/la/tax/income/credits/refundable_p2/refundable_child_care/expense_limit.yaml @@ -0,0 +1,26 @@ +description: Childcare expense limit for Louisiana refundable childcare credit +brackets: + - threshold: + 2021-01-01: 0 + amount: + 2021-01-01: 0 + - threshold: + 2021-01-01: 1 + amount: + 2021-01-01: 8_000 + 2022-01-01: 3_000 + - threshold: + 2021-01-01: 2 + amount: + 2021-01-01: 16_000 + 2022-01-01: 6_000 + +metadata: + type: single_amount + threshold_unit: child-dependents + rate_unit: /1 + threshold_period: year + label: Louisiana refundbale childcare credit income multiplier + reference: + - title: 2022 Louisiana Refundable Child Care Credit Worksheet + href: https://revenue.louisiana.gov/TaxForms/IT540WEB(2022)%20F%20D2.pdf diff --git a/fiscalsim_us/parameters/gov/states/la/tax/income/credits/refundable_p2/refundable_child_care/income_mult.yaml b/fiscalsim_us/parameters/gov/states/la/tax/income/credits/refundable_p2/refundable_child_care/income_mult.yaml new file mode 100644 index 000000000..f08ae8f8e --- /dev/null +++ b/fiscalsim_us/parameters/gov/states/la/tax/income/credits/refundable_p2/refundable_child_care/income_mult.yaml @@ -0,0 +1,41 @@ +description: Income multiplier for Louisiana refundable childcare credit +brackets: + - threshold: + 2021-01-01: 0 + amount: + 2021-01-01: 0.5 + 2022-01-01: 0.35 + - threshold: + 2022-01-01: 15_000 + amount: + 2022-01-01: 0.34 + - threshold: + 2022-01-01: 17_000 + amount: + 2022-01-01: 0.33 + - threshold: + 2022-01-01: 19_000 + amount: + 2022-01-01: 0.32 + - threshold: + 2022-01-01: 21_000 + amount: + 2022-01-01: 0.31 + - threshold: + 2022-01-01: 23_000 + amount: + 2022-01-01: 0.39 + - threshold: + 2021-01-01: 25_000 + amount: + 2021-01-01: 0.0 + +metadata: + type: single_amount + threshold_unit: currency-USD + rate_unit: /1 + threshold_period: year + label: Louisiana refundbale childcare credit income multiplier + reference: + - title: 2022 Louisiana Refundable Child Care Credit Worksheet + href: https://revenue.louisiana.gov/TaxForms/IT540WEB(2022)%20F%20D2.pdf diff --git a/fiscalsim_us/parameters/gov/states/la/tax/income/credits/refundable_p2/refundable_child_care/mult.yaml b/fiscalsim_us/parameters/gov/states/la/tax/income/credits/refundable_p2/refundable_child_care/mult.yaml new file mode 100644 index 000000000..75e5a19b3 --- /dev/null +++ b/fiscalsim_us/parameters/gov/states/la/tax/income/credits/refundable_p2/refundable_child_care/mult.yaml @@ -0,0 +1,13 @@ +description: multiplier for Louisiana childcare credit (applied to everyone) +values: + 2021-01-01: .5 + +metadata: + period: year + unit: /1 + label: Louisiana refundbale childcare multiplier + reference: + - title: Louisiana Resident Income Tax Return Tax Table 2021 + href: "https://revenue.louisiana.gov/TaxForms/IT540TT%20(2021).pdf" + - title: Louisiana Resident Income Tax Return Tax Table 2022 + href: "https://revenue.louisiana.gov/TaxForms/IT540(2022)%20Tax%20Table.pdf" diff --git a/fiscalsim_us/parameters/gov/states/la/tax/income/credits/refundable_p2/sources.yaml b/fiscalsim_us/parameters/gov/states/la/tax/income/credits/refundable_p2/sources.yaml new file mode 100644 index 000000000..26bebdb84 --- /dev/null +++ b/fiscalsim_us/parameters/gov/states/la/tax/income/credits/refundable_p2/sources.yaml @@ -0,0 +1,14 @@ +description: Louisiana provides these refundable priority 2 tax credits. +values: + 2021-01-01: + - la_refundable_childcare + - la_refundable_school_ready + - la_eitc + - la_other_refundable_p2 + +metadata: + unit: variable + label: Louisiana refundable priorty 2 tax credits + reference: + - title: Louisiana Form IT-540 Schedule F - Refundable credits + href: https://revenue.louisiana.gov/TaxForms/IT540iWEB(2022)D1.pdf diff --git a/fiscalsim_us/parameters/gov/states/la/tax/income/exemptions/additional_amount.yaml b/fiscalsim_us/parameters/gov/states/la/tax/income/exemptions/additional_amount.yaml new file mode 100644 index 000000000..0c6c958a2 --- /dev/null +++ b/fiscalsim_us/parameters/gov/states/la/tax/income/exemptions/additional_amount.yaml @@ -0,0 +1,15 @@ +description: Louisiana allows this exemption from income for each additional exemption past the personal +values: + 2021-01-01: 1_000 + +metadata: + period: year + unit: currency-USD + label: Louisiana additional exemption amount + reference: + - title: Louisiana Resident Income Tax Return Tax Table 2021 + href: "https://revenue.louisiana.gov/TaxForms/IT540TT%20(2021).pdf" + - title: Louisiana Resident Income Tax Return Tax Table 2022 + href: "https://revenue.louisiana.gov/TaxForms/IT540(2022)%20Tax%20Table.pdf" + - title: Louisiana Laws Revised Statutes, Title 47 — Revenue and taxation, RS 47:294 — Personal exemptions and credit for dependents, B + href: https://www.legis.la.gov/legis/Law.aspx?d=101761 diff --git a/fiscalsim_us/parameters/gov/states/la/tax/income/exemptions/personal_amount.yaml b/fiscalsim_us/parameters/gov/states/la/tax/income/exemptions/personal_amount.yaml new file mode 100644 index 000000000..70202c06f --- /dev/null +++ b/fiscalsim_us/parameters/gov/states/la/tax/income/exemptions/personal_amount.yaml @@ -0,0 +1,15 @@ +description: Louisiana allows this personal exemption from income +values: + 1983-01-01: 4_500 + +metadata: + period: year + unit: currency-USD + label: Louisiana personal exemption amount + reference: + - title: Louisiana Resident Income Tax Return Tax Table 2021 + href: "https://revenue.louisiana.gov/TaxForms/IT540TT%20(2021).pdf" + - title: Louisiana Resident Income Tax Return Tax Table 2022 + href: "https://revenue.louisiana.gov/TaxForms/IT540(2022)%20Tax%20Table.pdf" + - title: Louisiana Laws Revised Statutes, Title 47 — Revenue and taxation, RS 47:294 — Personal exemptions and credit for dependents, A + href: https://www.legis.la.gov/legis/Law.aspx?d=101761 diff --git a/fiscalsim_us/parameters/gov/states/la/tax/income/rates/head_of_household.yaml b/fiscalsim_us/parameters/gov/states/la/tax/income/rates/head_of_household.yaml new file mode 100644 index 000000000..b570d6da9 --- /dev/null +++ b/fiscalsim_us/parameters/gov/states/la/tax/income/rates/head_of_household.yaml @@ -0,0 +1,26 @@ +description: Louisiana levies income taxes at these rates for filers who file as head of household. +brackets: + - threshold: + 2009-01-01: 0 + rate: + 2009-01-01: 0.02 + 2022-01-01: 0.0185 + - threshold: + 2009-01-01: 12_500 + rate: + 2009-01-01: 0.04 + 2022-01-01: 0.0315 + - threshold: + 2009-01-01: 50_000 + rate: + 2009-01-01: 0.06 + 2022-01-01: 0.0425 +metadata: + type: marginal_rate + threshold_unit: currency-USD + rate_unit: /1 + threshold_period: year + label: Louisiana head of household income tax rates + reference: + - title: Louisiana Department of Revenue Individual Income Tax + href: "https://revenue.louisiana.gov/individualincometax" diff --git a/fiscalsim_us/parameters/gov/states/la/tax/income/rates/joint.yaml b/fiscalsim_us/parameters/gov/states/la/tax/income/rates/joint.yaml new file mode 100644 index 000000000..9ac266af6 --- /dev/null +++ b/fiscalsim_us/parameters/gov/states/la/tax/income/rates/joint.yaml @@ -0,0 +1,27 @@ +description: Louisiana levies income taxes at these rates for filers who are married filing jointly +brackets: + - threshold: + 2009-01-01: 0 + rate: + 2009-01-01: 0.02 + 2022-01-01: 0.0185 + - threshold: + 2009-01-01: 25_000 + rate: + 2009-01-01: 0.04 + 2022-01-01: 0.035 + - threshold: + 2009-01-01: 100_000 + rate: + 2009-01-01: 0.06 + 2022-01-01: 0.0425 + +metadata: + type: marginal_rate + threshold_unit: currency-USD + rate_unit: /1 + threshold_period: year + label: Louisiana married filing joint income tax rates + reference: + - title: Louisiana Department of Revenue Individual Income Tax + href: "https://revenue.louisiana.gov/individualincometax" diff --git a/fiscalsim_us/parameters/gov/states/la/tax/income/rates/separate.yaml b/fiscalsim_us/parameters/gov/states/la/tax/income/rates/separate.yaml new file mode 100644 index 000000000..0b7662231 --- /dev/null +++ b/fiscalsim_us/parameters/gov/states/la/tax/income/rates/separate.yaml @@ -0,0 +1,27 @@ +description: Louisiana levies income taxes at these rates for filers who are married filing separately +brackets: + - threshold: + 2009-01-01: 0 + rate: + 2009-01-01: 0.02 + 2022-01-01: 0.0185 + - threshold: + 2009-01-01: 12_500 + rate: + 2009-01-01: 0.04 + 2022-01-01: 0.035 + - threshold: + 2009-01-01: 50_000 + rate: + 2009-01-01: 0.06 + 2022-01-01: 0.0425 + +metadata: + type: marginal_rate + threshold_unit: currency-USD + rate_unit: /1 + threshold_period: year + label: Louisiana married filing separately income tax rates + reference: + - title: Louisiana Department of Revenue Individual Income Tax + href: "https://revenue.louisiana.gov/individualincometax" diff --git a/fiscalsim_us/parameters/gov/states/la/tax/income/rates/single.yaml b/fiscalsim_us/parameters/gov/states/la/tax/income/rates/single.yaml new file mode 100644 index 000000000..b700ade98 --- /dev/null +++ b/fiscalsim_us/parameters/gov/states/la/tax/income/rates/single.yaml @@ -0,0 +1,27 @@ +description: Louisiana levies income taxes at these rates for filers who file as single +brackets: + - threshold: + 2009-01-01: 0 + rate: + 2009-01-01: 0.02 + 2022-01-01: 0.0185 + - threshold: + 2009-01-01: 12_500 + rate: + 2009-01-01: 0.04 + 2022-01-01: 0.035 + - threshold: + 2009-01-01: 50_000 + rate: + 2009-01-01: 0.06 + 2022-01-01: 0.0425 + +metadata: + type: marginal_rate + threshold_unit: currency-USD + rate_unit: /1 + threshold_period: year + label: Louisiana single filer income tax rates + reference: + - title: Louisiana Department of Revenue Individual Income Tax + href: "https://revenue.louisiana.gov/individualincometax" diff --git a/fiscalsim_us/parameters/gov/states/la/tax/income/rates/widow.yaml b/fiscalsim_us/parameters/gov/states/la/tax/income/rates/widow.yaml new file mode 100644 index 000000000..1b0a14103 --- /dev/null +++ b/fiscalsim_us/parameters/gov/states/la/tax/income/rates/widow.yaml @@ -0,0 +1,27 @@ +description: Louisiana levies income taxes at these rates for filers who are a qualified suriving spouse (widow) +brackets: + - threshold: + 2009-01-01: 0 + rate: + 2009-01-01: 0.02 + 2022-01-01: 0.0185 + - threshold: + 2009-01-01: 25_000 + rate: + 2009-01-01: 0.04 + 2022-01-01: 0.035 + - threshold: + 2009-01-01: 100_000 + rate: + 2009-01-01: 0.06 + 2022-01-01: 0.0425 + +metadata: + type: marginal_rate + threshold_unit: currency-USD + rate_unit: /1 + threshold_period: year + label: Louisiana widow income tax rates + reference: + - title: Louisiana Department of Revenue Individual Income Tax + href: "https://revenue.louisiana.gov/individualincometax" diff --git a/fiscalsim_us/tests/policy/baseline/gov/states/la/tax/income/la_agi_subtractions.yaml b/fiscalsim_us/tests/policy/baseline/gov/states/la/tax/income/la_agi_subtractions.yaml new file mode 100644 index 000000000..b3ef8033c --- /dev/null +++ b/fiscalsim_us/tests/policy/baseline/gov/states/la/tax/income/la_agi_subtractions.yaml @@ -0,0 +1,16 @@ +- name: LA subtractions from income + period: 2021 + absolute_error_margin: 0 + input: + filing_status: SINGLE + adjusted_gross_income: 100_000 + us_govt_interest: 1_000 + tax_unit_taxable_social_security: 1_000 + la_state_employee_retirement_benefits: 1_000 + la_state_teacher_retirement_benefits: 1_000 + la_federal_retirement_benefits: 1_000 + la_other_subtractions: 1_000 + la_exemptions: 0 + state_code: LA + output: + la_taxable_income: 94_000 diff --git a/fiscalsim_us/tests/policy/baseline/gov/states/la/tax/income/la_credit_priorities.yaml b/fiscalsim_us/tests/policy/baseline/gov/states/la/tax/income/la_credit_priorities.yaml new file mode 100644 index 000000000..b4ac44409 --- /dev/null +++ b/fiscalsim_us/tests/policy/baseline/gov/states/la/tax/income/la_credit_priorities.yaml @@ -0,0 +1,105 @@ +- name: LA income tax p1 credit + period: 2022 + absolute_error_margin: 0 + input: + filing_status: SINGLE + la_income_tax_before_credits: 5_000 + la_nonrefundable_credits: 1_000 + state_code: LA + output: + la_income_tax: 4_000 + +- name: LA income tax p1 credit nonrefundable + period: 2022 + absolute_error_margin: 0 + input: + filing_status: SINGLE + la_income_tax_before_credits: 5_000 + la_nonrefundable_credits: 6_000 + state_code: LA + output: + la_income_tax: 0 + +- name: LA p2 credit nonrefundable + period: 2022 + absolute_error_margin: 0 + input: + filing_status: SINGLE + la_income_tax_before_credits: 5_000 + la_refundable_priority_2_credits: 6_000 + state_code: LA + output: + la_income_tax: -1_000 + +- name: LA p1 and p2 credits mixed + period: 2022 + absolute_error_margin: 0 + input: + filing_status: SINGLE + la_income_tax_before_credits: 5_000 + la_nonrefundable_credits: 3_000 + la_refundable_priority_2_credits: 6_000 + state_code: LA + output: + la_income_tax: -4_000 + +- name: LA p1 and p2 credits mixed extra nonrefundable + period: 2022 + absolute_error_margin: 0 + input: + filing_status: SINGLE + la_income_tax_before_credits: 5_000 + la_nonrefundable_credits: 6_000 + la_refundable_priority_2_credits: 6_000 + state_code: LA + output: + la_income_tax: -6_000 + +- name: LA p2 and p3 credits refund + period: 2022 + absolute_error_margin: 0 + input: + filing_status: SINGLE + la_income_tax_before_credits: 5_000 + la_refundable_priority_2_credits: 6_000 + la_nonrefundable_priority_3_credits: 1_000 + state_code: LA + output: + la_income_tax: -1_000 + +- name: LA p2 and p3 credits no refund + period: 2022 + absolute_error_margin: 0 + input: + filing_status: SINGLE + la_income_tax_before_credits: 5_000 + la_refundable_priority_2_credits: 3_000 + la_nonrefundable_priority_3_credits: 1_000 + state_code: LA + output: + la_income_tax: 1_000 + +- name: LA p2 and p3 credits extra p3 + period: 2021 + absolute_error_margin: 0 + input: + filing_status: SINGLE + la_income_tax_before_credits: 5_000 + la_refundable_priority_2_credits: 3_000 + la_nonrefundable_priority_3_credits: 3_000 + state_code: LA + output: + la_income_tax: 0 + +- name: LA p2, p3, and p4 credits + period: 2022 + absolute_error_margin: 0 + input: + filing_status: SINGLE + la_income_tax_before_credits: 5_000 + la_refundable_priority_2_credits: 3_000 + la_nonrefundable_priority_3_credits: 1_000 + la_refundable_priority_4_credits: 2_000 + state_code: LA + output: + la_income_tax: -1_000 diff --git a/fiscalsim_us/tests/policy/baseline/gov/states/la/tax/income/la_credits.yaml b/fiscalsim_us/tests/policy/baseline/gov/states/la/tax/income/la_credits.yaml new file mode 100644 index 000000000..8dcfe0cac --- /dev/null +++ b/fiscalsim_us/tests/policy/baseline/gov/states/la/tax/income/la_credits.yaml @@ -0,0 +1,166 @@ +- name: Federal EITC of $500 and no qualifying children, LA EITC should be $25 + period: 2022 + absolute_error_margin: 0 + input: + earned_income_tax_credit: 500 + state_code: LA + output: + la_eitc: 25 + +- name: LA refundable childcare credit over $25,000 income limit + period: 2022 + absolute_error_margin: 0 + input: + people: + person1: + age: 33 + employment_income: 100_000 + person2: + age: 35 + employment_income: 50_000 + dependent1: + age: 8 + is_tax_unit_dependent: true + tax_units: + tax_unit: + members: [person1, person2, dependent1] + tax_unit_childcare_expenses: 1_000 + filing_status: JOINT + households: + household: + members: [person1, person2, dependent1] + state_code: LA + output: + la_refundable_childcare: 0 + +- name: LA refundable childcare credit one child + period: 2022 + absolute_error_margin: 0 + input: + people: + person1: + age: 33 + employment_income: 10_000 + person2: + age: 35 + employment_income: 10_000 + dependent1: + age: 8 + is_tax_unit_dependent: true + tax_units: + tax_unit: + members: [person1, person2, dependent1] + tax_unit_childcare_expenses: 4_000 + filing_status: JOINT + households: + household: + members: [person1, person2, dependent1] + state_code: LA + output: + la_refundable_childcare: 480 + +- name: LA refundable childcare credit 3 children + period: 2022 + absolute_error_margin: 0 + input: + people: + person1: + age: 33 + employment_income: 10_000 + person2: + age: 35 + employment_income: 10_000 + dependent1: + age: 8 + is_tax_unit_dependent: true + dependent2: + age: 9 + is_tax_unit_dependent: true + dependent3: + age: 7 + is_tax_unit_dependent: true + tax_units: + tax_unit: + members: [person1, person2, dependent1, dependent2, dependent3] + tax_unit_childcare_expenses: 7_000 + filing_status: JOINT + households: + household: + members: [person1, person2, dependent1, dependent2, dependent3] + state_code: LA + output: + la_refundable_childcare: 960 + +- name: LA refundable childcare credit one child spouse income below expenses + period: 2022 + absolute_error_margin: 0 + input: + people: + person1: + age: 33 + employment_income: 18_000 + person2: + age: 35 + employment_income: 2_000 + dependent1: + age: 8 + is_tax_unit_dependent: true + tax_units: + tax_unit: + members: [person1, person2, dependent1] + tax_unit_childcare_expenses: 4_000 + filing_status: JOINT + households: + household: + members: [person1, person2, dependent1] + state_code: LA + output: + la_refundable_childcare: 320 + +- name: LA nonrefundable child care credit below income floor ($0 nonrefundable) + period: 2022 + input: + adjusted_gross_income: 23_000 + cdcc: 2_000 + state_code: LA + output: + la_nonrefundable_childcare: 0 + +- name: LA nonrefundable child care credit + period: 2022 + input: + adjusted_gross_income: 30_000 + cdcc: 2_000 + state_code: LA + output: + la_nonrefundable_childcare: 600 + +- name: LA nonrefundable child care credit above income threshold + period: 2022 + input: + adjusted_gross_income: 60_001 + cdcc: 200 + state_code: LA + output: + la_nonrefundable_childcare: 20 + +- name: LA nonrefundable child care credit above income threshold with credit limit + period: 2022 + input: + adjusted_gross_income: 60_001 + cdcc: 1000 + state_code: LA + output: + la_nonrefundable_childcare: 25 + +- name: Addition of p2 refundable credits + period: 2022 + absolute_error_margin: 0 + input: + state_code: LA + earned_income_tax_credit: 500 + la_refundable_school_ready: 100 + la_refundable_childcare: 200 + la_other_refundable_p2: 100 + output: + la_refundable_priority_2_credits: 425 diff --git a/fiscalsim_us/tests/policy/baseline/gov/states/la/tax/income/la_exemptions.yaml b/fiscalsim_us/tests/policy/baseline/gov/states/la/tax/income/la_exemptions.yaml new file mode 100644 index 000000000..6f51e6e4d --- /dev/null +++ b/fiscalsim_us/tests/policy/baseline/gov/states/la/tax/income/la_exemptions.yaml @@ -0,0 +1,111 @@ +- name: Single filer gets $4500 exemption. + period: 2022 + input: + state_code: LA + filing_status: SINGLE + output: + la_exemptions: 4_500 + +- name: Joint filer gets $9,000 exemption. + period: 2022 + input: + state_code: LA + filing_status: JOINT + output: + la_exemptions: 9_000 + +- name: Head of household filer gets $9,000 exemption. + period: 2022 + input: + state_code: LA + filing_status: HEAD_OF_HOUSEHOLD + output: + la_exemptions: 9_000 + +- name: Separate filer gets $4500 exemption. + period: 2022 + input: + state_code: LA + filing_status: SEPARATE + output: + la_exemptions: 4_500 + +- name: Joint 2 dependents gets $11,000 exemption + period: 2022 + absolute_error_margin: 0 + input: + filing_status: JOINT + state_code: LA + tax_unit_dependents: 2 + adjusted_gross_income: 100_000 + output: + la_exemptions: 11_000 + +- name: Single 2 dependents gets $6_500 exemption + period: 2022 + absolute_error_margin: 0 + input: + filing_status: SINGLE + state_code: LA + tax_unit_dependents: 2 + adjusted_gross_income: 100_000 + output: + la_exemptions: 6_500 + +- name: Single 1 dependents and 1 65+/blind gets $6,500 exemption + period: 2022 + absolute_error_margin: 0 + input: + filing_status: SINGLE + state_code: LA + tax_unit_dependents: 1 + aged_blind_count: 1 + adjusted_gross_income: 100_000 + output: + la_exemptions: 6_500 + +- name: 1 Blind not aged gets $10,000 exemption + period: 2021 + input: + people: + person1: + age: 64 + is_tax_unit_head: 1 + is_blind: 1 + person2: + age: 64 + is_tax_unit_spouse: 1 + is_blind: 0 + tax_units: + tax_unit: + members: [person1, person2] + filing_status: JOINT + households: + household: + members: [person1, person2] + state_code: LA + output: + la_exemptions: 10_000 + +- name: Non blind not aged gets $9,000 exemption + period: 2021 + input: + people: + person1: + age: 64 + is_tax_unit_head: 1 + is_blind: 0 + person2: + age: 64 + is_tax_unit_spouse: 1 + is_blind: 0 + tax_units: + tax_unit: + members: [person1, person2] + filing_status: JOINT + households: + household: + members: [person1, person2] + state_code: LA + output: + la_exemptions: 9_000 diff --git a/fiscalsim_us/tests/policy/baseline/gov/states/la/tax/income/la_tax.yaml b/fiscalsim_us/tests/policy/baseline/gov/states/la/tax/income/la_tax.yaml new file mode 100644 index 000000000..e2cf1c7ac --- /dev/null +++ b/fiscalsim_us/tests/policy/baseline/gov/states/la/tax/income/la_tax.yaml @@ -0,0 +1,29 @@ +- name: LA tax no income + period: 2022 + absolute_error_margin: 0 + input: + filing_status: SINGLE + la_taxable_income: 0 + state_code: LA + output: + la_income_tax: 0.0 + +- name: LA first tax bracket + period: 2022 + absolute_error_margin: 0 + input: + filing_status: SINGLE + la_taxable_income: 12_000 + state_code: LA + output: + la_income_tax: 222 + +- name: LA all tax brackets + period: 2022 + absolute_error_margin: 0 + input: + filing_status: SINGLE + la_taxable_income: 100_000 + state_code: LA + output: + la_income_tax: 3668.75 diff --git a/fiscalsim_us/tests/policy/baseline/gov/states/la/tax/income/la_taxable_income.yaml b/fiscalsim_us/tests/policy/baseline/gov/states/la/tax/income/la_taxable_income.yaml new file mode 100644 index 000000000..9e6235f9e --- /dev/null +++ b/fiscalsim_us/tests/policy/baseline/gov/states/la/tax/income/la_taxable_income.yaml @@ -0,0 +1,73 @@ +- name: LA taxable income not itemizing with additions + period: 2022 + absolute_error_margin: 0 + input: + tax_unit_itemizes: false + filing_status: SINGLE + state_code: LA + adjusted_gross_income: 100_000 + la_total_additions: 1_000 + la_exemptions: 0 + output: + la_taxable_income: 101_000 + +- name: LA taxable income not itemizing with subtractions + period: 2022 + absolute_error_margin: 0 + input: + tax_unit_itemizes: false + filing_status: SINGLE + state_code: LA + adjusted_gross_income: 100_000 + la_total_subtractions: 1_000 + la_exemptions: 2_000 + output: + la_taxable_income: 97_000 + +- name: LA taxable income not itemizing additions and exemptions + period: 2022 + absolute_error_margin: 0 + input: + tax_unit_itemizes: false + filing_status: SINGLE + state_code: LA + adjusted_gross_income: 100_000 + la_total_additions: 1_000 + output: + la_taxable_income: 96_500 + +- name: LA taxable income not itemizing additions and exemptions joint + period: 2022 + absolute_error_margin: 0 + input: + tax_unit_itemizes: false + filing_status: JOINT + state_code: LA + adjusted_gross_income: 100_000 + la_total_additions: 1_000 + output: + la_taxable_income: 92_000 + +- name: LA taxable income itemizing additions and exemptions joint + period: 2022 + absolute_error_margin: 0 + input: + tax_unit_itemizes: true + filing_status: JOINT + state_code: LA + adjusted_gross_income: 100_000 + la_total_additions: 1_000 + output: + la_taxable_income: 92_000 + +- name: LA taxable income itemizing single with medical expenses + period: 2022 + absolute_error_margin: 0 + input: + tax_unit_itemizes: true + filing_status: SINGLE + state_code: LA + adjusted_gross_income: 100_000 + medical_expense_deduction: 14_950 + output: + la_taxable_income: 93_500 diff --git a/fiscalsim_us/variables/gov/states/la/tax/income/agi/la_federal_retirement_benefits.py b/fiscalsim_us/variables/gov/states/la/tax/income/agi/la_federal_retirement_benefits.py new file mode 100644 index 000000000..54d7ac2e2 --- /dev/null +++ b/fiscalsim_us/variables/gov/states/la/tax/income/agi/la_federal_retirement_benefits.py @@ -0,0 +1,16 @@ +from fiscalsim_us.model_api import * + + +class la_federal_retirement_benefits(Variable): + """Amount of retirement benefits recieved from a + Federal Retirement System + """ + + value_type = float + entity = TaxUnit + label = "Louisiana state teacher retirement benefits" + unit = USD + definition_period = YEAR + defined_for = StateCode.LA + # If this gets implimented in a federal level variable + # delete this one and change in parameter subtractions.sources.yaml diff --git a/fiscalsim_us/variables/gov/states/la/tax/income/agi/la_other_subtractions.py b/fiscalsim_us/variables/gov/states/la/tax/income/agi/la_other_subtractions.py new file mode 100644 index 000000000..71dc412f2 --- /dev/null +++ b/fiscalsim_us/variables/gov/states/la/tax/income/agi/la_other_subtractions.py @@ -0,0 +1,39 @@ +from fiscalsim_us.model_api import * + + +class la_other_subtractions(Variable): + """ + Other subtractions from louisiana taxable income. + These include the following exemptions from income with + the associated codes: + 05E – Other Retirement Benefits + 06E – Annual Retirement Income Exemption for Taxpayers 65 + Years of Age or Older + 08E – Native American Income + 09E – START Savings Program Contribution + 10E – Military Pay Exclusion + 11E – Road Home + 13E – Recreation Volunteer + 14E – Volunteer Firefighter + 16E – Voluntary Retrofit Residential Structure + 17E – Elementary and Secondary School Tuition + 18E – Educational Expenses for Home-Schooled Children + 19E – Educational Expenses for a Quality Public Education + 20E – Capital Gain from Sale of Louisiana Business + 21E – Employment of Certain Qualified Disabled Individuals + 22E – S Bank Shareholder Income Exclusion + 23E – Entity Level Taxes Paid to Other States + 24E – Pass–Through Entity Exclusion + 25E – IRC 280C Expense + 27E – COVID-19 Relief Benefits + 28E – START K12 Savings Program Contributions + 29E – Digital Nomad + 30E – Certain Adoptions + """ + + value_type = float + entity = TaxUnit + label = "Louisiana other subtractions from AGI" + unit = USD + definition_period = YEAR + defined_for = StateCode.LA diff --git a/fiscalsim_us/variables/gov/states/la/tax/income/agi/la_state_employee_retirement_benefits.py b/fiscalsim_us/variables/gov/states/la/tax/income/agi/la_state_employee_retirement_benefits.py new file mode 100644 index 000000000..aa55e2c8b --- /dev/null +++ b/fiscalsim_us/variables/gov/states/la/tax/income/agi/la_state_employee_retirement_benefits.py @@ -0,0 +1,10 @@ +from fiscalsim_us.model_api import * + + +class la_state_employee_retirement_benefits(Variable): + value_type = float + entity = TaxUnit + label = "Louisiana state empoyees' retirement benefits" + unit = USD + definition_period = YEAR + defined_for = StateCode.LA diff --git a/fiscalsim_us/variables/gov/states/la/tax/income/agi/la_state_teacher_retirement_benefits.py b/fiscalsim_us/variables/gov/states/la/tax/income/agi/la_state_teacher_retirement_benefits.py new file mode 100644 index 000000000..18677ec5b --- /dev/null +++ b/fiscalsim_us/variables/gov/states/la/tax/income/agi/la_state_teacher_retirement_benefits.py @@ -0,0 +1,10 @@ +from fiscalsim_us.model_api import * + + +class la_state_teacher_retirement_benefits(Variable): + value_type = float + entity = TaxUnit + label = "Louisiana state teacher retirement benefits" + unit = USD + definition_period = YEAR + defined_for = StateCode.LA diff --git a/fiscalsim_us/variables/gov/states/la/tax/income/agi/la_total_additions.py b/fiscalsim_us/variables/gov/states/la/tax/income/agi/la_total_additions.py new file mode 100644 index 000000000..d7577682e --- /dev/null +++ b/fiscalsim_us/variables/gov/states/la/tax/income/agi/la_total_additions.py @@ -0,0 +1,19 @@ +from fiscalsim_us.model_api import * + + +class la_total_additions(Variable): + """ + Additions to Louisiana adjusted income + Lines 2A-D on Form IT-540 Schedule E. These additions include + * Interest and dividend income from other states and their political subdivisions + * Recapture of START contributions + * Recapture of START K12 contributions + * Add back of pass-through entity + """ + + value_type = float + entity = TaxUnit + label = "Louisiana total additions to AGI" + unit = USD + definition_period = YEAR + defined_for = StateCode.LA diff --git a/fiscalsim_us/variables/gov/states/la/tax/income/agi/la_total_subtractions.py b/fiscalsim_us/variables/gov/states/la/tax/income/agi/la_total_subtractions.py new file mode 100644 index 000000000..bc232fd49 --- /dev/null +++ b/fiscalsim_us/variables/gov/states/la/tax/income/agi/la_total_subtractions.py @@ -0,0 +1,15 @@ +from fiscalsim_us.model_api import * + + +class la_total_subtractions(Variable): + """ + Subtractions from louisiana adjusted income + """ + + value_type = float + entity = TaxUnit + label = "Louisiana total subtractions from AGI" + unit = USD + definition_period = YEAR + defined_for = StateCode.LA + adds = "gov.states.la.tax.income.agi.subtractions.sources" diff --git a/fiscalsim_us/variables/gov/states/la/tax/income/credits/la_eitc.py b/fiscalsim_us/variables/gov/states/la/tax/income/credits/la_eitc.py new file mode 100644 index 000000000..bec22e05a --- /dev/null +++ b/fiscalsim_us/variables/gov/states/la/tax/income/credits/la_eitc.py @@ -0,0 +1,24 @@ +from fiscalsim_us.model_api import * + + +class la_eitc(Variable): + """ + Louisiana earned income tax credit + """ + + value_type = float + entity = TaxUnit + label = "Louisiana EITC" + unit = USD + definition_period = YEAR + reference = ( + "https://revenue.louisiana.gov/TaxForms/IT540WEB(2022)%20F%20D2.pdf", + "https://revenue.louisiana.gov/TaxForms/IT540iWEB(2022)D1.pdf", + ) + defined_for = StateCode.LA + + def formula(tax_unit, period, parameters): + federal_eitc = tax_unit("earned_income_tax_credit", period) + p = parameters(period).gov.states.la.tax.income.credits.refundable_p2 + + return federal_eitc * p.eitc_mult diff --git a/fiscalsim_us/variables/gov/states/la/tax/income/credits/la_nonrefundable_childcare.py b/fiscalsim_us/variables/gov/states/la/tax/income/credits/la_nonrefundable_childcare.py new file mode 100644 index 000000000..cf61dc8ca --- /dev/null +++ b/fiscalsim_us/variables/gov/states/la/tax/income/credits/la_nonrefundable_childcare.py @@ -0,0 +1,36 @@ +from fiscalsim_us.model_api import * + + +class la_nonrefundable_childcare(Variable): + value_type = float + entity = TaxUnit + label = "Louisiana refundable childcare credits" + unit = USD + definition_period = YEAR + defined_for = StateCode.LA + reference = ( + "https://revenue.louisiana.gov/TaxForms/IT540WEB(2022)%20F%20D2.pdf", + "https://revenue.louisiana.gov/TaxForms/IT540iWEB(2022)D1.pdf", + ) + + def formula(tax_unit, period, parameters): + p = parameters( + period + ).gov.states.la.tax.income.credits.nonrefundable_p3.nonrefundable_child_care + agi = tax_unit("adjusted_gross_income", period) + fed_cdcc = tax_unit("cdcc", period) + + # for agi under income floor can use the refundable credit + nonrefundable = agi > p.income_floor + fed_cdcc = fed_cdcc * nonrefundable + + income_mult = p.income_mult.calc(agi) + credit = fed_cdcc * income_mult + + # for agi over the threshold the credit is the minimum of + # fed_cdcc * income_mult and the limit for above the threshold + return where( + agi > p.income_threshold, + min(credit, p.above_threshold_max), + credit, + ) diff --git a/fiscalsim_us/variables/gov/states/la/tax/income/credits/la_nonrefundable_credits.py b/fiscalsim_us/variables/gov/states/la/tax/income/credits/la_nonrefundable_credits.py new file mode 100644 index 000000000..8db5fc9db --- /dev/null +++ b/fiscalsim_us/variables/gov/states/la/tax/income/credits/la_nonrefundable_credits.py @@ -0,0 +1,25 @@ +from fiscalsim_us.model_api import * + + +class la_nonrefundable_credits(Variable): + """ + Louisiana nonrefundable priority 1 credits + Line 11 on Form IT-540. These credits include + the following with codes: + * 100 - Premium tax credit + * 120 - Bone Marrow credit + * 150 - Qualified Playgrounds + * 155 - Debt Issuance + * 199 - Other + """ + + value_type = float + entity = TaxUnit + label = "Louisiana nonrefundable credits" + unit = USD + definition_period = YEAR + reference = ( + "https://revenue.louisiana.gov/TaxForms/IT540WEB(2022)%20F%20D2.pdf", + "https://revenue.louisiana.gov/TaxForms/IT540iWEB(2022)D1.pdf", + ) + defined_for = StateCode.LA diff --git a/fiscalsim_us/variables/gov/states/la/tax/income/credits/la_nonrefundable_priority_3_credits.py b/fiscalsim_us/variables/gov/states/la/tax/income/credits/la_nonrefundable_priority_3_credits.py new file mode 100644 index 000000000..39f2fc88f --- /dev/null +++ b/fiscalsim_us/variables/gov/states/la/tax/income/credits/la_nonrefundable_priority_3_credits.py @@ -0,0 +1,15 @@ +from fiscalsim_us.model_api import * + + +class la_nonrefundable_priority_3_credits(Variable): + value_type = float + entity = TaxUnit + label = "Louisiana nonrefundable priority 3 income tax credits" + unit = USD + definition_period = YEAR + defined_for = StateCode.LA + reference = ( + "https://revenue.louisiana.gov/TaxForms/IT540WEB(2022)%20F%20D2.pdf", + "https://revenue.louisiana.gov/TaxForms/IT540iWEB(2022)D1.pdf", + ) + adds = "gov.states.la.tax.income.credits.nonrefundable_p3.sources" diff --git a/fiscalsim_us/variables/gov/states/la/tax/income/credits/la_other_nonrefundable_p3.py b/fiscalsim_us/variables/gov/states/la/tax/income/credits/la_other_nonrefundable_p3.py new file mode 100644 index 000000000..a1857fd04 --- /dev/null +++ b/fiscalsim_us/variables/gov/states/la/tax/income/credits/la_other_nonrefundable_p3.py @@ -0,0 +1,56 @@ +from fiscalsim_us.model_api import * + + +class la_other_nonrefundable_p3(Variable): + """ + Louisiana nonrefundable priority 3 credits not yet implimented as separate variables + Form IT-540 line 20 + These include the following credits with codes: + 202 – Organ Donation + 208 – Previously Unemployed + 221 – Owner of Accessible and Barrier-free Home – + 224 – New Jobs Credit + 228 – Eligible Re-entrants – + 236 – Apprenticeship (2007) + 251 – Motion Picture Investment + 252 – Research and Development + 253 – Historic Structures + 254 – Digital Interactive Media + 257 – Capital Company + 258 – LA Community Development Financial Institution (LCDFI) + 259 – New Markets + 261 – Motion Picture Infrastructure + 262 – Angel Investor + 300 – Biomed/University Research + 305 – Tax Equalization + 310 – Manufacturing Establishment + 412 – Refund by Utilities + 424 – Donation to School Tuition Organization + 454 – QMC Music Job Creation Credit + 457 – Neighborhood Assistance + 458 – Research and Development + 459 – Ports of Louisiana Import Export Cargo + 460 – LA Import + 461 – LA Work Opportunity + 462 – Youth Jobs + 463 – Apprenticeship (2022) + 464 – Donation to Qualified Foster Care Charitable Organization + 500 – Inventory Tax Credit Carried Forward and ITEP + 502 – Ad Valorem Natural Gas Credit Carried Forward + 504 – Atchafalaya Trace + 506 – Cane River Heritage + 508 – Ports of Louisiana Investor + 510 – Enterprise Zone + 550 – Recycling Credit + """ + + value_type = float + entity = TaxUnit + label = "Louisiana nonrefundable priority 3 income tax credits" + unit = USD + definition_period = YEAR + defined_for = StateCode.LA + reference = ( + "https://revenue.louisiana.gov/TaxForms/IT540WEB(2022)%20F%20D2.pdf", + "https://revenue.louisiana.gov/TaxForms/IT540iWEB(2022)D1.pdf", + ) diff --git a/fiscalsim_us/variables/gov/states/la/tax/income/credits/la_other_refundable_p2.py b/fiscalsim_us/variables/gov/states/la/tax/income/credits/la_other_refundable_p2.py new file mode 100644 index 000000000..26ad2c650 --- /dev/null +++ b/fiscalsim_us/variables/gov/states/la/tax/income/credits/la_other_refundable_p2.py @@ -0,0 +1,38 @@ +from fiscalsim_us.model_api import * + + +class la_other_refundable_p2(Variable): + """ + Other Louisiana refundable priority 2 credits listed + on Schedule F for IT-540. These credits include the + following with codes: + * 52F - Ad Valorem Offshore Vessels + * 54F – Telephone Company Property + * 54F – Telephone Company Property + * 58F – Milk Producers + * 59F – Technology Commercialization + * 60F – Historic Residential + * 62F – Musical and Theatrical Production + * 65F – School Readiness Child Care Provider + * 66F – School Readiness Child Care Directors and Staff + * 67F – School Readiness Business-Supported Child Care + * 68F – School Readiness Fees and Grants to Resource and + Referral Agencies + * 70F – Retention and Modernization + * 73F – Digital Interactive Media & Software + * 76F – Stillborn Child + * 77F – Funeral and Burial Expense for a Pregnancy-related Death + * 80F – Other Refundable Credit + """ + + unit = USD + value_type = float + entity = TaxUnit + label = "Louisiana other refundable priority 2 income tax credits" + unit = USD + definition_period = YEAR + defined_for = StateCode.LA + reference = ( + "https://revenue.louisiana.gov/TaxForms/IT540WEB(2022)%20F%20D2.pdf", + "https://revenue.louisiana.gov/TaxForms/IT540iWEB(2022)D1.pdf", + ) diff --git a/fiscalsim_us/variables/gov/states/la/tax/income/credits/la_refundable_childcare.py b/fiscalsim_us/variables/gov/states/la/tax/income/credits/la_refundable_childcare.py new file mode 100644 index 000000000..8d8003392 --- /dev/null +++ b/fiscalsim_us/variables/gov/states/la/tax/income/credits/la_refundable_childcare.py @@ -0,0 +1,41 @@ +from fiscalsim_us.model_api import * + + +class la_refundable_childcare(Variable): + value_type = float + entity = TaxUnit + label = "Louisiana refundable childcare credits" + unit = USD + definition_period = YEAR + defined_for = StateCode.LA + reference = ( + "https://revenue.louisiana.gov/TaxForms/IT540WEB(2022)%20F%20D2.pdf", + "https://revenue.louisiana.gov/TaxForms/IT540iWEB(2022)D1.pdf", + ) + + def formula(tax_unit, period, parameters): + p = parameters( + period + ).gov.states.la.tax.income.credits.refundable_p2.refundable_child_care + agi = tax_unit("adjusted_gross_income", period) + childcare_expenses = tax_unit("tax_unit_childcare_expenses", period) + + # check for eligible children + person = tax_unit.members + dependent = person("is_tax_unit_dependent", period) + age = person("age", period) + child = age < p.child_age_limit + eligible = dependent & child + eligible_children = tax_unit.sum(eligible) + + max_expense = p.expense_limit.calc(eligible_children) + expense = min_(childcare_expenses, max_expense) + + # line 6 of worksheet + tax_unit_min_income = tax_unit("min_head_spouse_earned", period) + credit = min_(expense, tax_unit_min_income) + + income_mult = p.income_mult.calc(agi) + mult = p.mult + + return credit * income_mult * mult diff --git a/fiscalsim_us/variables/gov/states/la/tax/income/credits/la_refundable_credits.py b/fiscalsim_us/variables/gov/states/la/tax/income/credits/la_refundable_credits.py new file mode 100644 index 000000000..24da47116 --- /dev/null +++ b/fiscalsim_us/variables/gov/states/la/tax/income/credits/la_refundable_credits.py @@ -0,0 +1,42 @@ +from fiscalsim_us.model_api import * + + +class la_refundable_credits(Variable): + value_type = float + entity = TaxUnit + label = "Louisiana refundable income tax credits" + unit = USD + definition_period = YEAR + defined_for = StateCode.LA + reference = ( + "https://revenue.louisiana.gov/TaxForms/IT540WEB(2022)%20F%20D2.pdf", + "https://revenue.louisiana.gov/TaxForms/IT540iWEB(2022)D1.pdf", + ) + + def formula(tax_unit, period, parameters): + priority_2_refund = tax_unit( + "la_refundable_priority_2_credits", period + ) + + # line 18 - floor at 0 since the priority 3 credits are nonrefundable + tax_afer_p_2_credits = max_( + 0, + tax_unit("la_income_tax_before_refundable_credits", period) + - priority_2_refund, + ) + + priority_3_nonrefund_amount = tax_unit( + "la_nonrefundable_priority_3_credits", period + ) + + # either refund the rest of the tax liability (leftover from p2) + # or refund the total amount of p3 credits, whichever is less + priority_3_nonrefund_add = min_( + tax_afer_p_2_credits, priority_3_nonrefund_amount + ) + + priority_4_refund = tax_unit( + "la_refundable_priority_4_credits", period + ) + + return priority_2_refund + priority_3_nonrefund_add + priority_4_refund diff --git a/fiscalsim_us/variables/gov/states/la/tax/income/credits/la_refundable_priority_2_credits.py b/fiscalsim_us/variables/gov/states/la/tax/income/credits/la_refundable_priority_2_credits.py new file mode 100644 index 000000000..d79f12251 --- /dev/null +++ b/fiscalsim_us/variables/gov/states/la/tax/income/credits/la_refundable_priority_2_credits.py @@ -0,0 +1,15 @@ +from fiscalsim_us.model_api import * + + +class la_refundable_priority_2_credits(Variable): + value_type = float + entity = TaxUnit + label = "Louisiana refundable priority 2 income tax credits" + unit = USD + definition_period = YEAR + defined_for = StateCode.LA + reference = ( + "https://revenue.louisiana.gov/TaxForms/IT540WEB(2022)%20F%20D2.pdf", + "https://revenue.louisiana.gov/TaxForms/IT540iWEB(2022)D1.pdf", + ) + adds = "gov.states.la.tax.income.credits.refundable_p2.sources" diff --git a/fiscalsim_us/variables/gov/states/la/tax/income/credits/la_refundable_priority_4_credits.py b/fiscalsim_us/variables/gov/states/la/tax/income/credits/la_refundable_priority_4_credits.py new file mode 100644 index 000000000..2f7263d39 --- /dev/null +++ b/fiscalsim_us/variables/gov/states/la/tax/income/credits/la_refundable_priority_4_credits.py @@ -0,0 +1,22 @@ +from fiscalsim_us.model_api import * + + +class la_refundable_priority_4_credits(Variable): + """ + louisiana refundable priority 4 credits + Line 25 on Form IT-540. These credits include the + following with codes: + * 50F - Inventory Tax + * 51F - Ad Valorem Natural Gas + """ + + value_type = float + entity = TaxUnit + label = "Louisiana refundable priority 4 income tax credits" + unit = USD + definition_period = YEAR + defined_for = StateCode.LA + reference = ( + "https://revenue.louisiana.gov/TaxForms/IT540WEB(2022)%20F%20D2.pdf", + "https://revenue.louisiana.gov/TaxForms/IT540iWEB(2022)D1.pdf", + ) diff --git a/fiscalsim_us/variables/gov/states/la/tax/income/credits/la_refundable_school_ready.py b/fiscalsim_us/variables/gov/states/la/tax/income/credits/la_refundable_school_ready.py new file mode 100644 index 000000000..d2902fa4b --- /dev/null +++ b/fiscalsim_us/variables/gov/states/la/tax/income/credits/la_refundable_school_ready.py @@ -0,0 +1,19 @@ +from fiscalsim_us.model_api import * + + +class la_refundable_school_ready(Variable): + """ + louisiana refundable school readiness credit + Line 14 on Form IT-540. + """ + + value_type = float + entity = TaxUnit + label = "Louisiana refundable priority 4 income tax credits" + unit = USD + definition_period = YEAR + defined_for = StateCode.LA + reference = ( + "https://revenue.louisiana.gov/TaxForms/IT540WEB(2022)%20F%20D2.pdf", + "https://revenue.louisiana.gov/TaxForms/IT540iWEB(2022)D1.pdf", + ) diff --git a/fiscalsim_us/variables/gov/states/la/tax/income/la_exemptions.py b/fiscalsim_us/variables/gov/states/la/tax/income/la_exemptions.py new file mode 100644 index 000000000..5d3157870 --- /dev/null +++ b/fiscalsim_us/variables/gov/states/la/tax/income/la_exemptions.py @@ -0,0 +1,30 @@ +from fiscalsim_us.model_api import * + + +class la_exemptions(Variable): + value_type = float + entity = TaxUnit + label = "Louisiana exemptions amount" + unit = USD + definition_period = YEAR + reference = () + defined_for = StateCode.LA + + def formula(tax_unit, period, parameters): + p = parameters(period).gov.states.la.tax.income.exemptions + filing_status = tax_unit("filing_status", period) + statuses = filing_status.possible_values + single_separate = (filing_status == statuses.SINGLE) | ( + filing_status == statuses.SEPARATE + ) + + dependents = tax_unit("tax_unit_dependents", period) + aged_blind = tax_unit("aged_blind_count", period) + + personal_multiplier = where(single_separate, 1, 2) + n_extra = dependents + aged_blind + + return ( + p.personal_amount * personal_multiplier + + p.additional_amount * n_extra + ) diff --git a/fiscalsim_us/variables/gov/states/la/tax/income/la_income_tax.py b/fiscalsim_us/variables/gov/states/la/tax/income/la_income_tax.py new file mode 100644 index 000000000..0ff502c54 --- /dev/null +++ b/fiscalsim_us/variables/gov/states/la/tax/income/la_income_tax.py @@ -0,0 +1,16 @@ +from fiscalsim_us.model_api import * + + +class la_income_tax(Variable): + value_type = float + entity = TaxUnit + label = "Louisiana income tax" + unit = USD + definition_period = YEAR + reference = ( + "https://revenue.louisiana.gov/TaxForms/IT540WEB(2022)%20F%20D2.pdf", + "https://revenue.louisiana.gov/TaxForms/IT540iWEB(2022)D1.pdf", + ) + defined_for = StateCode.LA + adds = ["la_income_tax_before_refundable_credits"] + subtracts = ["la_refundable_credits"] diff --git a/fiscalsim_us/variables/gov/states/la/tax/income/la_income_tax_before_credits.py b/fiscalsim_us/variables/gov/states/la/tax/income/la_income_tax_before_credits.py new file mode 100644 index 000000000..6a99b854c --- /dev/null +++ b/fiscalsim_us/variables/gov/states/la/tax/income/la_income_tax_before_credits.py @@ -0,0 +1,36 @@ +from fiscalsim_us.model_api import * + + +class la_income_tax_before_credits(Variable): + value_type = float + entity = TaxUnit + label = "Louisiana income tax before credits" + unit = USD + definition_period = YEAR + reference = ( + "https://revenue.louisiana.gov/TaxForms/IT540WEB(2022)%20F%20D2.pdf", + "https://revenue.louisiana.gov/TaxForms/IT540iWEB(2022)D1.pdf", + ) + defined_for = StateCode.LA + + def formula(tax_unit, period, parameters): + filing_status = tax_unit("filing_status", period) + statuses = filing_status.possible_values + taxable_income = tax_unit("la_taxable_income", period) + p = parameters(period).gov.states.la.tax.income.rates + return select( + [ + filing_status == statuses.SINGLE, + filing_status == statuses.SEPARATE, + filing_status == statuses.JOINT, + filing_status == statuses.WIDOW, + filing_status == statuses.HEAD_OF_HOUSEHOLD, + ], + [ + p.single.calc(taxable_income), + p.separate.calc(taxable_income), + p.joint.calc(taxable_income), + p.widow.calc(taxable_income), + p.head_of_household.calc(taxable_income), + ], + ) diff --git a/fiscalsim_us/variables/gov/states/la/tax/income/la_income_tax_before_refundable_credits.py b/fiscalsim_us/variables/gov/states/la/tax/income/la_income_tax_before_refundable_credits.py new file mode 100644 index 000000000..13b94418c --- /dev/null +++ b/fiscalsim_us/variables/gov/states/la/tax/income/la_income_tax_before_refundable_credits.py @@ -0,0 +1,19 @@ +from fiscalsim_us.model_api import * + + +class la_income_tax_before_refundable_credits(Variable): + value_type = float + entity = TaxUnit + label = "Louisiana income tax before refundable credits" + unit = USD + definition_period = YEAR + reference = ( + "https://revenue.louisiana.gov/TaxForms/IT540WEB(2022)%20F%20D2.pdf", + "https://revenue.louisiana.gov/TaxForms/IT540iWEB(2022)D1.pdf", + ) + defined_for = StateCode.LA + + def formula(tax_unit, period, parameters): + itax_before_credits = tax_unit("la_income_tax_before_credits", period) + nonrefundable_credits = tax_unit("la_nonrefundable_credits", period) + return max_(0, itax_before_credits - nonrefundable_credits) diff --git a/fiscalsim_us/variables/gov/states/la/tax/income/la_taxable_income.py b/fiscalsim_us/variables/gov/states/la/tax/income/la_taxable_income.py new file mode 100644 index 000000000..e4ac9f686 --- /dev/null +++ b/fiscalsim_us/variables/gov/states/la/tax/income/la_taxable_income.py @@ -0,0 +1,34 @@ +from fiscalsim_us.model_api import * + + +class la_taxable_income(Variable): + value_type = float + entity = TaxUnit + label = "Louisiana taxable income" + unit = USD + definition_period = YEAR + reference = ( + "https://revenue.louisiana.gov/TaxForms/IT540WEB(2022)%20F%20D2.pdf", + "https://revenue.louisiana.gov/TaxForms/IT540iWEB(2022)D1.pdf", + ) + defined_for = StateCode.LA + + def formula(tax_unit, period, parameters): + ADDS = ["adjusted_gross_income", "la_total_additions"] + SUBTRACTS = ["la_total_subtractions", "la_exemptions"] + + la_agi = add(tax_unit, period, ADDS) - add(tax_unit, period, SUBTRACTS) + + # LA allows tax units to subtract from income any portion of federal + # medical expense deductions that is more than the standard deduction + filing_status = tax_unit("filing_status", period) + itemizing = tax_unit("tax_unit_itemizes", period) + std_deduct = parameters(period).gov.irs.deductions.standard.amount[ + filing_status + ] + medical_deduct = tax_unit("medical_expense_deduction", period) + + excess_fed_deduct = max_(0, medical_deduct - std_deduct) + + # return max_(0, la_agi - excess_fed_deduct) + return where(itemizing, la_agi - excess_fed_deduct, la_agi) diff --git a/fiscalsim_us/variables/gov/states/tax/income/state_income_tax.py b/fiscalsim_us/variables/gov/states/tax/income/state_income_tax.py index 7673a009d..b6f1facfb 100644 --- a/fiscalsim_us/variables/gov/states/tax/income/state_income_tax.py +++ b/fiscalsim_us/variables/gov/states/tax/income/state_income_tax.py @@ -13,6 +13,7 @@ class state_income_tax(Variable): # "ia_income_tax", --- activating will cause circular logic errors "il_income_tax", "ks_income_tax", + "la_income_tax", "ky_income_tax", "ma_income_tax", "md_income_tax", diff --git a/fiscalsim_us/variables/gov/states/tax/income/state_income_tax_before_refundable_credits.py b/fiscalsim_us/variables/gov/states/tax/income/state_income_tax_before_refundable_credits.py index 3d01baf59..bb915a844 100644 --- a/fiscalsim_us/variables/gov/states/tax/income/state_income_tax_before_refundable_credits.py +++ b/fiscalsim_us/variables/gov/states/tax/income/state_income_tax_before_refundable_credits.py @@ -11,6 +11,7 @@ class state_income_tax_before_refundable_credits(Variable): "ia_income_tax_before_refundable_credits", "il_total_tax", "ks_income_tax_before_refundable_credits", + "la_income_tax_before_refundable_credits", "ma_income_tax_before_refundable_credits", "md_income_tax_before_refundable_credits", "mn_income_tax_before_refundable_credits", diff --git a/fiscalsim_us/variables/household/income/household/household_refundable_tax_credits.py b/fiscalsim_us/variables/household/income/household/household_refundable_tax_credits.py index aebd4509a..5108ca523 100644 --- a/fiscalsim_us/variables/household/income/household/household_refundable_tax_credits.py +++ b/fiscalsim_us/variables/household/income/household/household_refundable_tax_credits.py @@ -12,6 +12,7 @@ class household_refundable_tax_credits(Variable): "ca_refundable_credits", # California. "il_refundable_credits", # Illinois. "ks_refundable_credits", # Kansas. + "la_refundable_credits", # Louisianna "ma_refundable_credits", # Massachusetts. "md_refundable_credits", # Maryland. "mn_refundable_credits", # Minnesota. diff --git a/fiscalsim_us/variables/household/income/household/household_tax_before_refundable_credits.py b/fiscalsim_us/variables/household/income/household/household_tax_before_refundable_credits.py index dbedb381e..48d60898d 100644 --- a/fiscalsim_us/variables/household/income/household/household_tax_before_refundable_credits.py +++ b/fiscalsim_us/variables/household/income/household/household_tax_before_refundable_credits.py @@ -15,6 +15,7 @@ class household_tax_before_refundable_credits(Variable): "ca_income_tax_before_refundable_credits", "il_total_tax", "ks_income_tax_before_refundable_credits", + "la_income_tax_before_refundable_credits", "ma_income_tax_before_refundable_credits", "md_income_tax_before_refundable_credits", "mn_income_tax_before_refundable_credits", diff --git a/setup.py b/setup.py index 427d9b7c1..2098676da 100644 --- a/setup.py +++ b/setup.py @@ -7,7 +7,7 @@ setup( name="fiscalsim-us", - version="0.1.3", + version="0.1.4", author="Center for Growth and Opportunity at Utah State University (CGO)", author_email="fiscalsim@thecgo.org", long_description=readme,