diff --git a/CHANGELOG.md b/CHANGELOG.md index cca534fd9..916f76478 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,14 @@ 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.3.3] - 2024-11-07 23:30:00 + +### Added + +- Updated and fixed Kentucky, Maryland, and Vermont parameters, variables and tests. +- Removed `tools/taxcalc/` directory + ## [0.3.2] - 2024-10-10 3:00:00 ### Added @@ -231,6 +239,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - First prototype version based off of openfisca-us and tax-calculator. +[0.3.3]: https://github.com/TheCGO/fiscalsim-us/compare/v0.3.2...v0.3.3 [0.3.2]: https://github.com/TheCGO/fiscalsim-us/compare/v0.3.1...v0.3.2 [0.3.1]: https://github.com/TheCGO/fiscalsim-us/compare/v0.3.0...v0.3.1 [0.3.0]: https://github.com/TheCGO/fiscalsim-us/compare/v0.2.9...v0.3.0 diff --git a/changelog.yaml b/changelog.yaml index 4b64a1f1c..e795f5c73 100644 --- a/changelog.yaml +++ b/changelog.yaml @@ -208,3 +208,9 @@ added: - Updated 4 files to remove type errors. date: 2024-10-10 3:00:00 +- bump: patch + changes: + added: + - Updated and fixed Kentucky, Maryland, and Vermont parameters, variables and tests. + - Removed `tools/taxcalc/` directory + date: 2024-11-07 23:30:00 diff --git a/fiscalsim_us/parameters/calibration/gov/cbo/income_by_source.yaml b/fiscalsim_us/parameters/calibration/gov/cbo/income_by_source.yaml index 5dec4182b..41b051c3c 100644 --- a/fiscalsim_us/parameters/calibration/gov/cbo/income_by_source.yaml +++ b/fiscalsim_us/parameters/calibration/gov/cbo/income_by_source.yaml @@ -2,172 +2,189 @@ description: Historical data and projections of detailed adjusted gross income ( metadata: unit: currency-USD reference: - - title: The Budget and Economic Outlook 2023 to 2033 | Congressional Budget Office - # Revenue Projections, by Category > Feb 2023 > Sheet 3.Individual Income Tax Details - href: https://www.cbo.gov/publication/58848 + - title: Revenue Projections, by Category | Congressional Budget Office | June 2024 + # Source: https://www.cbo.gov/data/budget-economic-data + # Sheet 3.Individual Income Tax Details + href: https://www.cbo.gov/system/files/2024-06/51138-2024-06-Revenue.xlsx adjusted_gross_income: metadata: label: Total AGI values: + 2015-01-01: + value: 9_033_840_000_000 + metadata: + reference: + - title: Tax Foundation + href: https://taxfoundation.org/data/all/federal/summary-latest-federal-income-tax-data-2015-update/ 2019-01-01: 11_962_000_000_000 2020-01-01: 12_650_000_000_000 - 2021-01-01: 14_758_000_000_000 - 2022-01-01: 15_104_000_000_000 - 2023-01-01: 15_514_000_000_000 - 2024-01-01: 16_081_000_000_000 - 2025-01-01: 16_770_000_000_000 - 2026-01-01: 17_463_000_000_000 - 2027-01-01: 18_187_000_000_000 - 2028-01-01: 18_858_000_000_000 - 2029-01-01: 19_496_000_000_000 - 2030-01-01: 20_233_000_000_000 - 2031-01-01: 20_983_000_000_000 - 2032-01-01: 21_767_000_000_000 - 2033-01-01: 22_564_000_000_000 + 2021-01-01: 14_791_339_000_000 + 2022-01-01: 14_614_252_000_000 + 2023-01-01: 15_605_798_000_000 + 2024-01-01: 16_626_359_000_000 + 2025-01-01: 17_326_481_000_000 + 2026-01-01: 17_908_425_000_000 + 2027-01-01: 18_557_657_000_000 + 2028-01-01: 19_175_991_000_000 + 2029-01-01: 19_791_818_000_000 + 2030-01-01: 20_506_362_000_000 + 2031-01-01: 21_252_852_000_000 + 2032-01-01: 22_028_907_000_000 + 2033-01-01: 22_837_546_000_000 + 2034-01-01: 23_693_875_000_000 employment_income: metadata: label: Total employment income values: 2019-01-01: 8_273_000_000_000 2020-01-01: 8_414_000_000_000 - 2021-01-01: 9_165_000_000_000 - 2022-01-01: 9_944_000_000_000 - 2023-01-01: 10_435_000_000_000 - 2024-01-01: 10_931_000_000_000 - 2025-01-01: 11_466_000_000_000 - 2026-01-01: 11_963_000_000_000 - 2027-01-01: 12_421_000_000_000 - 2028-01-01: 12_898_000_000_000 - 2029-01-01: 13_396_000_000_000 - 2030-01-01: 13_905_000_000_000 - 2031-01-01: 14_424_000_000_000 - 2032-01-01: 14_953_000_000_000 - 2033-01-01: 15_488_000_000_000 + 2021-01-01: 9_022_400_000_000 + 2022-01-01: 9_730_400_000_000 + 2023-01-01: 10_347_700_000_000 + 2024-01-01: 10_926_900_000_000 + 2025-01-01: 11_422_200_000_000 + 2026-01-01: 11_894_400_000_000 + 2027-01-01: 12_359_200_000_000 + 2028-01-01: 12_840_500_000_000 + 2029-01-01: 13_341_300_000_000 + 2030-01-01: 13_853_900_000_000 + 2031-01-01: 14_379_200_000_000 + 2032-01-01: 14_915_600_000_000 + 2033-01-01: 15_466_500_000_000 + 2034-01-01: 16_035_900_000_000 taxable_interest_and_ordinary_dividends: # excludes qualified_dividend_income 2019-01-01: 237_000_000_000 2020-01-01: 241_000_000_000 - 2021-01-01: 243_000_000_000 - 2022-01-01: 257_000_000_000 - 2023-01-01: 305_000_000_000 - 2024-01-01: 330_000_000_000 - 2025-01-01: 338_000_000_000 - 2026-01-01: 360_000_000_000 - 2027-01-01: 382_000_000_000 - 2028-01-01: 400_000_000_000 - 2029-01-01: 416_000_000_000 - 2030-01-01: 422_000_000_000 - 2031-01-01: 428_000_000_000 - 2032-01-01: 436_000_000_000 - 2033-01-01: 445_000_000_000 + 2021-01-01: 194_600_000_000 + 2022-01-01: 216_400_000_000 + 2023-01-01: 237_400_000_000 + 2024-01-01: 279_100_000_000 + 2025-01-01: 323_600_000_000 + 2026-01-01: 346_000_000_000 + 2027-01-01: 356_400_000_000 + 2028-01-01: 372_800_000_000 + 2029-01-01: 389_200_000_000 + 2030-01-01: 397_800_000_000 + 2031-01-01: 408_100_000_000 + 2032-01-01: 421_100_000_000 + 2033-01-01: 430_900_000_000 + 2034-01-01: 442_300_000_000 qualified_dividend_income: 2019-01-01: 248_000_000_000 2020-01-01: 246_000_000_000 - 2021-01-01: 262_000_000_000 - 2022-01-01: 276_000_000_000 - 2023-01-01: 282_000_000_000 - 2024-01-01: 281_000_000_000 - 2025-01-01: 286_000_000_000 - 2026-01-01: 297_000_000_000 - 2027-01-01: 310_000_000_000 - 2028-01-01: 323_000_000_000 - 2029-01-01: 336_000_000_000 - 2030-01-01: 357_000_000_000 - 2031-01-01: 379_000_000_000 - 2032-01-01: 400_000_000_000 - 2033-01-01: 420_000_000_000 + 2021-01-01: 295_900_000_000 + 2022-01-01: 314_300_000_000 + 2023-01-01: 320_500_000_000 + 2024-01-01: 334_800_000_000 + 2025-01-01: 351_600_000_000 + 2026-01-01: 364_800_000_000 + 2027-01-01: 375_400_000_000 + 2028-01-01: 387_200_000_000 + 2029-01-01: 402_200_000_000 + 2030-01-01: 428_100_000_000 + 2031-01-01: 453_900_000_000 + 2032-01-01: 479_000_000_000 + 2033-01-01: 503_400_000_000 + 2034-01-01: 527_200_000_000 net_capital_gain: 2019-01-01: 884_000_000_000 2020-01-01: 1_152_000_000_000 - 2021-01-01: 2_037_000_000_000 - 2022-01-01: 1_698_000_000_000 - 2023-01-01: 1_485_000_000_000 - 2024-01-01: 1_370_000_000_000 - 2025-01-01: 1_315_000_000_000 - 2026-01-01: 1_288_000_000_000 - 2027-01-01: 1_285_000_000_000 - 2028-01-01: 1_298_000_000_000 - 2029-01-01: 1_322_000_000_000 - 2030-01-01: 1_356_000_000_000 - 2031-01-01: 1_397_000_000_000 - 2032-01-01: 1_442_000_000_000 - 2033-01-01: 1_491_000_000_000 + 2021-01-01: 2_107_100_000_000 + 2022-01-01: 1_287_200_000_000 + 2023-01-01: 1_398_000_000_000 + 2024-01-01: 1_472_000_000_000 + 2025-01-01: 1_430_400_000_000 + 2026-01-01: 1_377_600_000_000 + 2027-01-01: 1_364_900_000_000 + 2028-01-01: 1_376_600_000_000 + 2029-01-01: 1_406_400_000_000 + 2030-01-01: 1_448_000_000_000 + 2031-01-01: 1_495_500_000_000 + 2032-01-01: 1_548_600_000_000 + 2033-01-01: 1_605_300_000_000 + 2034-01-01: 1_665_000_000_000 self_employment_income: 2019-01-01: 1_103_000_000_000 2020-01-01: 1_170_000_000_000 - 2021-01-01: 1_302_000_000_000 - 2022-01-01: 1_395_000_000_000 - 2023-01-01: 1_408_000_000_000 - 2024-01-01: 1_470_000_000_000 - 2025-01-01: 1_572_000_000_000 - 2026-01-01: 1_667_000_000_000 - 2027-01-01: 1_754_000_000_000 - 2028-01-01: 1_800_000_000_000 - 2029-01-01: 1_851_000_000_000 - 2030-01-01: 1_909_000_000_000 - 2031-01-01: 1_971_000_000_000 - 2032-01-01: 2_038_000_000_000 - 2033-01-01: 2_107_000_000_000 + 2021-01-01: 1_472_900_000_000 + 2022-01-01: 1_557_500_000_000 + 2023-01-01: 1_611_900_000_000 + 2024-01-01: 1_737_500_000_000 + 2025-01-01: 1_827_600_000_000 + 2026-01-01: 1_883_100_000_000 + 2027-01-01: 1_936_500_000_000 + 2028-01-01: 1_956_700_000_000 + 2029-01-01: 1_989_600_000_000 + 2030-01-01: 2_033_100_000_000 + 2031-01-01: 2_083_800_000_000 + 2032-01-01: 2_136_400_000_000 + 2033-01-01: 2_189_100_000_000 + 2034-01-01: 2_269_500_000_000 taxable_pension_income: 2019-01-01: 1_125_000_000_000 2020-01-01: 1_127_000_000_000 - 2021-01-01: 1_336_000_000_000 - 2022-01-01: 1_333_000_000_000 - 2023-01-01: 1_363_000_000_000 - 2024-01-01: 1_423_000_000_000 - 2025-01-01: 1_484_000_000_000 - 2026-01-01: 1_551_000_000_000 - 2027-01-01: 1_618_000_000_000 - 2028-01-01: 1_687_000_000_000 - 2029-01-01: 1_757_000_000_000 - 2030-01-01: 1_827_000_000_000 - 2031-01-01: 1_897_000_000_000 - 2032-01-01: 1_974_000_000_000 - 2033-01-01: 2_053_000_000_000 + 2021-01-01: 1_267_900_000_000 + 2022-01-01: 1_248_700_000_000 + 2023-01-01: 1_380_300_000_000 + 2024-01-01: 1_514_400_000_000 + 2025-01-01: 1_574_300_000_000 + 2026-01-01: 1_620_700_000_000 + 2027-01-01: 1_668_000_000_000 + 2028-01-01: 1_713_700_000_000 + 2029-01-01: 1_758_700_000_000 + 2030-01-01: 1_805_300_000_000 + 2031-01-01: 1_857_400_000_000 + 2032-01-01: 1_915_000_000_000 + 2033-01-01: 1_985_900_000_000 + 2034-01-01: 2_056_800_000_000 taxable_social_security: 2019-01-01: 361_000_000_000 2020-01-01: 376_000_000_000 - 2021-01-01: 422_000_000_000 - 2022-01-01: 457_000_000_000 - 2023-01-01: 517_000_000_000 - 2024-01-01: 569_000_000_000 - 2025-01-01: 611_000_000_000 - 2026-01-01: 652_000_000_000 - 2027-01-01: 695_000_000_000 - 2028-01-01: 743_000_000_000 - 2029-01-01: 795_000_000_000 - 2030-01-01: 848_000_000_000 - 2031-01-01: 897_000_000_000 - 2032-01-01: 949_000_000_000 - 2033-01-01: 1_003_000_000_000 + 2021-01-01: 413_700_000_000 + 2022-01-01: 441_100_000_000 + 2023-01-01: 509_000_000_000 + 2024-01-01: 570_700_000_000 + 2025-01-01: 618_600_000_000 + 2026-01-01: 656_900_000_000 + 2027-01-01: 693_900_000_000 + 2028-01-01: 735_500_000_000 + 2029-01-01: 782_300_000_000 + 2030-01-01: 831_000_000_000 + 2031-01-01: 876_800_000_000 + 2032-01-01: 927_900_000_000 + 2033-01-01: 985_100_000_000 + 2034-01-01: 1_040_700_000_000 irs_other_income: 2019-01-01: -125_000_000_000 2020-01-01: 62_000_000_000 - 2021-01-01: 136_000_000_000 - 2022-01-01: -96_000_000_000 - 2023-01-01: -110_000_000_000 - 2024-01-01: -113_000_000_000 - 2025-01-01: -116_000_000_000 - 2026-01-01: -118_000_000_000 - 2027-01-01: -74_000_000_000 - 2028-01-01: -78_000_000_000 - 2029-01-01: -156_000_000_000 - 2030-01-01: -163_000_000_000 - 2031-01-01: -169_000_000_000 - 2032-01-01: -176_000_000_000 - 2033-01-01: -185_000_000_000 + 2021-01-01: 155_900_000_000 + 2022-01-01: -34_500_000_000 + 2023-01-01: -43_700_000_000 + 2024-01-01: -42_000_000_000 + 2025-01-01: -46_100_000_000 + 2026-01-01: -50_300_000_000 + 2027-01-01: -6_100_000_000 + 2028-01-01: -9_700_000_000 + 2029-01-01: -72_800_000_000 + 2030-01-01: -76_200_000_000 + 2031-01-01: -80_000_000_000 + 2032-01-01: -83_700_000_000 + 2033-01-01: -88_500_000_000 + 2034-01-01: -94_200_000_000 above_the_line_deductions: 2019-01-01: 145_000_000_000 2020-01-01: 139_000_000_000 - 2021-01-01: 146_000_000_000 - 2022-01-01: 160_000_000_000 - 2023-01-01: 170_000_000_000 - 2024-01-01: 179_000_000_000 - 2025-01-01: 187_000_000_000 - 2026-01-01: 197_000_000_000 - 2027-01-01: 204_000_000_000 - 2028-01-01: 213_000_000_000 - 2029-01-01: 221_000_000_000 - 2030-01-01: 230_000_000_000 - 2031-01-01: 239_000_000_000 - 2032-01-01: 248_000_000_000 - 2033-01-01: 258_000_000_000 + 2021-01-01: 139_000_000_000 + 2022-01-01: 147_000_000_000 + 2023-01-01: 156_000_000_000 + 2024-01-01: 167_000_000_000 + 2025-01-01: 176_000_000_000 + 2026-01-01: 185_000_000_000 + 2027-01-01: 192_000_000_000 + 2028-01-01: 198_000_000_000 + 2029-01-01: 206_000_000_000 + 2030-01-01: 214_000_000_000 + 2031-01-01: 223_000_000_000 + 2032-01-01: 232_000_000_000 + 2033-01-01: 241_000_000_000 + 2034-01-01: 250_000_000_000 diff --git a/fiscalsim_us/parameters/gov/states/ky/index.yaml b/fiscalsim_us/parameters/gov/states/ky/index.yaml deleted file mode 100644 index 2852e302a..000000000 --- a/fiscalsim_us/parameters/gov/states/ky/index.yaml +++ /dev/null @@ -1,4 +0,0 @@ -metadata: - propagate_metadata_to_children: true - economy: false - household: false diff --git a/fiscalsim_us/parameters/gov/states/ky/tax/income/credits/dependent_care_service/match.yaml b/fiscalsim_us/parameters/gov/states/ky/tax/income/credits/dependent_care_service/match.yaml index 14da079be..f2de9ea06 100644 --- a/fiscalsim_us/parameters/gov/states/ky/tax/income/credits/dependent_care_service/match.yaml +++ b/fiscalsim_us/parameters/gov/states/ky/tax/income/credits/dependent_care_service/match.yaml @@ -10,3 +10,5 @@ metadata: href: https://apps.legislature.ky.gov/law/statutes/statute.aspx?id=29058 - title: 2022 KENTUCKY Form 740 href: https://revenue.ky.gov/Forms/Form%20740%205-9-23.pdf#page=2 + - title: 2023 Kentucky Individual Income Tax Forms + href: https://revenue.ky.gov/Forms/740%20Packet%20Instructions%202023.pdf#page=9 diff --git a/fiscalsim_us/parameters/gov/states/ky/tax/income/credits/family_size/family_size_cap.yaml b/fiscalsim_us/parameters/gov/states/ky/tax/income/credits/family_size/family_size_cap.yaml index 1f624f5fc..58788fcb3 100644 --- a/fiscalsim_us/parameters/gov/states/ky/tax/income/credits/family_size/family_size_cap.yaml +++ b/fiscalsim_us/parameters/gov/states/ky/tax/income/credits/family_size/family_size_cap.yaml @@ -10,3 +10,5 @@ metadata: href: https://apps.legislature.ky.gov/law/statutes/statute.aspx?id=49188 - title: 2022 Kentucky individual tax credit schedule, ITC href: https://revenue.ky.gov/Forms/Schedule%20ITC%202022.pdf#page=2 + - title: 2023 Kentucky individual tax credit schedule, ITC + href: https://revenue.ky.gov/Forms/Schedule%20ITC%202023.pdf#page=2 diff --git a/fiscalsim_us/parameters/gov/states/ky/tax/income/credits/family_size/rate.yaml b/fiscalsim_us/parameters/gov/states/ky/tax/income/credits/family_size/rate.yaml index 8f72aa2a2..fa068ce77 100644 --- a/fiscalsim_us/parameters/gov/states/ky/tax/income/credits/family_size/rate.yaml +++ b/fiscalsim_us/parameters/gov/states/ky/tax/income/credits/family_size/rate.yaml @@ -9,6 +9,8 @@ metadata: href: https://apps.legislature.ky.gov/law/statutes/statute.aspx?id=49188 - title: 2022 Kentucky individual tax credit schedule, ITC href: https://revenue.ky.gov/Forms/Schedule%20ITC%202022.pdf#page=2 + - title: 2023 Kentucky individual tax credit schedule, ITC + href: https://revenue.ky.gov/Forms/Schedule%20ITC%202023.pdf#page=2 brackets: - threshold: diff --git a/fiscalsim_us/parameters/gov/states/ky/tax/income/credits/non_refundable.yaml b/fiscalsim_us/parameters/gov/states/ky/tax/income/credits/non_refundable.yaml index 72e4da45d..174e03fe5 100644 --- a/fiscalsim_us/parameters/gov/states/ky/tax/income/credits/non_refundable.yaml +++ b/fiscalsim_us/parameters/gov/states/ky/tax/income/credits/non_refundable.yaml @@ -1,7 +1,11 @@ -description: Kentucky non-refundable tax credits. +description: Kentucky provides the following non-refundable tax credits. metadata: unit: list label: Kentucky non-refundable credits + period: year values: 2021-01-01: - ky_family_size_tax_credit + - ky_tuition_tax_credit + - ky_personal_tax_credits + - ky_cdcc diff --git a/fiscalsim_us/parameters/gov/states/ky/tax/income/credits/personal/amount/aged.yaml b/fiscalsim_us/parameters/gov/states/ky/tax/income/credits/personal/amount/aged.yaml new file mode 100644 index 000000000..eec5ac32c --- /dev/null +++ b/fiscalsim_us/parameters/gov/states/ky/tax/income/credits/personal/amount/aged.yaml @@ -0,0 +1,25 @@ +description: Kentucky provides this aged personal tax credits amount, depending on filers age. +metadata: + type: single_amount + threshold_unit: year + amount_unit: currency-USD + label: Kentucky personal tax credits aged amount + period: year + reference: + - title: Schedule ITC Section B 2023 + href: https://revenue.ky.gov/Forms/Schedule%20ITC%202023.pdf#page=2 + - title: Schedule ITC Section B 2022 + href: https://revenue.ky.gov/Forms/Schedule%20ITC%202022.pdf#page=2 + - title: Schedule ITC Section B 2021 + href: https://revenue.ky.gov/Forms/Schedule%20ITC-2021.pdf#page=2 + - title: Kentucky Revised Statutes Chapter 141.020 (3)(a) 4. + href: https://apps.legislature.ky.gov/law/statutes/statute.aspx?id=53500#page=4 +brackets: + - threshold: + 2021-01-01: 0 + amount: + 2021-01-01: 0 + - threshold: + 2021-01-01: 65 + amount: + 2021-01-01: 40 diff --git a/fiscalsim_us/parameters/gov/states/ky/tax/income/credits/personal/amount/blind.yaml b/fiscalsim_us/parameters/gov/states/ky/tax/income/credits/personal/amount/blind.yaml new file mode 100644 index 000000000..7c20caf6a --- /dev/null +++ b/fiscalsim_us/parameters/gov/states/ky/tax/income/credits/personal/amount/blind.yaml @@ -0,0 +1,16 @@ +description: Kentucky provides this personal tax credit for blind filers. +values: + 2021-01-01: 40 +metadata: + unit: year + period: year + label: Kentucky personal tax credits blind amount + reference: + - title: Schedule ITC Section B 2023 + href: https://revenue.ky.gov/Forms/Schedule%20ITC%202023.pdf#page=2 + - title: Schedule ITC Section B 2022 + href: https://revenue.ky.gov/Forms/Schedule%20ITC%202022.pdf#page=2 + - title: Schedule ITC Section B 2021 + href: https://revenue.ky.gov/Forms/Schedule%20ITC-2021.pdf#page=2 + - title: Kentucky Revised Statutes Chapter 141.020 (3)(a) 6. + href: https://apps.legislature.ky.gov/law/statutes/statute.aspx?id=53500#page=4 diff --git a/fiscalsim_us/parameters/gov/states/ky/tax/income/credits/personal/amount/military.yaml b/fiscalsim_us/parameters/gov/states/ky/tax/income/credits/personal/amount/military.yaml new file mode 100644 index 000000000..d63f5ec72 --- /dev/null +++ b/fiscalsim_us/parameters/gov/states/ky/tax/income/credits/personal/amount/military.yaml @@ -0,0 +1,16 @@ +description: Kentucky provides this personal tax credit for filers who served in the military. +values: + 2021-01-01: 20 +metadata: + unit: year + period: year + label: Kentucky personal tax credits military service amount + reference: + - title: Schedule ITC Section B 2023 + href: https://revenue.ky.gov/Forms/Schedule%20ITC%202023.pdf#page=2 + - title: Schedule ITC Section B 2022 + href: https://revenue.ky.gov/Forms/Schedule%20ITC%202022.pdf#page=2 + - title: Schedule ITC Section B 2021 + href: https://revenue.ky.gov/Forms/Schedule%20ITC-2021.pdf#page=2 + - title: Kentucky Revised Statutes Chapter 141.020 (3)(a) 8. + href: https://apps.legislature.ky.gov/law/statutes/statute.aspx?id=53500#page=4 diff --git a/fiscalsim_us/parameters/gov/states/ky/tax/income/credits/tuition_tax/rate.yaml b/fiscalsim_us/parameters/gov/states/ky/tax/income/credits/tuition_tax/rate.yaml new file mode 100644 index 000000000..ed2425049 --- /dev/null +++ b/fiscalsim_us/parameters/gov/states/ky/tax/income/credits/tuition_tax/rate.yaml @@ -0,0 +1,13 @@ +description: Kentucky matches this fraction of the American Opportunity and the Lifetime Learning credits, for undergraduate education at Kentucky institutions. +values: + 2005-01-01: 0.25 +metadata: + unit: /1 + label: Kentucky tuition tax credit rate + reference: + - title: Kentucky Revised Statutes Chapter 141.069 (2) + href: https://apps.legislature.ky.gov/law/statutes/statute.aspx?id=29060 + - title: 2022 KENTUCKY Form 8863-K + href: https://revenue.ky.gov/Forms/Form%208863-K%202022.pdf#page=2 + - title: 2023 KENTUCKY Form 8863-K + href: https://revenue.ky.gov/Forms/Form%208863-K%202023.pdf#page=2 diff --git a/fiscalsim_us/parameters/gov/states/ky/tax/income/deductions/standard.yaml b/fiscalsim_us/parameters/gov/states/ky/tax/income/deductions/standard.yaml index 7c9141437..f1a2a2ebb 100644 --- a/fiscalsim_us/parameters/gov/states/ky/tax/income/deductions/standard.yaml +++ b/fiscalsim_us/parameters/gov/states/ky/tax/income/deductions/standard.yaml @@ -2,7 +2,11 @@ description: Kentucky provides this standard deduction amount. values: 2021-01-01: 2_690 2022-01-01: 2_770 + 2023-01-01: 2_980 + 2024-01-01: 3_160 + 2025-01-01: 3_270 metadata: + uprating: gov.irs.uprating # legal code does not include any rounding language label: Kentucky standard deduction amount period: year unit: currency-USD @@ -10,7 +14,13 @@ metadata: # Legal code specifies $1,700 in 1999, CPI-inflated since. - title: Kentucky Revised Statutes, KRS Chapter 141.081 Optional standard deduction for individuals - Exception. href: https://apps.legislature.ky.gov/law/statutes/statute.aspx?id=29067 - - title: 2022 KENTUCKY Form 2022 + - title: 2023 KENTUCKY Form 740 + href: https://revenue.ky.gov/Forms/740%20Packet%20Instructions%202023.pdf#page=13 + - title: 2022 KENTUCKY Form 740 href: https://revenue.ky.gov/Forms/Form%20740%205-9-23.pdf - title: 2021 KENTUCKY Form 740 href: https://www.taxformfinder.org/forms/2021/2021-kentucky-form-740.pdf + - title: 2024 KENTUCKY Standard Deduction Press Release + href: https://revenue.ky.gov/News/Pages/DOR-Announces-Updates-to-Individual-Income-Tax-for-2024-Tax-Year.aspx + - title: 2025 KENTUCKY Standard Deduction Press Release + href: https://revenue.ky.gov/News/Pages/Kentucky-DOR-Announces-2025-Standard-Deduction.aspx diff --git a/fiscalsim_us/parameters/gov/states/ky/tax/income/exclusions/pension_income/other_retirement_income_sources.yaml b/fiscalsim_us/parameters/gov/states/ky/tax/income/exclusions/pension_income/other_retirement_income_sources.yaml new file mode 100644 index 000000000..79e7d958d --- /dev/null +++ b/fiscalsim_us/parameters/gov/states/ky/tax/income/exclusions/pension_income/other_retirement_income_sources.yaml @@ -0,0 +1,16 @@ +description: Kentucky counts these income sources as other retirement income for Part II of the Schedule P pension income exclusion. +metadata: + unit: list + period: year + label: Kentucky other retirement income sources + reference: + - title: Kentucky Revised Statutes 141.019 (1)(g) + href: https://law.justia.com/codes/kentucky/2022/chapter-141/section-141-019/ # (1)(g) + - title: 2022 Kentucky Pension Income Exclusion (Schedule P) + href: https://revenue.ky.gov/Forms/Schedule%20P%202022.pdf#page=1 + - title: 2023 Kentucky Pension Income Exclusion (Schedule P) + href: https://revenue.ky.gov/Forms/Schedule%20P%202023.pdf#page=1 +values: + 1999-01-01: + - taxable_ira_distributions + - taxable_401k_distributions diff --git a/fiscalsim_us/parameters/gov/states/ky/tax/income/exclusions/pension_income/threshold.yaml b/fiscalsim_us/parameters/gov/states/ky/tax/income/exclusions/pension_income/threshold.yaml new file mode 100644 index 000000000..11189aa9b --- /dev/null +++ b/fiscalsim_us/parameters/gov/states/ky/tax/income/exclusions/pension_income/threshold.yaml @@ -0,0 +1,36 @@ +description: Kentucky caps the pension income at this amount for most individuals. +values: + 1999-01-01: 35_700 + 2000-01-01: 36_414 + 2001-01-01: 37_500 + 2002-01-01: 38_775 + 2003-01-01: 39_400 + 2004-01-01: 40_200 + 2005-01-01: 41_110 + 2018-01-01: 31_110 +metadata: + type: currency-USD + label: Kentucky income tax rate + reference: + - title: Kentucky Pension Income Schedule P (1999) + href: https://revenue.ky.gov/Forms/1999_42a740p.pdf + - title: Kentucky Pension Income Schedule P (2000) + href: https://revenue.ky.gov/Forms/2000_42a740p.pdf + - title: Kentucky Pension Income Schedule P (2001) + href: https://revenue.ky.gov/Forms/2001_42A740P.pdf + - title: Kentucky Pension Income Schedule P (2002) + href: https://revenue.ky.gov/Forms/2002_42A740P.pdf + - title: Kentucky Pension Income Schedule P (2003) + href: https://revenue.ky.gov/Forms/2003_42A740P.pdf + - title: Kentucky Pension Income Schedule P (2004) + href: https://revenue.ky.gov/Forms/2004_42A740P.pdf + - title: Kentucky Pension Income Schedule P (2005) + href: https://revenue.ky.gov/Forms/2005_42A740P.pdf + - title: Kentucky Pension Income Schedule P (2018) + href: https://revenue.ky.gov/Forms/Schedule%20P%202018.pdf + - title: Kentucky Pension Income Schedule P (2022) + href: https://revenue.ky.gov/Forms/Schedule%20P%202022.pdf#page=1 + - title: Kentucky Pension Income Schedule P (2023) + href: https://revenue.ky.gov/Forms/Schedule%20P%202023.pdf#page=1 + - title: Kentucky Revised Statutes 141.019 (1)(g) + href: https://law.justia.com/codes/kentucky/2022/chapter-141/section-141-019/ # (1)(g) diff --git a/fiscalsim_us/parameters/gov/states/ky/tax/income/rate.yaml b/fiscalsim_us/parameters/gov/states/ky/tax/income/rate.yaml index 6c0720f85..290b3db33 100644 --- a/fiscalsim_us/parameters/gov/states/ky/tax/income/rate.yaml +++ b/fiscalsim_us/parameters/gov/states/ky/tax/income/rate.yaml @@ -2,15 +2,18 @@ description: Kentucky taxes individual income at this rate. values: 2021-01-01: 0.05 2023-01-01: 0.045 + 2024-01-01: 0.04 metadata: unit: /1 label: Kentucky income tax rate reference: - - title: Kentucky Individual Income Tax Return Residents Only - Form 740 - Line 12 + - title: 2021 Kentucky Individual Income Tax Return Residents Only - Form 740 - Line 12 href: https://revenue.ky.gov/Forms/Form%20740-2021.pdf#page=1 - - title: Kentucky Department of Revenue + - title: 2023 Kentucky Department of Revenue href: https://revenue.ky.gov/News/Pages/DOR-Announces-Updates-to-Individual-Income-Tax-for-2023-Tax-Year.aspx - - title: Kentucky Individual Income Tax Return Residents Only - Form 740 - href: https://revenue.ky.gov/Forms/Form%20740%205-9-23.pdf - - title: Kentucky Estimated Tax Voucher Instructions + - title: 2023 Kentucky Individual Income Tax Return Residents Only - Form 740 + href: https://revenue.ky.gov/Forms/Form%20740%205-9-23.pdf#page=1 + - title: 2023 Kentucky Estimated Tax Voucher Instructions href: https://revenue.ky.gov/Forms/740-ES%20Instructions%203-21-23.pdf + - title: Kentucky Statutes 141.020 + href: https://apps.legislature.ky.gov/law/statutes/statute.aspx?id=54585 diff --git a/fiscalsim_us/parameters/gov/states/ky/tax/income/subtractions.yaml b/fiscalsim_us/parameters/gov/states/ky/tax/income/subtractions.yaml new file mode 100644 index 000000000..f53a220e2 --- /dev/null +++ b/fiscalsim_us/parameters/gov/states/ky/tax/income/subtractions.yaml @@ -0,0 +1,27 @@ +description: Kentucky subtracts these sources from adjusted gross income. +values: + 2021-01-01: + # - Kentucky income tax refund + - us_govt_interest + - ky_pension_income_exclusion + - taxable_social_security + # - Resident adjustment for partnerships + # - Kentucky depreciation + - military_service_income +metadata: + unit: list + reference: + - title: Kentucky Statutes 141.019 + href: https://apps.legislature.ky.gov/law/statutes/statute.aspx?id=53498 + - title: 2023 KENTUCKY FEDERAL ADJUSTED GROSS INCOME MODIFICATIONS PART 2 + href: https://revenue.ky.gov/Forms/Schedule%20M%202023.pdf#page=1 + - title: 2022 KENTUCKY FEDERAL ADJUSTED GROSS INCOME MODIFICATIONS PART 2 + href: https://revenue.ky.gov/Forms/Schedule%20M%202022.pdf#page=1 + - title: 2021 KENTUCKY FEDERAL ADJUSTED GROSS INCOME MODIFICATIONS PART 2 + href: https://revenue.ky.gov/Forms/Schedule%20M-2021.pdf#page=1 + - title: 2023 Kentucky Individual Income Tax Forms + href: https://revenue.ky.gov/Forms/740%20Packet%20Instructions%202023.pdf#page=27 + - title: 2022 Kentucky Individual Income Tax Forms + href: https://revenue.ky.gov/Forms/740%20Packet%20Instructions%205-9-23.pdf#page=23 + - title: 2021 Kentucky Individual Income Tax Forms + href: https://taxsim.nber.org/historical_state_tax_forms/KY/2021/Form%20740%20Packet%20Instructions-2021.pdf#page=27 diff --git a/fiscalsim_us/parameters/gov/states/md/tanf/income/deductions/earned/new.yaml b/fiscalsim_us/parameters/gov/states/md/tanf/income/deductions/earned/new.yaml index 77fb550d1..165c28eb9 100644 --- a/fiscalsim_us/parameters/gov/states/md/tanf/income/deductions/earned/new.yaml +++ b/fiscalsim_us/parameters/gov/states/md/tanf/income/deductions/earned/new.yaml @@ -1,12 +1,12 @@ -description: Maryland excludes this share of earnings from TANF countable earned income, for individuals not currently enrolled in TANF. - -values: - 2022-11-01: 0.2 - -metadata: - unit: /1 - period: month - label: Maryland TANF earnings exclusion percent for new enrollees - reference: - - title: Maryland TEMPORARY CASH ASSISTANCE MANUAL 904.1 DEDUCTIONS FROM EARNED INCOME - href: https://dhs.maryland.gov/documents/Manuals/Temporary-Cash-Assistance-Manual/0900-Financial-Eligibility/0904%20Deductions%20and%20Expenses%20rev%2011.22.1.doc +description: Maryland excludes this share of earnings from TANF countable earned income, for individuals not currently enrolled in TANF. + +values: + 2022-11-01: 0.2 + +metadata: + unit: /1 + period: month + label: Maryland TANF earnings exclusion percent for new enrollees + reference: + - title: Maryland TEMPORARY CASH ASSISTANCE MANUAL 904.1 DEDUCTIONS FROM EARNED INCOME + href: https://dhs.maryland.gov/documents/Manuals/Temporary-Cash-Assistance-Manual/0900-Financial-Eligibility/0904%20Deductions%20and%20Expenses%20rev%2011.22.1.doc diff --git a/fiscalsim_us/parameters/gov/states/md/tanf/income/deductions/earned/not_self_employed.yaml b/fiscalsim_us/parameters/gov/states/md/tanf/income/deductions/earned/not_self_employed.yaml index cd0a62d7e..bf54cc4ca 100644 --- a/fiscalsim_us/parameters/gov/states/md/tanf/income/deductions/earned/not_self_employed.yaml +++ b/fiscalsim_us/parameters/gov/states/md/tanf/income/deductions/earned/not_self_employed.yaml @@ -1,12 +1,12 @@ -description: Maryland excludes this share of earnings from TANF countable earned income, for individuals without self employment income. - -values: - 2022-11-01: 0.4 - -metadata: - unit: /1 - period: month - label: Maryland TANF earnings exclusion percent for non-self-employed individuals - reference: - - title: Maryland TEMPORARY CASH ASSISTANCE MANUAL 904.1 DEDUCTIONS FROM EARNED INCOME - href: https://dhs.maryland.gov/documents/Manuals/Temporary-Cash-Assistance-Manual/0900-Financial-Eligibility/0904%20Deductions%20and%20Expenses%20rev%2011.22.1.doc +description: Maryland excludes this share of earnings from TANF countable earned income, for individuals without self employment income. + +values: + 2022-11-01: 0.4 + +metadata: + unit: /1 + period: month + label: Maryland TANF earnings exclusion percent for non-self-employed individuals + reference: + - title: Maryland TEMPORARY CASH ASSISTANCE MANUAL 904.1 DEDUCTIONS FROM EARNED INCOME + href: https://dhs.maryland.gov/documents/Manuals/Temporary-Cash-Assistance-Manual/0900-Financial-Eligibility/0904%20Deductions%20and%20Expenses%20rev%2011.22.1.doc diff --git a/fiscalsim_us/parameters/gov/states/md/tanf/income/deductions/earned/self_employed.yaml b/fiscalsim_us/parameters/gov/states/md/tanf/income/deductions/earned/self_employed.yaml index 51b018cc3..039ec1a66 100644 --- a/fiscalsim_us/parameters/gov/states/md/tanf/income/deductions/earned/self_employed.yaml +++ b/fiscalsim_us/parameters/gov/states/md/tanf/income/deductions/earned/self_employed.yaml @@ -1,12 +1,12 @@ -description: Maryland excludes this share of earnings from TANF countable earned income, for individuals with self employment income. - -values: - 2022-11-01: 0.5 - -metadata: - unit: /1 - period: month - label: Maryland TANF earnings exclusion percent for self-employed individuals - reference: - - title: Maryland TEMPORARY CASH ASSISTANCE MANUAL 904.1 DEDUCTIONS FROM EARNED INCOME - href: https://dhs.maryland.gov/documents/Manuals/Temporary-Cash-Assistance-Manual/0900-Financial-Eligibility/0904%20Deductions%20and%20Expenses%20rev%2011.22.1.doc +description: Maryland excludes this share of earnings from TANF countable earned income, for individuals with self employment income. + +values: + 2022-11-01: 0.5 + +metadata: + unit: /1 + period: month + label: Maryland TANF earnings exclusion percent for self-employed individuals + reference: + - title: Maryland TEMPORARY CASH ASSISTANCE MANUAL 904.1 DEDUCTIONS FROM EARNED INCOME + href: https://dhs.maryland.gov/documents/Manuals/Temporary-Cash-Assistance-Manual/0900-Financial-Eligibility/0904%20Deductions%20and%20Expenses%20rev%2011.22.1.doc diff --git a/fiscalsim_us/parameters/gov/states/md/tanf/maximum_benefit/additional.yaml b/fiscalsim_us/parameters/gov/states/md/tanf/maximum_benefit/additional.yaml index dbb772809..794d973a6 100644 --- a/fiscalsim_us/parameters/gov/states/md/tanf/maximum_benefit/additional.yaml +++ b/fiscalsim_us/parameters/gov/states/md/tanf/maximum_benefit/additional.yaml @@ -1,11 +1,11 @@ -description: Maryland TANF grant standard additional amount per child over 10. - -values: - 2021-10-01: 136 - -metadata: - unit: currency-USD - period: month - reference: - - title: Family Investment Programs Income Guidelines as of October 01, 2021 - href: https://dhs.maryland.gov/documents/Supplemental%20Nutrition%20Assistance%20Program%20(SNAP)/October-2020-Income-Guidelines-1-1.pdf +description: Maryland TANF grant standard additional amount per child over 10. + +values: + 2021-10-01: 136 + +metadata: + unit: currency-USD + period: month + reference: + - title: Family Investment Programs Income Guidelines as of October 01, 2021 + href: https://dhs.maryland.gov/documents/Supplemental%20Nutrition%20Assistance%20Program%20(SNAP)/October-2020-Income-Guidelines-1-1.pdf diff --git a/fiscalsim_us/parameters/gov/states/md/tanf/maximum_benefit/main.yaml b/fiscalsim_us/parameters/gov/states/md/tanf/maximum_benefit/main.yaml index fa6b780fe..51e036936 100644 --- a/fiscalsim_us/parameters/gov/states/md/tanf/maximum_benefit/main.yaml +++ b/fiscalsim_us/parameters/gov/states/md/tanf/maximum_benefit/main.yaml @@ -1,28 +1,28 @@ -description: Maryland TANF grant standard by number of caretakers and children. - -1: - 2021-10-01: 328 -2: - 2021-10-01: 575 -3: - 2021-10-01: 727 -4: - 2021-10-01: 870 -5: - 2021-10-01: 1_010 -6: - 2021-10-01: 1_110 -7: - 2021-10-01: 1_247 -8: - 2021-10-01: 1_372 - -metadata: - unit: currency-USD - period: month - breakdown: - - range(1, 9) - reference: - - title: Family Investment Programs Income Guidelines as of October 01, 2021 - href: https://dhs.maryland.gov/documents/Supplemental%20Nutrition%20Assistance%20Program%20(SNAP)/October-2020-Income-Guidelines-1-1.pdf - +description: Maryland TANF grant standard by number of caretakers and children. + +1: + 2021-10-01: 328 +2: + 2021-10-01: 575 +3: + 2021-10-01: 727 +4: + 2021-10-01: 870 +5: + 2021-10-01: 1_010 +6: + 2021-10-01: 1_110 +7: + 2021-10-01: 1_247 +8: + 2021-10-01: 1_372 + +metadata: + unit: currency-USD + period: month + breakdown: + - range(1, 9) + reference: + - title: Family Investment Programs Income Guidelines as of October 01, 2021 + href: https://dhs.maryland.gov/documents/Supplemental%20Nutrition%20Assistance%20Program%20(SNAP)/October-2020-Income-Guidelines-1-1.pdf + diff --git a/fiscalsim_us/parameters/gov/states/md/tax/income/agi/subtractions/hundred_year/age_threshold.yaml b/fiscalsim_us/parameters/gov/states/md/tax/income/agi/subtractions/hundred_year/age_threshold.yaml new file mode 100644 index 000000000..c74bc847f --- /dev/null +++ b/fiscalsim_us/parameters/gov/states/md/tax/income/agi/subtractions/hundred_year/age_threshold.yaml @@ -0,0 +1,16 @@ +description: Maryland limits the hundred year subtraction to individuals this age or older. +values: + 2022-01-01: 100 +metadata: + reference: + - title: MD 2023 Resident Booklet (ya) + href: https://www.marylandtaxes.gov/forms/current_forms/Resident-Booklet.pdf#page=19 + - title: Md. Code, Tax-Gen. § 10-207(nn) + href: https://casetext.com/statute/code-of-maryland/article-tax-general/title-10-income-tax/subtitle-2-maryland-taxable-income-calculations-for-individual/part-ii-maryland-adjusted-gross-income/section-10-207-subtractions-from-federal-adjusted-gross-income-in-general + - title: MD 2022 Resident Booklet (ya) + href: https://www.marylandtaxes.gov/forms/22_forms/Resident_Booklet.pdf#page=18 + - title: House Bill 186 + href: https://trackbill.com/bill/maryland-house-bill-186-income-tax-subtraction-modification-for-centenarians/2173534/ + unit: year + period: year + label: Maryland hundred year subtraction age eligibility diff --git a/fiscalsim_us/parameters/gov/states/md/tax/income/agi/subtractions/hundred_year/amount.yaml b/fiscalsim_us/parameters/gov/states/md/tax/income/agi/subtractions/hundred_year/amount.yaml new file mode 100644 index 000000000..220748115 --- /dev/null +++ b/fiscalsim_us/parameters/gov/states/md/tax/income/agi/subtractions/hundred_year/amount.yaml @@ -0,0 +1,16 @@ +description: Maryland subtracts this amount from adjusted gross income under the hundred year subtraction. +values: + 2022-01-01: 100_000 +metadata: + reference: + - title: MD 2023 Resident Booklet (ya) + href: https://www.marylandtaxes.gov/forms/current_forms/Resident-Booklet.pdf#page=19 + - title: MD 2022 Resident Booklet (ya) + href: https://www.marylandtaxes.gov/forms/22_forms/Resident_Booklet.pdf#page=18 + - title: Md. Code, Tax-Gen. § 10-207(nn) + href: https://casetext.com/statute/code-of-maryland/article-tax-general/title-10-income-tax/subtitle-2-maryland-taxable-income-calculations-for-individual/part-ii-maryland-adjusted-gross-income/section-10-207-subtractions-from-federal-adjusted-gross-income-in-general + - title: House Bill 186 + href: https://trackbill.com/bill/maryland-house-bill-186-income-tax-subtraction-modification-for-centenarians/2173534/ + unit: currency-USD + period: year + label: Maryland hundred year subtraction amount diff --git a/fiscalsim_us/parameters/gov/states/md/tax/income/agi/subtractions/max_care_expense_year_offset.yaml b/fiscalsim_us/parameters/gov/states/md/tax/income/agi/subtractions/max_care_expense_year_offset.yaml index c142e03c0..2b9e65509 100644 --- a/fiscalsim_us/parameters/gov/states/md/tax/income/agi/subtractions/max_care_expense_year_offset.yaml +++ b/fiscalsim_us/parameters/gov/states/md/tax/income/agi/subtractions/max_care_expense_year_offset.yaml @@ -8,6 +8,11 @@ metadata: reference: - title: "Form 502, line 9" href: https://www.marylandtaxes.gov/forms/21_forms/Resident_Booklet.pdf + - title: 2023 State & Local Tax Forms & Instructions Maryland + href: https://www.marylandtaxes.gov/forms/23_forms/Resident-Booklet.pdf#page=14 + # The legal code has been ammendet and does not reflect pre-2023 rules + - title: Md. Code, Tax-Gen. § 10-207 (r) + href: https://casetext.com/statute/code-of-maryland/article-tax-general/title-10-income-tax/subtitle-2-maryland-taxable-income-calculations-for-individual/part-ii-maryland-adjusted-gross-income/section-10-207-applicable-112024-subtractions-from-federal-adjusted-gross-income-in-general unit: int period: year label: Decoupled year offset for maximum CDCC expense cap diff --git a/fiscalsim_us/parameters/gov/states/md/tax/income/agi/subtractions/max_two_income_subtraction.yaml b/fiscalsim_us/parameters/gov/states/md/tax/income/agi/subtractions/max_two_income_subtraction.yaml index e1749eb53..4a81d86c2 100644 --- a/fiscalsim_us/parameters/gov/states/md/tax/income/agi/subtractions/max_two_income_subtraction.yaml +++ b/fiscalsim_us/parameters/gov/states/md/tax/income/agi/subtractions/max_two_income_subtraction.yaml @@ -3,8 +3,12 @@ values: 2021-01-01: 1_200 metadata: reference: - - title: "Form 502, line 14" + - title: 2023 State & Local Tax Forms & Instructions Maryland + href: https://www.marylandtaxes.gov/forms/23_forms/Resident-Booklet.pdf#page=19 + - title: 2021 State & Local Tax Forms & Instructions Maryland href: https://www.marylandtaxes.gov/forms/21_forms/Resident_Booklet.pdf + - title: Md. Code, Tax-Gen. § 10-207 (r)(2)(a) + href: https://casetext.com/statute/code-of-maryland/article-tax-general/title-10-income-tax/subtitle-2-maryland-taxable-income-calculations-for-individual/part-ii-maryland-adjusted-gross-income/section-10-207-applicable-112024-subtractions-from-federal-adjusted-gross-income-in-general unit: currency-USD period: year label: MD max two-income AGI subtraction diff --git a/fiscalsim_us/parameters/gov/states/md/tax/income/agi/subtractions/pension/max_amount.yaml b/fiscalsim_us/parameters/gov/states/md/tax/income/agi/subtractions/pension/max_amount.yaml index 0bd0d2dcd..5ca5553b9 100644 --- a/fiscalsim_us/parameters/gov/states/md/tax/income/agi/subtractions/pension/max_amount.yaml +++ b/fiscalsim_us/parameters/gov/states/md/tax/income/agi/subtractions/pension/max_amount.yaml @@ -1,10 +1,15 @@ -description: MD maximum pension AGI subtraction +description: Maryland provides the following maximum pension subtarction from adjusted gross income. values: 2021-01-01: 34_300 + 2023-01-01: 36_200 metadata: reference: - - title: "Form 502, line 10a" + - title: 2023 State & Local Tax Forms & Instructions Maryland + href: https://www.marylandtaxes.gov/forms/23_forms/Resident-Booklet.pdf#page=13 + - title: 2022 PENSION EXCLUSION COMPUTATION WORKSHEET(13A) + href: https://www.marylandtaxes.gov/forms/22_forms/Resident_Booklet.pdf#page=12 + - title: 2021 PENSION EXCLUSION COMPUTATION WORKSHEET(13A) href: https://www.marylandtaxes.gov/forms/21_forms/Resident_Booklet.pdf#page=12 unit: currency-USD period: year - label: MD max pension AGI subtraction + label: Maryland max pension AGI subtraction diff --git a/fiscalsim_us/parameters/gov/states/md/tax/income/agi/subtractions/pension/min_age.yaml b/fiscalsim_us/parameters/gov/states/md/tax/income/agi/subtractions/pension/min_age.yaml index 12332689c..ed9162820 100644 --- a/fiscalsim_us/parameters/gov/states/md/tax/income/agi/subtractions/pension/min_age.yaml +++ b/fiscalsim_us/parameters/gov/states/md/tax/income/agi/subtractions/pension/min_age.yaml @@ -1,10 +1,12 @@ -description: MD pension AGI subtraction minimum eligibility age +description: Maryland pension AGI subtraction minimum eligibility age values: 2021-01-01: 65 metadata: reference: - - title: "Form 502, line 10a" + - title: 2023 State & Local Tax Forms & Instructions Maryland + href: https://www.marylandtaxes.gov/forms/23_forms/Resident-Booklet.pdf#page=14 + - title: 2021 Resident Booklet Individual href: https://www.marylandtaxes.gov/forms/21_forms/Resident_Booklet.pdf#page=12 unit: int period: year - label: MD pension AGI subtraction minimum eligibility age + label: Maryland pension AGI subtraction minimum eligibility age diff --git a/fiscalsim_us/parameters/gov/states/md/tax/income/agi/subtractions/sources.yaml b/fiscalsim_us/parameters/gov/states/md/tax/income/agi/subtractions/sources.yaml index 1d96fca57..dd18867b2 100644 --- a/fiscalsim_us/parameters/gov/states/md/tax/income/agi/subtractions/sources.yaml +++ b/fiscalsim_us/parameters/gov/states/md/tax/income/agi/subtractions/sources.yaml @@ -1,7 +1,26 @@ -description: Maryland list of AGI subtractions. +description: Maryland subtracts the following sources from federal adjusted gross income. values: 2021-01-01: - md_dependent_care_subtraction - md_pension_subtraction - md_socsec_subtraction - md_two_income_subtraction + 2022-01-01: + - md_dependent_care_subtraction + - md_pension_subtraction + - md_socsec_subtraction + - md_two_income_subtraction + - md_hundred_year_subtraction + +metadata: + reference: + - title: 2022 State & Local Tax Forms & Instructions Maryland + href: https://www.marylandtaxes.gov/forms/22_forms/Resident_Booklet.pdf#page=13 + - title: 2022 Maryland Statutes Tax - General, Title 10, Subtitle 2, Part II - Maryland Adjusted Gross Income + href: https://law.justia.com/codes/maryland/2022/tax-general/title-10/subtitle-2/part-ii/ + # Bill introducing the hundred year subtraction + - title: House Bill 186 + href: https://trackbill.com/bill/maryland-house-bill-186-income-tax-subtraction-modification-for-centenarians/2173534/ + period: year + unit: list + label: Maryland adjusted gross income subtractions diff --git a/fiscalsim_us/parameters/gov/states/md/tax/income/credits/cdcc/eligibility/agi_cap.yaml b/fiscalsim_us/parameters/gov/states/md/tax/income/credits/cdcc/eligibility/agi_cap.yaml index 2c87451f3..84efb24ed 100644 --- a/fiscalsim_us/parameters/gov/states/md/tax/income/credits/cdcc/eligibility/agi_cap.yaml +++ b/fiscalsim_us/parameters/gov/states/md/tax/income/credits/cdcc/eligibility/agi_cap.yaml @@ -1,35 +1,78 @@ description: Maryland limits its Child and Dependent Care Credit to filers with adjusted gross income below these thresholds. JOINT: - 2019-01-01: 143_000 - 2020-01-01: 144_450 - 2021-01-01: 149_050 + values: + 2019-01-01: 143_000 + 2020-01-01: 144_450 + 2021-01-01: 149_050 + 2022-01-01: 159_500 + 2023-01-01: 161_100 + uprating: + parameter: gov.irs.uprating + rounding: + type: downwards + interval: 50 SINGLE: - 2019-01-01: 92_000 - 2020-01-01: 92_950 - 2021-01-01: 95_900 + values: + 2019-01-01: 92_000 + 2020-01-01: 92_950 + 2021-01-01: 95_900 + 2022-01-01: 102_600 + 2023-01-01: 103_650 + uprating: + parameter: gov.irs.uprating + rounding: + type: downwards + interval: 50 SEPARATE: - 2019-01-01: 92_000 - 2020-01-01: 92_950 - 2021-01-01: 95_900 + values: + 2019-01-01: 92_000 + 2020-01-01: 92_950 + 2021-01-01: 95_900 + 2022-01-01: 102_600 + 2023-01-01: 103_650 + uprating: + parameter: gov.irs.uprating + rounding: + type: downwards + interval: 50 HEAD_OF_HOUSEHOLD: - 2019-01-01: 92_000 - 2020-01-01: 92_950 - 2021-01-01: 95_900 + values: + 2019-01-01: 92_000 + 2020-01-01: 92_950 + 2021-01-01: 95_900 + 2022-01-01: 102_600 + 2023-01-01: 103_650 + uprating: + parameter: gov.irs.uprating + rounding: + type: downwards + interval: 50 SURVIVING_SPOUSE: - 2019-01-01: 92_000 - 2020-01-01: 92_950 - 2021-01-01: 95_900 + values: + 2019-01-01: 92_000 + 2020-01-01: 92_950 + 2021-01-01: 95_900 + 2022-01-01: 102_600 + 2023-01-01: 103_650 + uprating: + parameter: gov.irs.uprating + rounding: + type: downwards + interval: 50 metadata: breakdown: - filing_status reference: - - title: "Md. Code, Tax-Gen. § 10-716 (b)" + - title: Md. Code, Tax-Gen. § 10-716 (b) href: https://casetext.com/statute/code-of-maryland/article-tax-general/title-10-income-tax/subtitle-7-income-tax-credits/section-10-716-for-child-care-or-dependent-care - - title: "Maryland form 502CR 2020" + - title: Maryland 2020 State & Local Tax Forms & Instructions href: https://www.marylandtaxes.gov/forms/20_forms/502CR.pdf#page=6 - - title: "Maryland form 502CR 2021" + - title: Maryland 2021 Form 502 CR Instructions href: https://www.marylandtaxes.gov/forms/21_forms/502CR.pdf#page=6 + - title: Maryland 2022 Form 502 CR Instructions + href: https://marylandtaxes.gov/forms/22_forms/502CR.pdf#page=6 + - title: Maryland 2023 Form 502 CR Instructions + href: https://marylandtaxes.gov/forms/23_forms/502CR.pdf#page=6 unit: currency-USD period: year - name: md_cdcc_agi_cap - label: MD CDCC AGI cap + label: Maryland CDCC AGI cap diff --git a/fiscalsim_us/parameters/gov/states/md/tax/income/credits/cdcc/eligibility/refundable_agi_cap.yaml b/fiscalsim_us/parameters/gov/states/md/tax/income/credits/cdcc/eligibility/refundable_agi_cap.yaml index 929a70c6d..4b7417aa0 100644 --- a/fiscalsim_us/parameters/gov/states/md/tax/income/credits/cdcc/eligibility/refundable_agi_cap.yaml +++ b/fiscalsim_us/parameters/gov/states/md/tax/income/credits/cdcc/eligibility/refundable_agi_cap.yaml @@ -1,35 +1,78 @@ description: Maryland limits its refundable Child and Dependent Care Credit to filers with adjusted gross income below these thresholds. JOINT: - 2019-01-01: 75_000 - 2020-01-01: 75_750 - 2021-01-01: 78_150 + values: + 2019-01-01: 75_000 + 2020-01-01: 75_750 + 2021-01-01: 78_150 + 2022-01-01: 83_650 + 2023-01-01: 84_500 + uprating: + parameter: gov.irs.uprating + rounding: + type: downwards + interval: 50 SINGLE: - 2019-01-01: 50_000 - 2020-01-01: 50_500 - 2021-01-01: 52_100 + values: + 2019-01-01: 50_000 + 2020-01-01: 50_500 + 2021-01-01: 52_100 + 2022-01-01: 55_750 + 2023-01-01: 56_300 + uprating: + parameter: gov.irs.uprating + rounding: + type: downwards + interval: 50 SEPARATE: - 2019-01-01: 50_000 - 2020-01-01: 50_500 - 2021-01-01: 52_100 + values: + 2019-01-01: 50_000 + 2020-01-01: 50_500 + 2021-01-01: 52_100 + 2022-01-01: 55_750 + 2023-01-01: 56_300 + uprating: + parameter: gov.irs.uprating + rounding: + type: downwards + interval: 50 HEAD_OF_HOUSEHOLD: - 2019-01-01: 50_000 - 2020-01-01: 50_500 - 2021-01-01: 52_100 + values: + 2019-01-01: 50_000 + 2020-01-01: 50_500 + 2021-01-01: 52_100 + 2022-01-01: 55_750 + 2023-01-01: 56_300 + uprating: + parameter: gov.irs.uprating + rounding: + type: downwards + interval: 50 SURVIVING_SPOUSE: - 2019-01-01: 50_000 - 2020-01-01: 50_500 - 2021-01-01: 52_100 + values: + 2019-01-01: 50_000 + 2020-01-01: 50_500 + 2021-01-01: 52_100 + 2022-01-01: 55_750 + 2023-01-01: 56_300 + uprating: + parameter: gov.irs.uprating + rounding: + type: downwards + interval: 50 metadata: breakdown: - filing_status reference: - - title: "Md. Code, Tax-Gen. § 10-716 (e)" + - title: Md. Code, Tax-Gen. § 10-716 (e) href: https://casetext.com/statute/code-of-maryland/article-tax-general/title-10-income-tax/subtitle-7-income-tax-credits/section-10-716-for-child-care-or-dependent-care - - title: "Maryland 2020 State & Local Tax Forms & Instructions" + - title: Maryland 2020 State & Local Tax Forms & Instructions href: https://www.marylandtaxes.gov/forms/20_forms/Resident_Booklet.pdf#page=24 - - title: "Maryland 2021 State & Local Tax Forms & Instructions" + - title: Maryland 2021 State & Local Tax Forms & Instructions href: https://www.marylandtaxes.gov/forms/21_forms/Resident_Booklet.pdf#page=24 + - title: 2023 State & Local Tax Forms & Instructions Maryland + href: https://www.marylandtaxes.gov/forms/23_forms/Resident-Booklet.pdf#page=25 + - title: 2022 State & Local Tax Forms & Instructions Maryland + href: https://www.marylandtaxes.gov/forms/22_forms/Resident_Booklet.pdf#page=24 unit: currency-USD period: year - name: md_cdcc_refundable_agi_cap - label: MD refundable CDCC AGI cap + label: Maryland refundable CDCC AGI cap diff --git a/fiscalsim_us/parameters/gov/states/md/tax/income/credits/cdcc/percent.yaml b/fiscalsim_us/parameters/gov/states/md/tax/income/credits/cdcc/percent.yaml index 49b70b3ec..78c74d0f9 100644 --- a/fiscalsim_us/parameters/gov/states/md/tax/income/credits/cdcc/percent.yaml +++ b/fiscalsim_us/parameters/gov/states/md/tax/income/credits/cdcc/percent.yaml @@ -3,9 +3,14 @@ values: 2019-01-01: 0.32 metadata: reference: - - title: "Md. Code, Tax-Gen. § 10-716 (c)(1)" + - title: Md. Code, Tax-Gen. § 10-716 (c)(1) href: https://casetext.com/statute/code-of-maryland/article-tax-general/title-10-income-tax/subtitle-7-income-tax-credits/section-10-716-for-child-care-or-dependent-care + - title: Maryland 2021 Form 502 CR Instructions + href: https://www.marylandtaxes.gov/forms/21_forms/502CR.pdf#page=7 + - title: Maryland 2022 Form 502 CR Instructions + href: https://marylandtaxes.gov/forms/22_forms/502CR.pdf#page=7 + - title: Maryland 2023 Form 502 CR Instructions + href: https://marylandtaxes.gov/forms/23_forms/502CR.pdf#page=7 unit: /1 period: year - name: md_cdcc_percent - label: MD percent of federal CDCC + label: Maryland percent of federal CDCC diff --git a/fiscalsim_us/parameters/gov/states/md/tax/income/credits/cdcc/phase_out/increment.yaml b/fiscalsim_us/parameters/gov/states/md/tax/income/credits/cdcc/phase_out/increment.yaml index b9b41c4dc..a2a7b61a5 100644 --- a/fiscalsim_us/parameters/gov/states/md/tax/income/credits/cdcc/phase_out/increment.yaml +++ b/fiscalsim_us/parameters/gov/states/md/tax/income/credits/cdcc/phase_out/increment.yaml @@ -13,9 +13,9 @@ metadata: breakdown: - filing_status reference: - - title: "Md. Code, Tax-Gen. § 10-716 (d)" + # The phase out increment is only defined in the legal code and not in the tax froms + - title: Md. Code, Tax-Gen. § 10-716 (d) href: https://casetext.com/statute/code-of-maryland/article-tax-general/title-10-income-tax/subtitle-7-income-tax-credits/section-10-716-for-child-care-or-dependent-care unit: currency-USD period: year - name: md_cdcc_phase_out_increment - label: MD CDCC phase-out increment + label: Maryland CDCC phase-out increment diff --git a/fiscalsim_us/parameters/gov/states/md/tax/income/credits/cdcc/phase_out/percent.yaml b/fiscalsim_us/parameters/gov/states/md/tax/income/credits/cdcc/phase_out/percent.yaml index e5d0ff262..662370bc3 100644 --- a/fiscalsim_us/parameters/gov/states/md/tax/income/credits/cdcc/phase_out/percent.yaml +++ b/fiscalsim_us/parameters/gov/states/md/tax/income/credits/cdcc/phase_out/percent.yaml @@ -3,9 +3,8 @@ values: 2019-01-01: 0.01 metadata: reference: - - title: "Md. Code, Tax-Gen. § 10-716 (d)" + - title: Md. Code, Tax-Gen. § 10-716 (d) href: https://casetext.com/statute/code-of-maryland/article-tax-general/title-10-income-tax/subtitle-7-income-tax-credits/section-10-716-for-child-care-or-dependent-care unit: /1 period: year - name: md_cdcc_phase_out_percent - label: MD CDCC phase-out percent + label: Maryland CDCC phase-out percent diff --git a/fiscalsim_us/parameters/gov/states/md/tax/income/credits/cdcc/phase_out/start.yaml b/fiscalsim_us/parameters/gov/states/md/tax/income/credits/cdcc/phase_out/start.yaml index f99157b3d..0d48f0d33 100644 --- a/fiscalsim_us/parameters/gov/states/md/tax/income/credits/cdcc/phase_out/start.yaml +++ b/fiscalsim_us/parameters/gov/states/md/tax/income/credits/cdcc/phase_out/start.yaml @@ -13,9 +13,14 @@ metadata: breakdown: - filing_status reference: - - title: "Md. Code, Tax-Gen. § 10-716 (d)" + - title: Md. Code, Tax-Gen. § 10-716 (d) href: https://casetext.com/statute/code-of-maryland/article-tax-general/title-10-income-tax/subtitle-7-income-tax-credits/section-10-716-for-child-care-or-dependent-care + - title: Maryland 2021 Form 502 CR Instructions + href: https://www.marylandtaxes.gov/forms/21_forms/502CR.pdf#page=6 + - title: Maryland 2022 Form 502 CR Instructions + href: https://marylandtaxes.gov/forms/22_forms/502CR.pdf#page=6 + - title: Maryland 2023 Form 502 CR Instructions + href: https://marylandtaxes.gov/forms/23_forms/502CR.pdf#page=6 unit: currency-USD period: year - name: md_cdcc_phase_out_start - label: MD CDCC phase-out start + label: Maryland CDCC phase-out start diff --git a/fiscalsim_us/parameters/gov/states/md/tax/income/credits/ctc/age_threshold/disabled.yaml b/fiscalsim_us/parameters/gov/states/md/tax/income/credits/ctc/age_threshold/disabled.yaml index 970a97b9b..0e4a6fa40 100644 --- a/fiscalsim_us/parameters/gov/states/md/tax/income/credits/ctc/age_threshold/disabled.yaml +++ b/fiscalsim_us/parameters/gov/states/md/tax/income/credits/ctc/age_threshold/disabled.yaml @@ -6,5 +6,9 @@ metadata: unit: year period: year reference: + - title: Maryland 2023 Resident Tax Forms and Instructions + href: https://www.marylandtaxes.gov/forms/23_forms/Resident-Booklet.pdf#page=25 + - title: Maryland 2022 Resident Tax Forms and Instructions + href: https://www.marylandtaxes.gov/forms/22_forms/Resident_Booklet.pdf#page=24 - title: Md. Code, Tax-Gen. § 10-751 (a)(2)(ii)(2) href: https://casetext.com/statute/code-of-maryland/article-tax-general/title-10-income-tax/subtitle-7-income-tax-credits/section-10-751-effective-until-712026-tax-credit-for-qualified-child diff --git a/fiscalsim_us/parameters/gov/states/md/tax/income/credits/ctc/age_threshold/main.yaml b/fiscalsim_us/parameters/gov/states/md/tax/income/credits/ctc/age_threshold/main.yaml index aa19e09f6..7159db749 100644 --- a/fiscalsim_us/parameters/gov/states/md/tax/income/credits/ctc/age_threshold/main.yaml +++ b/fiscalsim_us/parameters/gov/states/md/tax/income/credits/ctc/age_threshold/main.yaml @@ -7,5 +7,7 @@ metadata: unit: year period: year reference: + - title: 2023 State & Local Tax Forms & Instructions Maryland + href: https://www.marylandtaxes.gov/forms/23_forms/Resident-Booklet.pdf#page=25 - title: Md. Code, Tax-Gen. § 10-751 (a)(2)(ii)(1) href: https://casetext.com/statute/code-of-maryland/article-tax-general/title-10-income-tax/subtitle-7-income-tax-credits/section-10-751-effective-until-712026-tax-credit-for-qualified-child diff --git a/fiscalsim_us/parameters/gov/states/md/tax/income/credits/ctc/agi_cap.yaml b/fiscalsim_us/parameters/gov/states/md/tax/income/credits/ctc/agi_cap.yaml index 0a76542b1..5f5acb474 100644 --- a/fiscalsim_us/parameters/gov/states/md/tax/income/credits/ctc/agi_cap.yaml +++ b/fiscalsim_us/parameters/gov/states/md/tax/income/credits/ctc/agi_cap.yaml @@ -4,7 +4,11 @@ values: 2023-01-01: 15_000 metadata: reference: - - title: "Md. Code, Tax-Gen. § 10-751 (b)" + - title: 2023 State & Local Tax Forms & Instructions Maryland + href: https://www.marylandtaxes.gov/forms/23_forms/Resident-Booklet.pdf#page=4 + - title: Maryland 2022 Resident Tax Forms and Instructions + href: https://www.marylandtaxes.gov/forms/22_forms/Resident_Booklet.pdf#page=24 + - title: Md. Code, Tax-Gen. § 10-751 (b) href: https://casetext.com/statute/code-of-maryland/article-tax-general/title-10-income-tax/subtitle-7-income-tax-credits/section-10-751-effective-until-712026-tax-credit-for-qualified-child unit: currency-USD period: year diff --git a/fiscalsim_us/parameters/gov/states/md/tax/income/credits/ctc/amount.yaml b/fiscalsim_us/parameters/gov/states/md/tax/income/credits/ctc/amount.yaml index 40f400a02..cf021d004 100644 --- a/fiscalsim_us/parameters/gov/states/md/tax/income/credits/ctc/amount.yaml +++ b/fiscalsim_us/parameters/gov/states/md/tax/income/credits/ctc/amount.yaml @@ -6,5 +6,9 @@ metadata: unit: currency-USD period: year reference: + - title: 2023 State & Local Tax Forms & Instructions Maryland + href: https://www.marylandtaxes.gov/forms/23_forms/Resident-Booklet.pdf#page=25 + - title: Maryland 2022 Resident Tax Forms and Instructions + href: https://www.marylandtaxes.gov/forms/22_forms/Resident_Booklet.pdf#page=24 - title: Md. Code, Tax-Gen. § 10-751 (a)(2)(ii.) href: https://casetext.com/statute/code-of-maryland/article-tax-general/title-10-income-tax/subtitle-7-income-tax-credits/section-10-751-effective-until-712026-tax-credit-for-qualified-child diff --git a/fiscalsim_us/parameters/gov/states/md/tax/income/credits/ctc/reduced_by_federal_credit.yaml b/fiscalsim_us/parameters/gov/states/md/tax/income/credits/ctc/reduced_by_federal_credit.yaml index 95bf31dd7..c77ac940d 100644 --- a/fiscalsim_us/parameters/gov/states/md/tax/income/credits/ctc/reduced_by_federal_credit.yaml +++ b/fiscalsim_us/parameters/gov/states/md/tax/income/credits/ctc/reduced_by_federal_credit.yaml @@ -4,4 +4,13 @@ values: 2023-01-01: false metadata: unit: bool + period: year label: Maryland CTC reduced by federal credit + reference: + - title: Maryland 2022 Resident Tax Forms and Instructions + href: https://www.marylandtaxes.gov/forms/22_forms/Resident_Booklet.pdf#page=24 + - title: 2023 State & Local Tax Forms & Instructions Maryland + href: https://www.marylandtaxes.gov/forms/23_forms/Resident-Booklet.pdf#page=25 + # Income tax law was amended and does not reflect pre-2023 rules + - title: Md. Code, Tax-Gen. § 10-751 + href: https://casetext.com/statute/code-of-maryland/article-tax-general/title-10-income-tax/subtitle-7-income-tax-credits/section-10-751-effective-until-712026-tax-credit-for-qualified-child diff --git a/fiscalsim_us/parameters/gov/states/md/tax/income/credits/eitc/childless/max_amount.yaml b/fiscalsim_us/parameters/gov/states/md/tax/income/credits/eitc/childless/max_amount.yaml deleted file mode 100644 index 64ecee0b1..000000000 --- a/fiscalsim_us/parameters/gov/states/md/tax/income/credits/eitc/childless/max_amount.yaml +++ /dev/null @@ -1,10 +0,0 @@ -description: Maryland provides up to this amount for its Earned Income Tax Credit to single childless filers. -values: - 2019-01-01: 530 -metadata: - unit: currency-USD - period: year - label: Maryland childless EITC maximum - reference: - - title: Md. Code, Tax-Gen. § 10-704(c)(3)(iii) - href: https://casetext.com/statute/code-of-maryland/article-tax-general/title-10-income-tax/subtitle-7-income-tax-credits/section-10-704-effective-until-6302023-for-earned-income diff --git a/fiscalsim_us/parameters/gov/states/md/tax/income/credits/eitc/childless/percent_match.yaml b/fiscalsim_us/parameters/gov/states/md/tax/income/credits/eitc/childless/percent_match.yaml deleted file mode 100644 index b545a11aa..000000000 --- a/fiscalsim_us/parameters/gov/states/md/tax/income/credits/eitc/childless/percent_match.yaml +++ /dev/null @@ -1,10 +0,0 @@ -description: Maryland provides up to this percent of the federal Earned Income Tax Credit to single childless filers. -values: - 2019-01-01: 1 -metadata: - unit: /1 - period: year - label: Maryland childless EITC match - reference: - - title: Md. Code, Tax-Gen. § 10-704(c)(3)(ii) - href: https://casetext.com/statute/code-of-maryland/article-tax-general/title-10-income-tax/subtitle-7-income-tax-credits/section-10-704-effective-until-6302023-for-earned-income diff --git a/fiscalsim_us/parameters/gov/states/md/tax/income/credits/eitc/match/non_refundable.yaml b/fiscalsim_us/parameters/gov/states/md/tax/income/credits/eitc/match/non_refundable.yaml deleted file mode 100644 index a468fecae..000000000 --- a/fiscalsim_us/parameters/gov/states/md/tax/income/credits/eitc/match/non_refundable.yaml +++ /dev/null @@ -1,9 +0,0 @@ -description: Maryland matches this percent of the federal Earned Income Tax Credit as a non-refundable credit for filers who are not single and childless. -values: - 2019-01-01: 0.5 -metadata: - unit: /1 - label: Maryland non-refundable EITC match - reference: - - title: Md. Code, Tax-Gen. § 10-704(c)(1)(i) - href: https://casetext.com/statute/code-of-maryland/article-tax-general/title-10-income-tax/subtitle-7-income-tax-credits/section-10-704-effective-until-6302023-for-earned-income diff --git a/fiscalsim_us/parameters/gov/states/md/tax/income/credits/eitc/non_refundable/married_or_has_child/match.yaml b/fiscalsim_us/parameters/gov/states/md/tax/income/credits/eitc/non_refundable/married_or_has_child/match.yaml new file mode 100644 index 000000000..a60f19fb3 --- /dev/null +++ b/fiscalsim_us/parameters/gov/states/md/tax/income/credits/eitc/non_refundable/married_or_has_child/match.yaml @@ -0,0 +1,15 @@ +description: Maryland matches this percent of the federal Earned Income Tax Credit for individuals with qualifying child or married couples filing jointly or separately with or without a qualifying child. +values: + 2019-01-01: 0.5 +metadata: + unit: /1 + period: year + label: Maryland non-refundable EITC match + reference: + - title: 2023 State & Local Tax Forms & Instructions Maryland + href: https://www.marylandtaxes.gov/forms/23_forms/Resident-Booklet.pdf#page=21 + - title: Md. Code, Tax-Gen. § 10-704(c)(1)(i) + href: https://casetext.com/statute/code-of-maryland/article-tax-general/title-10-income-tax/subtitle-7-income-tax-credits/section-10-704-effective-until-6302023-for-earned-income + - title: 2021 Maryland Resident Booklet Individual + href: https://www.marylandtaxes.gov/forms/21_forms/Resident_Booklet.pdf#page=19 + # you may claim one-half (50%) of the federal credit on your Maryland return. diff --git a/fiscalsim_us/parameters/gov/states/md/tax/income/credits/eitc/non_refundable/unmarried_childless/match.yaml b/fiscalsim_us/parameters/gov/states/md/tax/income/credits/eitc/non_refundable/unmarried_childless/match.yaml new file mode 100644 index 000000000..551b687db --- /dev/null +++ b/fiscalsim_us/parameters/gov/states/md/tax/income/credits/eitc/non_refundable/unmarried_childless/match.yaml @@ -0,0 +1,16 @@ +description: Maryland matches this percentage of the federal Earned Income Tax Credit to individuals without a qualifying child. +values: + 2019-01-01: 1 +metadata: + unit: /1 + period: year + label: Maryland childless EITC match + reference: + - title: 2023 Maryland Resident Booklet Individual + href: https://www.marylandtaxes.gov/forms/23_forms/Resident-Booklet.pdf#page=20 + - title: Md. Code, Tax-Gen. § 10-704(c)(3)(ii) + href: https://casetext.com/statute/code-of-maryland/article-tax-general/title-10-income-tax/subtitle-7-income-tax-credits/section-10-704-effective-until-6302023-for-earned-income + - title: 2021 Maryland Resident Booklet Individual + href: https://www.marylandtaxes.gov/forms/21_forms/Resident_Booklet.pdf#page=19 + # Individuals filing as single, head of household, or qualifying widow(er) without a qualifying child + # may claim 100% of the federal earned income credit diff --git a/fiscalsim_us/parameters/gov/states/md/tax/income/credits/eitc/non_refundable/unmarried_childless/max_amount.yaml b/fiscalsim_us/parameters/gov/states/md/tax/income/credits/eitc/non_refundable/unmarried_childless/max_amount.yaml new file mode 100644 index 000000000..ce8766202 --- /dev/null +++ b/fiscalsim_us/parameters/gov/states/md/tax/income/credits/eitc/non_refundable/unmarried_childless/max_amount.yaml @@ -0,0 +1,19 @@ +description: Maryland provides up to this amount for its Earned Income Tax Credit to individuals without a qualifying child. +values: + 2019-01-01: 530 + 2023-01-01: .inf +metadata: + unit: currency-USD + period: year + label: Maryland childless EITC maximum + reference: + - title: Md. Code, Tax-Gen. § 10-704(c)(3)(iii) + href: https://casetext.com/statute/code-of-maryland/article-tax-general/title-10-income-tax/subtitle-7-income-tax-credits/section-10-704-effective-until-6302023-for-earned-income + # Individuals filing as single, head of household, or qualifying widow(er) without a qualifying child + - title: 2021 Maryland Resident Booklet Individual + href: https://www.marylandtaxes.gov/forms/21_forms/Resident_Booklet.pdf#page=19 + - title: Family Prosperity Act of 2023 + href: https://mgaleg.maryland.gov/2023RS/fnotes/bil_0007/hb0547.pdf + # No limit specified in the 2023 income tax form + - title: Maryland 2023 Resident Tax Forms and Instructions + href: https://www.marylandtaxes.gov/forms/23_forms/Resident-Booklet.pdf#page=25 diff --git a/fiscalsim_us/parameters/gov/states/md/tax/income/credits/eitc/match/refundable.yaml b/fiscalsim_us/parameters/gov/states/md/tax/income/credits/eitc/refundable/married_or_has_child/match.yaml similarity index 77% rename from fiscalsim_us/parameters/gov/states/md/tax/income/credits/eitc/match/refundable.yaml rename to fiscalsim_us/parameters/gov/states/md/tax/income/credits/eitc/refundable/married_or_has_child/match.yaml index 09887145f..9bd0ed8aa 100644 --- a/fiscalsim_us/parameters/gov/states/md/tax/income/credits/eitc/match/refundable.yaml +++ b/fiscalsim_us/parameters/gov/states/md/tax/income/credits/eitc/refundable/married_or_has_child/match.yaml @@ -8,7 +8,10 @@ values: 2020-01-01: 0.45 metadata: unit: /1 + period: year label: Maryland refundable EITC match reference: + - title: 2023 State & Local Tax Forms & Instructions Maryland + href: https://www.marylandtaxes.gov/forms/23_forms/Resident-Booklet.pdf#page=25 - title: Md. Code, Tax-Gen. § 10-704(c)(2)(ii) href: https://casetext.com/statute/code-of-maryland/article-tax-general/title-10-income-tax/subtitle-7-income-tax-credits/section-10-704-effective-until-6302023-for-earned-income diff --git a/fiscalsim_us/parameters/gov/states/md/tax/income/credits/non_refundable.yaml b/fiscalsim_us/parameters/gov/states/md/tax/income/credits/non_refundable.yaml index fab184289..751022a4a 100644 --- a/fiscalsim_us/parameters/gov/states/md/tax/income/credits/non_refundable.yaml +++ b/fiscalsim_us/parameters/gov/states/md/tax/income/credits/non_refundable.yaml @@ -2,10 +2,10 @@ description: Maryland list of non-refundable tax credits. values: 2020-01-01: - md_cdcc - - md_non_single_childless_non_refundable_eitc + - md_non_refundable_eitc - md_poverty_line_credit 2022-01-01: - md_cdcc - - md_non_single_childless_non_refundable_eitc + - md_non_refundable_eitc - md_poverty_line_credit - md_senior_tax_credit diff --git a/fiscalsim_us/parameters/gov/states/md/tax/income/credits/poverty_line/earned_income_share.yaml b/fiscalsim_us/parameters/gov/states/md/tax/income/credits/poverty_line/earned_income_share.yaml index 3fd47c8e1..112a8f91c 100644 --- a/fiscalsim_us/parameters/gov/states/md/tax/income/credits/poverty_line/earned_income_share.yaml +++ b/fiscalsim_us/parameters/gov/states/md/tax/income/credits/poverty_line/earned_income_share.yaml @@ -3,7 +3,10 @@ values: 2018-01-01: 0.05 metadata: unit: /1 + period: year label: Maryland Poverty Line Credit rate reference: + - title: 2023 State & Local Tax Forms & Instructions Maryland + href: https://www.marylandtaxes.gov/forms/23_forms/Resident-Booklet.pdf#page=21 - title: MD. Tax - General Code Ann. § 10-709 (2021) href: https://law.justia.com/codes/maryland/2021/tax-general/title-10/subtitle-7/section-10-709/ diff --git a/fiscalsim_us/parameters/gov/states/md/tax/income/credits/refundable.yaml b/fiscalsim_us/parameters/gov/states/md/tax/income/credits/refundable.yaml index b489427a4..af13999b2 100644 --- a/fiscalsim_us/parameters/gov/states/md/tax/income/credits/refundable.yaml +++ b/fiscalsim_us/parameters/gov/states/md/tax/income/credits/refundable.yaml @@ -2,6 +2,6 @@ description: Maryland list of refundable tax credits. values: 2020-01-01: - md_refundable_cdcc - - md_non_single_childless_refundable_eitc - - md_single_childless_eitc + - md_refundable_eitc + - md_montgomery_eitc - md_ctc diff --git a/fiscalsim_us/parameters/gov/states/md/tax/income/credits/senior_tax/age_eligibility.yaml b/fiscalsim_us/parameters/gov/states/md/tax/income/credits/senior_tax/age_eligibility.yaml index 589ddb6b9..721c068fc 100644 --- a/fiscalsim_us/parameters/gov/states/md/tax/income/credits/senior_tax/age_eligibility.yaml +++ b/fiscalsim_us/parameters/gov/states/md/tax/income/credits/senior_tax/age_eligibility.yaml @@ -3,9 +3,12 @@ values: 2022-01-01: 65 metadata: reference: - - title: MD 2022 Resident Booklet + - title: 2023 State & Local Tax Forms & Instructions Maryland + href: https://www.marylandtaxes.gov/forms/23_forms/Resident-Booklet.pdf#page=22 + - title: 2022 State & Local Tax Forms & Instructions Maryland href: https://www.marylandtaxes.gov/forms/22_forms/Resident_Booklet.pdf#page=15 - title: Md. Code, Tax-Gen. § 10-754 (a) href: https://govt.westlaw.com/mdc/Document/N9D9D6B70E6C811ECB80FD99D7E19CB35?viewType=FullText&originationContext=documenttoc&transitionType=CategoryPageItem&contextData=(sc.Default) unit: year + period: year label: Maryland Senior Tax Credit age eligibility diff --git a/fiscalsim_us/parameters/gov/states/md/tax/income/credits/senior_tax/amount/head_of_household.yaml b/fiscalsim_us/parameters/gov/states/md/tax/income/credits/senior_tax/amount/head_of_household.yaml index 0f1466eb6..6d974ad79 100644 --- a/fiscalsim_us/parameters/gov/states/md/tax/income/credits/senior_tax/amount/head_of_household.yaml +++ b/fiscalsim_us/parameters/gov/states/md/tax/income/credits/senior_tax/amount/head_of_household.yaml @@ -3,7 +3,9 @@ values: 2022-01-01: 1_750 metadata: reference: - - title: MD 2022 Resident Booklet + - title: 2023 State & Local Tax Forms & Instructions Maryland + href: https://www.marylandtaxes.gov/forms/23_forms/Resident-Booklet.pdf#page=22 + - title: 2022 State & Local Tax Forms & Instructions Maryland href: https://www.marylandtaxes.gov/forms/22_forms/Resident_Booklet.pdf#page=15 - title: Md. Code, Tax-Gen. § 10-754 (b) (2) (i) href: https://govt.westlaw.com/mdc/Document/N9D9D6B70E6C811ECB80FD99D7E19CB35?viewType=FullText&originationContext=documenttoc&transitionType=CategoryPageItem&contextData=(sc.Default) diff --git a/fiscalsim_us/parameters/gov/states/md/tax/income/credits/senior_tax/amount/joint.yaml b/fiscalsim_us/parameters/gov/states/md/tax/income/credits/senior_tax/amount/joint.yaml index 0513385e1..fa3264de6 100644 --- a/fiscalsim_us/parameters/gov/states/md/tax/income/credits/senior_tax/amount/joint.yaml +++ b/fiscalsim_us/parameters/gov/states/md/tax/income/credits/senior_tax/amount/joint.yaml @@ -1,7 +1,9 @@ description: Maryland provides this senior tax credit amount for joint filers, based on the number of aged people. metadata: reference: - - title: MD 2022 Resident Booklet + - title: 2023 State & Local Tax Forms & Instructions Maryland + href: https://www.marylandtaxes.gov/forms/23_forms/Resident-Booklet.pdf#page=22 + - title: 2022 State & Local Tax Forms & Instructions Maryland href: https://www.marylandtaxes.gov/forms/22_forms/Resident_Booklet.pdf#page=15 - title: Md. Code, Tax-Gen. § 10-754 (b) (2) href: https://govt.westlaw.com/mdc/Document/N9D9D6B70E6C811ECB80FD99D7E19CB35?viewType=FullText&originationContext=documenttoc&transitionType=CategoryPageItem&contextData=(sc.Default) diff --git a/fiscalsim_us/parameters/gov/states/md/tax/income/credits/senior_tax/amount/separate.yaml b/fiscalsim_us/parameters/gov/states/md/tax/income/credits/senior_tax/amount/separate.yaml index c0f288b0e..39239d03f 100644 --- a/fiscalsim_us/parameters/gov/states/md/tax/income/credits/senior_tax/amount/separate.yaml +++ b/fiscalsim_us/parameters/gov/states/md/tax/income/credits/senior_tax/amount/separate.yaml @@ -3,7 +3,9 @@ values: 2022-01-01: 1_000 metadata: reference: - - title: MD 2022 Resident Booklet + - title: 2023 State & Local Tax Forms & Instructions Maryland + href: https://www.marylandtaxes.gov/forms/23_forms/Resident-Booklet.pdf#page=22 + - title: 2022 State & Local Tax Forms & Instructions Maryland href: https://www.marylandtaxes.gov/forms/22_forms/Resident_Booklet.pdf#page=15 - title: Md. Code, Tax-Gen. § 10-754 (b) (1) href: https://govt.westlaw.com/mdc/Document/N9D9D6B70E6C811ECB80FD99D7E19CB35?viewType=FullText&originationContext=documenttoc&transitionType=CategoryPageItem&contextData=(sc.Default) diff --git a/fiscalsim_us/parameters/gov/states/md/tax/income/credits/senior_tax/amount/single.yaml b/fiscalsim_us/parameters/gov/states/md/tax/income/credits/senior_tax/amount/single.yaml index 8f77c1afc..3c708d02d 100644 --- a/fiscalsim_us/parameters/gov/states/md/tax/income/credits/senior_tax/amount/single.yaml +++ b/fiscalsim_us/parameters/gov/states/md/tax/income/credits/senior_tax/amount/single.yaml @@ -3,7 +3,9 @@ values: 2022-01-01: 1_000 metadata: reference: - - title: MD 2022 Resident Booklet + - title: 2023 State & Local Tax Forms & Instructions Maryland + href: https://www.marylandtaxes.gov/forms/23_forms/Resident-Booklet.pdf#page=22 + - title: 2022 State & Local Tax Forms & Instructions Maryland href: https://www.marylandtaxes.gov/forms/22_forms/Resident_Booklet.pdf#page=15 - title: Md. Code, Tax-Gen. § 10-754 (b) (1) href: https://govt.westlaw.com/mdc/Document/N9D9D6B70E6C811ECB80FD99D7E19CB35?viewType=FullText&originationContext=documenttoc&transitionType=CategoryPageItem&contextData=(sc.Default) diff --git a/fiscalsim_us/parameters/gov/states/md/tax/income/credits/senior_tax/amount/widow.yaml b/fiscalsim_us/parameters/gov/states/md/tax/income/credits/senior_tax/amount/widow.yaml index d918f6c40..205113af3 100644 --- a/fiscalsim_us/parameters/gov/states/md/tax/income/credits/senior_tax/amount/widow.yaml +++ b/fiscalsim_us/parameters/gov/states/md/tax/income/credits/senior_tax/amount/widow.yaml @@ -3,7 +3,9 @@ values: 2022-01-01: 1_750 metadata: reference: - - title: MD 2022 Resident Booklet + - title: 2023 State & Local Tax Forms & Instructions Maryland + href: https://www.marylandtaxes.gov/forms/23_forms/Resident-Booklet.pdf#page=22 + - title: 2022 State & Local Tax Forms & Instructions Maryland href: https://www.marylandtaxes.gov/forms/22_forms/Resident_Booklet.pdf#page=15 - title: Md. Code, Tax-Gen. § 10-754 (b) (2) (i) href: https://govt.westlaw.com/mdc/Document/N9D9D6B70E6C811ECB80FD99D7E19CB35?viewType=FullText&originationContext=documenttoc&transitionType=CategoryPageItem&contextData=(sc.Default) diff --git a/fiscalsim_us/parameters/gov/states/md/tax/income/credits/senior_tax/income_threshold.yaml b/fiscalsim_us/parameters/gov/states/md/tax/income/credits/senior_tax/income_threshold.yaml index 1a0604fff..c03e1c19d 100644 --- a/fiscalsim_us/parameters/gov/states/md/tax/income/credits/senior_tax/income_threshold.yaml +++ b/fiscalsim_us/parameters/gov/states/md/tax/income/credits/senior_tax/income_threshold.yaml @@ -1,7 +1,9 @@ -description: Maryland limits its senior tax credit to filers with adjusted gross income threshold below this amount, based on filing status. +description: Maryland limits its senior tax credit to filers with adjusted gross income threshold below this amount, based on filing status. metadata: reference: - - title: MD 2022 Resident Booklet + - title: 2023 State & Local Tax Forms & Instructions Maryland + href: https://www.marylandtaxes.gov/forms/23_forms/Resident-Booklet.pdf#page=22 + - title: 2022 State & Local Tax Forms & Instructions Maryland href: https://www.marylandtaxes.gov/forms/22_forms/Resident_Booklet.pdf#page=21 - title: Md. Code, Tax-Gen. § 10-754 (b) href: https://govt.westlaw.com/mdc/Document/N9D9D6B70E6C811ECB80FD99D7E19CB35?viewType=FullText&originationContext=documenttoc&transitionType=CategoryPageItem&contextData=(sc.Default) diff --git a/fiscalsim_us/parameters/gov/states/md/tax/income/deductions/standard/max.yaml b/fiscalsim_us/parameters/gov/states/md/tax/income/deductions/standard/max.yaml index 5755abc4a..244c8dbbe 100644 --- a/fiscalsim_us/parameters/gov/states/md/tax/income/deductions/standard/max.yaml +++ b/fiscalsim_us/parameters/gov/states/md/tax/income/deductions/standard/max.yaml @@ -1,32 +1,79 @@ -description: Maryland provides a standard deduction of up to this amount. -metadata: - label: Maryland maximum standard deduction - period: year - unit: currency-USD - breakdown: - - filing_status - reference: - - title: "MD Code, Tax - General, § 10-217 (c)(1)" - href: https://govt.westlaw.com/mdc/Document/NC8EB19606F6911E8A99BCF2C90B83D38?viewType=FullText&originationContext=documenttoc&transitionType=CategoryPageItem&contextData=(sc.Default)#co_anchor_I552E3B107DF711ECA8F2FF3A9E62BB69 - - title: "MD Code, Tax - General, § 10-217 (d)(1)-(d)(3)" - href: https://govt.westlaw.com/mdc/Document/NC8EB19606F6911E8A99BCF2C90B83D38?viewType=FullText&originationContext=documenttoc&transitionType=CategoryPageItem&contextData=(sc.Default)#co_anchor_I552E3B107DF711ECA8F2FF3A9E62BB69 - - title: "MD Code, Tax - General, § 10-217 (d)(1)-(d)(3)" - href: https://govt.westlaw.com/mdc/Document/NC8EB19606F6911E8A99BCF2C90B83D38?viewType=FullText&originationContext=documenttoc&transitionType=CategoryPageItem&contextData=(sc.Default)#co_anchor_I552E3B107DF711ECA8F2FF3A9E62BB69 - - title: "Maryland new tax year update -exemptions and deductions" - href: https://www.marylandtaxes.gov/new-tax-year-update.php#:~:text=Standard%20Deduction%20%2D%20The%20tax%20year,spouse%2C%20and%20taxpayers%20filing%20jointly. - -JOINT: - 2018-01-01: 4_500 - 2021-01-01: 4_700 -HEAD_OF_HOUSEHOLD: - 2018-01-01: 4_500 - 2021-01-01: 4_700 -SURVIVING_SPOUSE: - 2018-01-01: 4_500 - 2021-01-01: 4_700 -SINGLE: - 2018-01-01: 2_250 - 2021-01-01: 2_350 -SEPARATE: - 2018-01-01: 2_250 - 2021-01-01: 2_350 +description: Maryland provides a standard deduction of up to this amount. +metadata: + label: Maryland maximum standard deduction + period: year + unit: currency-USD + breakdown: + - filing_status + reference: + - title: Maryland 2023 State & Local Tax Forms & Instructions + href: https://www.marylandtaxes.gov/forms/23_forms/Resident-Booklet.pdf#page=19 + - title: "MD Code, Tax - General, § 10-217 (c)(1)" + href: https://govt.westlaw.com/mdc/Document/NC8EB19606F6911E8A99BCF2C90B83D38?viewType=FullText&originationContext=documenttoc&transitionType=CategoryPageItem&contextData=(sc.Default)#co_anchor_I552E3B107DF711ECA8F2FF3A9E62BB69 + - title: "MD Code, Tax - General, § 10-217 (d)(1)-(d)(3)" + href: https://govt.westlaw.com/mdc/Document/NC8EB19606F6911E8A99BCF2C90B83D38?viewType=FullText&originationContext=documenttoc&transitionType=CategoryPageItem&contextData=(sc.Default)#co_anchor_I552E3B107DF711ECA8F2FF3A9E62BB69 + - title: "MD Code, Tax - General, § 10-217 (d)(1)-(d)(3)" + href: https://govt.westlaw.com/mdc/Document/NC8EB19606F6911E8A99BCF2C90B83D38?viewType=FullText&originationContext=documenttoc&transitionType=CategoryPageItem&contextData=(sc.Default)#co_anchor_I552E3B107DF711ECA8F2FF3A9E62BB69 + - title: "Maryland new tax year update -exemptions and deductions" + href: https://www.marylandtaxes.gov/new-tax-year-update.php#:~:text=Standard%20Deduction%20%2D%20The%20tax%20year,spouse%2C%20and%20taxpayers%20filing%20jointly. + +JOINT: + values: + 2018-01-01: 4_500 + 2021-01-01: 4_700 + 2022-01-01: 4_850 + 2023-01-01: 5_150 + metadata: + uprating: + parameter: gov.irs.uprating + rounding: + type: downwards + interval: 50 +HEAD_OF_HOUSEHOLD: + values: + 2018-01-01: 4_500 + 2021-01-01: 4_700 + 2022-01-01: 4_850 + 2023-01-01: 5_150 + metadata: + uprating: + parameter: gov.irs.uprating + rounding: + type: downwards + interval: 50 +SURVIVING_SPOUSE: + values: + 2018-01-01: 4_500 + 2021-01-01: 4_700 + 2022-01-01: 4_850 + 2023-01-01: 5_150 + metadata: + uprating: + parameter: gov.irs.uprating + rounding: + type: downwards + interval: 50 +SINGLE: + values: + 2018-01-01: 2_250 + 2021-01-01: 2_350 + 2022-01-01: 2_400 + 2023-01-01: 2_550 + metadata: + uprating: + parameter: gov.irs.uprating + rounding: + type: downwards + interval: 50 +SEPARATE: + values: + 2018-01-01: 2_250 + 2021-01-01: 2_350 + 2022-01-01: 2_400 + 2023-01-01: 2_550 + metadata: + uprating: + parameter: gov.irs.uprating + rounding: + type: downwards + interval: 50 diff --git a/fiscalsim_us/parameters/gov/states/md/tax/income/deductions/standard/min.yaml b/fiscalsim_us/parameters/gov/states/md/tax/income/deductions/standard/min.yaml index d7228582b..53be749bf 100644 --- a/fiscalsim_us/parameters/gov/states/md/tax/income/deductions/standard/min.yaml +++ b/fiscalsim_us/parameters/gov/states/md/tax/income/deductions/standard/min.yaml @@ -1,32 +1,81 @@ -description: Maryland provides a standard deduction of at least this amount. -metadata: - label: Maryland minimum standard deduction - period: year - unit: currency-USD - breakdown: - - filing_status - reference: - - title: "MD Code, Tax - General, § 10-217 (c)(1)" - href: https://govt.westlaw.com/mdc/Document/NC8EB19606F6911E8A99BCF2C90B83D38?viewType=FullText&originationContext=documenttoc&transitionType=CategoryPageItem&contextData=(sc.Default)#co_anchor_I552E3B107DF711ECA8F2FF3A9E62BB69 - - title: "MD Code, Tax - General, § 10-217 (d)(1)-(d)(3)" - href: https://govt.westlaw.com/mdc/Document/NC8EB19606F6911E8A99BCF2C90B83D38?viewType=FullText&originationContext=documenttoc&transitionType=CategoryPageItem&contextData=(sc.Default)#co_anchor_I552E3B107DF711ECA8F2FF3A9E62BB69 - - title: "MD Code, Tax - General, § 10-217 (d)(1)-(d)(3)" - href: https://govt.westlaw.com/mdc/Document/NC8EB19606F6911E8A99BCF2C90B83D38?viewType=FullText&originationContext=documenttoc&transitionType=CategoryPageItem&contextData=(sc.Default)#co_anchor_I552E3B107DF711ECA8F2FF3A9E62BB69 - - title: "Maryland new tax year update -exemptions and deductions" - href: https://www.marylandtaxes.gov/new-tax-year-update.php#:~:text=Standard%20Deduction%20%2D%20The%20tax%20year,spouse%2C%20and%20taxpayers%20filing%20jointly. - -JOINT: - 2018-01-01: 3_000 - 2021-01-01: 3_100 -HEAD_OF_HOUSEHOLD: - 2018-01-01: 3_000 - 2021-01-01: 3_100 -SURVIVING_SPOUSE: - 2018-01-01: 3_000 - 2021-01-01: 3_100 -SINGLE: - 2018-01-01: 1_500 - 2021-01-01: 1_550 -SEPARATE: - 2018-01-01: 1_500 - 2021-01-01: 1_550 +description: Maryland provides a standard deduction of at least this amount. +metadata: + label: Maryland minimum standard deduction + period: year + unit: currency-USD + breakdown: + - filing_status + reference: + - title: Maryland 2023 State & Local Tax Forms & Instructions + href: https://www.marylandtaxes.gov/forms/23_forms/Resident-Booklet.pdf#page=19 + - title: MD Code, Tax - General, § 10-217 (c)(1) + href: https://govt.westlaw.com/mdc/Document/NC8EB19606F6911E8A99BCF2C90B83D38?viewType=FullText&originationContext=documenttoc&transitionType=CategoryPageItem&contextData=(sc.Default)#co_anchor_I552E3B107DF711ECA8F2FF3A9E62BB69 + - title: MD Code, Tax - General, § 10-217 (d)(1)-(d)(3) + href: https://govt.westlaw.com/mdc/Document/NC8EB19606F6911E8A99BCF2C90B83D38?viewType=FullText&originationContext=documenttoc&transitionType=CategoryPageItem&contextData=(sc.Default)#co_anchor_I552E3B107DF711ECA8F2FF3A9E62BB69 + - title: MD Code, Tax - General, § 10-217 (d)(1)-(d)(3) + href: https://govt.westlaw.com/mdc/Document/NC8EB19606F6911E8A99BCF2C90B83D38?viewType=FullText&originationContext=documenttoc&transitionType=CategoryPageItem&contextData=(sc.Default)#co_anchor_I552E3B107DF711ECA8F2FF3A9E62BB69 + - title: Maryland new tax year update -exemptions and deductions + href: https://www.marylandtaxes.gov/new-tax-year-update.php#:~:text=Standard%20Deduction%20%2D%20The%20tax%20year,spouse%2C%20and%20taxpayers%20filing%20jointly. + - title: Maryland 2022 State & Local Tax Forms & Instructions + href: https://www.marylandtaxes.gov/forms/22_forms/Resident_Booklet.pdf#page=18 + +JOINT: + values: + 2018-01-01: 3_000 + 2021-01-01: 3_100 + 2022-01-01: 3_200 + 2023-01-01: 3_450 + metadata: + uprating: + parameter: gov.irs.uprating + rounding: + type: downwards + interval: 50 +HEAD_OF_HOUSEHOLD: + values: + 2018-01-01: 3_000 + 2021-01-01: 3_100 + 2022-01-01: 3_200 + 2023-01-01: 3_450 + metadata: + uprating: + parameter: gov.irs.uprating + rounding: + type: downwards + interval: 50 +SURVIVING_SPOUSE: + values: + 2018-01-01: 3_000 + 2021-01-01: 3_100 + 2022-01-01: 3_200 + 2023-01-01: 3_450 + metadata: + uprating: + parameter: gov.irs.uprating + rounding: + type: downwards + interval: 50 +SINGLE: + values: + 2018-01-01: 1_500 + 2021-01-01: 1_550 + 2022-01-01: 1_600 + 2023-01-01: 1_700 + metadata: + uprating: + parameter: gov.irs.uprating + rounding: + type: downwards + interval: 50 +SEPARATE: + values: + 2018-01-01: 1_500 + 2021-01-01: 1_550 + 2022-01-01: 1_600 + 2023-01-01: 1_700 + metadata: + uprating: + parameter: gov.irs.uprating + rounding: + type: downwards + interval: 50 diff --git a/fiscalsim_us/parameters/gov/states/md/tax/income/deductions/standard/rate.yaml b/fiscalsim_us/parameters/gov/states/md/tax/income/deductions/standard/rate.yaml index 15fb956aa..73db443e0 100644 --- a/fiscalsim_us/parameters/gov/states/md/tax/income/deductions/standard/rate.yaml +++ b/fiscalsim_us/parameters/gov/states/md/tax/income/deductions/standard/rate.yaml @@ -2,8 +2,10 @@ description: Maryland provides a standard deduction of this share of a filer's a metadata: period: year unit: /1 - label: MD standard deduction as a percent of AGI + label: Maryland standard deduction as a percent of AGI reference: + - title: Maryland 2023 State & Local Tax Forms & Instructions + href: https://www.marylandtaxes.gov/forms/23_forms/Resident-Booklet.pdf#page=15 - title: "MD Code, Tax - General, § 10-217 (b)" href: https://govt.westlaw.com/mdc/Document/NC8EB19606F6911E8A99BCF2C90B83D38?viewType=FullText&originationContext=documenttoc&transitionType=CategoryPageItem&contextData=(sc.Default)#co_anchor_I552E3B107DF711ECA8F2FF3A9E62BB69 values: diff --git a/fiscalsim_us/parameters/gov/states/md/tax/income/exemptions/aged/age.yaml b/fiscalsim_us/parameters/gov/states/md/tax/income/exemptions/aged/age.yaml index 4f50c4108..517f55c1b 100644 --- a/fiscalsim_us/parameters/gov/states/md/tax/income/exemptions/aged/age.yaml +++ b/fiscalsim_us/parameters/gov/states/md/tax/income/exemptions/aged/age.yaml @@ -3,10 +3,12 @@ values: 2013-01-01: 65 metadata: reference: - - title: "Form 502b(c)(3) (MD)" + - title: Maryland 2023 State & Local Tax Forms & Instructions + href: https://www.marylandtaxes.gov/forms/23_forms/Resident-Booklet.pdf#page=12 + - title: Maryland 2021 State & Local Tax Forms & Instructions href: https://www.marylandtaxes.gov/forms/21_forms/Resident_Booklet.pdf - title: "MD Section 10-211(b)(2)" href: https://casetext.com/statute/code-of-maryland/article-tax-general/title-10-income-tax/subtitle-2-maryland-taxable-income-calculations-for-individual/part-iii-exemptions/section-10-211-individuals-other-than-fiduciaries?searchWithin=true&listingIndexId=code-of-maryland.article-tax-general&q=blind&type=statute&sort=relevance&p=1 unit: year - name: md_income_tax_aged_exemption_age_threshold - label: MD income tax aged exemption age threshold + period: year + label: Maryland income tax aged exemption age threshold diff --git a/fiscalsim_us/parameters/gov/states/md/tax/income/exemptions/aged/aged_dependent.yaml b/fiscalsim_us/parameters/gov/states/md/tax/income/exemptions/aged/aged_dependent.yaml index 1262d9f45..2c6043e60 100644 --- a/fiscalsim_us/parameters/gov/states/md/tax/income/exemptions/aged/aged_dependent.yaml +++ b/fiscalsim_us/parameters/gov/states/md/tax/income/exemptions/aged/aged_dependent.yaml @@ -3,9 +3,10 @@ values: 2013-01-01: 3_200 metadata: reference: + - title: Maryland 2023 State & Local Tax Forms & Instructions + href: https://www.marylandtaxes.gov/forms/23_forms/Resident-Booklet.pdf#page=12 - title: MD Code, Tax - General, § 10-211 10-211{b}(2). Exemptions for individuals href: https://govt.westlaw.com/mdc/Document/NF59A76006EA511E8ABBEE50DE853DFF4?viewType=FullText&originationContext=documenttoc&transitionType=CategoryPageItem&contextData=(sc.Default)#co_anchor_I40A97CD07DFD11ECA8F2FF3A9E62BB69 unit: currency-USD period: year - name: md_income_tax_aged_dependent_exemption - label: MD income tax aged dependent exemption + label: Maryland income tax aged dependent exemption diff --git a/fiscalsim_us/parameters/gov/states/md/tax/income/exemptions/aged/amount.yaml b/fiscalsim_us/parameters/gov/states/md/tax/income/exemptions/aged/amount.yaml index bfa0f8280..9ab4a62fb 100644 --- a/fiscalsim_us/parameters/gov/states/md/tax/income/exemptions/aged/amount.yaml +++ b/fiscalsim_us/parameters/gov/states/md/tax/income/exemptions/aged/amount.yaml @@ -3,11 +3,12 @@ values: 2013-01-01: 1_000 metadata: reference: - - title: "Form 502b(c)(3) (MD)" + - title: Maryland 2023 State & Local Tax Forms & Instructions + href: https://www.marylandtaxes.gov/forms/23_forms/Resident-Booklet.pdf#page=12 + - title: Maryland 2021 State & Local Tax Forms & Instructions href: https://www.marylandtaxes.gov/forms/21_forms/Resident_Booklet.pdf - title: "MD Section 10-211(b)(2)" href: https://casetext.com/statute/code-of-maryland/article-tax-general/title-10-income-tax/subtitle-2-maryland-taxable-income-calculations-for-individual/part-iii-exemptions/section-10-211-individuals-other-than-fiduciaries?searchWithin=true&listingIndexId=code-of-maryland.article-tax-general&q=blind&type=statute&sort=relevance&p=1 unit: currency-USD period: year - name: md_income_tax_aged_exemption - label: MD income tax aged exemption + label: Maryland income tax aged exemption diff --git a/fiscalsim_us/parameters/gov/states/md/tax/income/exemptions/blind.yaml b/fiscalsim_us/parameters/gov/states/md/tax/income/exemptions/blind.yaml index 09b444018..f912023e3 100644 --- a/fiscalsim_us/parameters/gov/states/md/tax/income/exemptions/blind.yaml +++ b/fiscalsim_us/parameters/gov/states/md/tax/income/exemptions/blind.yaml @@ -3,6 +3,8 @@ values: 2021-01-01: 1_000 metadata: reference: + - title: "Maryland 2023 State & Local Tax Forms & Instructions" + href: https://www.marylandtaxes.gov/forms/23_forms/Resident-Booklet.pdf#page=12 - title: "MD Section 10-211(b)(4)" href: "https://casetext.com/statute/code-of-maryland/article-tax-general/title-10-income-tax/subtitle-2-maryland-taxable-income-calculations-for-individual/part-iii-exemptions/section-10-211-individuals-other-than-fiduciaries?searchWithin=true&listingIndexId=code-of-maryland.article-tax-general&q=blind&type=statute&sort=relevance&p=1" unit: currency-USD diff --git a/fiscalsim_us/parameters/gov/states/md/tax/income/exemptions/personal/head.yaml b/fiscalsim_us/parameters/gov/states/md/tax/income/exemptions/personal/head.yaml index 110100786..c68e06830 100644 --- a/fiscalsim_us/parameters/gov/states/md/tax/income/exemptions/personal/head.yaml +++ b/fiscalsim_us/parameters/gov/states/md/tax/income/exemptions/personal/head.yaml @@ -36,7 +36,9 @@ metadata: amount_unit: currency-USD label: Maryland personal exemption for head of household filers, based on AGI reference: + - title: Maryland 2023 State & Local Tax Forms & Instructions + href: https://www.marylandtaxes.gov/forms/23_forms/Resident-Booklet.pdf#page=11 - title: Part III - Exemptions Section 10-211 Individuals Other Than Fiduciaries (c)(2) href: https://casetext.com/statute/code-of-maryland/article-tax-general/title-10-income-tax/subtitle-2-maryland-taxable-income-calculations-for-individual/part-iii-exemptions/section-10-211-individuals-other-than-fiduciaries?searchWithin=true&listingIndexId=code-of-maryland.article-tax-general&q=blind&type=statute&sort=relevance&p=1 - - title: Form 502(d), instruction 10A + - title: 2021 State & Local Tax Forms & Instructions Maryland href: https://www.marylandtaxes.gov/forms/21_forms/Resident_Booklet.pdf diff --git a/fiscalsim_us/parameters/gov/states/md/tax/income/exemptions/personal/joint.yaml b/fiscalsim_us/parameters/gov/states/md/tax/income/exemptions/personal/joint.yaml index a089945b6..dd0b7c768 100644 --- a/fiscalsim_us/parameters/gov/states/md/tax/income/exemptions/personal/joint.yaml +++ b/fiscalsim_us/parameters/gov/states/md/tax/income/exemptions/personal/joint.yaml @@ -36,7 +36,9 @@ metadata: amount_unit: currency-USD label: Maryland personal exemption for joint filers, based on AGI reference: + - title: 2023 State & Local Tax Forms & Instructions Maryland + href: https://www.marylandtaxes.gov/forms/23_forms/Resident-Booklet.pdf#page=11 - title: Part III - Exemptions Section 10-211 Individuals Other Than Fiduciaries (c)(2) href: https://casetext.com/statute/code-of-maryland/article-tax-general/title-10-income-tax/subtitle-2-maryland-taxable-income-calculations-for-individual/part-iii-exemptions/section-10-211-individuals-other-than-fiduciaries?searchWithin=true&listingIndexId=code-of-maryland.article-tax-general&q=blind&type=statute&sort=relevance&p=1 - - title: Form 502(d), instruction 10A + - title: 2021 State & Local Tax Forms & Instructions Maryland href: https://www.marylandtaxes.gov/forms/21_forms/Resident_Booklet.pdf diff --git a/fiscalsim_us/parameters/gov/states/md/tax/income/exemptions/personal/separate.yaml b/fiscalsim_us/parameters/gov/states/md/tax/income/exemptions/personal/separate.yaml index be2c5e2f5..30e8ba0e4 100644 --- a/fiscalsim_us/parameters/gov/states/md/tax/income/exemptions/personal/separate.yaml +++ b/fiscalsim_us/parameters/gov/states/md/tax/income/exemptions/personal/separate.yaml @@ -35,5 +35,7 @@ metadata: amount_unit: currency-USD label: Maryland personal exemption for married filing separate filers, based on AGI reference: + - title: 2023 State & Local Tax Forms & Instructions Maryland + href: https://www.marylandtaxes.gov/forms/23_forms/Resident-Booklet.pdf#page=11 - title: Part III - Exemptions Section 10-211 Individuals Other Than Fiduciaries (c)(1) href: https://casetext.com/statute/code-of-maryland/article-tax-general/title-10-income-tax/subtitle-2-maryland-taxable-income-calculations-for-individual/part-iii-exemptions/section-10-211-individuals-other-than-fiduciaries?searchWithin=true&listingIndexId=code-of-maryland.article-tax-general&q=blind&type=statute&sort=relevance&p=1 diff --git a/fiscalsim_us/parameters/gov/states/md/tax/income/exemptions/personal/single.yaml b/fiscalsim_us/parameters/gov/states/md/tax/income/exemptions/personal/single.yaml index 9cbd54379..710fc8af6 100644 --- a/fiscalsim_us/parameters/gov/states/md/tax/income/exemptions/personal/single.yaml +++ b/fiscalsim_us/parameters/gov/states/md/tax/income/exemptions/personal/single.yaml @@ -35,5 +35,7 @@ metadata: amount_unit: currency-USD label: Maryland personal exemption for single filers, based on AGI reference: + - title: 2023 State & Local Tax Forms & Instructions Maryland + href: https://www.marylandtaxes.gov/forms/23_forms/Resident-Booklet.pdf#page=11 - title: Part III - Exemptions Section 10-211 Individuals Other Than Fiduciaries (c)(1) href: https://casetext.com/statute/code-of-maryland/article-tax-general/title-10-income-tax/subtitle-2-maryland-taxable-income-calculations-for-individual/part-iii-exemptions/section-10-211-individuals-other-than-fiduciaries?searchWithin=true&listingIndexId=code-of-maryland.article-tax-general&q=blind&type=statute&sort=relevance&p=1 diff --git a/fiscalsim_us/parameters/gov/states/md/tax/income/exemptions/personal/widow.yaml b/fiscalsim_us/parameters/gov/states/md/tax/income/exemptions/personal/widow.yaml index 1ab3d5130..6b1b63d7c 100644 --- a/fiscalsim_us/parameters/gov/states/md/tax/income/exemptions/personal/widow.yaml +++ b/fiscalsim_us/parameters/gov/states/md/tax/income/exemptions/personal/widow.yaml @@ -36,7 +36,9 @@ metadata: amount_unit: currency-USD label: Maryland personal exemption for widow(er) filers, based on AGI reference: + - title: 2023 State & Local Tax Forms & Instructions Maryland + href: https://www.marylandtaxes.gov/forms/23_forms/Resident-Booklet.pdf#page=11 - title: Part III - Exemptions Section 10-211 Individuals Other Than Fiduciaries (c)(2) href: https://casetext.com/statute/code-of-maryland/article-tax-general/title-10-income-tax/subtitle-2-maryland-taxable-income-calculations-for-individual/part-iii-exemptions/section-10-211-individuals-other-than-fiduciaries?searchWithin=true&listingIndexId=code-of-maryland.article-tax-general&q=blind&type=statute&sort=relevance&p=1 - - title: Form 502(d), instruction 10A + - title: 2021 State & Local Tax Forms & Instructions Maryland href: https://www.marylandtaxes.gov/forms/21_forms/Resident_Booklet.pdf diff --git a/fiscalsim_us/parameters/gov/states/md/tax/income/rates/head.yaml b/fiscalsim_us/parameters/gov/states/md/tax/income/rates/head.yaml index 61b7cb212..de5857522 100644 --- a/fiscalsim_us/parameters/gov/states/md/tax/income/rates/head.yaml +++ b/fiscalsim_us/parameters/gov/states/md/tax/income/rates/head.yaml @@ -5,11 +5,13 @@ metadata: rate_unit: /1 label: Maryland income tax rate for head of household filers reference: + - title: Maryland 2023 State & Local Tax Forms & Instructions + href: https://www.marylandtaxes.gov/forms/23_forms/Resident-Booklet.pdf#page=20 - title: Tax Foundation State Individual Income Tax Rates and Brackets href: https://taxfoundation.org/publications/state-individual-income-tax-rates-and-brackets/#Structures - title: MD Tax_Computation href: https://www.marylandtaxes.gov/forms/current_forms/Md_Tax_Computation.pdf - - title: MD resident booklet individual - instruction 17, 2021 - Form 502 + - title: Maryland 2021 State & Local Tax Forms & Instructions href: https://www.marylandtaxes.gov/forms/21_forms/Resident_Booklet.pdf - title: § 10-105 (a)(2). State income tax rates href: https://govt.westlaw.com/mdc/Document/N5C14CC91D9D311E2A5EFA1428CB399FF?viewType=FullText&originationContext=documenttoc&transitionType=CategoryPageItem&contextData=(sc.Default) diff --git a/fiscalsim_us/parameters/gov/states/md/tax/income/rates/joint.yaml b/fiscalsim_us/parameters/gov/states/md/tax/income/rates/joint.yaml index d211b1a06..222b9774e 100644 --- a/fiscalsim_us/parameters/gov/states/md/tax/income/rates/joint.yaml +++ b/fiscalsim_us/parameters/gov/states/md/tax/income/rates/joint.yaml @@ -5,11 +5,13 @@ metadata: rate_unit: /1 label: Maryland income tax rate for joint filers reference: + - title: Maryland 2023 State & Local Tax Forms & Instructions + href: https://www.marylandtaxes.gov/forms/23_forms/Resident-Booklet.pdf#page=20 - title: Tax Foundation State Individual Income Tax Rates and Brackets href: https://taxfoundation.org/publications/state-individual-income-tax-rates-and-brackets/#Structures - title: MD Tax_Computation href: https://www.marylandtaxes.gov/forms/current_forms/Md_Tax_Computation.pdf - - title: MD resident booklet individual - instruction 17, 2021 - Form 502 + - title: Maryland 2021 State & Local Tax Forms & Instructions href: https://www.marylandtaxes.gov/forms/21_forms/Resident_Booklet.pdf - title: § 10-105 (a)(2). State income tax rates href: https://govt.westlaw.com/mdc/Document/N5C14CC91D9D311E2A5EFA1428CB399FF?viewType=FullText&originationContext=documenttoc&transitionType=CategoryPageItem&contextData=(sc.Default) diff --git a/fiscalsim_us/parameters/gov/states/md/tax/income/rates/separate.yaml b/fiscalsim_us/parameters/gov/states/md/tax/income/rates/separate.yaml index a6468aa6b..55832986a 100644 --- a/fiscalsim_us/parameters/gov/states/md/tax/income/rates/separate.yaml +++ b/fiscalsim_us/parameters/gov/states/md/tax/income/rates/separate.yaml @@ -5,11 +5,13 @@ metadata: rate_unit: /1 label: Maryland income tax rate for married filing separately filers. reference: + - title: Maryland 2023 State & Local Tax Forms & Instructions + href: https://www.marylandtaxes.gov/forms/23_forms/Resident-Booklet.pdf#page=20 - title: Tax Foundation State Individual Income Tax Rates and Brackets href: https://taxfoundation.org/publications/state-individual-income-tax-rates-and-brackets/#Structures - title: MD Tax_Computation href: https://www.marylandtaxes.gov/forms/current_forms/Md_Tax_Computation.pdf - - title: MD resident booklet individual - instruction 17, 2021 - Form 502 + - title: Maryland 2021 State & Local Tax Forms & Instructions href: https://www.marylandtaxes.gov/forms/21_forms/Resident_Booklet.pdf - title: § 10-105 (a)(1). State income tax rates href: https://govt.westlaw.com/mdc/Document/N5C14CC91D9D311E2A5EFA1428CB399FF?viewType=FullText&originationContext=documenttoc&transitionType=CategoryPageItem&contextData=(sc.Default) diff --git a/fiscalsim_us/parameters/gov/states/md/tax/income/rates/single.yaml b/fiscalsim_us/parameters/gov/states/md/tax/income/rates/single.yaml index 0a0a51387..ac8461f30 100644 --- a/fiscalsim_us/parameters/gov/states/md/tax/income/rates/single.yaml +++ b/fiscalsim_us/parameters/gov/states/md/tax/income/rates/single.yaml @@ -5,11 +5,13 @@ metadata: rate_unit: /1 label: Maryland income tax rate for single filers. reference: + - title: Maryland 2023 State & Local Tax Forms & Instructions + href: https://www.marylandtaxes.gov/forms/23_forms/Resident-Booklet.pdf#page=20 - title: Tax Foundation State Individual Income Tax Rates and Brackets href: https://taxfoundation.org/publications/state-individual-income-tax-rates-and-brackets/#Structures - title: MD Tax_Computation href: https://www.marylandtaxes.gov/forms/current_forms/Md_Tax_Computation.pdf - - title: MD resident booklet individual - instruction 17, 2021 - Form 502 + - title: Maryland 2021 State & Local Tax Forms & Instructions href: https://www.marylandtaxes.gov/forms/21_forms/Resident_Booklet.pdf - title: § 10-105 (a)(1). State income tax rates href: https://govt.westlaw.com/mdc/Document/N5C14CC91D9D311E2A5EFA1428CB399FF?viewType=FullText&originationContext=documenttoc&transitionType=CategoryPageItem&contextData=(sc.Default) diff --git a/fiscalsim_us/parameters/gov/states/md/tax/income/rates/widow.yaml b/fiscalsim_us/parameters/gov/states/md/tax/income/rates/widow.yaml index 53261bc52..a0f00ea1e 100644 --- a/fiscalsim_us/parameters/gov/states/md/tax/income/rates/widow.yaml +++ b/fiscalsim_us/parameters/gov/states/md/tax/income/rates/widow.yaml @@ -5,11 +5,13 @@ metadata: rate_unit: /1 label: Maryland income tax rate for widow(er) filers reference: + - title: Maryland 2023 State & Local Tax Forms & Instructions + href: https://www.marylandtaxes.gov/forms/23_forms/Resident-Booklet.pdf#page=20 - title: Tax Foundation State Individual Income Tax Rates and Brackets href: https://taxfoundation.org/publications/state-individual-income-tax-rates-and-brackets/#Structures - title: MD Tax_Computation href: https://www.marylandtaxes.gov/forms/current_forms/Md_Tax_Computation.pdf - - title: MD resident booklet individual - instruction 17, 2021 - Form 502 + - title: Maryland 2021 State & Local Tax Forms & Instructions href: https://www.marylandtaxes.gov/forms/21_forms/Resident_Booklet.pdf - title: § 10-105 (a)(2). State income tax rates href: https://govt.westlaw.com/mdc/Document/N5C14CC91D9D311E2A5EFA1428CB399FF?viewType=FullText&originationContext=documenttoc&transitionType=CategoryPageItem&contextData=(sc.Default) diff --git a/fiscalsim_us/parameters/gov/states/md/usda/snap/min_allotment/age_threshold.yaml b/fiscalsim_us/parameters/gov/states/md/usda/snap/min_allotment/age_threshold.yaml new file mode 100644 index 000000000..d925369a7 --- /dev/null +++ b/fiscalsim_us/parameters/gov/states/md/usda/snap/min_allotment/age_threshold.yaml @@ -0,0 +1,12 @@ +description: Maryland supplements the Supplemental Nutritional Assistant Program minimum allotment for households that include individuals this age or older. +values: + 2016-10-01: 62 +metadata: + unit: year + period: year + label: Maryland SNAP age threshold for supplement minimum allotment + reference: + - title: House Bill 456 (2022 Legislation) + href: https://mgaleg.maryland.gov/2022RS/bills/hb/hb0456T.pdf#page=2 + - title: Md. Code, Hum. Servs. § 5-501 (d) + href: https://casetext.com/statute/code-of-maryland/article-human-services/title-5-public-assistance/subtitle-5-food-stamps/section-5-501-food-supplement-program diff --git a/fiscalsim_us/parameters/gov/states/md/usda/snap/min_allotment/amount.yaml b/fiscalsim_us/parameters/gov/states/md/usda/snap/min_allotment/amount.yaml new file mode 100644 index 000000000..d73addf3b --- /dev/null +++ b/fiscalsim_us/parameters/gov/states/md/usda/snap/min_allotment/amount.yaml @@ -0,0 +1,15 @@ +description: Maryland provides the following monthly SNAP minimum allotment amount. +values: + 2016-01-01: 30 + 2022-10-01: 40 +metadata: + period: month + unit: currency-USD + label: Maryland SNAP minimum allotment amount + reference: + - title: House Bill 445 (2016 Legislation) + href: https://mgaleg.maryland.gov/2016RS/bills/hb/hb0445E.pdf#page=2 + - title: House Bill 456 (2022 Legislation) + href: https://mgaleg.maryland.gov/2022RS/bills/hb/hb0456T.pdf#page=2 + - title: Md. Code, Hum. Servs. § 5-501 (d) + href: https://casetext.com/statute/code-of-maryland/article-human-services/title-5-public-assistance/subtitle-5-food-stamps/section-5-501-food-supplement-program diff --git a/fiscalsim_us/parameters/gov/states/md/usda/snap/min_allotment/in_effect.yaml b/fiscalsim_us/parameters/gov/states/md/usda/snap/min_allotment/in_effect.yaml new file mode 100644 index 000000000..9f8089b29 --- /dev/null +++ b/fiscalsim_us/parameters/gov/states/md/usda/snap/min_allotment/in_effect.yaml @@ -0,0 +1,13 @@ +description: Maryland provides a separate SNAP minimum allotment amount if this is true. +values: + 0000-01-01: false + 2016-10-01: true +metadata: + period: year + unit: bool + label: Maryland SNAP minimum allotment in effect + reference: + - title: House Bill 456 (2022 Legislation) + href: https://mgaleg.maryland.gov/2022RS/bills/hb/hb0456T.pdf#page=2 + - title: Md. Code, Hum. Servs. § 5-501 + href: https://casetext.com/statute/code-of-maryland/article-human-services/title-5-public-assistance/subtitle-5-food-stamps/section-5-501-food-supplement-program diff --git a/fiscalsim_us/parameters/gov/states/vt/index.yaml b/fiscalsim_us/parameters/gov/states/vt/index.yaml deleted file mode 100644 index 2852e302a..000000000 --- a/fiscalsim_us/parameters/gov/states/vt/index.yaml +++ /dev/null @@ -1,4 +0,0 @@ -metadata: - propagate_metadata_to_children: true - economy: false - household: false diff --git a/fiscalsim_us/parameters/gov/states/vt/tax/income/agi/exclusions/capital_gain/flat/cap.yaml b/fiscalsim_us/parameters/gov/states/vt/tax/income/agi/exclusions/capital_gain/flat/cap.yaml index b208b89a9..7d3f423fc 100644 --- a/fiscalsim_us/parameters/gov/states/vt/tax/income/agi/exclusions/capital_gain/flat/cap.yaml +++ b/fiscalsim_us/parameters/gov/states/vt/tax/income/agi/exclusions/capital_gain/flat/cap.yaml @@ -9,6 +9,8 @@ metadata: - title: 2021 Schedule IN-153Vermont Capital Gains Exclusion Calculation # Line 9 href: https://tax.vermont.gov/sites/tax/files/documents/IN-153-2021.pdf#page=1 # Legal code specify maximum flat exclusion as $5,000. Date unknown. + - title: 2023 Schedule IN-153Vermont Capital Gains Exclusion Calculation # Line 9 + href: https://tax.vermont.gov/sites/tax/files/documents/IN-153-2023.pdf#page=1 - title: Legal code Titl. 32 V.S.A. § 5811(21)(B)(ii) href: https://legislature.vermont.gov/statutes/section/32/151/05811 values: diff --git a/fiscalsim_us/parameters/gov/states/vt/tax/income/agi/exclusions/capital_gain/income_share_cap.yaml b/fiscalsim_us/parameters/gov/states/vt/tax/income/agi/exclusions/capital_gain/income_share_cap.yaml index 8330464d2..97476b5f4 100644 --- a/fiscalsim_us/parameters/gov/states/vt/tax/income/agi/exclusions/capital_gain/income_share_cap.yaml +++ b/fiscalsim_us/parameters/gov/states/vt/tax/income/agi/exclusions/capital_gain/income_share_cap.yaml @@ -9,6 +9,8 @@ metadata: href: https://tax.vermont.gov/sites/tax/files/documents/IN-153-2022.pdf#page=1 - title: 2021 Schedule IN-153Vermont Capital Gains Exclusion Calculation # Line 20 href: https://tax.vermont.gov/sites/tax/files/documents/IN-153-2021.pdf#page=1 + - title: 2023 Schedule IN-153Vermont Capital Gains Exclusion Calculation # Line 20 + href: https://tax.vermont.gov/sites/tax/files/documents/IN-153-2023.pdf#page=1 # Legal code specify 40 percent of federal taxable income as the maximum capital gains exclusion. Date unknown. - title: Legal code Titl. 32 V.S.A. § 5811(21)(B)(ii)(II) href: https://legislature.vermont.gov/statutes/section/32/151/05811 diff --git a/fiscalsim_us/parameters/gov/states/vt/tax/income/agi/exclusions/capital_gain/percentage/cap.yaml b/fiscalsim_us/parameters/gov/states/vt/tax/income/agi/exclusions/capital_gain/percentage/cap.yaml index 2a8e51d4a..815c5a510 100644 --- a/fiscalsim_us/parameters/gov/states/vt/tax/income/agi/exclusions/capital_gain/percentage/cap.yaml +++ b/fiscalsim_us/parameters/gov/states/vt/tax/income/agi/exclusions/capital_gain/percentage/cap.yaml @@ -8,6 +8,8 @@ metadata: href: https://tax.vermont.gov/sites/tax/files/documents/IN-153-2022.pdf#page=1 - title: 2021 Schedule IN-153Vermont Capital Gains Exclusion Calculation # Line 18 href: https://tax.vermont.gov/sites/tax/files/documents/IN-153-2021.pdf#page=1 + - title: 2023 Schedule IN-153Vermont Capital Gains Exclusion Calculation # Line 18 + href: https://tax.vermont.gov/sites/tax/files/documents/IN-153-2023.pdf#page=1 # Legal code specify the maximum percentage exclusion amount Date unknown. - title: Legal code Titl. 32 V.S.A. § 5811(21)(B)(ii)(II) href: https://legislature.vermont.gov/statutes/section/32/151/05811 diff --git a/fiscalsim_us/parameters/gov/states/vt/tax/income/agi/exclusions/capital_gain/percentage/rate.yaml b/fiscalsim_us/parameters/gov/states/vt/tax/income/agi/exclusions/capital_gain/percentage/rate.yaml index 237bd9347..3afc2aca1 100644 --- a/fiscalsim_us/parameters/gov/states/vt/tax/income/agi/exclusions/capital_gain/percentage/rate.yaml +++ b/fiscalsim_us/parameters/gov/states/vt/tax/income/agi/exclusions/capital_gain/percentage/rate.yaml @@ -8,6 +8,8 @@ metadata: href: https://tax.vermont.gov/sites/tax/files/documents/IN-153-2022.pdf#page=1 - title: 2021 Schedule IN-153Vermont Capital Gains Exclusion Calculation # Line 18 href: https://tax.vermont.gov/sites/tax/files/documents/IN-153-2021.pdf#page=1 + - title: 2023 Schedule IN-153Vermont Capital Gains Exclusion Calculation # Line 18 + href: https://tax.vermont.gov/sites/tax/files/documents/IN-153-2023.pdf#page=1 # Legal code specify 40 percent of adjusted net capital gain as the capital gains percentage exclusion. Date unknown. - title: Legal code Titl. 32 V.S.A. § 5811(21)(B)(ii) href: https://legislature.vermont.gov/statutes/section/32/151/05811 diff --git a/fiscalsim_us/parameters/gov/states/vt/tax/income/agi/retirement_income_exemption/csrs/amount.yaml b/fiscalsim_us/parameters/gov/states/vt/tax/income/agi/retirement_income_exemption/csrs/amount.yaml new file mode 100644 index 000000000..be69a80f6 --- /dev/null +++ b/fiscalsim_us/parameters/gov/states/vt/tax/income/agi/retirement_income_exemption/csrs/amount.yaml @@ -0,0 +1,19 @@ +description: Vermont caps the retirement income exemption from Civil Service Retirement System (CSRS) retirement system at this amount. +metadata: + label: Vermont CSRS retirement income exemption cap + period: year + unit: currency-USD + reference: + - title: Instruction for 2022 SCHEDULE IN-112 - RETIREMENT INCOME EXEMPTION WORKSHEET LINE 11 + href: https://tax.vermont.gov/sites/tax/files/documents/IN-112%20Instr-2022.pdf#page=3 + - title: Instruction for 2021 SCHEDULE IN-112 - SOCIAL SECURITY EXEMPTION WORKSHEET LINE 11 + href: https://tax.vermont.gov/sites/tax/files/documents/IN-112%20Instr-2021.pdf#page=2 + - title: Instruction for 2023 SCHEDULE IN-112 - SOCIAL SECURITY EXEMPTION WORKSHEET LINE 11 + href: https://tax.vermont.gov/sites/tax/files/documents/IN-112-Instr-2023.pdf#page=2 + # Legal code specifies maximum amount at $10,000. Effective date unknown + - title: Legal Code Titl. 32 V.S.A. § 5830e(b)(1)(B), (b)(2)(B),(c),(d) + href: https://legislature.vermont.gov/statutes/section/32/151/05830e +values: + # The other retirement systems are included in the retirement income exemption in 2022 + 2021-01-01: 0 + 2022-01-01: 10_000 diff --git a/fiscalsim_us/parameters/gov/states/vt/tax/income/agi/retirement_income_exemption/csrs/reduction/end.yaml b/fiscalsim_us/parameters/gov/states/vt/tax/income/agi/retirement_income_exemption/csrs/reduction/end.yaml new file mode 100644 index 000000000..62d3931aa --- /dev/null +++ b/fiscalsim_us/parameters/gov/states/vt/tax/income/agi/retirement_income_exemption/csrs/reduction/end.yaml @@ -0,0 +1,32 @@ +description: Vermont qualifies filers for the retirement income exemption from Civil Service Retirement System (CSRS) and military retirement with income below this threshold, based on filing status. +metadata: + label: Vermont CSRS and military retirement income exemption income threshold + period: year + unit: currency-USD + breakdown: + - filing_status + reference: + - title: Instruction for 2022 SCHEDULE IN-112 - RETIREMENT INCOME EXEMPTION WORKSHEET + href: https://tax.vermont.gov/sites/tax/files/documents/IN-112%20Instr-2022.pdf#page=3 + - title: Instruction for 2021 SCHEDULE IN-112 - SOCIAL SECURITY EXEMPTION WORKSHEET + href: https://tax.vermont.gov/sites/tax/files/documents/IN-112%20Instr-2021.pdf#page=2 + - title: Instruction for 2023 SCHEDULE IN-112 - SOCIAL SECURITY EXEMPTION WORKSHEET + href: https://tax.vermont.gov/sites/tax/files/documents/IN-112-Instr-2023.pdf#page=2 + # Legal code specifies inflation unadjusted thresholds + - title: Legal Code Titl. 32 V.S.A. § 5830e(a)(1)(C), (a)(2)(C) + href: https://legislature.vermont.gov/statutes/section/32/151/05830e +JOINT: + 2021-01-01: 70_000 + 2022-01-01: 75_000 +HEAD_OF_HOUSEHOLD: + 2021-01-01: 55_000 + 2022-01-01: 60_000 +SURVIVING_SPOUSE: + 2021-01-01: 55_000 + 2022-01-01: 60_000 +SINGLE: + 2021-01-01: 55_000 + 2022-01-01: 60_000 +SEPARATE: + 2021-01-01: 55_000 + 2022-01-01: 60_000 diff --git a/fiscalsim_us/parameters/gov/states/vt/tax/income/agi/retirement_income_exemption/csrs/reduction/start.yaml b/fiscalsim_us/parameters/gov/states/vt/tax/income/agi/retirement_income_exemption/csrs/reduction/start.yaml new file mode 100644 index 000000000..3325179aa --- /dev/null +++ b/fiscalsim_us/parameters/gov/states/vt/tax/income/agi/retirement_income_exemption/csrs/reduction/start.yaml @@ -0,0 +1,32 @@ +description: Vermont reduces the retirement income exemption from Civil Service Retirement System (CSRS) and military retirement for filers with income above this threshold, based on filing status. +metadata: + label: Vermont CSRS and military retirement income exemption reduction threshold + period: year + unit: currency-USD + breakdown: + - filing_status + reference: + - title: Instruction for 2022 SCHEDULE IN-112 - RETIREMENT INCOME EXEMPTION WORKSHEET + href: https://tax.vermont.gov/sites/tax/files/documents/IN-112%20Instr-2022.pdf#page=3 + - title: Instruction for 2021 SCHEDULE IN-112 - SOCIAL SECURITY EXEMPTION WORKSHEET + href: https://tax.vermont.gov/sites/tax/files/documents/IN-112%20Instr-2021.pdf#page=2 + - title: Instruction for 2023 SCHEDULE IN-112 - SOCIAL SECURITY EXEMPTION WORKSHEET + href: https://tax.vermont.gov/sites/tax/files/documents/IN-112-Instr-2023.pdf#page=2 + # Legal code specify reduction threshold at $50,000 for non filing jointly filer and at $65,000 for filing jointly filer. Date unknown. + - title: Legal Code Titl. 32 V.S.A. § 5830e(a)(1)(B), (a)(2)(B) + href: https://legislature.vermont.gov/statutes/section/32/151/05830e +JOINT: + 2021-01-01: 60_000 + 2022-01-01: 65_000 +HEAD_OF_HOUSEHOLD: + 2021-01-01: 45_000 + 2022-01-01: 50_000 +SURVIVING_SPOUSE: + 2021-01-01: 45_000 + 2022-01-01: 50_000 +SINGLE: + 2021-01-01: 45_000 + 2022-01-01: 50_000 +SEPARATE: + 2021-01-01: 45_000 + 2022-01-01: 50_000 diff --git a/fiscalsim_us/parameters/gov/states/vt/tax/income/agi/retirement_income_exemption/divisor.yaml b/fiscalsim_us/parameters/gov/states/vt/tax/income/agi/retirement_income_exemption/divisor.yaml new file mode 100644 index 000000000..603a395e7 --- /dev/null +++ b/fiscalsim_us/parameters/gov/states/vt/tax/income/agi/retirement_income_exemption/divisor.yaml @@ -0,0 +1,16 @@ +description: Vermont divides the retirement income by this amount under the retirement income exemption. +metadata: + label: Vermont retirement income exemption divisor + period: year + unit: currency-USD + reference: + - title: Instruction for 2022 SCHEDULE IN-112 - RETIREMENT INCOME EXEMPTION WORKSHEET + href: https://tax.vermont.gov/sites/tax/files/documents/IN-112%20Instr-2022.pdf#page=3 + - title: Instruction for 2021 SCHEDULE IN-112 - SOCIAL SECURITY EXEMPTION WORKSHEET + href: https://tax.vermont.gov/sites/tax/files/documents/IN-112%20Instr-2021.pdf#page=2 + - title: Instruction for 2023 SCHEDULE IN-112 - SOCIAL SECURITY EXEMPTION WORKSHEET + href: https://tax.vermont.gov/sites/tax/files/documents/IN-112-Instr-2023.pdf#page=2 + - title: Legal Code Titl. 32 V.S.A. § 5830e(a)(1)(B)(ii), (a)(2)(B)(ii) + href: https://legislature.vermont.gov/statutes/section/32/151/05830e +values: + 2021-01-01: 10_000 diff --git a/fiscalsim_us/parameters/gov/states/vt/tax/income/agi/retirement_income_exemption/military_retirement/amount.yaml b/fiscalsim_us/parameters/gov/states/vt/tax/income/agi/retirement_income_exemption/military_retirement/amount.yaml new file mode 100644 index 000000000..6e090d980 --- /dev/null +++ b/fiscalsim_us/parameters/gov/states/vt/tax/income/agi/retirement_income_exemption/military_retirement/amount.yaml @@ -0,0 +1,19 @@ +description: Vermont caps the retirement income exemption from military retirement system at this amount. +metadata: + label: Vermont military retirement income exemption cap + period: year + unit: currency-USD + reference: + - title: Instruction for 2022 SCHEDULE IN-112 - RETIREMENT INCOME EXEMPTION WORKSHEET LINE 11 + href: https://tax.vermont.gov/sites/tax/files/documents/IN-112%20Instr-2022.pdf#page=3 + - title: Instruction for 2021 SCHEDULE IN-112 - SOCIAL SECURITY EXEMPTION WORKSHEET LINE 11 + href: https://tax.vermont.gov/sites/tax/files/documents/IN-112%20Instr-2021.pdf#page=2 + - title: Instruction for 2023 SCHEDULE IN-112 - SOCIAL SECURITY EXEMPTION WORKSHEET LINE 11 + href: https://tax.vermont.gov/sites/tax/files/documents/IN-112-Instr-2023.pdf#page=2 + # Legal code specifies maximum amount at $10,000. Effective date unknown + - title: Legal Code Titl. 32 V.S.A. § 5830e(b)(1)(B), (b)(2)(B),(c),(d) + href: https://legislature.vermont.gov/statutes/section/32/151/05830e +values: + # The other retirement systems are included in the retirement income exemption in 2022 + 2021-01-01: 0 + 2022-01-01: 10_000 diff --git a/fiscalsim_us/parameters/gov/states/vt/tax/income/agi/retirement_income_exemption/social_security/reduction/end.yaml b/fiscalsim_us/parameters/gov/states/vt/tax/income/agi/retirement_income_exemption/social_security/reduction/end.yaml new file mode 100644 index 000000000..220a6c54e --- /dev/null +++ b/fiscalsim_us/parameters/gov/states/vt/tax/income/agi/retirement_income_exemption/social_security/reduction/end.yaml @@ -0,0 +1,32 @@ +description: Vermont qualifies filers for the retirement income exemption from social security with income below this threshold, based on filing status. +metadata: + label: Vermont social security retirement income exemption income threshold + period: year + unit: currency-USD + breakdown: + - filing_status + reference: + - title: Instruction for 2022 SCHEDULE IN-112 - RETIREMENT INCOME EXEMPTION WORKSHEET + href: https://tax.vermont.gov/sites/tax/files/documents/IN-112%20Instr-2022.pdf#page=3 + - title: Instruction for 2021 SCHEDULE IN-112 - SOCIAL SECURITY EXEMPTION WORKSHEET + href: https://tax.vermont.gov/sites/tax/files/documents/IN-112%20Instr-2021.pdf#page=2 + - title: Instruction for 2023 SCHEDULE IN-112 - SOCIAL SECURITY EXEMPTION WORKSHEET + href: https://tax.vermont.gov/sites/tax/files/documents/IN-112-Instr-2023.pdf#page=2 + # Legal code specifies inflation unadjusted thresholds + - title: Legal Code Titl. 32 V.S.A. § 5830e(a)(1)(C), (a)(2)(C) + href: https://legislature.vermont.gov/statutes/section/32/151/05830e +JOINT: + 2021-01-01: 70_000 + 2022-01-01: 75_000 +HEAD_OF_HOUSEHOLD: + 2021-01-01: 55_000 + 2022-01-01: 60_000 +SURVIVING_SPOUSE: + 2021-01-01: 55_000 + 2022-01-01: 60_000 +SINGLE: + 2021-01-01: 55_000 + 2022-01-01: 60_000 +SEPARATE: + 2021-01-01: 55_000 + 2022-01-01: 60_000 diff --git a/fiscalsim_us/parameters/gov/states/vt/tax/income/agi/retirement_income_exemption/social_security/reduction/start.yaml b/fiscalsim_us/parameters/gov/states/vt/tax/income/agi/retirement_income_exemption/social_security/reduction/start.yaml new file mode 100644 index 000000000..71ed909b9 --- /dev/null +++ b/fiscalsim_us/parameters/gov/states/vt/tax/income/agi/retirement_income_exemption/social_security/reduction/start.yaml @@ -0,0 +1,32 @@ +description: Vermont reduces the retirement income exemption from social security for filers with income above this threshold, based on filing status. +metadata: + label: Vermont social security retirement income exemption reduction threshold + period: year + unit: currency-USD + breakdown: + - filing_status + reference: + - title: Instruction for 2022 SCHEDULE IN-112 - RETIREMENT INCOME EXEMPTION WORKSHEET + href: https://tax.vermont.gov/sites/tax/files/documents/IN-112%20Instr-2022.pdf#page=3 + - title: Instruction for 2021 SCHEDULE IN-112 - SOCIAL SECURITY EXEMPTION WORKSHEET + href: https://tax.vermont.gov/sites/tax/files/documents/IN-112%20Instr-2021.pdf#page=2 + - title: Instruction for 2023 SCHEDULE IN-112 - SOCIAL SECURITY EXEMPTION WORKSHEET + href: https://tax.vermont.gov/sites/tax/files/documents/IN-112-Instr-2023.pdf#page=2 + # Legal code specify reduction threshold at $50,000 for non filing jointly filer and at $65,000 for filing jointly filer. Date unknown. + - title: Legal Code Titl. 32 V.S.A. § 5830e(a)(1)(B), (a)(2)(B) + href: https://legislature.vermont.gov/statutes/section/32/151/05830e +JOINT: + 2021-01-01: 60_000 + 2022-01-01: 65_000 +HEAD_OF_HOUSEHOLD: + 2021-01-01: 45_000 + 2022-01-01: 50_000 +SURVIVING_SPOUSE: + 2021-01-01: 45_000 + 2022-01-01: 50_000 +SINGLE: + 2021-01-01: 45_000 + 2022-01-01: 50_000 +SEPARATE: + 2021-01-01: 45_000 + 2022-01-01: 50_000 diff --git a/fiscalsim_us/parameters/gov/states/vt/tax/income/agi/subtractions.yaml b/fiscalsim_us/parameters/gov/states/vt/tax/income/agi/subtractions.yaml index 20be92454..fc524e412 100644 --- a/fiscalsim_us/parameters/gov/states/vt/tax/income/agi/subtractions.yaml +++ b/fiscalsim_us/parameters/gov/states/vt/tax/income/agi/subtractions.yaml @@ -5,6 +5,7 @@ values: - vt_medical_expense_deduction - student_loan_interest - vt_capital_gains_exclusion + - vt_retirement_income_exemption metadata: unit: list label: Vermont subtractions diff --git a/fiscalsim_us/parameters/gov/states/vt/tax/income/credits/cdcc/low_income/income_threshold.yaml b/fiscalsim_us/parameters/gov/states/vt/tax/income/credits/cdcc/low_income/income_threshold.yaml new file mode 100644 index 000000000..16b04ed5f --- /dev/null +++ b/fiscalsim_us/parameters/gov/states/vt/tax/income/credits/cdcc/low_income/income_threshold.yaml @@ -0,0 +1,22 @@ +description: Vermont limits the low-income child and dependent care credit to filers with federal adjusted gross income less than this amount. +metadata: + reference: + - title: 2021 Form IN-112 Vermont Tax Adjustments and Credits + href: https://tax.vermont.gov/sites/tax/files/documents/IN-112-2021.pdf#page=2 + - title: 2021 Vermont Statutes, Title 32 - Taxation and Finance, Chapter 151 - Income Taxes, §5828c. Low-income child and dependent care credit + href: https://law.justia.com/codes/vermont/2021/title-32/chapter-151/section-5828c/ + unit: currency-USD + period: year + label: Vermont low-income child and dependent care credit AGI limit + breakdown: + - filing_status +JOINT: + 2005-01-01: 40_000 +HEAD_OF_HOUSEHOLD: + 2005-01-01: 30_000 +SURVIVING_SPOUSE: + 2005-01-01: 30_000 +SINGLE: + 2005-01-01: 30_000 +SEPARATE: + 2005-01-01: 30_000 diff --git a/fiscalsim_us/parameters/gov/states/vt/tax/income/credits/cdcc/low_income/rate.yaml b/fiscalsim_us/parameters/gov/states/vt/tax/income/credits/cdcc/low_income/rate.yaml new file mode 100644 index 000000000..437d9dd9f --- /dev/null +++ b/fiscalsim_us/parameters/gov/states/vt/tax/income/credits/cdcc/low_income/rate.yaml @@ -0,0 +1,15 @@ +description: Vermont matches this percent of the federal child and dependent care credit for low-income filers. +values: + 2005-01-01: 0.5 +metadata: + unit: /1 + label: Vermont low-income child and dependent care credit match + reference: + - title: 2021 Form IN-112 Vermont Tax Adjustments and Credits + href: https://tax.vermont.gov/sites/tax/files/documents/IN-112-2021.pdf#page=2 + - title: 2021 Vermont Statutes, Title 32 - Taxation and Finance, Chapter 151 - Income Taxes, §5828c. Low-income child and dependent care credit + href: https://law.justia.com/codes/vermont/2021/title-32/chapter-151/section-5828c/ + - title: 2020 Form IN-112 Vermont Tax Adjustments and Credits + href: https://tax.vermont.gov/sites/tax/files/documents/IN-112-2020.pdf#page=2# + - title: 2020 Vermont Statutes, Title 32 - Taxation and Finance, Chapter 151 - Income Taxes, §5828c. Low-income child and dependent care credit + href: https://law.justia.com/codes/vermont/2020/title-32/chapter-151/section-5828c/ diff --git a/fiscalsim_us/parameters/gov/states/vt/tax/income/credits/cdcc/rate.yaml b/fiscalsim_us/parameters/gov/states/vt/tax/income/credits/cdcc/rate.yaml new file mode 100644 index 000000000..9c1ed2a08 --- /dev/null +++ b/fiscalsim_us/parameters/gov/states/vt/tax/income/credits/cdcc/rate.yaml @@ -0,0 +1,13 @@ +description: Vermont matches this percent of the federal child and dependent care credit. +values: + 2022-01-01: 0.72 +metadata: + unit: /1 + label: Vermont child and dependent care credit match + reference: + - title: 2022 Form IN-112 Vermont Tax Adjustments and Credits + href: https://tax.vermont.gov/sites/tax/files/documents/IN-112-2022.pdf#page=2 + - title: 2022 Vermont Statutes, Title 32 - Taxation and Finance, Chapter 151 - Income Taxes, §5828c. Child and dependent care credit + href: https://law.justia.com/codes/vermont/2022/title-32/chapter-151/section-5828c/ + - title: 2023 Form IN-112 Vermont Tax Adjustments and Credits + href: https://tax.vermont.gov/sites/tax/files/documents/IN-112-2023.pdf#page=2 diff --git a/fiscalsim_us/parameters/gov/states/vt/tax/income/credits/charitable.yaml b/fiscalsim_us/parameters/gov/states/vt/tax/income/credits/charitable.yaml new file mode 100644 index 000000000..4d82ffe2c --- /dev/null +++ b/fiscalsim_us/parameters/gov/states/vt/tax/income/credits/charitable.yaml @@ -0,0 +1,27 @@ +description: Vermont provides a credit for this fraction of charitable contributions, depending on the amount. +brackets: + - threshold: + 2018-01-01: 0 + rate: + 2018-01-01: 0.05 + - threshold: + 2018-01-01: 20_000 + rate: + 2018-01-01: 0 +metadata: + threshold_unit: currency_USD + rate_unit: /1 + threshold_period: year + type: marginal_rate + label: Vermont charitable contribution credit rate + reference: + - title: Vermont Statutes Title 32 - Taxation and Finance § 5822-(d)-3 + href: https://law.justia.com/codes/vermont/2022/title-32/chapter-151/section-5822/ + - title: 2022 Vermont Income Tax Return Form Line 10 + href: https://tax.vermont.gov/sites/tax/files/documents/IN-111-2022.pdf#page=1 + - title: 2021 Vermont Income Tax Return Form Line 10 + href: https://tax.vermont.gov/sites/tax/files/documents/IN-111-2021.pdf#page=1 + - title: 2023 Vermont Income Tax Return Form Line 10 + href: https://tax.vermont.gov/sites/tax/files/documents/IN-111-2023.pdf#page=1 + - title: 2021 Vermont Income Tax Return Form Instruction + href: https://tax.vermont.gov/sites/tax/files/documents/IN-111-Instr-2023.pdf#page=7 diff --git a/fiscalsim_us/parameters/gov/states/vt/tax/income/credits/ctc/README.md b/fiscalsim_us/parameters/gov/states/vt/tax/income/credits/ctc/README.md new file mode 100644 index 000000000..60b34fd67 --- /dev/null +++ b/fiscalsim_us/parameters/gov/states/vt/tax/income/credits/ctc/README.md @@ -0,0 +1 @@ +# Child Tax Credit \ No newline at end of file diff --git a/fiscalsim_us/parameters/gov/states/vt/tax/income/credits/ctc/age_limit.yaml b/fiscalsim_us/parameters/gov/states/vt/tax/income/credits/ctc/age_limit.yaml new file mode 100644 index 000000000..723af81d0 --- /dev/null +++ b/fiscalsim_us/parameters/gov/states/vt/tax/income/credits/ctc/age_limit.yaml @@ -0,0 +1,15 @@ +description: Vermont limits its child tax credit to children this age or younger. +values: + 2022-01-01: 5 +metadata: + unit: year + label: Vermont Child Tax Credit age limit + reference: + - title: Vt. Stat. tit. 32 § 5830f Section (a) + href: https://casetext.com/statute/vermont-statutes/title-32-taxation-and-finance/chapter-151-income-taxes/subchapter-002-taxation-of-individuals-trusts-and-estates/section-5830f-see-note-vermont-child-tax-credit/1 + - title: Vt. 2022 Income Tax Return Booklet + href: https://tax.vermont.gov/sites/tax/files/documents/Income%20Booklet-2022.pdf#page=17 + - title: Vt. 2021 Tax Form # Child Tax Credit was introduced in 2022 + href: https://tax.vermont.gov/sites/tax/files/documents/Income-Booklet-2021.pdf#page=24 + - title: Vt. 2023 Income Tax Return Booklet + href: https://tax.vermont.gov/sites/tax/files/documents/Income-Booklet-2023.pdf#page=33 diff --git a/fiscalsim_us/parameters/gov/states/vt/tax/income/credits/ctc/amount.yaml b/fiscalsim_us/parameters/gov/states/vt/tax/income/credits/ctc/amount.yaml new file mode 100644 index 000000000..98ce64df3 --- /dev/null +++ b/fiscalsim_us/parameters/gov/states/vt/tax/income/credits/ctc/amount.yaml @@ -0,0 +1,15 @@ +description: Vermont provides this amount per qualifying child under the child tax credit. +values: + 2022-01-01: 1_000 +metadata: + unit: currency-USD + label: Vermont Child Tax Credit amount + reference: + - title: Vt. Stat. tit. 32 § 5830f Section (a) + href: https://casetext.com/statute/vermont-statutes/title-32-taxation-and-finance/chapter-151-income-taxes/subchapter-002-taxation-of-individuals-trusts-and-estates/section-5830f-see-note-vermont-child-tax-credit/1 + - title: Vt. 2022 Income Tax Return Booklet + href: https://tax.vermont.gov/sites/tax/files/documents/Income%20Booklet-2022.pdf#page=17 + - title: Vt. 2021 Tax Form # Child Tax Credit was introduced in 2022 + href: https://tax.vermont.gov/sites/tax/files/documents/Income-Booklet-2021.pdf#page=24 + - title: Vt. 2023 Income Tax Return Booklet + href: https://tax.vermont.gov/sites/tax/files/documents/Income-Booklet-2023.pdf#page=33 diff --git a/fiscalsim_us/parameters/gov/states/vt/tax/income/credits/ctc/reduction/amount.yaml b/fiscalsim_us/parameters/gov/states/vt/tax/income/credits/ctc/reduction/amount.yaml new file mode 100644 index 000000000..aeed329f2 --- /dev/null +++ b/fiscalsim_us/parameters/gov/states/vt/tax/income/credits/ctc/reduction/amount.yaml @@ -0,0 +1,15 @@ +description: Vermont reduces the child tax credit by this amount for each increment of adjusted gross income exceeding the threshold. +values: + 2022-01-01: 20 +metadata: + unit: currency-USD + label: Vermont Child Tax Credit reduction amount + reference: + - title: Vt. Stat. tit. 32 § 5830f Section (b) + href: https://casetext.com/statute/vermont-statutes/title-32-taxation-and-finance/chapter-151-income-taxes/subchapter-002-taxation-of-individuals-trusts-and-estates/section-5830f-see-note-vermont-child-tax-credit/1 + - title: Vt. 2022 Income Tax Return Booklet + href: https://tax.vermont.gov/sites/tax/files/documents/Income%20Booklet-2022.pdf#page=17 + - title: Vt. 2021 Tax Form # Child Tax Credit was introduced in 2022 + href: https://tax.vermont.gov/sites/tax/files/documents/Income-Booklet-2021.pdf#page=24 + - title: Vt. 2023 Income Tax Return Booklet + href: https://tax.vermont.gov/sites/tax/files/documents/Income-Booklet-2023.pdf#page=33 diff --git a/fiscalsim_us/parameters/gov/states/vt/tax/income/credits/ctc/reduction/increment.yaml b/fiscalsim_us/parameters/gov/states/vt/tax/income/credits/ctc/reduction/increment.yaml new file mode 100644 index 000000000..eef2fe405 --- /dev/null +++ b/fiscalsim_us/parameters/gov/states/vt/tax/income/credits/ctc/reduction/increment.yaml @@ -0,0 +1,15 @@ +description: Vermont reduces the child tax credit for each of these increments of adjusted gross income exceeding the threshold. +values: + 2022-01-01: 1_000 +metadata: + unit: currency-USD + label: Vermont Child Tax Credit reduction increment + reference: + - title: Vt. Stat. tit. 32 § 5830f Section (b) + href: https://casetext.com/statute/vermont-statutes/title-32-taxation-and-finance/chapter-151-income-taxes/subchapter-002-taxation-of-individuals-trusts-and-estates/section-5830f-see-note-vermont-child-tax-credit/1 + - title: Vt. 2022 Income Tax Return Booklet + href: https://tax.vermont.gov/sites/tax/files/documents/Income%20Booklet-2022.pdf#page=17 + - title: Vt. 2021 Tax Form # Child Tax Credit was introduced in 2022 + href: https://tax.vermont.gov/sites/tax/files/documents/Income-Booklet-2021.pdf#page=24 + - title: Vt. 2023 Income Tax Return Booklet + href: https://tax.vermont.gov/sites/tax/files/documents/Income-Booklet-2023.pdf#page=33 diff --git a/fiscalsim_us/parameters/gov/states/vt/tax/income/credits/ctc/reduction/start.yaml b/fiscalsim_us/parameters/gov/states/vt/tax/income/credits/ctc/reduction/start.yaml new file mode 100644 index 000000000..c93f5c330 --- /dev/null +++ b/fiscalsim_us/parameters/gov/states/vt/tax/income/credits/ctc/reduction/start.yaml @@ -0,0 +1,15 @@ +description: Vermont reduces the child tax credit for filers with adjusted gross income above this amount. +values: + 2022-01-01: 125_000 +metadata: + unit: currency-USD + label: Vermont Child Tax Credit reduction threshold + reference: + - title: Vt. Stat. tit. 32 § 5830f Section (b) + href: https://casetext.com/statute/vermont-statutes/title-32-taxation-and-finance/chapter-151-income-taxes/subchapter-002-taxation-of-individuals-trusts-and-estates/section-5830f-see-note-vermont-child-tax-credit/1 + - title: Vt. 2022 Income Tax Return Booklet + href: https://tax.vermont.gov/sites/tax/files/documents/Income%20Booklet-2022.pdf#page=17 + - title: Vt. 2021 Tax Form # Child Tax Credit was introduced in 2022 + href: https://tax.vermont.gov/sites/tax/files/documents/Income-Booklet-2021.pdf#page=24 + - title: Vt. 2023 Income Tax Return Booklet + href: https://tax.vermont.gov/sites/tax/files/documents/Income-Booklet-2023.pdf#page=33 diff --git a/fiscalsim_us/parameters/gov/states/vt/tax/income/credits/eitc/match.yaml b/fiscalsim_us/parameters/gov/states/vt/tax/income/credits/eitc/match.yaml index c3f4e6572..9f99cad4b 100644 --- a/fiscalsim_us/parameters/gov/states/vt/tax/income/credits/eitc/match.yaml +++ b/fiscalsim_us/parameters/gov/states/vt/tax/income/credits/eitc/match.yaml @@ -12,3 +12,5 @@ metadata: href: https://tax.vermont.gov/sites/tax/files/documents/IN-112-2022.pdf#page=1 - title: 2021 Schedule IN-112 Vermont Tax Adjustments and Credits href: https://taxsim.nber.org/historical_state_tax_forms/VT/2021/IN-112-2021.pdf#page=2 + - title: 2023 Form IN-112 Vermont Tax Adjustments and Credits + href: https://tax.vermont.gov/sites/tax/files/documents/IN-112-2023.pdf#page=2 diff --git a/fiscalsim_us/parameters/gov/states/vt/tax/income/credits/elderly_or_disabled.yaml b/fiscalsim_us/parameters/gov/states/vt/tax/income/credits/elderly_or_disabled.yaml new file mode 100644 index 000000000..d8647f441 --- /dev/null +++ b/fiscalsim_us/parameters/gov/states/vt/tax/income/credits/elderly_or_disabled.yaml @@ -0,0 +1,16 @@ +description: Vermont matches this fraction of the federal credit for elderly or the disabled. +values: + 2021-01-01: 0.24 +metadata: + unit: /1 + period: year + label: Vermont elderly or the disabled tax credit match + reference: + - title: 32 V.S.A. §5822. Tax on income of individuals, estates, and trusts (d)(1) + href: https://legislature.vermont.gov/statutes/section/32/151/05822 + - title: 2022 Schedule IN-119 Vermont Tax Adjustments and Nonrefundable Credits + href: https://tax.vermont.gov/sites/tax/files/documents/IN-119-2022.pdf#page=1 + - title: 2021 Schedule IN-119 Vermont Tax Adjustments and Nonrefundable Credits + href: https://tax.vermont.gov/sites/tax/files/documents/IN-119-2021.pdf#page=1 + - title: 2023 Schedule IN-119 Vermont Tax Adjustments and Nonrefundable Credits + href: https://tax.vermont.gov/sites/tax/files/documents/IN-119-2023.pdf#page=1 diff --git a/fiscalsim_us/parameters/gov/states/vt/tax/income/credits/non_refundable.yaml b/fiscalsim_us/parameters/gov/states/vt/tax/income/credits/non_refundable.yaml new file mode 100644 index 000000000..814bb21ba --- /dev/null +++ b/fiscalsim_us/parameters/gov/states/vt/tax/income/credits/non_refundable.yaml @@ -0,0 +1,16 @@ +description: Vermont non-refundable tax credits. +values: + 2021-01-01: + - vt_charitable_contribution_credit +metadata: + unit: list + label: Vermont non-refundable tax credits + reference: + - title: Vermont Statutes Title 32 - Taxation and Finance § 5822-(d)-3 + href: https://law.justia.com/codes/vermont/2022/title-32/chapter-151/section-5822/ + - title: 2022 Vermont Income Tax Return Form Line 10 + href: https://tax.vermont.gov/sites/tax/files/documents/IN-111-2022.pdf#page=1 + - title: 2021 Vermont Income Tax Return Form Line 10 + href: https://tax.vermont.gov/sites/tax/files/documents/IN-111-2021.pdf#page=1 + - title: 2023 Vermont Income Tax Return Form Line 10 + href: https://tax.vermont.gov/sites/tax/files/documents/IN-111-2023.pdf#page=1 diff --git a/fiscalsim_us/parameters/gov/states/vt/tax/income/credits/refundable.yaml b/fiscalsim_us/parameters/gov/states/vt/tax/income/credits/refundable.yaml index 4e9f5c51b..629e6d915 100644 --- a/fiscalsim_us/parameters/gov/states/vt/tax/income/credits/refundable.yaml +++ b/fiscalsim_us/parameters/gov/states/vt/tax/income/credits/refundable.yaml @@ -1,8 +1,15 @@ description: Vermont refundable tax credits. -values: - 2021-01-01: - - vt_eitc - metadata: unit: list label: Vermont refundable tax credits + reference: + - title: 2022 Form IN-112 Vermont Tax Adjustments and Credits + href: https://tax.vermont.gov/sites/tax/files/documents/IN-112-2022.pdf#page=2 +values: + 2021-01-01: + - vt_eitc + - vt_low_income_cdcc + 2022-01-01: + - vt_eitc + - vt_cdcc + - vt_ctc diff --git a/fiscalsim_us/parameters/gov/states/vt/tax/income/credits/renter/countable_tax_exempt_ss_fraction.yaml b/fiscalsim_us/parameters/gov/states/vt/tax/income/credits/renter/countable_tax_exempt_ss_fraction.yaml new file mode 100644 index 000000000..d15160a17 --- /dev/null +++ b/fiscalsim_us/parameters/gov/states/vt/tax/income/credits/renter/countable_tax_exempt_ss_fraction.yaml @@ -0,0 +1,18 @@ +description: Vermont counts this fraction of tax-exempt social security benefits as income for the renter credit. +values: + 2021-01-01: 0.75 +metadata: + unit: /1 + period: year + label: Vermont renter credit non-taxable social security rate + reference: + - title: 32 V.S.A. § 6061 Homestead Property Tax Credit and Renter Credit (18)(C) + href: https://law.justia.com/codes/vermont/2022/title-32/chapter-154/section-6061/ + - title: 2022 Vermont instruction booklet + href: https://tax.vermont.gov/sites/tax/files/documents/Income%20Booklet-2022.pdf#page=37 + - title: 2021 Vermont instruction booklet + href: https://tax.vermont.gov/sites/tax/files/documents/Income-Booklet-2021.pdf#page=26 + - title: 2022 Form RCC-146 + href: https://tax.vermont.gov/sites/tax/files/documents/RCC-146-2022.pdf#page=1 + - title: Vt. 2023 Income Tax Return Booklet Line 11 + href: https://tax.vermont.gov/sites/tax/files/documents/Income-Booklet-2023.pdf#page=37 diff --git a/fiscalsim_us/parameters/gov/states/vt/tax/income/credits/renter/fair_market_rent.yaml b/fiscalsim_us/parameters/gov/states/vt/tax/income/credits/renter/fair_market_rent.yaml new file mode 100644 index 000000000..1378c25f1 --- /dev/null +++ b/fiscalsim_us/parameters/gov/states/vt/tax/income/credits/renter/fair_market_rent.yaml @@ -0,0 +1,482 @@ +description: Vermont sets these fair market rent amounts, based on the county and household size. +metadata: + unit: currency-USD + period: month + breakdown: + - list(range(1,9)) + label: Vermont fair market rent amount + reference: + # The values are derived from the renter credit computation tables which represent 10% of the + # yearly fair market rent + - title: 32 V.S.A. §6066. Homestead Property Tax Credit and Renter Credit (b)(A) + href: https://law.justia.com/codes/vermont/2022/title-32/chapter-154/section-6066/ + - title: 2023 Vermont Credit Amounts Based on HUD Data Based on Number of Bedrooms + href: https://tax.vermont.gov/individuals/renter-credit/calculator-and-credit-amounts + - title: 2022 Vermont Credit Amounts Based on HUD Data Based on Number of Bedrooms + href: https://tax.vermont.gov/document/renter-credit-calculator + - title: 2021 Vermont Credit Amounts Based on HUD Data Based on Number of Bedrooms + href: https://tax.vermont.gov/sites/tax/files/documents/renter_credit_2021.pdf#page=10 + + +1: + ADDISON_COUNTY_VT: + 2021-01-01: 846 + 2022-01-01: 878 + 2023-01-01: 947 + BENNINGTON_COUNTY_VT: + 2021-01-01: 819 + 2022-01-01: 822 + 2023-01-01: 886 + CALEDONIA_COUNTY_VT: + 2021-01-01: 739 + 2022-01-01: 770 + 2023-01-01: 845 + CHITTENDEN_COUNTY_VT: + 2021-01-01: 1_265 + 2022-01-01: 1_163 + 2023-01-01: 1_238 + ESSEX_COUNTY_VT: + 2021-01-01: 583 + 2022-01-01: 654 + 2023-01-01: 746 + FRANKLIN_COUNTY_VT: + 2021-01-01: 810 + 2022-01-01: 838 + 2023-01-01: 919 + GRAND_ISLE_COUNTY_VT: + 2021-01-01: 810 + 2022-01-01: 838 + 2023-01-01: 919 + LAMOILLE_COUNTY_VT: + 2021-01-01: 793 + 2022-01-01: 806 + 2023-01-01: 880 + ORANGE_COUNTY_VT: + 2021-01-01: 745 + 2022-01-01: 793 + 2023-01-01: 857 + ORLEANS_COUNTY_VT: + 2021-01-01: 688 + 2022-01-01: 747 + 2023-01-01: 844 + RUTLAND_COUNTY_VT: + 2021-01-01: 779 + 2022-01-01: 834 + 2023-01-01: 911 + WASHINGTON_COUNTY_VT: + 2021-01-01: 824 + 2022-01-01: 869 + 2023-01-01: 953 + WINDHAM_COUNTY_VT: + 2021-01-01: 798 + 2022-01-01: 873 + 2023-01-01: 945 + WINDSOR_COUNTY_VT: + 2021-01-01: 837 + 2022-01-01: 891 + 2023-01-01: 982 + +2: + ADDISON_COUNTY_VT: + 2021-01-01: 1_058 + 2022-01-01: 1_117 + 2023-01-01: 1_192 + BENNINGTON_COUNTY_VT: + 2021-01-01: 940 + 2022-01-01: 1_018 + 2023-01-01: 1_120 + CALEDONIA_COUNTY_VT: + 2021-01-01: 842 + 2022-01-01: 877 + 2023-01-01: 954 + CHITTENDEN_COUNTY_VT: + 2021-01-01: 1_628 + 2022-01-01: 1_500 + 2023-01-01: 1_615 + ESSEX_COUNTY_VT: + 2021-01-01: 741 + 2022-01-01: 781 + 2023-01-01: 843 + FRANKLIN_COUNTY_VT: + 2021-01-01: 1_000 + 2022-01-01: 1_035 + 2023-01-01: 1_132 + GRAND_ISLE_COUNTY_VT: + 2021-01-01: 1_000 + 2022-01-01: 1_035 + 2023-01-01: 1_132 + LAMOILLE_COUNTY_VT: + 2021-01-01: 1_016 + 2022-01-01: 1_061 + 2023-01-01: 1_158 + ORANGE_COUNTY_VT: + 2021-01-01: 982 + 2022-01-01: 1_043 + 2023-01-01: 1_125 + ORLEANS_COUNTY_VT: + 2021-01-01: 784 + 2022-01-01: 851 + 2023-01-01: 953 + RUTLAND_COUNTY_VT: + 2021-01-01: 918 + 2022-01-01: 981 + 2023-01-01: 1_088 + WASHINGTON_COUNTY_VT: + 2021-01-01: 1_086 + 2022-01-01: 1_144 + 2023-01-01: 1_255 + WINDHAM_COUNTY_VT: + 2021-01-01: 993 + 2022-01-01: 1_089 + 2023-01-01: 1_150 + WINDSOR_COUNTY_VT: + 2021-01-01: 1_007 + 2022-01-01: 1_044 + 2023-01-01: 1_129 +3: + ADDISON_COUNTY_VT: + 2021-01-01: 1_322 + 2022-01-01: 1_429 + 2023-01-01: 1_549 + BENNINGTON_COUNTY_VT: + 2021-01-01: 1_270 + 2022-01-01: 1_337 + 2023-01-01: 1_455 + CALEDONIA_COUNTY_VT: + 2021-01-01: 1_047 + 2022-01-01: 1_084 + 2023-01-01: 1_167 + CHITTENDEN_COUNTY_VT: + 2021-01-01: 2_025 + 2022-01-01: 1_854 + 2023-01-01: 1_982 + ESSEX_COUNTY_VT: + 2021-01-01: 985 + 2022-01-01: 1_032 + 2023-01-01: 1_143 + FRANKLIN_COUNTY_VT: + 2021-01-01: 1_291 + 2022-01-01: 1_335 + 2023-01-01: 1_458 + GRAND_ISLE_COUNTY_VT: + 2021-01-01: 1_291 + 2022-01-01: 1_335 + 2023-01-01: 1_458 + LAMOILLE_COUNTY_VT: + 2021-01-01: 1_264 + 2022-01-01: 1_343 + 2023-01-01: 1_544 + ORANGE_COUNTY_VT: + 2021-01-01: 1_250 + 2022-01-01: 1_304 + 2023-01-01: 1_427 + ORLEANS_COUNTY_VT: + 2021-01-01: 1_066 + 2022-01-01: 1_132 + 2023-01-01: 1_241 + RUTLAND_COUNTY_VT: + 2021-01-01: 1_252 + 2022-01-01: 1_344 + 2023-01-01: 1_440 + WASHINGTON_COUNTY_VT: + 2021-01-01: 1_358 + 2022-01-01: 1_454 + 2023-01-01: 1_584 + WINDHAM_COUNTY_VT: + 2021-01-01: 1_235 + 2022-01-01: 1_346 + 2023-01-01: 1_426 + WINDSOR_COUNTY_VT: + 2021-01-01: 1_416 + 2022-01-01: 1_454 + 2023-01-01: 1_536 + +4: + ADDISON_COUNTY_VT: + 2021-01-01: 1_435 + 2022-01-01: 1_515 + 2023-01-01: 1_601 + BENNINGTON_COUNTY_VT: + 2021-01-01: 1_275 + 2022-01-01: 1_380 + 2023-01-01: 1_578 + CALEDONIA_COUNTY_VT: + 2021-01-01: 1_431 + 2022-01-01: 1_501 + 2023-01-01: 1_625 + CHITTENDEN_COUNTY_VT: + 2021-01-01: 2_083 + 2022-01-01: 2_034 + 2023-01-01: 2_083 + ESSEX_COUNTY_VT: + 2021-01-01: 1_026 + 2022-01-01: 1_085 + 2023-01-01: 1_169 + FRANKLIN_COUNTY_VT: + 2021-01-01: 1_419 + 2022-01-01: 1_478 + 2023-01-01: 1_587 + GRAND_ISLE_COUNTY_VT: + 2021-01-01: 1_419 + 2022-01-01: 1_478 + 2023-01-01: 1_587 + LAMOILLE_COUNTY_VT: + 2021-01-01: 1_378 + 2022-01-01: 1_439 + 2023-01-01: 1_556 + ORANGE_COUNTY_VT: + 2021-01-01: 1_352 + 2022-01-01: 1_436 + 2023-01-01: 1_511 + ORLEANS_COUNTY_VT: + 2021-01-01: 1_222 + 2022-01-01: 1_244 + 2023-01-01: 1_318 + RUTLAND_COUNTY_VT: + 2021-01-01: 1_378 + 2022-01-01: 1_620 + 2023-01-01: 1_825 + WASHINGTON_COUNTY_VT: + 2021-01-01: 1_532 + 2022-01-01: 1_551 + 2023-01-01: 1_690 + WINDHAM_COUNTY_VT: + 2021-01-01: 1_347 + 2022-01-01: 1_477 + 2023-01-01: 1_545 + WINDSOR_COUNTY_VT: + 2021-01-01: 1_441 + 2022-01-01: 1_490 + 2023-01-01: 1_542 + +5: + ADDISON_COUNTY_VT: + 2021-01-01: 1_435 + 2022-01-01: 1_515 + 2023-01-01: 1_601 + BENNINGTON_COUNTY_VT: + 2021-01-01: 1_275 + 2022-01-01: 1_380 + 2023-01-01: 1_578 + CALEDONIA_COUNTY_VT: + 2021-01-01: 1_431 + 2022-01-01: 1_501 + 2023-01-01: 1_625 + CHITTENDEN_COUNTY_VT: + 2021-01-01: 2_083 + 2022-01-01: 2_034 + 2023-01-01: 2_083 + ESSEX_COUNTY_VT: + 2021-01-01: 1_026 + 2022-01-01: 1_085 + 2023-01-01: 1_169 + FRANKLIN_COUNTY_VT: + 2021-01-01: 1_419 + 2022-01-01: 1_478 + 2023-01-01: 1_587 + GRAND_ISLE_COUNTY_VT: + 2021-01-01: 1_419 + 2022-01-01: 1_478 + 2023-01-01: 1_587 + LAMOILLE_COUNTY_VT: + 2021-01-01: 1_378 + 2022-01-01: 1_439 + 2023-01-01: 1_556 + ORANGE_COUNTY_VT: + 2021-01-01: 1_352 + 2022-01-01: 1_436 + 2023-01-01: 1_511 + ORLEANS_COUNTY_VT: + 2021-01-01: 1_222 + 2022-01-01: 1_244 + 2023-01-01: 1_318 + RUTLAND_COUNTY_VT: + 2021-01-01: 1_378 + 2022-01-01: 1_620 + 2023-01-01: 1_825 + WASHINGTON_COUNTY_VT: + 2021-01-01: 1_532 + 2022-01-01: 1_551 + 2023-01-01: 1_690 + WINDHAM_COUNTY_VT: + 2021-01-01: 1_347 + 2022-01-01: 1_477 + 2023-01-01: 1_545 + WINDSOR_COUNTY_VT: + 2021-01-01: 1_441 + 2022-01-01: 1_490 + 2023-01-01: 1_542 + +6: + ADDISON_COUNTY_VT: + 2021-01-01: 1_435 + 2022-01-01: 1_515 + 2023-01-01: 1_601 + BENNINGTON_COUNTY_VT: + 2021-01-01: 1_275 + 2022-01-01: 1_380 + 2023-01-01: 1_578 + CALEDONIA_COUNTY_VT: + 2021-01-01: 1_431 + 2022-01-01: 1_501 + 2023-01-01: 1_625 + CHITTENDEN_COUNTY_VT: + 2021-01-01: 2_083 + 2022-01-01: 2_034 + 2023-01-01: 2_083 + ESSEX_COUNTY_VT: + 2021-01-01: 1_026 + 2022-01-01: 1_085 + 2023-01-01: 1_169 + FRANKLIN_COUNTY_VT: + 2021-01-01: 1_419 + 2022-01-01: 1_478 + 2023-01-01: 1_587 + GRAND_ISLE_COUNTY_VT: + 2021-01-01: 1_419 + 2022-01-01: 1_478 + 2023-01-01: 1_587 + LAMOILLE_COUNTY_VT: + 2021-01-01: 1_378 + 2022-01-01: 1_439 + 2023-01-01: 1_556 + ORANGE_COUNTY_VT: + 2021-01-01: 1_352 + 2022-01-01: 1_436 + 2023-01-01: 1_511 + ORLEANS_COUNTY_VT: + 2021-01-01: 1_222 + 2022-01-01: 1_244 + 2023-01-01: 1_318 + RUTLAND_COUNTY_VT: + 2021-01-01: 1_378 + 2022-01-01: 1_620 + 2023-01-01: 1_825 + WASHINGTON_COUNTY_VT: + 2021-01-01: 1_532 + 2022-01-01: 1_551 + 2023-01-01: 1_690 + WINDHAM_COUNTY_VT: + 2021-01-01: 1_347 + 2022-01-01: 1_477 + 2023-01-01: 1_545 + WINDSOR_COUNTY_VT: + 2021-01-01: 1_441 + 2022-01-01: 1_490 + 2023-01-01: 1_542 + +7: + ADDISON_COUNTY_VT: + 2021-01-01: 1_435 + 2022-01-01: 1_515 + 2023-01-01: 1_601 + BENNINGTON_COUNTY_VT: + 2021-01-01: 1_275 + 2022-01-01: 1_380 + 2023-01-01: 1_578 + CALEDONIA_COUNTY_VT: + 2021-01-01: 1_431 + 2022-01-01: 1_501 + 2023-01-01: 1_625 + CHITTENDEN_COUNTY_VT: + 2021-01-01: 2_083 + 2022-01-01: 2_034 + 2023-01-01: 2_083 + ESSEX_COUNTY_VT: + 2021-01-01: 1_026 + 2022-01-01: 1_085 + 2023-01-01: 1_169 + FRANKLIN_COUNTY_VT: + 2021-01-01: 1_419 + 2022-01-01: 1_478 + 2023-01-01: 1_587 + GRAND_ISLE_COUNTY_VT: + 2021-01-01: 1_419 + 2022-01-01: 1_478 + 2023-01-01: 1_587 + LAMOILLE_COUNTY_VT: + 2021-01-01: 1_378 + 2022-01-01: 1_439 + 2023-01-01: 1_556 + ORANGE_COUNTY_VT: + 2021-01-01: 1_352 + 2022-01-01: 1_436 + 2023-01-01: 1_511 + ORLEANS_COUNTY_VT: + 2021-01-01: 1_222 + 2022-01-01: 1_244 + 2023-01-01: 1_318 + RUTLAND_COUNTY_VT: + 2021-01-01: 1_378 + 2022-01-01: 1_620 + 2023-01-01: 1_825 + WASHINGTON_COUNTY_VT: + 2021-01-01: 1_532 + 2022-01-01: 1_551 + 2023-01-01: 1_690 + WINDHAM_COUNTY_VT: + 2021-01-01: 1_347 + 2022-01-01: 1_477 + 2023-01-01: 1_545 + WINDSOR_COUNTY_VT: + 2021-01-01: 1_441 + 2022-01-01: 1_490 + 2023-01-01: 1_542 + +8: + ADDISON_COUNTY_VT: + 2021-01-01: 1_435 + 2022-01-01: 1_515 + 2023-01-01: 1_601 + BENNINGTON_COUNTY_VT: + 2021-01-01: 1_275 + 2022-01-01: 1_380 + 2023-01-01: 1_578 + CALEDONIA_COUNTY_VT: + 2021-01-01: 1_431 + 2022-01-01: 1_501 + 2023-01-01: 1_625 + CHITTENDEN_COUNTY_VT: + 2021-01-01: 2_083 + 2022-01-01: 2_034 + 2023-01-01: 2_083 + ESSEX_COUNTY_VT: + 2021-01-01: 1_026 + 2022-01-01: 1_085 + 2023-01-01: 1_169 + FRANKLIN_COUNTY_VT: + 2021-01-01: 1_419 + 2022-01-01: 1_478 + 2023-01-01: 1_587 + GRAND_ISLE_COUNTY_VT: + 2021-01-01: 1_419 + 2022-01-01: 1_478 + 2023-01-01: 1_587 + LAMOILLE_COUNTY_VT: + 2021-01-01: 1_378 + 2022-01-01: 1_439 + 2023-01-01: 1_556 + ORANGE_COUNTY_VT: + 2021-01-01: 1_352 + 2022-01-01: 1_436 + 2023-01-01: 1_511 + ORLEANS_COUNTY_VT: + 2021-01-01: 1_222 + 2022-01-01: 1_244 + 2023-01-01: 1_318 + RUTLAND_COUNTY_VT: + 2021-01-01: 1_378 + 2022-01-01: 1_620 + 2023-01-01: 1_825 + WASHINGTON_COUNTY_VT: + 2021-01-01: 1_532 + 2022-01-01: 1_551 + 2023-01-01: 1_690 + WINDHAM_COUNTY_VT: + 2021-01-01: 1_347 + 2022-01-01: 1_477 + 2023-01-01: 1_545 + WINDSOR_COUNTY_VT: + 2021-01-01: 1_441 + 2022-01-01: 1_490 + 2023-01-01: 1_542 diff --git a/fiscalsim_us/parameters/gov/states/vt/tax/income/credits/renter/fmr_rate.yaml b/fiscalsim_us/parameters/gov/states/vt/tax/income/credits/renter/fmr_rate.yaml new file mode 100644 index 000000000..b7287681e --- /dev/null +++ b/fiscalsim_us/parameters/gov/states/vt/tax/income/credits/renter/fmr_rate.yaml @@ -0,0 +1,16 @@ +description: Vermont provides a renter credit of this fraction of fair market rent. +values: + 2021-01-01: 0.1 +metadata: + unit: /1 + period: year + label: Vermont renter credit fair market rent rate + reference: + - title: 32 V.S.A. §6066. Homestead Property Tax Credit and Renter Credit (b)(1)(A) + href: https://law.justia.com/codes/vermont/2022/title-32/chapter-154/section-6066/ + - title: 2022 Vermont instruction booklet + href: https://tax.vermont.gov/sites/tax/files/documents/Income%20Booklet-2022.pdf#page=35 + - title: 2021 Vermont instruction booklet + href: https://tax.vermont.gov/sites/tax/files/documents/Income-Booklet-2021.pdf#page=34 + - title: Vt. 2023 Income Tax Return Booklet + href: https://tax.vermont.gov/sites/tax/files/documents/Income-Booklet-2023.pdf#page=35 diff --git a/fiscalsim_us/parameters/gov/states/vt/tax/income/credits/renter/income_limit_ami/fifty_percent.yaml b/fiscalsim_us/parameters/gov/states/vt/tax/income/credits/renter/income_limit_ami/fifty_percent.yaml new file mode 100644 index 000000000..a74916eed --- /dev/null +++ b/fiscalsim_us/parameters/gov/states/vt/tax/income/credits/renter/income_limit_ami/fifty_percent.yaml @@ -0,0 +1,482 @@ +description: Vermont limits the partial renter credit to filers with income below this amount, based on the county and household size. +metadata: + unit: /1 + period: year + breakdown: + - list(range(1,8)) + label: Vermont partial renter credit income limit + reference: + # The table is derived from the official Vermont government website. The legal code refers to area median income. + - title: 32 V.S.A. §6066. Homestead Property Tax Credit and Renter Credit (b)(B) + href: https://law.justia.com/codes/vermont/2022/title-32/chapter-154/section-6066/ + - title: 2023 Vermont Partial Credit Income Limits by County + href: https://tax.vermont.gov/individuals/renter-credit/income-eligibility-limits + - title: 2022 Vermont instruction booklet + href: https://tax.vermont.gov/sites/tax/files/documents/Income%20Booklet-2022.pdf#page=35 + - title: 2021 Vermont instruction booklet + href: https://tax.vermont.gov/sites/tax/files/documents/Income-Booklet-2021.pdf#page=34 + + +1: + ADDISON_COUNTY_VT: + 2021-01-01: 29_300 + 2022-01-01: 32_800 + 2023-01-01: 34_700 + BENNINGTON_COUNTY_VT: + 2021-01-01: 27_450 + 2022-01-01: 30_000 + 2023-01-01: 31_750 + CALEDONIA_COUNTY_VT: + 2021-01-01: 27_450 + 2022-01-01: 30_000 + 2023-01-01: 31_750 + CHITTENDEN_COUNTY_VT: + 2021-01-01: 33_600 + 2022-01-01: 37_600 + 2023-01-01: 39_800 + ESSEX_COUNTY_VT: + 2021-01-01: 27_450 + 2022-01-01: 30_000 + 2023-01-01: 31_750 + FRANKLIN_COUNTY_VT: + 2021-01-01: 28_240 + 2022-01-01: 31_100 + 2023-01-01: 32_930 + GRAND_ISLE_COUNTY_VT: + 2021-01-01: 28_240 + 2022-01-01: 31_100 + 2023-01-01: 32_930 + LAMOILLE_COUNTY_VT: + 2021-01-01: 27_450 + 2022-01-01: 30_000 + 2023-01-01: 31_750 + ORANGE_COUNTY_VT: + 2021-01-01: 27_450 + 2022-01-01: 30_000 + 2023-01-01: 31_750 + ORLEANS_COUNTY_VT: + 2021-01-01: 27_450 + 2022-01-01: 30_000 + 2023-01-01: 31_750 + RUTLAND_COUNTY_VT: + 2021-01-01: 27_450 + 2022-01-01: 30_000 + 2023-01-01: 31_750 + WASHINGTON_COUNTY_VT: + 2021-01-01: 28_800 + 2022-01-01: 32_000 + 2023-01-01: 33_900 + WINDHAM_COUNTY_VT: + 2021-01-01: 27_450 + 2022-01-01: 30_000 + 2023-01-01: 31_750 + WINDSOR_COUNTY_VT: + 2021-01-01: 27_600 + 2022-01-01: 30_850 + 2023-01-01: 32_700 + +2: + ADDISON_COUNTY_VT: + 2021-01-01: 33_500 + 2022-01-01: 37_450 + 2023-01-01: 39_650 + BENNINGTON_COUNTY_VT: + 2021-01-01: 31_350 + 2022-01-01: 34_300 + 2023-01-01: 36_300 + CALEDONIA_COUNTY_VT: + 2021-01-01: 31_350 + 2022-01-01: 34_300 + 2023-01-01: 36_300 + CHITTENDEN_COUNTY_VT: + 2021-01-01: 38_400 + 2022-01-01: 42_950 + 2023-01-01: 45_450 + ESSEX_COUNTY_VT: + 2021-01-01: 31_350 + 2022-01-01: 34_300 + 2023-01-01: 36_300 + FRANKLIN_COUNTY_VT: + 2021-01-01: 32_260 + 2022-01-01: 35_550 + 2023-01-01: 37_630 + GRAND_ISLE_COUNTY_VT: + 2021-01-01: 32_260 + 2022-01-01: 35_550 + 2023-01-01: 37_630 + LAMOILLE_COUNTY_VT: + 2021-01-01: 31_350 + 2022-01-01: 34_300 + 2023-01-01: 36_300 + ORANGE_COUNTY_VT: + 2021-01-01: 31_350 + 2022-01-01: 34_300 + 2023-01-01: 36_300 + ORLEANS_COUNTY_VT: + 2021-01-01: 31_350 + 2022-01-01: 34_300 + 2023-01-01: 36_300 + RUTLAND_COUNTY_VT: + 2021-01-01: 31_350 + 2022-01-01: 34_300 + 2023-01-01: 36_300 + WASHINGTON_COUNTY_VT: + 2021-01-01: 32_900 + 2022-01-01: 36_600 + 2023-01-01: 38_750 + WINDHAM_COUNTY_VT: + 2021-01-01: 31_350 + 2022-01-01: 34_300 + 2023-01-01: 36_300 + WINDSOR_COUNTY_VT: + 2021-01-01: 31_350 + 2022-01-01: 35_250 + 2023-01-01: 37_350 + +3: + ADDISON_COUNTY_VT: + 2021-01-01: 37_700 + 2022-01-01: 42_150 + 2023-01-01: 44_600 + BENNINGTON_COUNTY_VT: + 2021-01-01: 35_250 + 2022-01-01: 38_600 + 2023-01-01: 40_850 + CALEDONIA_COUNTY_VT: + 2021-01-01: 35_250 + 2022-01-01: 38_600 + 2023-01-01: 40_850 + CHITTENDEN_COUNTY_VT: + 2021-01-01: 43_200 + 2022-01-01: 48_300 + 2023-01-01: 51_150 + ESSEX_COUNTY_VT: + 2021-01-01: 35_250 + 2022-01-01: 38_600 + 2023-01-01: 40_850 + FRANKLIN_COUNTY_VT: + 2021-01-01: 36_280 + 2022-01-01: 40_000 + 2023-01-01: 42_350 + GRAND_ISLE_COUNTY_VT: + 2021-01-01: 36_280 + 2022-01-01: 40_000 + 2023-01-01: 42_350 + LAMOILLE_COUNTY_VT: + 2021-01-01: 35_250 + 2022-01-01: 38_600 + 2023-01-01: 40_850 + ORANGE_COUNTY_VT: + 2021-01-01: 35_250 + 2022-01-01: 38_600 + 2023-01-01: 40_850 + ORLEANS_COUNTY_VT: + 2021-01-01: 35_250 + 2022-01-01: 38_600 + 2023-01-01: 40_850 + RUTLAND_COUNTY_VT: + 2021-01-01: 35_250 + 2022-01-01: 38_600 + 2023-01-01: 40_850 + WASHINGTON_COUNTY_VT: + 2021-01-01: 37_000 + 2022-01-01: 41_150 + 2023-01-01: 43_600 + WINDHAM_COUNTY_VT: + 2021-01-01: 35_250 + 2022-01-01: 38_600 + 2023-01-01: 40_850 + WINDSOR_COUNTY_VT: + 2021-01-01: 35_500 + 2022-01-01: 39_650 + 2023-01-01: 42_000 + +4: + ADDISON_COUNTY_VT: + 2021-01-01: 41_850 + 2022-01-01: 46_800 + 2023-01-01: 49_550 + BENNINGTON_COUNTY_VT: + 2021-01-01: 39_150 + 2022-01-01: 42_850 + 2023-01-01: 45_350 + CALEDONIA_COUNTY_VT: + 2021-01-01: 39_150 + 2022-01-01: 42_850 + 2023-01-01: 45_350 + CHITTENDEN_COUNTY_VT: + 2021-01-01: 47_950 + 2022-01-01: 53_650 + 2023-01-01: 56_800 + ESSEX_COUNTY_VT: + 2021-01-01: 39_150 + 2022-01-01: 42_850 + 2023-01-01: 45_350 + FRANKLIN_COUNTY_VT: + 2021-01-01: 40_290 + 2022-01-01: 44_420 + 2023-01-01: 47_020 + GRAND_ISLE_COUNTY_VT: + 2021-01-01: 40_290 + 2022-01-01: 44_420 + 2023-01-01: 47_020 + LAMOILLE_COUNTY_VT: + 2021-01-01: 39_150 + 2022-01-01: 42_850 + 2023-01-01: 45_350 + ORANGE_COUNTY_VT: + 2021-01-01: 39_150 + 2022-01-01: 42_850 + 2023-01-01: 45_350 + ORLEANS_COUNTY_VT: + 2021-01-01: 39_150 + 2022-01-01: 42_850 + 2023-01-01: 45_350 + RUTLAND_COUNTY_VT: + 2021-01-01: 39_150 + 2022-01-01: 42_850 + 2023-01-01: 45_350 + WASHINGTON_COUNTY_VT: + 2021-01-01: 41_100 + 2022-01-01: 45_700 + 2023-01-01: 48_400 + WINDHAM_COUNTY_VT: + 2021-01-01: 39_150 + 2022-01-01: 42_850 + 2023-01-01: 45_350 + WINDSOR_COUNTY_VT: + 2021-01-01: 39_400 + 2022-01-01: 44_050 + 2023-01-01: 46_650 + +5: + ADDISON_COUNTY_VT: + 2021-01-01: 45_200 + 2022-01-01: 50_550 + 2023-01-01: 53_550 + BENNINGTON_COUNTY_VT: + 2021-01-01: 42_300 + 2022-01-01: 46_300 + 2023-01-01: 49_000 + CALEDONIA_COUNTY_VT: + 2021-01-01: 42_300 + 2022-01-01: 46_300 + 2023-01-01: 49_000 + CHITTENDEN_COUNTY_VT: + 2021-01-01: 51_800 + 2022-01-01: 57_950 + 2023-01-01: 61_350 + ESSEX_COUNTY_VT: + 2021-01-01: 42_300 + 2022-01-01: 46_300 + 2023-01-01: 49_000 + FRANKLIN_COUNTY_VT: + 2021-01-01: 43_530 + 2022-01-01: 47_990 + 2023-01-01: 50_800 + GRAND_ISLE_COUNTY_VT: + 2021-01-01: 43_530 + 2022-01-01: 47_990 + 2023-01-01: 50_800 + LAMOILLE_COUNTY_VT: + 2021-01-01: 42_300 + 2022-01-01: 46_300 + 2023-01-01: 49_000 + ORANGE_COUNTY_VT: + 2021-01-01: 42_300 + 2022-01-01: 46_300 + 2023-01-01: 49_000 + ORLEANS_COUNTY_VT: + 2021-01-01: 42_300 + 2022-01-01: 46_300 + 2023-01-01: 49_000 + RUTLAND_COUNTY_VT: + 2021-01-01: 42_300 + 2022-01-01: 46_300 + 2023-01-01: 49_000 + WASHINGTON_COUNTY_VT: + 2021-01-01: 44_400 + 2022-01-01: 49_400 + 2023-01-01: 52_300 + WINDHAM_COUNTY_VT: + 2021-01-01: 42_300 + 2022-01-01: 46_300 + 2023-01-01: 49_000 + WINDSOR_COUNTY_VT: + 2021-01-01: 42_600 + 2022-01-01: 47_600 + 2023-01-01: 50_400 + +6: + ADDISON_COUNTY_VT: + 2021-01-01: 48_550 + 2022-01-01: 54_300 + 2023-01-01: 57_500 + BENNINGTON_COUNTY_VT: + 2021-01-01: 45_450 + 2022-01-01: 49_750 + 2023-01-01: 52_650 + CALEDONIA_COUNTY_VT: + 2021-01-01: 45_450 + 2022-01-01: 49_750 + 2023-01-01: 52_650 + CHITTENDEN_COUNTY_VT: + 2021-01-01: 55_650 + 2022-01-01: 62_250 + 2023-01-01: 65_900 + ESSEX_COUNTY_VT: + 2021-01-01: 45_450 + 2022-01-01: 49_750 + 2023-01-01: 52_650 + FRANKLIN_COUNTY_VT: + 2021-01-01: 46_770 + 2022-01-01: 51_560 + 2023-01-01: 54_580 + GRAND_ISLE_COUNTY_VT: + 2021-01-01: 46_770 + 2022-01-01: 51_560 + 2023-01-01: 54_580 + LAMOILLE_COUNTY_VT: + 2021-01-01: 45_450 + 2022-01-01: 49_750 + 2023-01-01: 52_650 + ORANGE_COUNTY_VT: + 2021-01-01: 45_450 + 2022-01-01: 49_750 + 2023-01-01: 52_650 + ORLEANS_COUNTY_VT: + 2021-01-01: 45_450 + 2022-01-01: 49_750 + 2023-01-01: 52_650 + RUTLAND_COUNTY_VT: + 2021-01-01: 45_450 + 2022-01-01: 49_750 + 2023-01-01: 52_650 + WASHINGTON_COUNTY_VT: + 2021-01-01: 47_700 + 2022-01-01: 53_050 + 2023-01-01: 56_150 + WINDHAM_COUNTY_VT: + 2021-01-01: 45_450 + 2022-01-01: 49_750 + 2023-01-01: 52_650 + WINDSOR_COUNTY_VT: + 2021-01-01: 45_750 + 2022-01-01: 51_100 + 2023-01-01: 54_150 + +7: + ADDISON_COUNTY_VT: + 2021-01-01: 51_900 + 2022-01-01: 58_050 + 2023-01-01: 61_450 + BENNINGTON_COUNTY_VT: + 2021-01-01: 48_550 + 2022-01-01: 53_150 + 2023-01-01: 56_250 + CALEDONIA_COUNTY_VT: + 2021-01-01: 48_550 + 2022-01-01: 53_150 + 2023-01-01: 56_250 + CHITTENDEN_COUNTY_VT: + 2021-01-01: 59_500 + 2022-01-01: 66_550 + 2023-01-01: 70_450 + ESSEX_COUNTY_VT: + 2021-01-01: 48_550 + 2022-01-01: 53_150 + 2023-01-01: 56_250 + FRANKLIN_COUNTY_VT: + 2021-01-01: 49_980 + 2022-01-01: 55_100 + 2023-01-01: 56_250 + GRAND_ISLE_COUNTY_VT: + 2021-01-01: 49_980 + 2022-01-01: 55_100 + 2023-01-01: 58_320 + LAMOILLE_COUNTY_VT: + 2021-01-01: 48_550 + 2022-01-01: 53_150 + 2023-01-01: 58_320 + ORANGE_COUNTY_VT: + 2021-01-01: 48_550 + 2022-01-01: 53_150 + 2023-01-01: 56_250 + ORLEANS_COUNTY_VT: + 2021-01-01: 48_550 + 2022-01-01: 53_150 + 2023-01-01: 56_250 + RUTLAND_COUNTY_VT: + 2021-01-01: 48_550 + 2022-01-01: 53_150 + 2023-01-01: 56_250 + WASHINGTON_COUNTY_VT: + 2021-01-01: 51_000 + 2022-01-01: 56_700 + 2023-01-01: 60_050 + WINDHAM_COUNTY_VT: + 2021-01-01: 48_550 + 2022-01-01: 53_150 + 2023-01-01: 56_250 + WINDSOR_COUNTY_VT: + 2021-01-01: 48_900 + 2022-01-01: 54_650 + 2023-01-01: 57_850 + +8: + ADDISON_COUNTY_VT: + 2021-01-01: 55_250 + 2022-01-01: 61_800 + 2023-01-01: 65_450 + BENNINGTON_COUNTY_VT: + 2021-01-01: 51_700 + 2022-01-01: 56_600 + 2023-01-01: 59_900 + CALEDONIA_COUNTY_VT: + 2021-01-01: 51_700 + 2022-01-01: 56_600 + 2023-01-01: 59_900 + CHITTENDEN_COUNTY_VT: + 2021-01-01: 63_300 + 2022-01-01: 70_850 + 2023-01-01: 75_000 + ESSEX_COUNTY_VT: + 2021-01-01: 51_700 + 2022-01-01: 56_600 + 2023-01-01: 59_900 + FRANKLIN_COUNTY_VT: + 2021-01-01: 53_210 + 2022-01-01: 58_660 + 2023-01-01: 62_100 + GRAND_ISLE_COUNTY_VT: + 2021-01-01: 53_210 + 2022-01-01: 58_660 + 2023-01-01: 62_100 + LAMOILLE_COUNTY_VT: + 2021-01-01: 51_700 + 2022-01-01: 56_600 + 2023-01-01: 59_900 + ORANGE_COUNTY_VT: + 2021-01-01: 51_700 + 2022-01-01: 56_600 + 2023-01-01: 59_900 + ORLEANS_COUNTY_VT: + 2021-01-01: 51_700 + 2022-01-01: 56_600 + 2023-01-01: 59_900 + RUTLAND_COUNTY_VT: + 2021-01-01: 51_700 + 2022-01-01: 56_600 + 2023-01-01: 59_900 + WASHINGTON_COUNTY_VT: + 2021-01-01: 54_300 + 2022-01-01: 60_350 + 2023-01-01: 63_900 + WINDHAM_COUNTY_VT: + 2021-01-01: 51_700 + 2022-01-01: 56_600 + 2023-01-01: 59_900 + WINDSOR_COUNTY_VT: + 2021-01-01: 52_050 + 2022-01-01: 58_150 + 2023-01-01: 61_600 diff --git a/fiscalsim_us/parameters/gov/states/vt/tax/income/credits/renter/income_limit_ami/thirty_percent.yaml b/fiscalsim_us/parameters/gov/states/vt/tax/income/credits/renter/income_limit_ami/thirty_percent.yaml new file mode 100644 index 000000000..c77dc3124 --- /dev/null +++ b/fiscalsim_us/parameters/gov/states/vt/tax/income/credits/renter/income_limit_ami/thirty_percent.yaml @@ -0,0 +1,482 @@ +description: Vermont limits the full renter credit to filers with income below this threshold, based on the county and household size. +metadata: + unit: currency-USD + period: year + breakdown: + - list(range(1,8)) + label: Vermont full renter credit income limit + reference: + # The table is derived from the official Vermont government website. The legal code refers to area median income. + - title: 32 V.S.A. §6066. Homestead Property Tax Credit and Renter Credit (b)(B) + href: https://law.justia.com/codes/vermont/2022/title-32/chapter-154/section-6066/ + - title: 2023 Vermont Full Credit Income Limits by County + href: https://tax.vermont.gov/individuals/renter-credit/income-eligibility-limits + - title: 2022 Vermont instruction booklet + href: https://tax.vermont.gov/sites/tax/files/documents/Income%20Booklet-2022.pdf#page=35 + - title: 2021 Vermont instruction booklet + href: https://tax.vermont.gov/sites/tax/files/documents/Income-Booklet-2021.pdf#page=34 + + +1: + ADDISON_COUNTY_VT: + 2021-01-01: 17_600 + 2022-01-01: 19_700 + 2023-01-01: 20_850 + BENNINGTON_COUNTY_VT: + 2021-01-01: 16_450 + 2022-01-01: 18_000 + 2023-01-01: 19_050 + CALEDONIA_COUNTY_VT: + 2021-01-01: 16_450 + 2022-01-01: 18_000 + 2023-01-01: 19_050 + CHITTENDEN_COUNTY_VT: + 2021-01-01: 20_150 + 2022-01-01: 22_550 + 2023-01-01: 23_900 + ESSEX_COUNTY_VT: + 2021-01-01: 16_450 + 2022-01-01: 18_000 + 2023-01-01: 19_050 + FRANKLIN_COUNTY_VT: + 2021-01-01: 16_940 + 2022-01-01: 18_670 + 2023-01-01: 19_760 + GRAND_ISLE_COUNTY_VT: + 2021-01-01: 16_940 + 2022-01-01: 18_670 + 2023-01-01: 19_760 + LAMOILLE_COUNTY_VT: + 2021-01-01: 16_450 + 2022-01-01: 18_000 + 2023-01-01: 19_050 + ORANGE_COUNTY_VT: + 2021-01-01: 16_450 + 2022-01-01: 18_000 + 2023-01-01: 19_050 + ORLEANS_COUNTY_VT: + 2021-01-01: 16_450 + 2022-01-01: 18_000 + 2023-01-01: 19_050 + RUTLAND_COUNTY_VT: + 2021-01-01: 16_450 + 2022-01-01: 18_000 + 2023-01-01: 19_050 + WASHINGTON_COUNTY_VT: + 2021-01-01: 17_300 + 2022-01-01: 19_200 + 2023-01-01: 20_350 + WINDHAM_COUNTY_VT: + 2021-01-01: 16_450 + 2022-01-01: 18_000 + 2023-01-01: 19_050 + WINDSOR_COUNTY_VT: + 2021-01-01: 16_600 + 2022-01-01: 18_550 + 2023-01-01: 19_600 + +2: + ADDISON_COUNTY_VT: + 2021-01-01: 20_100 + 2022-01-01: 22_500 + 2023-01-01: 23_800 + BENNINGTON_COUNTY_VT: + 2021-01-01: 18_800 + 2022-01-01: 20_600 + 2023-01-01: 21_800 + CALEDONIA_COUNTY_VT: + 2021-01-01: 18_800 + 2022-01-01: 20_600 + 2023-01-01: 21_800 + CHITTENDEN_COUNTY_VT: + 2021-01-01: 23_000 + 2022-01-01: 25_800 + 2023-01-01: 27_300 + ESSEX_COUNTY_VT: + 2021-01-01: 18_800 + 2022-01-01: 20_600 + 2023-01-01: 21_800 + FRANKLIN_COUNTY_VT: + 2021-01-01: 19_350 + 2022-01-01: 21_350 + 2023-01-01: 22_600 + GRAND_ISLE_COUNTY_VT: + 2021-01-01: 19_350 + 2022-01-01: 21_350 + 2023-01-01: 22_600 + LAMOILLE_COUNTY_VT: + 2021-01-01: 18_800 + 2022-01-01: 20_600 + 2023-01-01: 21_800 + ORANGE_COUNTY_VT: + 2021-01-01: 18_800 + 2022-01-01: 20_600 + 2023-01-01: 21_800 + ORLEANS_COUNTY_VT: + 2021-01-01: 18_800 + 2022-01-01: 20_600 + 2023-01-01: 21_800 + RUTLAND_COUNTY_VT: + 2021-01-01: 18_800 + 2022-01-01: 20_600 + 2023-01-01: 21_800 + WASHINGTON_COUNTY_VT: + 2021-01-01: 19_750 + 2022-01-01: 21_950 + 2023-01-01: 23_250 + WINDHAM_COUNTY_VT: + 2021-01-01: 18_800 + 2022-01-01: 20_600 + 2023-01-01: 21_800 + WINDSOR_COUNTY_VT: + 2021-01-01: 18_950 + 2022-01-01: 21_200 + 2023-01-01: 22_400 + +3: + ADDISON_COUNTY_VT: + 2021-01-01: 22_600 + 2022-01-01: 25_300 + 2023-01-01: 26_800 + BENNINGTON_COUNTY_VT: + 2021-01-01: 21_960 + 2022-01-01: 23_150 + 2023-01-01: 24_860 + CALEDONIA_COUNTY_VT: + 2021-01-01: 21_960 + 2022-01-01: 23_150 + 2023-01-01: 24_860 + CHITTENDEN_COUNTY_VT: + 2021-01-01: 25_900 + 2022-01-01: 29_000 + 2023-01-01: 30_700 + ESSEX_COUNTY_VT: + 2021-01-01: 21_960 + 2022-01-01: 23_150 + 2023-01-01: 24_860 + FRANKLIN_COUNTY_VT: + 2021-01-01: 22_360 + 2022-01-01: 24_000 + 2023-01-01: 25_640 + GRAND_ISLE_COUNTY_VT: + 2021-01-01: 22_360 + 2022-01-01: 24_000 + 2023-01-01: 25_640 + LAMOILLE_COUNTY_VT: + 2021-01-01: 21_960 + 2022-01-01: 23_150 + 2023-01-01: 24_860 + ORANGE_COUNTY_VT: + 2021-01-01: 21_960 + 2022-01-01: 23_150 + 2023-01-01: 24_860 + ORLEANS_COUNTY_VT: + 2021-01-01: 21_960 + 2022-01-01: 23_150 + 2023-01-01: 24_860 + RUTLAND_COUNTY_VT: + 2021-01-01: 21_960 + 2022-01-01: 23_150 + 2023-01-01: 24_860 + WASHINGTON_COUNTY_VT: + 2021-01-01: 22_200 + 2022-01-01: 24_700 + 2023-01-01: 26_150 + WINDHAM_COUNTY_VT: + 2021-01-01: 21_960 + 2022-01-01: 23_150 + 2023-01-01: 24_860 + WINDSOR_COUNTY_VT: + 2021-01-01: 21_960 + 2022-01-01: 23_850 + 2023-01-01: 25_200 + +4: + ADDISON_COUNTY_VT: + 2021-01-01: 26_500 + 2022-01-01: 28_100 + 2023-01-01: 30_000 + BENNINGTON_COUNTY_VT: + 2021-01-01: 26_500 + 2022-01-01: 27_750 + 2023-01-01: 30_000 + CALEDONIA_COUNTY_VT: + 2021-01-01: 26_500 + 2022-01-01: 27_750 + 2023-01-01: 30_000 + CHITTENDEN_COUNTY_VT: + 2021-01-01: 28_750 + 2022-01-01: 32_200 + 2023-01-01: 34_100 + ESSEX_COUNTY_VT: + 2021-01-01: 26_500 + 2022-01-01: 27_750 + 2023-01-01: 30_000 + FRANKLIN_COUNTY_VT: + 2021-01-01: 26_690 + 2022-01-01: 28_150 + 2023-01-01: 30_340 + GRAND_ISLE_COUNTY_VT: + 2021-01-01: 26_690 + 2022-01-01: 28_150 + 2023-01-01: 30_340 + LAMOILLE_COUNTY_VT: + 2021-01-01: 26_500 + 2022-01-01: 27_750 + 2023-01-01: 30_000 + ORANGE_COUNTY_VT: + 2021-01-01: 26_500 + 2022-01-01: 27_750 + 2023-01-01: 30_000 + ORLEANS_COUNTY_VT: + 2021-01-01: 26_500 + 2022-01-01: 27_750 + 2023-01-01: 30_000 + RUTLAND_COUNTY_VT: + 2021-01-01: 26_500 + 2022-01-01: 27_750 + 2023-01-01: 30_000 + WASHINGTON_COUNTY_VT: + 2021-01-01: 26_500 + 2022-01-01: 27_750 + 2023-01-01: 30_000 + WINDHAM_COUNTY_VT: + 2021-01-01: 26_500 + 2022-01-01: 27_750 + 2023-01-01: 30_000 + WINDSOR_COUNTY_VT: + 2021-01-01: 26_500 + 2022-01-01: 27_750 + 2023-01-01: 30_000 + +5: + ADDISON_COUNTY_VT: + 2021-01-01: 31_040 + 2022-01-01: 32_470 + 2023-01-01: 35_140 + BENNINGTON_COUNTY_VT: + 2021-01-01: 31_040 + 2022-01-01: 32_470 + 2023-01-01: 35_140 + CALEDONIA_COUNTY_VT: + 2021-01-01: 31_040 + 2022-01-01: 32_470 + 2023-01-01: 35_140 + CHITTENDEN_COUNTY_VT: + 2021-01-01: 31_040 + 2022-01-01: 34_800 + 2023-01-01: 36_850 + ESSEX_COUNTY_VT: + 2021-01-01: 31_040 + 2022-01-01: 32_470 + 2023-01-01: 35_140 + FRANKLIN_COUNTY_VT: + 2021-01-01: 31_040 + 2022-01-01: 32_660 + 2023-01-01: 35_280 + GRAND_ISLE_COUNTY_VT: + 2021-01-01: 31_040 + 2022-01-01: 32_660 + 2023-01-01: 35_280 + LAMOILLE_COUNTY_VT: + 2021-01-01: 31_040 + 2022-01-01: 32_470 + 2023-01-01: 35_140 + ORANGE_COUNTY_VT: + 2021-01-01: 31_040 + 2022-01-01: 32_470 + 2023-01-01: 35_140 + ORLEANS_COUNTY_VT: + 2021-01-01: 31_040 + 2022-01-01: 32_470 + 2023-01-01: 35_140 + RUTLAND_COUNTY_VT: + 2021-01-01: 31_040 + 2022-01-01: 32_470 + 2023-01-01: 35_140 + WASHINGTON_COUNTY_VT: + 2021-01-01: 31_040 + 2022-01-01: 32_470 + 2023-01-01: 35_140 + WINDHAM_COUNTY_VT: + 2021-01-01: 31_040 + 2022-01-01: 32_470 + 2023-01-01: 35_140 + WINDSOR_COUNTY_VT: + 2021-01-01: 31_040 + 2022-01-01: 32_470 + 2023-01-01: 35_140 + +6: + ADDISON_COUNTY_VT: + 2021-01-01: 35_580 + 2022-01-01: 37_190 + 2023-01-01: 40_280 + BENNINGTON_COUNTY_VT: + 2021-01-01: 35_580 + 2022-01-01: 37_190 + 2023-01-01: 40_280 + CALEDONIA_COUNTY_VT: + 2021-01-01: 35_580 + 2022-01-01: 37_190 + 2023-01-01: 40_280 + CHITTENDEN_COUNTY_VT: + 2021-01-01: 35_580 + 2022-01-01: 37_400 + 2023-01-01: 40_280 + ESSEX_COUNTY_VT: + 2021-01-01: 35_580 + 2022-01-01: 37_190 + 2023-01-01: 40_280 + FRANKLIN_COUNTY_VT: + 2021-01-01: 35_580 + 2022-01-01: 37_210 + 2023-01-01: 40_280 + GRAND_ISLE_COUNTY_VT: + 2021-01-01: 35_580 + 2022-01-01: 37_210 + 2023-01-01: 40_280 + LAMOILLE_COUNTY_VT: + 2021-01-01: 35_580 + 2022-01-01: 37_190 + 2023-01-01: 40_280 + ORANGE_COUNTY_VT: + 2021-01-01: 35_580 + 2022-01-01: 37_190 + 2023-01-01: 40_280 + ORLEANS_COUNTY_VT: + 2021-01-01: 35_580 + 2022-01-01: 37_190 + 2023-01-01: 40_280 + RUTLAND_COUNTY_VT: + 2021-01-01: 35_580 + 2022-01-01: 37_190 + 2023-01-01: 40_280 + WASHINGTON_COUNTY_VT: + 2021-01-01: 35_580 + 2022-01-01: 37_190 + 2023-01-01: 40_280 + WINDHAM_COUNTY_VT: + 2021-01-01: 35_580 + 2022-01-01: 37_190 + 2023-01-01: 40_280 + WINDSOR_COUNTY_VT: + 2021-01-01: 35_580 + 2022-01-01: 37_190 + 2023-01-01: 40_280 + +7: + ADDISON_COUNTY_VT: + 2021-01-01: 40_120 + 2022-01-01: 41_910 + 2023-01-01: 45_420 + BENNINGTON_COUNTY_VT: + 2021-01-01: 40_120 + 2022-01-01: 41_910 + 2023-01-01: 45_420 + CALEDONIA_COUNTY_VT: + 2021-01-01: 40_120 + 2022-01-01: 41_910 + 2023-01-01: 45_420 + CHITTENDEN_COUNTY_VT: + 2021-01-01: 40_120 + 2022-01-01: 41_910 + 2023-01-01: 45_420 + ESSEX_COUNTY_VT: + 2021-01-01: 40_120 + 2022-01-01: 41_910 + 2023-01-01: 45_420 + FRANKLIN_COUNTY_VT: + 2021-01-01: 40_120 + 2022-01-01: 41_910 + 2023-01-01: 45_420 + GRAND_ISLE_COUNTY_VT: + 2021-01-01: 40_120 + 2022-01-01: 41_910 + 2023-01-01: 45_420 + LAMOILLE_COUNTY_VT: + 2021-01-01: 40_120 + 2022-01-01: 41_910 + 2023-01-01: 45_420 + ORANGE_COUNTY_VT: + 2021-01-01: 40_120 + 2022-01-01: 41_910 + 2023-01-01: 45_420 + ORLEANS_COUNTY_VT: + 2021-01-01: 40_120 + 2022-01-01: 41_910 + 2023-01-01: 45_420 + RUTLAND_COUNTY_VT: + 2021-01-01: 40_120 + 2022-01-01: 41_910 + 2023-01-01: 45_420 + WASHINGTON_COUNTY_VT: + 2021-01-01: 40_120 + 2022-01-01: 41_910 + 2023-01-01: 45_420 + WINDHAM_COUNTY_VT: + 2021-01-01: 40_120 + 2022-01-01: 41_910 + 2023-01-01: 45_420 + WINDSOR_COUNTY_VT: + 2021-01-01: 40_120 + 2022-01-01: 41_910 + 2023-01-01: 45_420 + +8: + ADDISON_COUNTY_VT: + 2021-01-01: 44_660 + 2022-01-01: 46_630 + 2023-01-01: 50_560 + BENNINGTON_COUNTY_VT: + 2021-01-01: 44_660 + 2022-01-01: 46_630 + 2023-01-01: 50_560 + CALEDONIA_COUNTY_VT: + 2021-01-01: 44_660 + 2022-01-01: 46_630 + 2023-01-01: 50_560 + CHITTENDEN_COUNTY_VT: + 2021-01-01: 44_660 + 2022-01-01: 46_630 + 2023-01-01: 50_560 + ESSEX_COUNTY_VT: + 2021-01-01: 44_660 + 2022-01-01: 46_630 + 2023-01-01: 50_560 + FRANKLIN_COUNTY_VT: + 2021-01-01: 44_660 + 2022-01-01: 46_630 + 2023-01-01: 50_560 + GRAND_ISLE_COUNTY_VT: + 2021-01-01: 44_660 + 2022-01-01: 46_630 + 2023-01-01: 50_560 + LAMOILLE_COUNTY_VT: + 2021-01-01: 44_660 + 2022-01-01: 46_630 + 2023-01-01: 50_560 + ORANGE_COUNTY_VT: + 2021-01-01: 44_660 + 2022-01-01: 46_630 + 2023-01-01: 50_560 + ORLEANS_COUNTY_VT: + 2021-01-01: 44_660 + 2022-01-01: 46_630 + 2023-01-01: 50_560 + RUTLAND_COUNTY_VT: + 2021-01-01: 44_660 + 2022-01-01: 46_630 + 2023-01-01: 50_560 + WASHINGTON_COUNTY_VT: + 2021-01-01: 44_660 + 2022-01-01: 46_630 + 2023-01-01: 50_560 + WINDHAM_COUNTY_VT: + 2021-01-01: 44_660 + 2022-01-01: 46_630 + 2023-01-01: 50_560 + WINDSOR_COUNTY_VT: + 2021-01-01: 44_660 + 2022-01-01: 46_630 + 2023-01-01: 50_560 diff --git a/fiscalsim_us/parameters/gov/states/vt/tax/income/credits/renter/shared_residence_reduction.yaml b/fiscalsim_us/parameters/gov/states/vt/tax/income/credits/renter/shared_residence_reduction.yaml new file mode 100644 index 000000000..2d3898c0e --- /dev/null +++ b/fiscalsim_us/parameters/gov/states/vt/tax/income/credits/renter/shared_residence_reduction.yaml @@ -0,0 +1,16 @@ +description: Vermont reduces the renter credit by this fraction for filers who reside with people outside their filing unit. +values: + 2021-01-01: 0.5 +metadata: + unit: /1 + period: year + label: Vermont renter credit shared rent fraction + reference: + - title: 32 V.S.A. §6066. Homestead Property Tax Credit and Renter Credit (b)(2) + href: https://law.justia.com/codes/vermont/2022/title-32/chapter-154/section-6066/ + - title: 2022 Vermont instruction booklet + href: https://tax.vermont.gov/sites/tax/files/documents/Income%20Booklet-2022.pdf#page=35 + - title: 2021 Vermont instruction booklet + href: https://tax.vermont.gov/sites/tax/files/documents/Income-Booklet-2021.pdf#page=34 + - title: Vt. 2023 Income Tax Return Booklet + href: https://tax.vermont.gov/sites/tax/files/documents/Income-Booklet-2023.pdf#page=27 diff --git a/fiscalsim_us/parameters/gov/states/vt/tax/income/deductions/standard/additional.yaml b/fiscalsim_us/parameters/gov/states/vt/tax/income/deductions/standard/additional.yaml index 7fcd4bdf2..d03f610f2 100644 --- a/fiscalsim_us/parameters/gov/states/vt/tax/income/deductions/standard/additional.yaml +++ b/fiscalsim_us/parameters/gov/states/vt/tax/income/deductions/standard/additional.yaml @@ -3,6 +3,7 @@ metadata: label: Vermont additional aged or blind, head or spouse, standard deduction amount period: year unit: currency-USD + uprating: gov.irs.uprating reference: - title: 2021 VERMONT Income Tax Return Form Instructions-Taxable Income Line 4 href: https://tax.vermont.gov/sites/tax/files/documents/Income-Booklet-2021.pdf @@ -11,6 +12,8 @@ metadata: # Legal code specifies $1,000 with inflation adjustments. - title: Legal Code Titl. 32 V.S.A. § 5811(21)(C)(iii) href: https://legislature.vermont.gov/statutes/section/32/151/05811 - + - title: 2023 VERMONT Income Tax Return Form Instructions-Taxable Income Line 4 + href: https://tax.vermont.gov/sites/tax/files/documents/Income%20Booklet-2023.pdf#page=10 values: 2021-01-01: 1_050 + 2023-01-01: 1_150 diff --git a/fiscalsim_us/parameters/gov/states/vt/tax/income/deductions/standard/base.yaml b/fiscalsim_us/parameters/gov/states/vt/tax/income/deductions/standard/base.yaml index 0bda2299f..0067841be 100644 --- a/fiscalsim_us/parameters/gov/states/vt/tax/income/deductions/standard/base.yaml +++ b/fiscalsim_us/parameters/gov/states/vt/tax/income/deductions/standard/base.yaml @@ -7,25 +7,62 @@ metadata: - filing_status reference: - title: 2021 VERMONT Income Tax Return Form Instructions-Taxable Income Line 4 - href: https://tax.vermont.gov/sites/tax/files/documents/Income-Booklet-2021.pdf + href: https://tax.vermont.gov/sites/tax/files/documents/Income-Booklet-2021.pdf#page=10 - title: 2022 VERMONT Income Tax Return Form Instructions-Taxable Income Line 4 - href: https://tax.vermont.gov/sites/tax/files/documents/Income%20Booklet-2022.pdf + href: https://tax.vermont.gov/sites/tax/files/documents/Income%20Booklet-2022.pdf#page=10 + - title: 2023 VERMONT Income Tax Return Form Instructions-Taxable Income Line 4 + href: https://tax.vermont.gov/sites/tax/files/documents/Income-Booklet-2023.pdf#page=10 # Legal code specifies amount with inflation adjustments.. - - title: Legal Code Titl. 32 V.S.A. § 5811(21)(C)(ii) - href: https://legislature.vermont.gov/statutes/section/32/151/05811 + - title: Legal Code Titl. 32 V.S.A. § 5811(21)(C)(ii) + href: https://legislature.vermont.gov/statutes/section/32/151/05811 JOINT: - 2021-01-01: 12_700 - 2022-01-01: 13_050 + values: + 2021-01-01: 12_700 + 2022-01-01: 13_050 + 2023-01-01: 14_050 + metadata: + uprating: gov.irs.uprating + rounding: + type: downwards + interval: 50 HEAD_OF_HOUSEHOLD: - 2021-01-01: 9_500 - 2022-01-01: 9_800 + values: + 2021-01-01: 9_500 + 2022-01-01: 9_800 + 2023-01-01: 10_550 + metadata: + uprating: gov.irs.uprating + rounding: + type: downwards + interval: 50 SURVIVING_SPOUSE: - 2021-01-01: 12_700 - 2022-01-01: 13_050 + values: + 2021-01-01: 12_700 + 2022-01-01: 13_050 + 2023-01-01: 14_050 + metadata: + uprating: gov.irs.uprating + rounding: + type: downwards + interval: 50 SINGLE: - 2021-01-01: 6_350 - 2022-01-01: 6_500 + values: + 2021-01-01: 6_350 + 2022-01-01: 6_500 + 2023-01-01: 7_000 + metadata: + uprating: gov.irs.uprating + rounding: + type: downwards + interval: 50 SEPARATE: - 2021-01-01: 6_350 - 2022-01-01: 6_500 + values: + 2021-01-01: 6_350 + 2022-01-01: 6_500 + 2023-01-01: 7_000 + metadata: + uprating: gov.irs.uprating + rounding: + type: downwards + interval: 50 diff --git a/fiscalsim_us/parameters/gov/states/vt/tax/income/exemption/personal.yaml b/fiscalsim_us/parameters/gov/states/vt/tax/income/exemption/personal.yaml index d4502eee8..9416c2f95 100644 --- a/fiscalsim_us/parameters/gov/states/vt/tax/income/exemption/personal.yaml +++ b/fiscalsim_us/parameters/gov/states/vt/tax/income/exemption/personal.yaml @@ -2,10 +2,16 @@ description: Vermont provides the following personal exemption amount. values: 2021-01-01: 4_350 2022-01-01: 4_500 + 2023-01-01: 4_850 metadata: unit: currency-USD period: year label: Vermont personal exemption amount + uprating: + parameter: gov.irs.uprating + rounding: + type: downwards + interval: 50 reference: # Legal code specifies $4,150. Date unknown. - title: Legal Code Titl. 32 V.S.A. § 5811(21)(C)(i) @@ -14,3 +20,5 @@ metadata: href: https://tax.vermont.gov/sites/tax/files/documents/IN-111-2022.pdf - title: 2021 Vermont Income Tax Return Form Line 5 href: https://tax.vermont.gov/sites/tax/files/documents/IN-111-2021.pdf + - title: 2023 Vermont Income Tax Return Form Line 5 + href: https://tax.vermont.gov/sites/tax/files/documents/IN-111-2023.pdf diff --git a/fiscalsim_us/parameters/gov/states/vt/tax/income/rates/amt.yaml b/fiscalsim_us/parameters/gov/states/vt/tax/income/rates/amt.yaml new file mode 100644 index 000000000..f3c7942c0 --- /dev/null +++ b/fiscalsim_us/parameters/gov/states/vt/tax/income/rates/amt.yaml @@ -0,0 +1,25 @@ +description: Vermont levies an alternative minimum tax of this rate above the threshold. +metadata: + type: single_amount + threshold_unit: currency-USD + rate_unit: /1 + label: Vermont alternative minimum tax rate + reference: + - title: Vermont §5822. Tax on income of individuals, estates, and trusts (a)(6) + href: https://casetext.com/statute/vermont-statutes/title-32-taxation-and-finance/chapter-151-income-taxes/subchapter-002-taxation-of-individuals-trusts-and-estates/section-5822-tax-on-income-of-individuals-estates-and-trusts + - title: Vermont 2021 Income Tax Rate Schedules + href: https://tax.vermont.gov/sites/tax/files/documents/RateSched-2021.pdf#page=1 + - title: Vermont 2022 Income Tax Return Booklet Forms and Instructions + href: https://tax.vermont.gov/sites/tax/files/documents/RateSched-2022.pdf#page=1 + - title: Vermont 2023 Income Tax Return Booklet Forms and Instructions + href: https://tax.vermont.gov/sites/tax/files/documents/RateSched-2023.pdf#page=1 +brackets: + - threshold: + 2021-01-01: 0 + amount: + 2021-01-01: 0 + - threshold: + 2021-01-01: 150_000 + amount: + 2021-01-01: 0.03 + diff --git a/fiscalsim_us/parameters/gov/states/vt/tax/income/rates/head_of_household.yaml b/fiscalsim_us/parameters/gov/states/vt/tax/income/rates/head_of_household.yaml index 1d409a925..d2c798d86 100644 --- a/fiscalsim_us/parameters/gov/states/vt/tax/income/rates/head_of_household.yaml +++ b/fiscalsim_us/parameters/gov/states/vt/tax/income/rates/head_of_household.yaml @@ -12,23 +12,46 @@ metadata: href: https://tax.vermont.gov/sites/tax/files/documents/RateSched-2021.pdf#page=1 - title: Vermont 2022 Income Tax Return Booklet Forms and Instructions href: https://tax.vermont.gov/sites/tax/files/documents/RateSched-2022.pdf#page=1 + - title: Vermont 2023 Income Tax Return Booklet Forms and Instructions + href: https://tax.vermont.gov/sites/tax/files/documents/RateSched-2023.pdf#page=1 brackets: - threshold: 2021-01-01: 0 rate: 2021-01-01: 0.0335 - threshold: - 2021-01-01: 54_850 - 2022-01-01: 56_500 + values: + 2021-01-01: 54_850 + 2022-01-01: 56_500 + 2023-01-01: 60_850 + metadata: + uprating: gov.irs.uprating + rounding: + type: downwards + interval: 50 rate: 2021-01-01: 0.066 - threshold: - 2021-01-01: 141_700 - 2022-01-01: 145_950 + values: + 2021-01-01: 141_700 + 2022-01-01: 145_950 + 2023-01-01: 157_150 + metadata: + uprating: gov.irs.uprating + rounding: + type: downwards + interval: 50 rate: 2021-01-01: 0.076 - threshold: - 2021-01-01: 229_450 - 2022-01-01: 236_350 + values: + 2021-01-01: 229_450 + 2022-01-01: 236_350 + 2023-01-01: 254_500 + metadata: + uprating: gov.irs.uprating + rounding: + type: downwards + interval: 50 rate: 2021-01-01: 0.0875 diff --git a/fiscalsim_us/parameters/gov/states/vt/tax/income/rates/joint.yaml b/fiscalsim_us/parameters/gov/states/vt/tax/income/rates/joint.yaml index 7227a2f5c..b308dea8d 100644 --- a/fiscalsim_us/parameters/gov/states/vt/tax/income/rates/joint.yaml +++ b/fiscalsim_us/parameters/gov/states/vt/tax/income/rates/joint.yaml @@ -12,23 +12,46 @@ metadata: href: https://tax.vermont.gov/sites/tax/files/documents/RateSched-2021.pdf#page=1 - title: Vermont 2022 Income Tax Return Booklet Forms and Instructions href: https://tax.vermont.gov/sites/tax/files/documents/RateSched-2022.pdf#page=1 + - title: Vermont 2023 Income Tax Return Booklet Forms and Instructions + href: https://tax.vermont.gov/sites/tax/files/documents/RateSched-2023.pdf#page=1 brackets: - threshold: 2021-01-01: 0 rate: 2021-01-01: 0.0335 - threshold: - 2021-01-01: 68_400 - 2022-01-01: 70_450 + values: + 2021-01-01: 68_400 + 2022-01-01: 70_450 + 2023-01-01: 75_850 + metadata: + uprating: gov.irs.uprating + rounding: + type: downwards + interval: 50 rate: - 2022-01-01: 0.066 + 2021-01-01: 0.066 - threshold: - 2021-01-01: 165_350 - 2022-01-01: 170_300 + values: + 2021-01-01: 165_350 + 2022-01-01: 170_300 + 2023-01-01: 183_400 + metadata: + uprating: gov.irs.uprating + rounding: + type: downwards + interval: 50 rate: - 2022-01-01: 0.076 + 2021-01-01: 0.076 - threshold: - 2021-01-01: 251_950 - 2022-01-01: 259_500 + values: + 2021-01-01: 251_950 + 2022-01-01: 259_500 + 2023-01-01: 279_450 + metadata: + uprating: gov.irs.uprating + rounding: + type: downwards + interval: 50 rate: - 2022-01-01: 0.0875 + 2021-01-01: 0.0875 diff --git a/fiscalsim_us/parameters/gov/states/vt/tax/income/rates/separate.yaml b/fiscalsim_us/parameters/gov/states/vt/tax/income/rates/separate.yaml index 19c9f162a..247ed64b3 100644 --- a/fiscalsim_us/parameters/gov/states/vt/tax/income/rates/separate.yaml +++ b/fiscalsim_us/parameters/gov/states/vt/tax/income/rates/separate.yaml @@ -12,23 +12,46 @@ metadata: href: https://tax.vermont.gov/sites/tax/files/documents/RateSched-2021.pdf#page=1 - title: Vermont 2022 Income Tax Return Booklet Forms and Instructions href: https://tax.vermont.gov/sites/tax/files/documents/RateSched-2022.pdf#page=1 + - title: Vermont 2023 Income Tax Return Booklet Forms and Instructions + href: https://tax.vermont.gov/sites/tax/files/documents/RateSched-2023.pdf#page=1 brackets: - threshold: 2021-01-01: 0 rate: 2021-01-01: 0.0335 - threshold: - 2021-01-01: 34_200 - 2022-01-01: 35_225 + values: + 2021-01-01: 34_200 + 2022-01-01: 35_225 + 2023-01-01: 37_925 + metadata: + uprating: gov.irs.uprating + rounding: + type: downwards + interval: 50 rate: 2022-01-01: 0.066 - threshold: - 2021-01-01: 82_675 - 2022-01-01: 85_150 + values: + 2021-01-01: 82_675 + 2022-01-01: 85_150 + 2023-01-01: 91_700 + metadata: + uprating: gov.irs.uprating + rounding: + type: downwards + interval: 50 rate: 2022-01-01: 0.076 - threshold: - 2021-01-01: 125_975 - 2022-01-01: 129_750 + values: + 2021-01-01: 125_975 + 2022-01-01: 129_750 + 2023-01-01: 139_725 + metadata: + uprating: gov.irs.uprating + rounding: + type: downwards + interval: 50 rate: 2022-01-01: 0.0875 diff --git a/fiscalsim_us/parameters/gov/states/vt/tax/income/rates/single.yaml b/fiscalsim_us/parameters/gov/states/vt/tax/income/rates/single.yaml index d5d04d0d8..994ec9f52 100644 --- a/fiscalsim_us/parameters/gov/states/vt/tax/income/rates/single.yaml +++ b/fiscalsim_us/parameters/gov/states/vt/tax/income/rates/single.yaml @@ -12,23 +12,46 @@ metadata: href: https://tax.vermont.gov/sites/tax/files/documents/RateSched-2021.pdf#page=1 - title: Vermont 2022 Income Tax Return Booklet Forms and Instructions href: https://tax.vermont.gov/sites/tax/files/documents/RateSched-2022.pdf#page=1 + - title: Vermont 2023 Income Tax Return Booklet Forms and Instructions + href: https://tax.vermont.gov/sites/tax/files/documents/RateSched-2023.pdf#page=1 brackets: - threshold: 2021-01-01: 0 rate: 2021-01-01: 0.0335 - threshold: - 2021-01-01: 40_950 - 2022-01-01: 42_150 + values: + 2021-01-01: 40_950 + 2022-01-01: 42_150 + 2023-01-01: 45_400 + metadata: + uprating: gov.irs.uprating + rounding: + type: downwards + interval: 50 rate: 2022-01-01: 0.066 - threshold: - 2021-01-01: 99_200 - 2022-01-01: 102_200 + values: + 2021-01-01: 99_200 + 2022-01-01: 102_200 + 2023-01-01: 110_050 + metadata: + uprating: gov.irs.uprating + rounding: + type: downwards + interval: 50 rate: 2022-01-01: 0.076 - threshold: - 2021-01-01: 206_950 - 2022-01-01: 213_150 + values: + 2021-01-01: 206_950 + 2022-01-01: 213_150 + 2023-01-01: 229_550 + metadata: + uprating: gov.irs.uprating + rounding: + type: downwards + interval: 50 rate: 2022-01-01: 0.0875 diff --git a/fiscalsim_us/parameters/gov/states/vt/tax/income/rates/widow.yaml b/fiscalsim_us/parameters/gov/states/vt/tax/income/rates/widow.yaml index 1c9601744..75df1c7ac 100644 --- a/fiscalsim_us/parameters/gov/states/vt/tax/income/rates/widow.yaml +++ b/fiscalsim_us/parameters/gov/states/vt/tax/income/rates/widow.yaml @@ -12,23 +12,46 @@ metadata: href: https://tax.vermont.gov/sites/tax/files/documents/RateSched-2021.pdf#page=1 - title: Vermont 2022 Income Tax Return Booklet Forms and Instructions href: https://tax.vermont.gov/sites/tax/files/documents/RateSched-2022.pdf#page=1 + - title: Vermont 2023 Income Tax Return Booklet Forms and Instructions + href: https://tax.vermont.gov/sites/tax/files/documents/RateSched-2023.pdf#page=1 brackets: - threshold: 2021-01-01: 0 rate: 2021-01-01: 0.0335 - threshold: - 2021-01-01: 68_400 - 2022-01-01: 70_450 + values: + 2021-01-01: 68_400 + 2022-01-01: 70_450 + 2023-01-01: 75_850 + metadata: + uprating: gov.irs.uprating + rounding: + type: downwards + interval: 50 rate: 2022-01-01: 0.066 - threshold: - 2021-01-01: 165_350 - 2022-01-01: 170_300 + values: + 2021-01-01: 165_350 + 2022-01-01: 170_300 + 2023-01-01: 183_400 + metadata: + uprating: gov.irs.uprating + rounding: + type: downwards + interval: 50 rate: 2021-01-01: 0.076 - threshold: - 2021-01-01: 251_950 - 2022-01-01: 259_500 + values: + 2021-01-01: 251_950 + 2022-01-01: 259_500 + 2023-01-01: 279_450 + metadata: + uprating: gov.irs.uprating + rounding: + type: downwards + interval: 50 rate: 2021-01-01: 0.0875 diff --git a/fiscalsim_us/system.py b/fiscalsim_us/system.py index f10cc9118..bbae06175 100644 --- a/fiscalsim_us/system.py +++ b/fiscalsim_us/system.py @@ -10,9 +10,6 @@ IndividualSim as CoreIndividualSim, ) from fiscalsim_us.data import DATASETS, CPS_2023, EnhancedCPS_2023 -from fiscalsim_us.tools.taxcalc.generate_taxcalc_variable import ( - add_taxcalc_variable_aliases, -) from fiscalsim_us.variables.household.demographic.geographic.state.in_state import ( create_50_state_variables, ) @@ -50,8 +47,6 @@ def __init__(self): self.parameters = set_irs_uprating_parameter(self.parameters) self.parameters = backdate_parameters(self.parameters) - add_taxcalc_variable_aliases(self) - system = CountryTaxBenefitSystem() diff --git a/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/credits/family_size_tax_credit/ky_family_size_tax_credit.yaml b/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/credits/family_size_tax_credit/ky_family_size_tax_credit.yaml index 650f0609a..7eb07bc35 100644 --- a/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/credits/family_size_tax_credit/ky_family_size_tax_credit.yaml +++ b/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/credits/family_size_tax_credit/ky_family_size_tax_credit.yaml @@ -1,17 +1,30 @@ -- name: 20% rate +- name: 20% rate with no personal tax credit period: 2023 input: state_code: KY ky_family_size_tax_credit_rate: 0.2 - ky_income_tax_before_non_refundable_credits: 1_000 + ky_income_tax_before_non_refundable_credits_unit: 1_000 + ky_personal_tax_credits: 0 output: ky_family_size_tax_credit: 200 +- name: 20% rate with personal tax credit + period: 2023 + input: + state_code: KY + ky_family_size_tax_credit_rate: 0.2 + ky_income_tax_before_non_refundable_credits_unit: 1_100 + ky_personal_tax_credits: 100 + output: + ky_family_size_tax_credit: 200 # 0.2*(1100-100) + + - name: 0% rate period: 2023 input: state_code: KY ky_family_size_tax_credit_rate: 0 - ky_income_tax_before_non_refundable_credits: 1_000 + ky_income_tax_before_non_refundable_credits_unit: 1_000 + ky_personal_tax_credits: 0 output: ky_family_size_tax_credit: 0 diff --git a/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/credits/personal/ky_aged_personal_tax_credits.yaml b/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/credits/personal/ky_aged_personal_tax_credits.yaml new file mode 100644 index 000000000..af3c292ff --- /dev/null +++ b/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/credits/personal/ky_aged_personal_tax_credits.yaml @@ -0,0 +1,35 @@ +- name: Kentucky head or spouse, under eligible age + period: 2022 + input: + state_code: KY + age: 61 + is_tax_unit_head_or_spouse: true + output: + ky_aged_personal_tax_credits: 0 + +- name: Kentucky head or spouse, over eligible age + period: 2022 + input: + state_code: KY + age: 70 + is_tax_unit_head_or_spouse: true + output: + ky_aged_personal_tax_credits: 40 + +- name: Kentucky not head or spouse, over eligible age + period: 2022 + input: + state_code: KY + age: 70 + is_tax_unit_head_or_spouse: false + output: + ky_aged_personal_tax_credits: 0 + +- name: Kentucky not head or spouse, under eligible age + period: 2022 + input: + state_code: KY + age: 60 + is_tax_unit_head_or_spouse: false + output: + ky_aged_personal_tax_credits: 0 diff --git a/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/credits/personal/ky_blind_personal_tax_credits.yaml b/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/credits/personal/ky_blind_personal_tax_credits.yaml new file mode 100644 index 000000000..dd63515b5 --- /dev/null +++ b/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/credits/personal/ky_blind_personal_tax_credits.yaml @@ -0,0 +1,35 @@ +- name: Kentucky blind head or spouse + period: 2022 + input: + state_code: KY + is_blind: true + is_tax_unit_head_or_spouse: true + output: + ky_blind_personal_tax_credits: 40 + +- name: Kentucky head or spouse, not blind + period: 2022 + input: + state_code: KY + is_blind: false + is_tax_unit_head_or_spouse: true + output: + ky_blind_personal_tax_credits: 0 + +- name: Kentucky not head or spouse, blind + period: 2022 + input: + state_code: KY + is_blind: true + is_tax_unit_head_or_spouse: false + output: + ky_blind_personal_tax_credits: 0 + +- name: Kentucky not blind, not head or spouse + period: 2022 + input: + state_code: KY + is_blind: false + is_tax_unit_head_or_spouse: false + output: + ky_blind_personal_tax_credits: 0 diff --git a/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/credits/personal/ky_military_personal_tax_credits.yaml b/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/credits/personal/ky_military_personal_tax_credits.yaml new file mode 100644 index 000000000..96aa384e2 --- /dev/null +++ b/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/credits/personal/ky_military_personal_tax_credits.yaml @@ -0,0 +1,36 @@ +- name: Kentucky head or spouse, military + period: 2022 + input: + state_code: KY + military_service_income: 10_000 + is_tax_unit_head_or_spouse: true + output: + ky_military_personal_tax_credits: 20 + +- name: Kentucky head or spouse, not military + period: 2022 + input: + state_code: KY + military_service_income: 0 + is_tax_unit_head_or_spouse: true + output: + ky_military_personal_tax_credits: 0 + + +- name: Kentucky not head or spouse, not military + period: 2022 + input: + state_code: KY + military_service_income: 0 + is_tax_unit_head_or_spouse: false + output: + ky_military_personal_tax_credits: 0 + +- name: Kentucky not head or spouse, military + period: 2022 + input: + state_code: KY + military_service_income: 10_000 + is_tax_unit_head_or_spouse: false + output: + ky_military_personal_tax_credits: 0 diff --git a/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/credits/personal/ky_personal_tax_credits.yaml b/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/credits/personal/ky_personal_tax_credits.yaml new file mode 100644 index 000000000..e46b6eb07 --- /dev/null +++ b/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/credits/personal/ky_personal_tax_credits.yaml @@ -0,0 +1,42 @@ +- name: separate + period: 2022 + input: + people: + person1: + ky_personal_tax_credits_indiv: 40 + ky_personal_tax_credits_joint: 40 + person2: + ky_personal_tax_credits_indiv: 100 + ky_personal_tax_credits_joint: 50 + tax_units: + tax_unit: + members: [person1, person2] + ky_files_separately: true + households: + household: + members: [person1,person2] + state_code: KY + output: + ky_personal_tax_credits: 140 + +- name: separate + period: 2022 + input: + people: + person1: + ky_personal_tax_credits_indiv: 40 + ky_personal_tax_credits_joint: 40 + person2: + ky_personal_tax_credits_indiv: 100 + ky_personal_tax_credits_joint: 50 + tax_units: + tax_unit: + members: [person1, person2] + ky_files_separately: false + households: + household: + members: [person1,person2] + state_code: KY + output: + ky_personal_tax_credits: 90 + diff --git a/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/credits/personal/ky_personal_tax_credits_indiv.yaml b/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/credits/personal/ky_personal_tax_credits_indiv.yaml new file mode 100644 index 000000000..456870793 --- /dev/null +++ b/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/credits/personal/ky_personal_tax_credits_indiv.yaml @@ -0,0 +1,187 @@ +- name: Kentucky single ineligible + period: 2022 + input: + people: + person1: + ky_aged_personal_tax_credits: 0 + ky_blind_personal_tax_credits: 0 + ky_military_personal_tax_credits: 0 + tax_units: + tax_unit: + members: [person1] + filing_status: SINGLE + households: + household: + members: [person1] + state_code: KY + output: + ky_personal_tax_credits_indiv: 0 + +- name: Kentucky single eligible - aged + period: 2022 + input: + people: + person1: + ky_aged_personal_tax_credits: 40 + ky_blind_personal_tax_credits: 0 + ky_military_personal_tax_credits: 0 + tax_units: + tax_unit: + members: [person1] + filing_status: SINGLE + households: + household: + members: [person1] + state_code: KY + output: + ky_personal_tax_credits_indiv: 40 + +- name: Kentucky single eligible - aged and military + period: 2022 + input: + people: + person1: + ky_aged_personal_tax_credits: 40 + ky_blind_personal_tax_credits: 0 + ky_military_personal_tax_credits: 20 + tax_units: + tax_unit: + members: [person1] + filing_status: SINGLE + households: + household: + members: [person1] + state_code: KY + output: + ky_personal_tax_credits_indiv: 60 + +- name: Kentucky single eligible - aged, blind and military + period: 2022 + input: + people: + person1: + ky_aged_personal_tax_credits: 40 + ky_blind_personal_tax_credits: 40 + ky_military_personal_tax_credits: 20 + tax_units: + tax_unit: + members: [person1] + filing_status: SINGLE + households: + household: + members: [person1] + state_code: KY + output: + ky_personal_tax_credits_indiv: 100 + +- name: Kentucky ineligible + period: 2022 + input: + people: + person1: + ky_aged_personal_tax_credits: 0 + ky_blind_personal_tax_credits: 0 + ky_military_personal_tax_credits: 0 + person2: + ky_aged_personal_tax_credits: 0 + ky_blind_personal_tax_credits: 0 + ky_military_personal_tax_credits: 0 + tax_units: + tax_unit: + members: [person1,person2] + households: + household: + members: [person1,person2] + state_code: KY + output: + ky_personal_tax_credits_indiv: 0 + +- name: Kentucky eligible + period: 2022 + input: + people: + person1: + ky_aged_personal_tax_credits: 40 + ky_blind_personal_tax_credits: 0 + ky_military_personal_tax_credits: 0 + person2: + ky_aged_personal_tax_credits: 0 + ky_blind_personal_tax_credits: 0 + ky_military_personal_tax_credits: 20 + tax_units: + tax_unit: + members: [person1,person2] + households: + household: + members: [person1,person2] + state_code: KY + output: + ky_personal_tax_credits_indiv: [40, 20] + +- name: Kentucky eligible 2 + period: 2022 + input: + people: + person1: + ky_aged_personal_tax_credits: 40 + ky_blind_personal_tax_credits: 40 + ky_military_personal_tax_credits: 20 + person2: + ky_aged_personal_tax_credits: 0 + ky_blind_personal_tax_credits: 0 + ky_military_personal_tax_credits: 0 + tax_units: + tax_unit: + members: [person1, person2] + households: + household: + members: [person1,person2] + state_code: KY + output: + ky_personal_tax_credits_indiv: [100, 0] + +- name: Kentucky separate ineligible + period: 2022 + input: + people: + person1: + ky_aged_personal_tax_credits: 0 + ky_blind_personal_tax_credits: 0 + ky_military_personal_tax_credits: 0 + person2: + ky_aged_personal_tax_credits: 0 + ky_blind_personal_tax_credits: 0 + ky_military_personal_tax_credits: 0 + tax_units: + tax_unit: + members: [person1,person2] + filing_status: SEPARATE + households: + household: + members: [person1,person2] + state_code: KY + output: + ky_personal_tax_credits_indiv: [0, 0] + +- name: Kentucky separate eligible + period: 2022 + input: + people: + person1: + ky_aged_personal_tax_credits: 40 + ky_blind_personal_tax_credits: 0 + ky_military_personal_tax_credits: 20 + person2: + ky_aged_personal_tax_credits: 0 + ky_blind_personal_tax_credits: 0 + ky_military_personal_tax_credits: 0 + tax_units: + tax_unit: + members: [person1,person2] + filing_status: SEPARATE + households: + household: + members: [person1,person2] + state_code: KY + output: + ky_personal_tax_credits_indiv: [60, 0] diff --git a/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/credits/personal/ky_personal_tax_credits_joint.yaml b/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/credits/personal/ky_personal_tax_credits_joint.yaml new file mode 100644 index 000000000..fcf3cae37 --- /dev/null +++ b/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/credits/personal/ky_personal_tax_credits_joint.yaml @@ -0,0 +1,187 @@ +- name: Kentucky single ineligible + period: 2022 + input: + people: + person1: + ky_aged_personal_tax_credits: 0 + ky_blind_personal_tax_credits: 0 + ky_military_personal_tax_credits: 0 + tax_units: + tax_unit: + members: [person1] + filing_status: SINGLE + households: + household: + members: [person1] + state_code: KY + output: + ky_personal_tax_credits_joint: 0 + +- name: Kentucky single eligible - aged + period: 2022 + input: + people: + person1: + ky_aged_personal_tax_credits: 40 + ky_blind_personal_tax_credits: 0 + ky_military_personal_tax_credits: 0 + tax_units: + tax_unit: + members: [person1] + filing_status: SINGLE + households: + household: + members: [person1] + state_code: KY + output: + ky_personal_tax_credits_joint: 40 + +- name: Kentucky single eligible - aged and military + period: 2022 + input: + people: + person1: + ky_aged_personal_tax_credits: 40 + ky_blind_personal_tax_credits: 0 + ky_military_personal_tax_credits: 20 + tax_units: + tax_unit: + members: [person1] + filing_status: SINGLE + households: + household: + members: [person1] + state_code: KY + output: + ky_personal_tax_credits_joint: 60 + +- name: Kentucky single eligible - aged, blind and military + period: 2022 + input: + people: + person1: + ky_aged_personal_tax_credits: 40 + ky_blind_personal_tax_credits: 40 + ky_military_personal_tax_credits: 20 + tax_units: + tax_unit: + members: [person1] + filing_status: SINGLE + households: + household: + members: [person1] + state_code: KY + output: + ky_personal_tax_credits_joint: 100 + +- name: Kentucky ineligible + period: 2022 + input: + people: + person1: + ky_aged_personal_tax_credits: 0 + ky_blind_personal_tax_credits: 0 + ky_military_personal_tax_credits: 0 + person2: + ky_aged_personal_tax_credits: 0 + ky_blind_personal_tax_credits: 0 + ky_military_personal_tax_credits: 0 + tax_units: + tax_unit: + members: [person1,person2] + households: + household: + members: [person1,person2] + state_code: KY + output: + ky_personal_tax_credits_joint: 0 + +- name: Kentucky eligible + period: 2022 + input: + people: + person1: + ky_aged_personal_tax_credits: 40 + ky_blind_personal_tax_credits: 0 + ky_military_personal_tax_credits: 0 + person2: + ky_aged_personal_tax_credits: 0 + ky_blind_personal_tax_credits: 0 + ky_military_personal_tax_credits: 20 + tax_units: + tax_unit: + members: [person1,person2] + households: + household: + members: [person1,person2] + state_code: KY + output: + ky_personal_tax_credits_joint: [60, 0] + +- name: Kentucky eligible 2 + period: 2022 + input: + people: + person1: + ky_aged_personal_tax_credits: 40 + ky_blind_personal_tax_credits: 40 + ky_military_personal_tax_credits: 20 + person2: + ky_aged_personal_tax_credits: 0 + ky_blind_personal_tax_credits: 0 + ky_military_personal_tax_credits: 0 + tax_units: + tax_unit: + members: [person1, person2] + households: + household: + members: [person1,person2] + state_code: KY + output: + ky_personal_tax_credits_joint: [100, 0] + +- name: Kentucky separate ineligible + period: 2022 + input: + people: + person1: + ky_aged_personal_tax_credits: 0 + ky_blind_personal_tax_credits: 0 + ky_military_personal_tax_credits: 0 + person2: + ky_aged_personal_tax_credits: 0 + ky_blind_personal_tax_credits: 0 + ky_military_personal_tax_credits: 0 + tax_units: + tax_unit: + members: [person1,person2] + filing_status: SEPARATE + households: + household: + members: [person1,person2] + state_code: KY + output: + ky_personal_tax_credits_joint: [0, 0] + +- name: Kentucky separate eligible + period: 2022 + input: + people: + person1: + ky_aged_personal_tax_credits: 40 + ky_blind_personal_tax_credits: 0 + ky_military_personal_tax_credits: 20 + person2: + ky_aged_personal_tax_credits: 0 + ky_blind_personal_tax_credits: 0 + ky_military_personal_tax_credits: 0 + tax_units: + tax_unit: + members: [person1,person2] + filing_status: SEPARATE + households: + household: + members: [person1,person2] + state_code: KY + output: + ky_personal_tax_credits_joint: [60, 0] diff --git a/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/credits/tuition_tax/ky_tuition_tax_credit.yaml b/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/credits/tuition_tax/ky_tuition_tax_credit.yaml new file mode 100644 index 000000000..fbd73cba7 --- /dev/null +++ b/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/credits/tuition_tax/ky_tuition_tax_credit.yaml @@ -0,0 +1,17 @@ +- name: Filer with both AOC and LLC. + period: 2022 + input: + american_opportunity_credit: 1_500 + lifetime_learning_credit: 2_000 + ky_tuition_tax_credit_eligible: true + output: + ky_tuition_tax_credit: 875 + +- name: Ineligible + period: 2022 + input: + american_opportunity_credit: 1_500 + lifetime_learning_credit: 2_000 + ky_tuition_tax_credit_eligible: false + output: + ky_tuition_tax_credit: 0 diff --git a/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/credits/tuition_tax/ky_tuition_tax_credit_eligible.yaml b/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/credits/tuition_tax/ky_tuition_tax_credit_eligible.yaml new file mode 100644 index 000000000..9b571e857 --- /dev/null +++ b/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/credits/tuition_tax/ky_tuition_tax_credit_eligible.yaml @@ -0,0 +1,15 @@ +- name: Single eligible + period: 2022 + input: + state_code: KY + ky_filing_status: SINGLE + output: + ky_tuition_tax_credit_eligible: true + +- name: Separate ineligible + period: 2022 + input: + state_code: KY + ky_filing_status: SEPARATE + output: + ky_tuition_tax_credit_eligible: false diff --git a/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/deductions/ky_deductions_indiv.yaml b/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/deductions/ky_deductions_indiv.yaml new file mode 100644 index 000000000..76c4ac67a --- /dev/null +++ b/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/deductions/ky_deductions_indiv.yaml @@ -0,0 +1,17 @@ +- name: Itemized deductions are larger than standard deduction. + period: 2023 + input: + ky_itemized_deductions_indiv: 100 + ky_standard_deduction_indiv: 99 + state_code: KY + output: + ky_deductions_indiv: 100 + +- name: Standard deduction is larger than itemized deductions. + period: 2023 + input: + ky_itemized_deductions_indiv: 2_769 + ky_standard_deduction_indiv: 2_770 + state_code: KY + output: + ky_deductions_indiv: 2_770 diff --git a/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/deductions/ky_deductions_joint.yaml b/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/deductions/ky_deductions_joint.yaml new file mode 100644 index 000000000..0fb311c82 --- /dev/null +++ b/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/deductions/ky_deductions_joint.yaml @@ -0,0 +1,17 @@ +- name: Itemized deductions are larger than standard deduction. + period: 2023 + input: + ky_itemized_deductions_joint: 100 + ky_standard_deduction_joint: 99 + state_code: KY + output: + ky_deductions_joint: 100 + +- name: Standard deduction is larger than itemized deductions. + period: 2023 + input: + ky_itemized_deductions_joint: 2_769 + ky_standard_deduction_joint: 2_770 + state_code: KY + output: + ky_deductions_joint: 2_770 diff --git a/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/deductions/ky_itemized_deductions_indiv.yaml b/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/deductions/ky_itemized_deductions_indiv.yaml new file mode 100644 index 000000000..a8865e77a --- /dev/null +++ b/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/deductions/ky_itemized_deductions_indiv.yaml @@ -0,0 +1,89 @@ +- name: two people, married, separate + period: 2022 + input: + people: + person1: + is_tax_unit_head: true + ky_agi: 1_000 + person2: + is_tax_unit_spouse: true + ky_agi: 2_000 + tax_units: + tax_unit: + members: [person1, person2] + filing_status: SEPARATE + ky_itemized_deductions_unit: 30 + households: + household: + members: [person1,person2] + state_code: KY + output: + ky_itemized_deductions_indiv: [10, 20] + +- name: two people, married, separate + period: 2022 + input: + people: + person1: + is_tax_unit_head: true + ky_agi: 1_000 + person2: + is_tax_unit_spouse: true + ky_agi: 0 + tax_units: + tax_unit: + members: [person1, person2] + filing_status: SEPARATE + ky_itemized_deductions_unit: 30 + households: + household: + members: [person1,person2] + state_code: KY + output: + ky_itemized_deductions_indiv: [30, 0] + +- name: two people, not married + period: 2022 + input: + people: + person1: + is_tax_unit_head: true + ky_agi: 1_000 + person2: + is_tax_unit_spouse: false + ky_agi: 1_000 + tax_units: + tax_unit: + members: [person1, person2] + filing_status: SEPARATE + itemized_deductions_less_salt: 3 + medical_expense_deduction: 2 + households: + household: + members: [person1,person2] + state_code: KY + output: + ky_itemized_deductions_indiv: [1, 0] + +- name: 0 agi + period: 2022 + input: + people: + person1: + is_tax_unit_head: true + ky_agi: 0 + person2: + is_tax_unit_spouse: false + ky_agi: 0 + tax_units: + tax_unit: + members: [person1, person2] + filing_status: SEPARATE + itemized_deductions_less_salt: 3 + medical_expense_deduction: 2 + households: + household: + members: [person1,person2] + state_code: KY + output: + ky_itemized_deductions_indiv: [0, 0] diff --git a/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/deductions/ky_itemized_deductions_joint.yaml b/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/deductions/ky_itemized_deductions_joint.yaml new file mode 100644 index 000000000..07b10be5d --- /dev/null +++ b/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/deductions/ky_itemized_deductions_joint.yaml @@ -0,0 +1,30 @@ +- name: KY itemized deductions are federal itemized deductions minus SALT and medical expenses. + absolute_error_margin: 0 + period: 2022 + input: + state_code: KY + itemized_deductions_less_salt: 3 + medical_expense_deduction: 2 + output: + ky_itemized_deductions_joint: 1 + +- name: two people, married + period: 2022 + input: + people: + person1: + is_tax_unit_head: false + person2: + is_tax_unit_head: true + tax_units: + tax_unit: + members: [person1, person2] + filing_status: JOINT + itemized_deductions_less_salt: 3 + medical_expense_deduction: 2 + households: + household: + members: [person1,person2] + state_code: KY + output: + ky_itemized_deductions_joint: [0, 1] diff --git a/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/deductions/ky_itemized_deductions_unit.yaml b/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/deductions/ky_itemized_deductions_unit.yaml new file mode 100644 index 000000000..c43befc69 --- /dev/null +++ b/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/deductions/ky_itemized_deductions_unit.yaml @@ -0,0 +1,19 @@ +- name: KY itemized deductions are federal itemized deductions minus SALT and medical expenses. + absolute_error_margin: 0 + period: 2022 + input: + state_code: KY + itemized_deductions_less_salt: 3 + medical_expense_deduction: 2 + output: + ky_itemized_deductions_unit: 1 + +- name: KY itemized deductions are federal itemized deductions minus SALT and medical expenses. + absolute_error_margin: 0 + period: 2022 + input: + state_code: KY + itemized_deductions_less_salt: 10 + medical_expense_deduction: 2 + output: + ky_itemized_deductions_unit: 8 diff --git a/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/deductions/ky_standard_deduction.yaml b/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/deductions/ky_standard_deduction.yaml deleted file mode 100644 index 8522f8e53..000000000 --- a/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/deductions/ky_standard_deduction.yaml +++ /dev/null @@ -1,13 +0,0 @@ -- name: 2022 deduction - period: 2022 - input: - state_code: KY - output: - ky_standard_deduction: 2_770 - -- name: 2021 deduction - period: 2021 - input: - state_code: KY - output: - ky_standard_deduction: 2_690 diff --git a/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/deductions/ky_standard_deduction_indiv.yaml b/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/deductions/ky_standard_deduction_indiv.yaml new file mode 100644 index 000000000..478a498c4 --- /dev/null +++ b/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/deductions/ky_standard_deduction_indiv.yaml @@ -0,0 +1,56 @@ +- name: 2023 deduction + period: 2023 + input: + state_code: KY + output: + ky_standard_deduction_indiv: 2_980 + +- name: 2022 deduction + period: 2022 + input: + state_code: KY + output: + ky_standard_deduction_indiv: 2_770 + +- name: 2021 deduction + period: 2021 + input: + state_code: KY + output: + ky_standard_deduction_indiv: 2_690 + +- name: 2023, head & spouse + period: 2023 + input: + people: + person1: + is_tax_unit_head: true + person2: + is_tax_unit_spouse: true + tax_units: + tax_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: KY + output: + ky_standard_deduction_indiv: [2_980, 2_980] + +- name: 2022, head & spouse + period: 2022 + input: + people: + person1: + is_tax_unit_head: true + person2: + is_tax_unit_spouse: true + tax_units: + tax_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: KY + output: + ky_standard_deduction_indiv: [2_770, 2_770] diff --git a/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/deductions/ky_standard_deduction_joint.yaml b/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/deductions/ky_standard_deduction_joint.yaml new file mode 100644 index 000000000..c6ac5f75b --- /dev/null +++ b/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/deductions/ky_standard_deduction_joint.yaml @@ -0,0 +1,58 @@ +- name: 2023 deduction + period: 2023 + input: + state_code: KY + output: + ky_standard_deduction_joint: 2_980 + +- name: 2022 deduction + period: 2022 + input: + state_code: KY + output: + ky_standard_deduction_joint: 2_770 + +- name: 2021 deduction + period: 2021 + input: + state_code: KY + output: + ky_standard_deduction_joint: 2_690 + +- name: two people, JOINT + period: 2023 + input: + people: + person1: + is_tax_unit_head: true + person2: + is_tax_unit_head: false + tax_units: + tax_unit: + members: [person1, person2] + filing_status: JOINT + households: + household: + members: [person1,person2] + state_code: KY + output: + ky_standard_deduction_joint: [2_980, 0] + +- name: two people, JOINT + period: 2022 + input: + people: + person1: + is_tax_unit_head: true + person2: + is_tax_unit_head: false + tax_units: + tax_unit: + members: [person1, person2] + filing_status: JOINT + households: + household: + members: [person1,person2] + state_code: KY + output: + ky_standard_deduction_joint: [2_770, 0] diff --git a/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/exclusions/pension_income/ky_pension_income_exclusion.yaml b/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/exclusions/pension_income/ky_pension_income_exclusion.yaml new file mode 100644 index 000000000..2b73cc200 --- /dev/null +++ b/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/exclusions/pension_income/ky_pension_income_exclusion.yaml @@ -0,0 +1,59 @@ +- name: Not eligible for exemption, exclusion capped at $31,110. + period: 2022 + input: + taxable_pension_income: 31_111 + ky_pension_income_exclusion_exemption_eligible: false + ky_service_credits_percentage_pre_1998: 0 + taxable_ira_distributions: 0 + taxable_401k_distributions: 0 + state_code: KY + output: + ky_pension_income_exclusion: 31_110 + +- name: Not eligible for exemption, pension and other income capped at $31,110. + period: 2022 + input: + taxable_pension_income: 31_111 + ky_pension_income_exclusion_exemption_eligible: false + ky_service_credits_percentage_pre_1998: 0 + taxable_ira_distributions: 1 + taxable_401k_distributions: 0 + state_code: KY + output: + ky_pension_income_exclusion: 31_110 + +- name: Retired before 1998 but not eligible for exemption, exclusion capped at $31,110. + period: 2022 + input: + taxable_pension_income: 31_111 + ky_pension_income_exclusion_exemption_eligible: false + ky_service_credits_percentage_pre_1998: 1 + taxable_ira_distributions: 1 + taxable_401k_distributions: 3 + state_code: KY + output: + ky_pension_income_exclusion: 31_110 + +- name: Retired before 1998 and eligible for exemption, pension income not capped but other income capped. + period: 2022 + input: + taxable_pension_income: 31_111 + ky_pension_income_exclusion_exemption_eligible: true + ky_service_credits_percentage_pre_1998: 1 + taxable_ira_distributions: 31_111 + taxable_401k_distributions: 3 + state_code: KY + output: + ky_pension_income_exclusion: 31_111 + 31_110 + +- name: Eligible for exemption and 50% of months worked pre-1998. + period: 2022 + input: + taxable_pension_income: 70_000 + ky_pension_income_exclusion_exemption_eligible: true + ky_service_credits_percentage_pre_1998: .50 # 35k exempt and 35k capped + taxable_ira_distributions: 0 + taxable_401k_distributions: 0 + state_code: KY + output: + ky_pension_income_exclusion: 35_000 + 31_110 diff --git a/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/exclusions/pension_income/ky_pension_income_exclusion_exemption_eligible.yaml b/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/exclusions/pension_income/ky_pension_income_exclusion_exemption_eligible.yaml new file mode 100644 index 000000000..848bc0edc --- /dev/null +++ b/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/exclusions/pension_income/ky_pension_income_exclusion_exemption_eligible.yaml @@ -0,0 +1,39 @@ +- name: Eligible for exemption because retired from federal government. + period: 2022 + input: + retired_from_federal_government: true + retired_from_ky_government: false + railroad_benefits: 0 + state_code: KY + output: + ky_pension_income_exclusion_exemption_eligible: true + +- name: Eligible for exemption because retired from KY government. + period: 2022 + input: + retired_from_federal_government: false + retired_from_ky_government: true + railroad_benefits: 0 + state_code: KY + output: + ky_pension_income_exclusion_exemption_eligible: true + +- name: Eligible for exemption because receives railroad benefits. + period: 2022 + input: + retired_from_federal_government: false + retired_from_ky_government: false + railroad_benefits: 10 + state_code: KY + output: + ky_pension_income_exclusion_exemption_eligible: true + +- name: Not eligible for exemption. + period: 2022 + input: + retired_from_federal_government: false + retired_from_ky_government: false + railroad_benefits: 0 + state_code: KY + output: + ky_pension_income_exclusion_exemption_eligible: false diff --git a/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/exclusions/pension_income/ky_service_credits_percentage_pre_1998.yaml b/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/exclusions/pension_income/ky_service_credits_percentage_pre_1998.yaml new file mode 100644 index 000000000..fd1ce55dd --- /dev/null +++ b/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/exclusions/pension_income/ky_service_credits_percentage_pre_1998.yaml @@ -0,0 +1,17 @@ +- name: No months worked, default is zero. + period: 2023 + input: + ky_service_credit_months_pre_1998: 0 + ky_service_credit_months_post_1997: 0 + state_code: KY + output: + ky_service_credits_percentage_pre_1998: 0 + +- name: Share of months before cutoff. + period: 2023 + input: + ky_service_credit_months_pre_1998: 1 + ky_service_credit_months_post_1997: 1 + state_code: KY + output: + ky_service_credits_percentage_pre_1998: 0.5 diff --git a/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/integration.yaml b/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/integration.yaml new file mode 100644 index 000000000..2915c9f8e --- /dev/null +++ b/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/integration.yaml @@ -0,0 +1,297 @@ +- name: Tax unit files separately + period: 2022 + # High error margin because of rounding in the tax tables + absolute_error_margin: 2 + input: + people: + person1: + adjusted_gross_income_person: 20_000 + ky_additions: 1_000 + ky_subtractions: 2_000 + is_tax_unit_head: true + person2: + adjusted_gross_income_person: 25_000 + ky_additions: 2_000 + ky_subtractions: 1_000 + is_tax_unit_spouse: true + tax_units: + tax_unit: + members: [person1, person2] + filing_status: SEPARATE + ky_non_refundable_credits: 100 + households: + household: + members: [person1, person2] + state_code: KY + output: + ky_agi: [19_000, 26_000] + ky_standard_deduction_indiv: [2_770, 2_770] + ky_itemized_deductions_indiv: [0, 0] + ky_taxable_income_indiv: [16_230, 23_230] + ky_files_separately: true + ky_personal_tax_credits_indiv: [0, 0] + ky_income_tax_before_non_refundable_credits_unit: 1973 + ky_income_tax_before_refundable_credits: 1873 + +- name: Tax unit files jointly + period: 2022 + # High error margin because of rounding in the tax tables + absolute_error_margin: 2 + input: + people: + person1: + adjusted_gross_income_person: 20_000 + ky_additions: 1_000 + ky_subtractions: 2_000 + is_tax_unit_head: true + person2: + adjusted_gross_income_person: 25_000 + ky_additions: 2_000 + ky_subtractions: 1_000 + is_tax_unit_spouse: true + tax_units: + tax_unit: + members: [person1, person2] + filing_status: JOINT + ky_non_refundable_credits: 100 + households: + household: + members: [person1, person2] + state_code: KY + output: + ky_agi: [19_000, 26_000] + #If filing a joint return, only one standard deduction is allowed. + ky_standard_deduction_joint: [2770, 0] + ky_itemized_deductions_joint: [0, 0] + ky_taxable_income_joint: [42_230, 0] + ky_files_separately: true + ky_personal_tax_credits_joint: [0, 0] + # take separate result to maximize benefit + ky_income_tax_before_non_refundable_credits_unit: 1973 + ky_income_tax_before_refundable_credits: 1873 + +#new baseline integration test +- name: baseline integration test joint + period: 2022 + # High error margin because of rounding in the tax tables + absolute_error_margin: 2 + input: + people: + person1: + adjusted_gross_income_person: 20_000 + age: 30 + person2: + adjusted_gross_income_person: 25_000 + age: 31 + tax_units: + tax_unit: + members: [person1, person2] + filing_status: JOINT + households: + household: + members: [person1, person2] + state_code: KY + output: + ky_agi: [20_000, 25_000] + # If filing a joint return, only one standard deduction is allowed. + # default: older perpon is head + ky_standard_deduction_joint: [0, 2_770] + ky_itemized_deductions_joint: [0, 0] + ky_taxable_income_joint: [0, 42_230] + ky_personal_tax_credits_joint: [0, 0] + #not 2111.5, becase ky_files_separately return true (we optimize) + ky_income_tax_before_non_refundable_credits_unit: 1973 + ky_income_tax_before_refundable_credits: 1973 + +#new baseline integration test +- name: baseline integration test separate + period: 2022 + # High error margin because of rounding in the tax tables + absolute_error_margin: 2 + input: + people: + person1: + adjusted_gross_income_person: 20_000 + age: 30 + person2: + adjusted_gross_income_person: 25_000 + age: 31 + tax_units: + tax_unit: + members: [person1, person2] + filing_status: SEPARATE + households: + household: + members: [person1, person2] + state_code: KY + output: + ky_agi: [20_000, 25_000] + ky_standard_deduction_indiv: [2_770, 2_770] + ky_itemized_deductions_indiv: [0, 0] + ky_taxable_income_indiv: [17_230, 22_230] + ky_personal_tax_credits_indiv: [0, 0] + ky_income_tax_before_non_refundable_credits_unit: 1973 + ky_income_tax_before_refundable_credits: 1973 + +- name: integration test for personal tax credit joint + period: 2022 + # High error margin because of rounding in the tax tables + absolute_error_margin: 2 + input: + people: + person1: + adjusted_gross_income_person: 20_000 + is_blind: true + age: 30 + is_tax_unit_head_or_spouse: true + person2: + adjusted_gross_income_person: 25_000 + is_blind: true + age: 31 + is_tax_unit_head_or_spouse: true + child: + is_blind: true + is_tax_unit_head_or_spouse: false + age: 10 + tax_units: + tax_unit: + members: [person1, person2, child] + filing_status: JOINT + households: + household: + members: [person1, person2, child] + state_code: KY + output: + ky_agi: [20_000, 25_000, 0] + # If filing a joint return, only one standard deduction is allowed. + # default: older perpon is head + ky_standard_deduction_joint: [0, 2_770, 0] + ky_itemized_deductions_joint: [0, 0, 0] + ky_taxable_income_joint: [0, 42_230, 0] + ky_personal_tax_credits_joint: [0, 80, 0] + ky_income_tax_before_non_refundable_credits_unit: 1973 + ky_income_tax_before_refundable_credits: 1893 + +- name: Tax unit with taxsimid 95730 in e21.its.csv and e21.ots.csv + absolute_error_margin: 0.01 + period: 2021 + input: + people: + person1: + age: 66 + employment_income: 15010 + taxable_interest_income: 5505.0 + ssi: 0 # not in TAXSIM35 + state_supplement: 0 # not in TAXSIM35 + wic: 0 # not in TAXSIM35 + ma_covid_19_essential_employee_premium_pay_program: 0 # not in TAXSIM35 + person2: + age: 66 + employment_income: 1010 + taxable_interest_income: 5505.0 + ssi: 0 # not in TAXSIM35 + state_supplement: 0 # not in TAXSIM35 + wic: 0 # not in TAXSIM35 + ma_covid_19_essential_employee_premium_pay_program: 0 # not in TAXSIM35 + person3: + age: 11 + ssi: 0 # not in TAXSIM35 + state_supplement: 0 # not in TAXSIM35 + wic: 0 # not in TAXSIM35 + ma_covid_19_essential_employee_premium_pay_program: 0 # not in TAXSIM35 + person4: + age: 11 + ssi: 0 # not in TAXSIM35 + state_supplement: 0 # not in TAXSIM35 + wic: 0 # not in TAXSIM35 + ma_covid_19_essential_employee_premium_pay_program: 0 # not in TAXSIM35 + person5: + age: 11 + ssi: 0 # not in TAXSIM35 + state_supplement: 0 # not in TAXSIM35 + wic: 0 # not in TAXSIM35 + ma_covid_19_essential_employee_premium_pay_program: 0 # not in TAXSIM35 + tax_units: + tax_unit: + members: [person1, person2, person3, person4, person5] + premium_tax_credit: 0 # not in TAXSIM35 + local_income_tax: 0 # not in TAXSIM35 + state_sales_tax: 0 # not in TAXSIM35 + ca_use_tax: 0 # not in TAXSIM35 + il_use_tax: 0 # not in TAXSIM35 + nm_2021_income_rebate: 0 # not in TAXSIM35 + nm_additional_2021_income_rebate: 0 # not in TAXSIM35 + nm_supplemental_2021_income_rebate: 0 # not in TAXSIM35 + ny_supplemental_eitc: 0 # not in TAXSIM35 + ok_use_tax: 0 # not in TAXSIM35 + pa_use_tax: 0 # not in TAXSIM35 + vt_renter_credit: 0 # not in TAXSIM35 + spm_units: + spm_unit: + members: [person1, person2, person3, person4, person5] + snap: 0 # not in TAXSIM35 + tanf: 0 # not in TAXSIM35 + households: + household: + members: [person1, person2, person3, person4, person5] + state_fips: 21 # KY + output: # expected results from patched TAXSIM35 2024-03-04 version + ky_income_tax: 100.25 + +- name: Tax unit with taxsimid 99980 in f21.its.csv and f21.ots.csv + absolute_error_margin: 0.01 + period: 2021 + input: + people: + person1: + age: 66 + employment_income: 25010 + taxable_interest_income: 11010 + taxable_private_pension_income: 12000 + social_security_retirement: 7000 + person2: + age: 16 + tax_units: + tax_unit: + members: [person1, person2] + premium_tax_credit: 0 # not in TAXSIM35 + spm_units: + spm_unit: + members: [person1, person2] + snap: 0 # not in TAXSIM35 + households: + household: + members: [person1, person2] + state_fips: 21 # KY + output: # expected results from patched TAXSIM35 2024-03-16 version + ky_pension_income_exclusion: [12000, 0] + ky_income_tax: 1626.50 + +- name: KY married couple with mortgage interest on their jointly owned home + absolute_error_margin: 0.01 + period: 2021 + input: + people: + person1: + age: 50 + employment_income: 80_000 + mortgage_interest: 3_000 + person2: + age: 50 + employment_income: 20_000 + mortgage_interest: 3_000 + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_fips: 21 # KY + output: + ky_tax_unit_itemizes: true + ky_itemized_deductions_indiv: [4_800 , 1_200] + ky_standard_deduction_indiv: [2_690 , 2_690] + ky_deductions_indiv: [4_800 , 1_200] # this is the correct result diff --git a/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/ky_files_separately.yaml b/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/ky_files_separately.yaml new file mode 100644 index 000000000..8e55a068d --- /dev/null +++ b/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/ky_files_separately.yaml @@ -0,0 +1,17 @@ +- name: joint + period: 2022 + input: + ky_taxable_income_indiv: 200 + ky_taxable_income_joint: 100 + state_code: KY + output: + ky_files_separately: false + +- name: separate + period: 2022 + input: + ky_taxable_income_indiv: 100 + ky_taxable_income_joint: 200 + state_code: KY + output: + ky_files_separately: true diff --git a/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/ky_filing_status.yaml b/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/ky_filing_status.yaml new file mode 100644 index 000000000..ac803570d --- /dev/null +++ b/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/ky_filing_status.yaml @@ -0,0 +1,26 @@ +- name: Single person + period: 2023 + input: + is_tax_unit_spouse: false + is_separated: false + state_code: KY + output: + ky_filing_status: SINGLE + +- name: Joint + period: 2023 + input: + is_tax_unit_spouse: true + is_separated: false + state_code: KY + output: + ky_filing_status: JOINT + +- name: Joint + period: 2023 + input: + is_tax_unit_spouse: false + is_separated: true + state_code: KY + output: + ky_filing_status: SEPARATE diff --git a/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/ky_income_tax_before_non_refundable_credits.yaml b/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/ky_income_tax_before_non_refundable_credits.yaml deleted file mode 100644 index 9cb9a9eb9..000000000 --- a/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/ky_income_tax_before_non_refundable_credits.yaml +++ /dev/null @@ -1,31 +0,0 @@ -- name: No income - period: 2023 - input: - ky_taxable_income: 0 - state_code: KY - output: - ky_income_tax_before_non_refundable_credits: 0 - -- name: 2023 tax rate - period: 2023 - input: - ky_taxable_income: 1_000 - state_code: KY - output: - ky_income_tax_before_non_refundable_credits: 45 - -- name: 2022 tax rate - period: 2022 - input: - ky_taxable_income: 1_000 - state_code: KY - output: - ky_income_tax_before_non_refundable_credits: 50 - -- name: 2021 tax rate - period: 2021 - input: - ky_taxable_income: 1_000 - state_code: KY - output: - ky_income_tax_before_non_refundable_credits: 50 diff --git a/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/ky_income_tax_before_non_refundable_credits_indiv.yaml b/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/ky_income_tax_before_non_refundable_credits_indiv.yaml new file mode 100644 index 000000000..42f884b67 --- /dev/null +++ b/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/ky_income_tax_before_non_refundable_credits_indiv.yaml @@ -0,0 +1,23 @@ +- name: 2021, separate + period: 2021 + input: + ky_taxable_income_indiv: 100 + state_code: KY + output: + ky_income_tax_before_non_refundable_credits_indiv: 5 + +- name: 2023, separate + period: 2023 + input: + ky_taxable_income_indiv: 100 + state_code: KY + output: + ky_income_tax_before_non_refundable_credits_indiv: 4.5 + +- name: 2024, separate + period: 2024 + input: + ky_taxable_income_indiv: 100 + state_code: KY + output: + ky_income_tax_before_non_refundable_credits_indiv: 4 diff --git a/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/ky_income_tax_before_non_refundable_credits_joint.yaml b/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/ky_income_tax_before_non_refundable_credits_joint.yaml new file mode 100644 index 000000000..48e71f7c7 --- /dev/null +++ b/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/ky_income_tax_before_non_refundable_credits_joint.yaml @@ -0,0 +1,23 @@ +- name: 2021, joint + period: 2021 + input: + ky_taxable_income_joint: 100 + state_code: KY + output: + ky_income_tax_before_non_refundable_credits_joint: 5 + +- name: 2023, joint + period: 2023 + input: + ky_taxable_income_joint: 100 + state_code: KY + output: + ky_income_tax_before_non_refundable_credits_joint: 4.5 + +- name: 2024, joint + period: 2024 + input: + ky_taxable_income_joint: 100 + state_code: KY + output: + ky_income_tax_before_non_refundable_credits_joint: 4 diff --git a/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/ky_income_tax_before_non_refundable_credits_unit.yaml b/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/ky_income_tax_before_non_refundable_credits_unit.yaml new file mode 100644 index 000000000..4df465058 --- /dev/null +++ b/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/ky_income_tax_before_non_refundable_credits_unit.yaml @@ -0,0 +1,39 @@ +- name: 2021, separate + period: 2021 + input: + ky_files_separately: true + ky_taxable_income_indiv: 100 + ky_taxable_income_joint: 200 + state_code: KY + output: + ky_income_tax_before_non_refundable_credits_unit: 5 + +- name: 2021, joint + period: 2021 + input: + ky_files_separately: false + ky_taxable_income_indiv: 100 + ky_taxable_income_joint: 200 + state_code: KY + output: + ky_income_tax_before_non_refundable_credits_unit: 10 + +- name: 2023, joint + period: 2023 + input: + ky_files_separately: false + ky_taxable_income_indiv: 100 + ky_taxable_income_joint: 200 + state_code: KY + output: + ky_income_tax_before_non_refundable_credits_unit: 9 + +- name: 2024, joint + period: 2024 + input: + ky_files_separately: false + ky_taxable_income_indiv: 100 + ky_taxable_income_joint: 200 + state_code: KY + output: + ky_income_tax_before_non_refundable_credits_unit: 8 diff --git a/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/ky_income_tax_before_refundable_credits.yaml b/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/ky_income_tax_before_refundable_credits.yaml index ef02ef52c..3531049e2 100644 --- a/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/ky_income_tax_before_refundable_credits.yaml +++ b/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/ky_income_tax_before_refundable_credits.yaml @@ -1,7 +1,7 @@ - name: Subtractions period: 2023 input: - ky_income_tax_before_non_refundable_credits: 1_100 + ky_income_tax_before_non_refundable_credits_unit: 1_100 state_code: KY ky_non_refundable_credits: 1_000 output: @@ -10,7 +10,7 @@ - name: Capped at 0 period: 2023 input: - ky_income_tax_before_non_refundable_credits: 1_000 + ky_income_tax_before_non_refundable_credits_unit: 1_000 state_code: KY ky_non_refundable_credits: 1_100 output: diff --git a/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/ky_tax_unit_itemizes.yaml b/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/ky_tax_unit_itemizes.yaml new file mode 100644 index 000000000..61e2b2788 --- /dev/null +++ b/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/ky_tax_unit_itemizes.yaml @@ -0,0 +1,51 @@ +- name: Itemized over standard + period: 2022 + input: + ky_itemized_deductions_indiv: 1_000 + ky_standard_deduction_indiv: 900 + state_code: KY + output: + ky_tax_unit_itemizes: true + +- name: Itemized under standard + period: 2022 + input: + ky_itemized_deductions_indiv: 800 + ky_standard_deduction_indiv: 900 + state_code: KY + output: + ky_tax_unit_itemizes: false + +- name: Itemized over standard, multiple people + period: 2022 + input: + people: + person1: + ky_itemized_deductions_indiv: 1_000 + ky_standard_deduction_indiv: 500 + person2: + ky_itemized_deductions_indiv: 200 + ky_standard_deduction_indiv: 300 + households: + household: + members: [person1, person2] + state_code: KY + output: + ky_tax_unit_itemizes: true + +- name: Itemized under standard, multiple people + period: 2022 + input: + people: + person1: + ky_itemized_deductions_indiv: 1_000 + ky_standard_deduction_indiv: 500 + person2: + ky_itemized_deductions_indiv: 200 + ky_standard_deduction_indiv: 1_300 + households: + household: + members: [person1, person2] + state_code: KY + output: + ky_tax_unit_itemizes: false diff --git a/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/ky_taxable_income_indiv.yaml b/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/ky_taxable_income_indiv.yaml new file mode 100644 index 000000000..40894a3e2 --- /dev/null +++ b/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/ky_taxable_income_indiv.yaml @@ -0,0 +1,29 @@ +- name: larger itemized_deduction + period: 2022 + input: + ky_agi: 1_000 + ky_standard_deduction_indiv: 100 + ky_itemized_deductions_indiv: 200 + state_code: KY + output: + ky_taxable_income_indiv: 800 + +- name: larger standard_deduction + period: 2022 + input: + ky_agi: 1_000 + ky_standard_deduction_indiv: 100 + ky_itemized_deductions_indiv: 10 + state_code: KY + output: + ky_taxable_income_indiv: 900 + +- name: smaller than 0 + period: 2022 + input: + ky_agi: 1_000 + ky_standard_deduction_indiv: 2_000 + ky_itemized_deductions_indiv: 3_000 + state_code: KY + output: + ky_taxable_income_indiv: 0 diff --git a/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/ky_taxable_income_joint.yaml b/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/ky_taxable_income_joint.yaml new file mode 100644 index 000000000..98bfcb229 --- /dev/null +++ b/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/ky_taxable_income_joint.yaml @@ -0,0 +1,29 @@ +- name: larger itemized_deduction + period: 2022 + input: + ky_agi: 1_000 + ky_standard_deduction_joint: 100 + ky_itemized_deductions_joint: 200 + state_code: KY + output: + ky_taxable_income_joint: 800 + +- name: larger standard_deduction + period: 2022 + input: + ky_agi: 1_000 + ky_standard_deduction_joint: 100 + ky_itemized_deductions_joint: 10 + state_code: KY + output: + ky_taxable_income_joint: 900 + +- name: smaller than 0 + period: 2022 + input: + ky_agi: 1_000 + ky_standard_deduction_joint: 2_000 + ky_itemized_deductions_joint: 3_000 + state_code: KY + output: + ky_taxable_income_joint: 0 diff --git a/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/ky_withheld_income_tax.yaml b/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/ky_withheld_income_tax.yaml new file mode 100644 index 000000000..26db6d918 --- /dev/null +++ b/fiscalsim_us/tests/policy/baseline/gov/states/ky/tax/income/ky_withheld_income_tax.yaml @@ -0,0 +1,59 @@ +- name: Person with income over the standard deduction amount + period: 2023 + absolute_error_margin: 0.01 + input: + adjusted_gross_income_person: 15_000 + filing_status: JOINT + state_code: KY + output: + ky_withheld_income_tax: 540.9 #(15000-2980)*0.045 + +- name: Changing the filing status should not change the output + period: 2023 + absolute_error_margin: 0.01 + input: + adjusted_gross_income_person: 15_000 + filing_status: SURVIVING_SPOUSE + state_code: KY + output: + ky_withheld_income_tax: 540.9 + +- name: Capped at 0 + period: 2023 + absolute_error_margin: 0.01 + input: + adjusted_gross_income_person: 2_000 + filing_status: SURVIVING_SPOUSE + state_code: KY + output: + ky_withheld_income_tax: 0 + +- name: Person with income over the standard deduction amount + period: 2022 + absolute_error_margin: 0.01 + input: + adjusted_gross_income_person: 15_000 + filing_status: JOINT + state_code: KY + output: + ky_withheld_income_tax: 611.5 #(15000-2770)*0.05 + +- name: Changing the filing status should not change the output + period: 2022 + absolute_error_margin: 0.01 + input: + adjusted_gross_income_person: 15_000 + filing_status: SURVIVING_SPOUSE + state_code: KY + output: + ky_withheld_income_tax: 611.5 + +- name: Capped at 0 + period: 2022 + absolute_error_margin: 0.01 + input: + adjusted_gross_income_person: 2_000 + filing_status: SURVIVING_SPOUSE + state_code: KY + output: + ky_withheld_income_tax: 0 diff --git a/fiscalsim_us/tests/policy/baseline/gov/states/md/tanf/income/md_tanf_gross_earned_income_deduction.yaml b/fiscalsim_us/tests/policy/baseline/gov/states/md/tanf/income/md_tanf_gross_earned_income_deduction.yaml index c2d0cbcc3..e8fc19871 100644 --- a/fiscalsim_us/tests/policy/baseline/gov/states/md/tanf/income/md_tanf_gross_earned_income_deduction.yaml +++ b/fiscalsim_us/tests/policy/baseline/gov/states/md/tanf/income/md_tanf_gross_earned_income_deduction.yaml @@ -1,37 +1,37 @@ -- name: If zero earned income, zero deduction. - period: 2023 - input: - state_code: MD - earned_income: 0 - output: - md_tanf_gross_earned_income_deduction: 0 - - -- name: If not enrolled in TANF, 20% deduction. - period: 2023 - input: - state_code: MD - is_tanf_enrolled: false - earned_income: 100 - output: - md_tanf_gross_earned_income_deduction: 20 - -- name: If enrolled in TANF and not self-employed, 40% deduction. - period: 2023 - input: - state_code: MD - is_tanf_enrolled: true - self_employment_income: 0 - earned_income: 100 - output: - md_tanf_gross_earned_income_deduction: 40 - -- name: If self-employed, 50% deduction. - period: 2023 - input: - state_code: MD - is_tanf_enrolled: true - self_employment_income: 100 - earned_income: 100 - output: - md_tanf_gross_earned_income_deduction: 50 +- name: If zero earned income, zero deduction. + period: 2023 + input: + state_code: MD + earned_income: 0 + output: + md_tanf_gross_earned_income_deduction: 0 + + +- name: If not enrolled in TANF, 20% deduction. + period: 2023 + input: + state_code: MD + is_tanf_enrolled: false + earned_income: 100 + output: + md_tanf_gross_earned_income_deduction: 20 + +- name: If enrolled in TANF and not self-employed, 40% deduction. + period: 2023 + input: + state_code: MD + is_tanf_enrolled: true + self_employment_income: 0 + earned_income: 100 + output: + md_tanf_gross_earned_income_deduction: 40 + +- name: If self-employed, 50% deduction. + period: 2023 + input: + state_code: MD + is_tanf_enrolled: true + self_employment_income: 100 + earned_income: 100 + output: + md_tanf_gross_earned_income_deduction: 50 diff --git a/fiscalsim_us/tests/policy/baseline/gov/states/md/tanf/income/md_tanf_maximum_benefit.yaml b/fiscalsim_us/tests/policy/baseline/gov/states/md/tanf/income/md_tanf_maximum_benefit.yaml index 910ed553f..f04441a57 100644 --- a/fiscalsim_us/tests/policy/baseline/gov/states/md/tanf/income/md_tanf_maximum_benefit.yaml +++ b/fiscalsim_us/tests/policy/baseline/gov/states/md/tanf/income/md_tanf_maximum_benefit.yaml @@ -1,15 +1,15 @@ -- name: One-person household has a maximum benefit of $328 per month. - period: 2023 - input: - md_tanf_eligible: true - spm_unit_size: 1 - output: - md_tanf_maximum_benefit: 328 * 12 - -- name: Ten-person household has a maximum benefit of $1,372 (8-person) + 2 * $136 = $1,644 per month. - period: 2023 - input: - md_tanf_eligible: true - spm_unit_size: 10 - output: - md_tanf_maximum_benefit: 1_644 * 12 +- name: One-person household has a maximum benefit of $328 per month. + period: 2023 + input: + md_tanf_eligible: true + spm_unit_size: 1 + output: + md_tanf_maximum_benefit: 328 * 12 + +- name: Ten-person household has a maximum benefit of $1,372 (8-person) + 2 * $136 = $1,644 per month. + period: 2023 + input: + md_tanf_eligible: true + spm_unit_size: 10 + output: + md_tanf_maximum_benefit: 1_644 * 12 diff --git a/fiscalsim_us/tests/policy/baseline/gov/states/md/tax/income/agi/subtractions/hundred_year/md_hundred_year_subtraction_eligible.yaml b/fiscalsim_us/tests/policy/baseline/gov/states/md/tax/income/agi/subtractions/hundred_year/md_hundred_year_subtraction_eligible.yaml new file mode 100644 index 000000000..02f7d3481 --- /dev/null +++ b/fiscalsim_us/tests/policy/baseline/gov/states/md/tax/income/agi/subtractions/hundred_year/md_hundred_year_subtraction_eligible.yaml @@ -0,0 +1,15 @@ +- name: Ineligible + period: 2023 + input: + age: 100 + state_code: MD + output: + md_hundred_year_subtraction_eligible: true + +- name: Eligible + period: 2023 + input: + age: 99 + state_code: MD + output: + md_hundred_year_subtraction_eligible: false diff --git a/fiscalsim_us/tests/policy/baseline/gov/states/md/tax/income/agi/subtractions/hundred_year/md_hundred_year_subtraction_person.yaml b/fiscalsim_us/tests/policy/baseline/gov/states/md/tax/income/agi/subtractions/hundred_year/md_hundred_year_subtraction_person.yaml new file mode 100644 index 000000000..a355c6f16 --- /dev/null +++ b/fiscalsim_us/tests/policy/baseline/gov/states/md/tax/income/agi/subtractions/hundred_year/md_hundred_year_subtraction_person.yaml @@ -0,0 +1,15 @@ +- name: Eligible + period: 2023 + input: + md_hundred_year_subtraction_eligible: true + state_code: MD + output: + md_hundred_year_subtraction_person: 100_000 + +- name: Ineligible + period: 2023 + input: + md_hundred_year_subtraction_eligible: false + state_code: MD + output: + md_hundred_year_subtraction_person: 0 diff --git a/fiscalsim_us/tests/policy/baseline/gov/states/md/tax/income/credits/eitc/federal_eitc_without_age_minimum.yaml b/fiscalsim_us/tests/policy/baseline/gov/states/md/tax/income/credits/eitc/federal_eitc_without_age_minimum.yaml index 2194293aa..b2bb1274e 100644 --- a/fiscalsim_us/tests/policy/baseline/gov/states/md/tax/income/credits/eitc/federal_eitc_without_age_minimum.yaml +++ b/fiscalsim_us/tests/policy/baseline/gov/states/md/tax/income/credits/eitc/federal_eitc_without_age_minimum.yaml @@ -3,7 +3,8 @@ input: age: 19 employment_income: 5_000 - md_qualifies_for_single_childless_eitc: true + md_qualifies_for_unmarried_childless_eitc: true + state_code: MD output: eitc: 0 federal_eitc_without_age_minimum: 382.50 diff --git a/fiscalsim_us/tests/policy/baseline/gov/states/md/tax/income/credits/eitc/md_married_or_has_child_non_refundable_eitc.yaml b/fiscalsim_us/tests/policy/baseline/gov/states/md/tax/income/credits/eitc/md_married_or_has_child_non_refundable_eitc.yaml new file mode 100644 index 000000000..863f8886d --- /dev/null +++ b/fiscalsim_us/tests/policy/baseline/gov/states/md/tax/income/credits/eitc/md_married_or_has_child_non_refundable_eitc.yaml @@ -0,0 +1,17 @@ +- name: 50% of EITC match with the federal credit + period: 2021 + input: + md_qualifies_for_unmarried_childless_eitc: false + eitc: 300 + state_code: MD + output: + md_married_or_has_child_non_refundable_eitc: 150 + +- name: Single childless filers have a different program. + period: 2021 + input: + md_qualifies_for_unmarried_childless_eitc: true + eitc: 300 + state_code: MD + output: + md_married_or_has_child_non_refundable_eitc: 0 diff --git a/fiscalsim_us/tests/policy/baseline/gov/states/md/tax/income/credits/eitc/md_married_or_has_child_refundable_eitc.yaml b/fiscalsim_us/tests/policy/baseline/gov/states/md/tax/income/credits/eitc/md_married_or_has_child_refundable_eitc.yaml new file mode 100644 index 000000000..f5e7f3eb1 --- /dev/null +++ b/fiscalsim_us/tests/policy/baseline/gov/states/md/tax/income/credits/eitc/md_married_or_has_child_refundable_eitc.yaml @@ -0,0 +1,29 @@ +- name: 45% of the federal EITC, minus MD tax before credits. + period: 2021 + input: + md_qualifies_for_unmarried_childless_eitc: false + eitc: 1_000 + md_income_tax_before_credits: 100 + state_code: MD + output: + md_married_or_has_child_refundable_eitc: 350 # 1000*0.45 - 100 + +- name: Zero if MD refundable EITC allowed is less than tax before credits. + period: 2021 + input: + md_qualifies_for_unmarried_childless_eitc: false + eitc: 1_000 + md_income_tax_before_credits: 500 + state_code: MD + output: + md_married_or_has_child_refundable_eitc: 0 # max(0, 1000*0.45 - 500) + +- name: Zero if single and childless (they receive a different variable). + period: 2021 + input: + md_qualifies_for_unmarried_childless_eitc: true + eitc: 1_000 + md_income_tax_before_credits: 100 + state_code: MD + output: + md_married_or_has_child_refundable_eitc: 0 diff --git a/fiscalsim_us/tests/policy/baseline/gov/states/md/tax/income/credits/eitc/md_non_refundable_eitc.yaml b/fiscalsim_us/tests/policy/baseline/gov/states/md/tax/income/credits/eitc/md_non_refundable_eitc.yaml index 609cf3704..6002f5b19 100644 --- a/fiscalsim_us/tests/policy/baseline/gov/states/md/tax/income/credits/eitc/md_non_refundable_eitc.yaml +++ b/fiscalsim_us/tests/policy/baseline/gov/states/md/tax/income/credits/eitc/md_non_refundable_eitc.yaml @@ -1,26 +1,17 @@ -- name: 100% for childless up to the cap. +- name: Maryland total non-refundable eitc for married individual or has qualifying child. period: 2021 input: - eitc: 100 - eitc_child_count: 0 + md_married_or_has_child_non_refundable_eitc: 100 + md_unmarried_childless_non_refundable_eitc: 0 state_code: MD output: md_non_refundable_eitc: 100 -- name: $530 cap for childless. +- name: Maryland total non-refundable eitc for unmarried childless individual. period: 2021 input: - eitc: 531 - eitc_child_count: 0 + md_married_or_has_child_non_refundable_eitc: 0 + md_unmarried_childless_non_refundable_eitc: 300 state_code: MD output: - md_non_refundable_eitc: 530 - -- name: 50% of federal if not childless. - period: 2021 - input: - eitc: 100 - eitc_child_count: 2 - state_code: MD - output: - md_non_refundable_eitc: 50 + md_non_refundable_eitc: 300 diff --git a/fiscalsim_us/tests/policy/baseline/gov/states/md/tax/income/credits/eitc/md_non_single_childless_non_refundable_eitc.yaml b/fiscalsim_us/tests/policy/baseline/gov/states/md/tax/income/credits/eitc/md_non_single_childless_non_refundable_eitc.yaml deleted file mode 100644 index d78292950..000000000 --- a/fiscalsim_us/tests/policy/baseline/gov/states/md/tax/income/credits/eitc/md_non_single_childless_non_refundable_eitc.yaml +++ /dev/null @@ -1,29 +0,0 @@ -- name: 50% of EITC capped at income tax before credits. - period: 2022 - input: - md_qualifies_for_single_childless_eitc: false - eitc: 300 - md_income_tax_before_credits: 100 - state_code: MD - output: - md_non_single_childless_non_refundable_eitc: 100 - -- name: Not capped. - period: 2022 - input: - md_qualifies_for_single_childless_eitc: false - eitc: 300 - md_income_tax_before_credits: 200 - state_code: MD - output: - md_non_single_childless_non_refundable_eitc: 150 - -- name: Single childless filers have a different program. - period: 2022 - input: - md_qualifies_for_single_childless_eitc: true - eitc: 300 - md_income_tax_before_credits: 200 - state_code: MD - output: - md_non_single_childless_non_refundable_eitc: 0 diff --git a/fiscalsim_us/tests/policy/baseline/gov/states/md/tax/income/credits/eitc/md_non_single_childless_refundable_eitc.yaml b/fiscalsim_us/tests/policy/baseline/gov/states/md/tax/income/credits/eitc/md_non_single_childless_refundable_eitc.yaml deleted file mode 100644 index 65262f0b8..000000000 --- a/fiscalsim_us/tests/policy/baseline/gov/states/md/tax/income/credits/eitc/md_non_single_childless_refundable_eitc.yaml +++ /dev/null @@ -1,32 +0,0 @@ -- name: 45% of the federal EITC, minus MD tax before credits. - period: 2021 - input: - md_qualifies_for_single_childless_eitc: false - md_non_single_childless_non_refundable_eitc: 100 # Would be $150 uncapped. - md_income_tax_before_credits: 100 - federal_eitc_without_age_minimum: 300 - state_code: MD - output: - md_non_single_childless_refundable_eitc: 300 * 0.45 - 100 - -- name: Zero if non-refundable EITC matches tax before credits. - period: 2021 - input: - md_qualifies_for_single_childless_eitc: false - md_non_single_childless_non_refundable_eitc: 149 - md_income_tax_before_credits: 150 - federal_eitc_without_age_minimum: 298 - state_code: MD - output: - md_non_single_childless_refundable_eitc: 0 - -- name: Zero if single and childless (they receive a different variable). - period: 2021 - input: - md_qualifies_for_single_childless_eitc: true - md_non_single_childless_non_refundable_eitc: 150 - md_income_tax_before_credits: 150 - federal_eitc_without_age_minimum: 300 - state_code: MD - output: - md_non_single_childless_refundable_eitc: 0 diff --git a/fiscalsim_us/tests/policy/baseline/gov/states/md/tax/income/credits/eitc/md_qualifies_for_single_childless_eitc.yaml b/fiscalsim_us/tests/policy/baseline/gov/states/md/tax/income/credits/eitc/md_qualifies_for_single_childless_eitc.yaml index ed40f1a7a..f7f184d27 100644 --- a/fiscalsim_us/tests/policy/baseline/gov/states/md/tax/income/credits/eitc/md_qualifies_for_single_childless_eitc.yaml +++ b/fiscalsim_us/tests/policy/baseline/gov/states/md/tax/income/credits/eitc/md_qualifies_for_single_childless_eitc.yaml @@ -5,7 +5,7 @@ eitc_child_count: 0 state_code: MD output: - md_qualifies_for_single_childless_eitc: true + md_qualifies_for_unmarried_childless_eitc: true - name: Has to be single and have no EITC children. period: 2021 @@ -14,7 +14,7 @@ eitc_child_count: 0 state_code: MD output: - md_qualifies_for_single_childless_eitc: false + md_qualifies_for_unmarried_childless_eitc: false - name: Has to be single and have no EITC children. period: 2021 @@ -23,4 +23,4 @@ eitc_child_count: 1 state_code: MD output: - md_qualifies_for_single_childless_eitc: false + md_qualifies_for_unmarried_childless_eitc: false diff --git a/fiscalsim_us/tests/policy/baseline/gov/states/md/tax/income/credits/eitc/md_refundable_eitc.yaml b/fiscalsim_us/tests/policy/baseline/gov/states/md/tax/income/credits/eitc/md_refundable_eitc.yaml index 68cbfd54a..7f59e0beb 100644 --- a/fiscalsim_us/tests/policy/baseline/gov/states/md/tax/income/credits/eitc/md_refundable_eitc.yaml +++ b/fiscalsim_us/tests/policy/baseline/gov/states/md/tax/income/credits/eitc/md_refundable_eitc.yaml @@ -1,29 +1,17 @@ -- name: 100% match for childless filers. - period: 2023 +- name: Maryland total refundable eitc for married individual or has qualifying child. + period: 2021 input: - md_non_refundable_eitc: 100 - md_income_tax_before_credits: 0 - eitc_child_count: 0 + md_married_or_has_child_refundable_eitc: 100 + md_unmarried_childless_refundable_eitc: 0 state_code: MD output: md_refundable_eitc: 100 -- name: 45% match for filers with children. - period: 2023 +- name: Maryland total refundable eitc for unmarried childless individual. + period: 2021 input: - md_non_refundable_eitc: 200 - md_income_tax_before_credits: 100 - eitc_child_count: 2 + md_married_or_has_child_refundable_eitc: 0 + md_unmarried_childless_refundable_eitc: 300 state_code: MD output: - md_refundable_eitc: 45 - -- name: Nothing if income tax before credits exceeds non-refundable EITC. - period: 2023 - input: - md_non_refundable_eitc: 200 - md_income_tax_before_credits: 300 - eitc_child_count: 2 - state_code: MD - output: - md_refundable_eitc: 0 + md_refundable_eitc: 300 diff --git a/fiscalsim_us/tests/policy/baseline/gov/states/md/tax/income/credits/eitc/md_single_childless_eitc.yaml b/fiscalsim_us/tests/policy/baseline/gov/states/md/tax/income/credits/eitc/md_single_childless_eitc.yaml deleted file mode 100644 index 65f63f6fc..000000000 --- a/fiscalsim_us/tests/policy/baseline/gov/states/md/tax/income/credits/eitc/md_single_childless_eitc.yaml +++ /dev/null @@ -1,26 +0,0 @@ -- name: 100% of federal EITC up to $530. - period: 2021 - input: - md_qualifies_for_single_childless_eitc: true - federal_eitc_without_age_minimum: 100 - state_code: MD - output: - md_single_childless_eitc: 100 - -- name: Capped by $530. - period: 2021 - input: - md_qualifies_for_single_childless_eitc: true - federal_eitc_without_age_minimum: 531 - state_code: MD - output: - md_single_childless_eitc: 530 - -- name: Requires eligibility. - period: 2021 - input: - md_qualifies_for_single_childless_eitc: false - federal_eitc_without_age_minimum: 100 - state_code: MD - output: - md_single_childless_eitc: 0 diff --git a/fiscalsim_us/tests/policy/baseline/gov/states/md/tax/income/credits/eitc/md_unmarried_childless_non_refundable_eitc.yaml b/fiscalsim_us/tests/policy/baseline/gov/states/md/tax/income/credits/eitc/md_unmarried_childless_non_refundable_eitc.yaml new file mode 100644 index 000000000..e3ffc4d79 --- /dev/null +++ b/fiscalsim_us/tests/policy/baseline/gov/states/md/tax/income/credits/eitc/md_unmarried_childless_non_refundable_eitc.yaml @@ -0,0 +1,26 @@ +- name: Not capped + period: 2021 + input: + md_qualifies_for_unmarried_childless_eitc: true + federal_eitc_without_age_minimum: 500 + state_code: MD + output: + md_unmarried_childless_non_refundable_eitc: 500 # 500*100% + +- name: Capped with MD EITC max amount + period: 2021 + input: + md_qualifies_for_unmarried_childless_eitc: true + federal_eitc_without_age_minimum: 600 + state_code: MD + output: + md_unmarried_childless_non_refundable_eitc: 530 # min(530, 600*100%) + +- name: Not eligible for unmarried childless eitc + period: 2021 + input: + md_qualifies_for_unmarried_childless_eitc: false + federal_eitc_without_age_minimum: 500 + state_code: MD + output: + md_unmarried_childless_non_refundable_eitc: 0 diff --git a/fiscalsim_us/tests/policy/baseline/gov/states/md/tax/income/credits/eitc/md_unmarried_childless_refundable_eitc.yaml b/fiscalsim_us/tests/policy/baseline/gov/states/md/tax/income/credits/eitc/md_unmarried_childless_refundable_eitc.yaml new file mode 100644 index 000000000..afd426b97 --- /dev/null +++ b/fiscalsim_us/tests/policy/baseline/gov/states/md/tax/income/credits/eitc/md_unmarried_childless_refundable_eitc.yaml @@ -0,0 +1,29 @@ +- name: Not capped + period: 2021 + input: + md_qualifies_for_unmarried_childless_eitc: true + md_income_tax_before_credits: 100 + md_unmarried_childless_non_refundable_eitc: 500 + state_code: MD + output: + md_unmarried_childless_refundable_eitc: 400 #500-100 + +- name: Capped at zero + period: 2021 + input: + md_qualifies_for_unmarried_childless_eitc: true + md_income_tax_before_credits: 600 + md_unmarried_childless_non_refundable_eitc: 500 + state_code: MD + output: + md_unmarried_childless_refundable_eitc: 0 #max(0, 500-600) + +- name: Not eligible for unmarried childless eitc + period: 2021 + input: + md_qualifies_for_unmarried_childless_eitc: false + md_income_tax_before_credits: 100 + md_unmarried_childless_non_refundable_eitc: 500 + state_code: MD + output: + md_unmarried_childless_refundable_eitc: 0 diff --git a/fiscalsim_us/tests/policy/baseline/gov/states/md/tax/income/credits/poverty_line/integration.yaml b/fiscalsim_us/tests/policy/baseline/gov/states/md/tax/income/credits/poverty_line/integration.yaml index 8744f3ddc..1da864f51 100644 --- a/fiscalsim_us/tests/policy/baseline/gov/states/md/tax/income/credits/poverty_line/integration.yaml +++ b/fiscalsim_us/tests/policy/baseline/gov/states/md/tax/income/credits/poverty_line/integration.yaml @@ -32,7 +32,7 @@ tax_unit: members: [parent,parent2, child1, child2, child3, child4, child5, child6, child7, child8, child9, child10, child11] md_income_tax_before_credits: 3_000 - md_non_single_childless_non_refundable_eitc: 2_000 + md_married_or_has_child_non_refundable_eitc: 2_000 tax_unit_earned_income: 20_000 is_eligible_md_poverty_line_credit: true households: diff --git a/fiscalsim_us/tests/policy/baseline/gov/states/md/tax/income/credits/poverty_line/is_eligible_md_poverty_line_credit.yaml b/fiscalsim_us/tests/policy/baseline/gov/states/md/tax/income/credits/poverty_line/is_eligible_md_poverty_line_credit.yaml index 3128d18a3..295523292 100644 --- a/fiscalsim_us/tests/policy/baseline/gov/states/md/tax/income/credits/poverty_line/is_eligible_md_poverty_line_credit.yaml +++ b/fiscalsim_us/tests/policy/baseline/gov/states/md/tax/income/credits/poverty_line/is_eligible_md_poverty_line_credit.yaml @@ -5,7 +5,7 @@ md_total_additions: 10 tax_unit_fpg: 100 tax_unit_earned_income: 100 - md_non_single_childless_non_refundable_eitc: 9 + md_married_or_has_child_non_refundable_eitc: 9 md_income_tax_before_credits: 10 state_code: MD output: @@ -18,7 +18,7 @@ md_total_additions: 10 tax_unit_fpg: 100 tax_unit_earned_income: 100 - md_non_single_childless_non_refundable_eitc: 9 + md_married_or_has_child_non_refundable_eitc: 9 md_income_tax_before_credits: 10 state_code: MD output: @@ -32,7 +32,7 @@ md_total_additions: 10 tax_unit_fpg: 100 tax_unit_earned_income: 101 - md_non_single_childless_non_refundable_eitc: 9 + md_married_or_has_child_non_refundable_eitc: 9 md_income_tax_before_credits: 10 state_code: MD output: @@ -45,7 +45,7 @@ md_total_additions: 10 tax_unit_fpg: 100 tax_unit_earned_income: 100 - md_non_single_childless_non_refundable_eitc: 10 + md_married_or_has_child_non_refundable_eitc: 10 md_income_tax_before_credits: 10 output: is_eligible_md_poverty_line_credit: false diff --git a/fiscalsim_us/tests/policy/baseline/gov/states/md/tax/income/credits/poverty_line/md_poverty_line_credit.yaml b/fiscalsim_us/tests/policy/baseline/gov/states/md/tax/income/credits/poverty_line/md_poverty_line_credit.yaml index 339f3bb28..a64356554 100644 --- a/fiscalsim_us/tests/policy/baseline/gov/states/md/tax/income/credits/poverty_line/md_poverty_line_credit.yaml +++ b/fiscalsim_us/tests/policy/baseline/gov/states/md/tax/income/credits/poverty_line/md_poverty_line_credit.yaml @@ -3,7 +3,7 @@ input: is_eligible_md_poverty_line_credit: true md_income_tax_before_credits: 100 - md_non_single_childless_non_refundable_eitc: 10 + md_married_or_has_child_non_refundable_eitc: 10 tax_unit_earned_income: 100 state_code: MD output: @@ -14,7 +14,7 @@ input: is_eligible_md_poverty_line_credit: true md_income_tax_before_credits: 100 - md_non_single_childless_non_refundable_eitc: 98 + md_married_or_has_child_non_refundable_eitc: 98 tax_unit_earned_income: 100 state_code: MD output: diff --git a/fiscalsim_us/tests/policy/baseline/gov/states/md/tax/income/credits/senior_tax/md_senior_tax_credit.yaml b/fiscalsim_us/tests/policy/baseline/gov/states/md/tax/income/credits/senior_tax/md_senior_tax_credit.yaml index 7798d7901..cb09eec98 100644 --- a/fiscalsim_us/tests/policy/baseline/gov/states/md/tax/income/credits/senior_tax/md_senior_tax_credit.yaml +++ b/fiscalsim_us/tests/policy/baseline/gov/states/md/tax/income/credits/senior_tax/md_senior_tax_credit.yaml @@ -7,7 +7,7 @@ age_head: 65 output: md_senior_tax_credit: 0 - + - name: Single ineligible by age. period: 2023 input: @@ -104,3 +104,4 @@ age_spouse: 64 output: md_senior_tax_credit: 1_750 + diff --git a/fiscalsim_us/tests/policy/baseline/gov/states/md/tax/income/integration_md.yaml b/fiscalsim_us/tests/policy/baseline/gov/states/md/tax/income/integration_md.yaml index 0e57d4825..28a714e6f 100644 --- a/fiscalsim_us/tests/policy/baseline/gov/states/md/tax/income/integration_md.yaml +++ b/fiscalsim_us/tests/policy/baseline/gov/states/md/tax/income/integration_md.yaml @@ -1,101 +1,143 @@ -- name: Tax unit with taxsimid 9 in o21.its.csv and o21.ots.csv - absolute_error_margin: 0.01 - period: 2021 - input: - people: - person1: - is_tax_unit_head: true - age: 31 - employment_income: 46_010 - ssi: 0 # not in TAXSIM35 - state_supplement: 0 # not in TAXSIM35 - wic: 0 # not in TAXSIM35 - person2: - is_tax_unit_spouse: true - age: 31 - employment_income: 142_010 - ssi: 0 # not in TAXSIM35 - state_supplement: 0 # not in TAXSIM35 - wic: 0 # not in TAXSIM35 - spm_units: - spm_unit: - members: [person1, person2] - snap: 0 # not in TAXSIM35 - tanf: 0 # not in TAXSIM35 - tax_units: - tax_unit: - members: [person1, person2] - premium_tax_credit: 0 # not in TAXSIM35 - households: - household: - members: [person1, person2] - state_code: MD - output: # expected results from TAXSIM35 12/08/22 version - md_income_tax: 8_612.30 - -- name: MD integration test checking 2021 AGI subtractions - absolute_error_margin: 0.01 - period: 2021 - input: - people: - person1: - is_tax_unit_head: true - age: 32 - employment_income: 20_000 - taxable_interest_income: 12_000 - taxable_pension_income: 52_000 - social_security: 15_000 - person2: - age: 11 - person3: - age: 10 - person4: - age: 9 - person5: - age: 8 - spm_units: - spm_unit: - members: [person1, person2, person3, person4, person5] - tax_units: - tax_unit: - members: [person1, person2, person3, person4, person5] - tax_unit_childcare_expenses: 10_000 - households: - household: - members: [person1, person2, person3, person4, person5] - state_code: MD - output: - tax_unit_taxable_social_security: 12_750 - adjusted_gross_income: 72_000 + 12_000 + 12_750 # = 96_750 - md_socsec_subtraction: 12_750 - md_two_income_subtraction: 0 - md_dependent_care_subtraction: 2 * 3_000 # = 6_000 - -- name: 2021 MD integration test for a single coupon-clipping homeowner - absolute_error_margin: 0.01 - period: 2021 - input: - people: - person1: - is_tax_unit_head: true - age: 40 - taxable_interest_income: 200_000 - real_estate_taxes: 12_000 - interest_expense: 24_000 - spm_units: - spm_unit: - members: [person1] - tax_units: - tax_unit: - members: [person1] - premium_tax_credit: 0 - households: - household: - members: [person1] - state_code: MD - output: # expected results from hand calculations using 2021 MD Form 502 - # https://www.marylandtaxes.gov/forms/21_forms/502.pdf#page=2 - # https://www.marylandtaxes.gov/forms/21_forms/Resident_Booklet.pdf#page=18 - md_agi: 200_000 - md_deductions: 34_000 # PEUS 0.213.3 code generates 24_000 - md_taxable_income: 200_000 - 34_000 # code generates 200_000 - 24_000 +- name: Tax unit with taxsimid 9 in o21.its.csv and o21.ots.csv + absolute_error_margin: 0.01 + period: 2021 + input: + people: + person1: + is_tax_unit_head: true + age: 31 + employment_income: 46_010 + ssi: 0 # not in TAXSIM35 + state_supplement: 0 # not in TAXSIM35 + wic: 0 # not in TAXSIM35 + person2: + is_tax_unit_spouse: true + age: 31 + employment_income: 142_010 + ssi: 0 # not in TAXSIM35 + state_supplement: 0 # not in TAXSIM35 + wic: 0 # not in TAXSIM35 + spm_units: + spm_unit: + members: [person1, person2] + snap: 0 # not in TAXSIM35 + tanf: 0 # not in TAXSIM35 + tax_units: + tax_unit: + members: [person1, person2] + premium_tax_credit: 0 # not in TAXSIM35 + households: + household: + members: [person1, person2] + state_code: MD + output: # expected results from TAXSIM35 12/08/22 version + md_income_tax: 8_612.30 + +- name: MD integration test checking 2021 AGI subtractions + absolute_error_margin: 0.01 + period: 2021 + input: + people: + person1: + is_tax_unit_head: true + age: 32 + employment_income: 20_000 + taxable_interest_income: 12_000 + taxable_pension_income: 52_000 + social_security: 15_000 + person2: + age: 11 + person3: + age: 10 + person4: + age: 9 + person5: + age: 8 + spm_units: + spm_unit: + members: [person1, person2, person3, person4, person5] + tax_units: + tax_unit: + members: [person1, person2, person3, person4, person5] + tax_unit_childcare_expenses: 10_000 + households: + household: + members: [person1, person2, person3, person4, person5] + state_code: MD + output: + tax_unit_taxable_social_security: 12_750 + adjusted_gross_income: 72_000 + 12_000 + 12_750 # = 96_750 + md_socsec_subtraction: 12_750 + md_two_income_subtraction: 0 + md_dependent_care_subtraction: 2 * 3_000 # = 6_000 + +- name: 2021 MD integration test for a single coupon-clipping homeowner + absolute_error_margin: 0.01 + period: 2021 + input: + people: + person1: + is_tax_unit_head: true + age: 40 + taxable_interest_income: 200_000 + real_estate_taxes: 12_000 + interest_expense: 24_000 + spm_units: + spm_unit: + members: [person1] + tax_units: + tax_unit: + members: [person1] + premium_tax_credit: 0 + households: + household: + members: [person1] + state_code: MD + output: # expected results from hand calculations using 2021 MD Form 502 + # https://www.marylandtaxes.gov/forms/21_forms/502.pdf#page=2 + # https://www.marylandtaxes.gov/forms/21_forms/Resident_Booklet.pdf#page=18 + md_agi: 200_000 + md_deductions: 34_000 # PEUS 0.213.3 code generates 24_000 + md_taxable_income: 200_000 - 34_000 # code generates 200_000 - 24_000 + +- name: Tax unit with taxsimid 85510 in p21.its.csv and p21.ots.csv + absolute_error_margin: 0.01 + period: 2021 + input: + people: + person1: + age: 53 + employment_income: 12010 + ssi: 0 # not in TAXSIM35 + state_supplement: 0 # not in TAXSIM35 + wic: 0 # not in TAXSIM35 + ma_covid_19_essential_employee_premium_pay_program: 0 # not in TAXSIM35 + tax_units: + tax_unit: + members: [person1] + premium_tax_credit: 0 # not in TAXSIM35 + local_income_tax: 0 # not in TAXSIM35 + state_sales_tax: 0 # not in TAXSIM35 + ca_use_tax: 0 # not in TAXSIM35 + il_use_tax: 0 # not in TAXSIM35 + nm_2021_income_rebate: 0 # not in TAXSIM35 + nm_additional_2021_income_rebate: 0 # not in TAXSIM35 + nm_supplemental_2021_income_rebate: 0 # not in TAXSIM35 + ny_supplemental_eitc: 0 # not in TAXSIM35 + ok_use_tax: 0 # not in TAXSIM35 + pa_use_tax: 0 # not in TAXSIM35 + vt_renter_credit: 0 # not in TAXSIM35 + spm_units: + spm_unit: + members: [person1] + snap: 0 # not in TAXSIM35 + tanf: 0 # not in TAXSIM35 + households: + household: + members: [person1] + state_fips: 24 # MD + output: # expected results from patched TAXSIM35 2024-03-08 version + md_income_tax_before_credits: 280.4 + md_non_refundable_eitc: 530 # TAXSIM 280.4 + md_refundable_eitc: 249.6 + md_income_tax: -249.60 diff --git a/fiscalsim_us/tests/policy/baseline/gov/states/md/tax/income/md_withheld_income_tax.yaml b/fiscalsim_us/tests/policy/baseline/gov/states/md/tax/income/md_withheld_income_tax.yaml new file mode 100644 index 000000000..4df1edd37 --- /dev/null +++ b/fiscalsim_us/tests/policy/baseline/gov/states/md/tax/income/md_withheld_income_tax.yaml @@ -0,0 +1,29 @@ +- name: Person with income over the standard deduction amount + period: 2021 + absolute_error_margin: 0.01 + input: + adjusted_gross_income_person: 5_000 + filing_status: JOINT + state_code: MD + output: + md_withheld_income_tax: 76 + +- name: Changing the filing status should not change the output + period: 2021 + absolute_error_margin: 0.01 + input: + adjusted_gross_income_person: 5_000 + filing_status: SURVIVING_SPOUSE + state_code: MD + output: + md_withheld_income_tax: 76 + +- name: Capped at 0 + period: 2021 + absolute_error_margin: 0.01 + input: + adjusted_gross_income_person: 2_300 + filing_status: SURVIVING_SPOUSE + state_code: MD + output: + md_withheld_income_tax: 0 diff --git a/fiscalsim_us/tests/policy/baseline/gov/states/md/usda/snap/md_snap_elderly_present.yaml b/fiscalsim_us/tests/policy/baseline/gov/states/md/usda/snap/md_snap_elderly_present.yaml new file mode 100644 index 000000000..b6f6a9e1e --- /dev/null +++ b/fiscalsim_us/tests/policy/baseline/gov/states/md/usda/snap/md_snap_elderly_present.yaml @@ -0,0 +1,53 @@ +- name: Family with nobody elderly + period: 2024 + input: + people: + p1: + md_snap_is_elderly: false + p2: + md_snap_is_elderly: false + spm_units: + spm_unit: + members: [p1, p2] + households: + household: + members: [p1, p2] + state_code: MD + output: + md_snap_elderly_present: false + +- name: Family with one person elderly + period: 2024 + input: + people: + p1: + md_snap_is_elderly: true + p2: + md_snap_is_elderly: false + spm_units: + spm_unit: + members: [p1, p2] + households: + household: + members: [p1, p2] + state_code: MD + output: + md_snap_elderly_present: true + +- name: Family with all elderly + period: 2024 + input: + people: + p1: + md_snap_is_elderly: true + p2: + md_snap_is_elderly: true + spm_units: + spm_unit: + members: [p1, p2] + households: + household: + members: [p1, p2] + state_code: MD + output: + md_snap_elderly_present: true diff --git a/fiscalsim_us/tests/policy/baseline/gov/states/md/usda/snap/md_snap_is_elderly.yaml b/fiscalsim_us/tests/policy/baseline/gov/states/md/usda/snap/md_snap_is_elderly.yaml new file mode 100644 index 000000000..1f24a8314 --- /dev/null +++ b/fiscalsim_us/tests/policy/baseline/gov/states/md/usda/snap/md_snap_is_elderly.yaml @@ -0,0 +1,15 @@ +- name: Individual, is MD elderly + period: 2024 + input: + age: 63 + state_code: MD + output: + md_snap_is_elderly: true + +- name: Individual, is not MD elderly + period: 2024 + input: + age: 61 + state_code: MD + output: + md_snap_is_elderly: false diff --git a/fiscalsim_us/tests/policy/baseline/gov/states/vt/tax/income/agi/subtractions/vt_csrs_retirement_pay_exclusion.yaml b/fiscalsim_us/tests/policy/baseline/gov/states/vt/tax/income/agi/subtractions/vt_csrs_retirement_pay_exclusion.yaml new file mode 100644 index 000000000..f09feb954 --- /dev/null +++ b/fiscalsim_us/tests/policy/baseline/gov/states/vt/tax/income/agi/subtractions/vt_csrs_retirement_pay_exclusion.yaml @@ -0,0 +1,54 @@ +- name: Csrs retirement pay exclusion test 1 + period: 2021 + input: + people: + person1: + csrs_retirement_pay: 11_000 + tax_units: + tax_unit: + members: [person1] + filing_status: SINGLE + households: + household: + members: [person1] + state_code: VT + output: + vt_csrs_retirement_pay_exclusion: 0 + +- name: Csrs retirement pay exclusion test 2 + period: 2022 + input: + people: + person1: + csrs_retirement_pay: 9_000 + person2: + csrs_retirement_pay: 9_000 + tax_units: + tax_unit: + members: [person1,person2] + filing_status: JOINT + households: + household: + members: [person1,person2] + state_code: VT + output: + vt_csrs_retirement_pay_exclusion: 10_000 + +- name: Csrs retirement pay exclusion test 3 + period: 2022 + input: + people: + person1: + csrs_retirement_pay: 2_000 + person2: + csrs_retirement_pay: 2_000 + tax_units: + tax_unit: + members: [person1,person2] + filing_status: JOINT + households: + household: + members: [person1,person2] + state_code: VT + output: + vt_csrs_retirement_pay_exclusion: 4_000 diff --git a/fiscalsim_us/tests/policy/baseline/gov/states/vt/agi/subtractions/vt_medical_expense_deductions.yaml b/fiscalsim_us/tests/policy/baseline/gov/states/vt/tax/income/agi/subtractions/vt_medical_expense_deductions.yaml similarity index 100% rename from fiscalsim_us/tests/policy/baseline/gov/states/vt/agi/subtractions/vt_medical_expense_deductions.yaml rename to fiscalsim_us/tests/policy/baseline/gov/states/vt/tax/income/agi/subtractions/vt_medical_expense_deductions.yaml diff --git a/fiscalsim_us/tests/policy/baseline/gov/states/vt/tax/income/agi/subtractions/vt_military_retirement_pay_exclusion.yaml b/fiscalsim_us/tests/policy/baseline/gov/states/vt/tax/income/agi/subtractions/vt_military_retirement_pay_exclusion.yaml new file mode 100644 index 000000000..da0abee02 --- /dev/null +++ b/fiscalsim_us/tests/policy/baseline/gov/states/vt/tax/income/agi/subtractions/vt_military_retirement_pay_exclusion.yaml @@ -0,0 +1,54 @@ +- name: Military reitrement pay exclusion test 1 + period: 2021 + input: + people: + person1: + military_retirement_pay: 11_000 + tax_units: + tax_unit: + members: [person1] + filing_status: SINGLE + households: + household: + members: [person1] + state_code: VT + output: + vt_military_retirement_pay_exclusion: 0 + +- name: Military reitrement pay exclusion test 2 + period: 2022 + input: + people: + person1: + military_retirement_pay: 9_000 + person2: + military_retirement_pay: 9_000 + tax_units: + tax_unit: + members: [person1,person2] + filing_status: JOINT + households: + household: + members: [person1,person2] + state_code: VT + output: + vt_military_retirement_pay_exclusion: 10_000 + +- name: Military reitrement pay exclusion test 3 + period: 2022 + input: + people: + person1: + military_retirement_pay: 2_000 + person2: + military_retirement_pay: 2_000 + tax_units: + tax_unit: + members: [person1,person2] + filing_status: JOINT + households: + household: + members: [person1,person2] + state_code: VT + output: + vt_military_retirement_pay_exclusion: 4_000 diff --git a/fiscalsim_us/tests/policy/baseline/gov/states/vt/tax/income/agi/subtractions/vt_retirement_income_exemption.yaml b/fiscalsim_us/tests/policy/baseline/gov/states/vt/tax/income/agi/subtractions/vt_retirement_income_exemption.yaml new file mode 100644 index 000000000..5000ef193 --- /dev/null +++ b/fiscalsim_us/tests/policy/baseline/gov/states/vt/tax/income/agi/subtractions/vt_retirement_income_exemption.yaml @@ -0,0 +1,129 @@ +- name: Filer with no eligibility + period: 2022 + input: + filing_status: SINGLE + tax_unit_taxable_social_security: 1_000 + vt_military_retirement_pay_exclusion: 1_000 + vt_csrs_retirement_pay_exclusion: 1_000 + adjusted_gross_income: 40_000 + vt_retirement_income_exemption_eligible: False + state_code: VT + output: + vt_retirement_income_exemption: 0 # Not qualified, testing the variable definition + +- name: 2021, use social security, filing jointly with federal agi more than 70,000 + period: 2021 + input: + filing_status: JOINT + adjusted_gross_income: 80_000 + tax_unit_taxable_social_security: 1_000 + vt_military_retirement_pay_exclusion: 0 + vt_csrs_retirement_pay_exclusion: 0 + vt_retirement_income_exemption_eligible: False + state_code: VT + output: + vt_retirement_income_exemption: 0 # Not qualified + +- name: 2022, use social security, not filing jointly with federal agi more than 60,000 + period: 2022 + input: + filing_status: SINGLE + adjusted_gross_income: 70_000 + tax_unit_taxable_social_security: 1_000 + vt_military_retirement_pay_exclusion: 0 + vt_csrs_retirement_pay_exclusion: 0 + vt_retirement_income_exemption_eligible: False + state_code: VT + output: + vt_retirement_income_exemption: 0 # Not qualified + +- name: 2021, use social security, filing jointly with federal agi less than 60,000 + period: 2021 + input: + filing_status: JOINT + adjusted_gross_income: 50_000 + tax_unit_taxable_social_security: 1_000 + vt_military_retirement_pay_exclusion: 0 + vt_csrs_retirement_pay_exclusion: 0 + vt_retirement_income_exemption_eligible: True + state_code: VT + output: + vt_retirement_income_exemption: 1_000 # Fully qualified + +- name: 2022, use social security, not filing jointly with federal agi less than 50,000 + period: 2022 + input: + filing_status: SINGLE + adjusted_gross_income: 40_000 + tax_unit_taxable_social_security: 1_000 + vt_military_retirement_pay_exclusion: 0 + vt_csrs_retirement_pay_exclusion: 500 + vt_retirement_income_exemption_eligible: True + state_code: VT + output: + vt_retirement_income_exemption: 1_000 # Fully qualified + +- name: 2021, use social security, filing jointly with federal agi between 60,000 and 70,000 + period: 2021 + input: + filing_status: JOINT + adjusted_gross_income: 65_000 + tax_unit_taxable_social_security: 1_000 + vt_military_retirement_pay_exclusion: 0 + vt_csrs_retirement_pay_exclusion: 0 + vt_retirement_income_exemption_eligible: True + state_code: VT + output: + vt_retirement_income_exemption: 500 # Partial qualified 1000*0.50 + +- name: 2022, use social security, not filing jointly with federal agi between 50,000 and 60,000 + period: 2022 + input: + filing_status: SINGLE + adjusted_gross_income: 57_500 + tax_unit_taxable_social_security: 1_000 + vt_military_retirement_pay_exclusion: 0 + vt_csrs_retirement_pay_exclusion: 0 + vt_retirement_income_exemption_eligible: True + state_code: VT + output: + vt_retirement_income_exemption: 250 # Partial qualified 1000*0.25 + +- name: 2022, use military retirement system, not filing jointly with federal agi less than 50,000 + period: 2022 + input: + filing_status: SINGLE + adjusted_gross_income: 40_000 + tax_unit_taxable_social_security: 0 + vt_military_retirement_pay_exclusion: 1_000 + vt_csrs_retirement_pay_exclusion: 0 + vt_retirement_income_exemption_eligible: True + state_code: VT + output: + vt_retirement_income_exemption: 1_000 # Fully qualified + +- name: 2021, use CSRS, filing jointly with federal agi between 60,000 and 70,000 + period: 2021 + input: + filing_status: JOINT + adjusted_gross_income: 65_000 + tax_unit_taxable_social_security: 0 + vt_military_retirement_pay_exclusion: 0 + vt_csrs_retirement_pay_exclusion: 0 # Can't use CSRS in 2021 + vt_retirement_income_exemption_eligible: True + state_code: VT + output: + vt_retirement_income_exemption: 0 # Partial qualified; But can't use CSRS in 2021 + +- name: 2022, use CSRS, not filing jointly with federal agi between 50,000 and 60,000 + period: 2022 + input: + filing_status: SINGLE + adjusted_gross_income: 57_500 + tax_unit_taxable_social_security: 9_000 + vt_military_retirement_pay_exclusion: 9_000 + vt_csrs_retirement_pay_exclusion: 10_000 # Can't above 10_000 + vt_retirement_income_exemption_eligible: True + state_code: VT + output: + vt_retirement_income_exemption: 2_500 # Partial qualified 10,000*0.25 diff --git a/fiscalsim_us/tests/policy/baseline/gov/states/vt/tax/income/agi/subtractions/vt_retirement_income_exemption_eligible.yaml b/fiscalsim_us/tests/policy/baseline/gov/states/vt/tax/income/agi/subtractions/vt_retirement_income_exemption_eligible.yaml new file mode 100644 index 000000000..032180192 --- /dev/null +++ b/fiscalsim_us/tests/policy/baseline/gov/states/vt/tax/income/agi/subtractions/vt_retirement_income_exemption_eligible.yaml @@ -0,0 +1,211 @@ +- name: Filer with no taxable social security benefit or retirement income + period: 2022 + input: + people: + person1: + military_retirement_pay: 0 + csrs_retirement_pay: 0 + tax_units: + tax_unit: + members: [person1] + filing_status: SINGLE + tax_unit_taxable_social_security: 0 + adjusted_gross_income: 40_000 + households: + household: + members: [person1] + state_code: VT + output: + vt_retirement_income_exemption_eligible: False # Not qualified + +- name: 2021, use social security, filing jointly with federal agi more than 70,000 + period: 2021 + input: + people: + person1: + military_retirement_pay: 0 + csrs_retirement_pay: 0 + person2: + military_retirement_pay: 0 + csrs_retirement_pay: 0 + tax_units: + tax_unit: + members: [person1,person2] + filing_status: JOINT + adjusted_gross_income: 80_000 + tax_unit_taxable_social_security: 1_000 + households: + household: + members: [person1,person2] + state_code: VT + output: + vt_retirement_income_exemption_eligible: False # Not qualified + +- name: 2022, use social security, not filing jointly with federal agi more than 60,000 + period: 2022 + input: + people: + person1: + military_retirement_pay: 0 + csrs_retirement_pay: 0 + tax_units: + tax_unit: + members: [person1] + filing_status: SINGLE + adjusted_gross_income: 70_000 + tax_unit_taxable_social_security: 1_000 + households: + household: + members: [person1] + state_code: VT + output: + vt_retirement_income_exemption_eligible: False # Not qualified + +- name: 2021, use social security, filing jointly with federal agi less than 60,000 + period: 2021 + input: + people: + person1: + military_retirement_pay: 0 + csrs_retirement_pay: 0 + person2: + military_retirement_pay: 0 + csrs_retirement_pay: 0 + tax_units: + tax_unit: + members: [person1,person2] + filing_status: JOINT + adjusted_gross_income: 50_000 + tax_unit_taxable_social_security: 1_000 + households: + household: + members: [person1,person2] + state_code: VT + output: + vt_retirement_income_exemption_eligible: True # Fully qualified + +- name: 2022, use social security, not filing jointly with federal agi less than 50,000 + period: 2022 + input: + people: + person1: + military_retirement_pay: 0 + csrs_retirement_pay: 0 + tax_units: + tax_unit: + members: [person1] + filing_status: SINGLE + adjusted_gross_income: 40_000 + tax_unit_taxable_social_security: 1_000 + households: + household: + members: [person1] + state_code: VT + output: + vt_retirement_income_exemption_eligible: True # Fully qualified + +- name: 2021, use social security, filing jointly with federal agi between 60,000 and 70,000 + period: 2021 + input: + people: + person1: + military_retirement_pay: 0 + csrs_retirement_pay: 0 + person2: + military_retirement_pay: 0 + csrs_retirement_pay: 0 + tax_units: + tax_unit: + members: [person1,person2] + filing_status: JOINT + adjusted_gross_income: 65_000 + tax_unit_taxable_social_security: 1_000 + households: + household: + members: [person1,person2] + state_code: VT + output: + vt_retirement_income_exemption_eligible: True # Partial qualified 1000*0.50 + +- name: 2022, use social security, not filing jointly with federal agi between 50,000 and 60,000 + period: 2022 + input: + people: + person1: + military_retirement_pay: 0 + csrs_retirement_pay: 0 + tax_units: + tax_unit: + members: [person1] + filing_status: SINGLE + adjusted_gross_income: 57_500 + tax_unit_taxable_social_security: 1_000 + households: + household: + members: [person1] + state_code: VT + output: + vt_retirement_income_exemption_eligible: True # Partial qualified 1000*0.25 + +- name: 2022, use military retirement system, not filing jointly with federal agi less than 50,000 + period: 2022 + input: + people: + person1: + military_retirement_pay: 1_000 + csrs_retirement_pay: 0 + tax_units: + tax_unit: + members: [person1] + filing_status: SINGLE + adjusted_gross_income: 40_000 + tax_unit_taxable_social_security: 0 + households: + household: + members: [person1] + state_code: VT + output: + vt_retirement_income_exemption_eligible: True # Fully qualified + +- name: 2021, use CSRS, filing jointly with federal agi between 60,000 and 70,000 + period: 2021 + input: + people: + person1: + military_retirement_pay: 0 + csrs_retirement_pay: 500 + person2: + military_retirement_pay: 0 + csrs_retirement_pay: 500 + tax_units: + tax_unit: + members: [person1,person2] + filing_status: JOINT + adjusted_gross_income: 65_000 + tax_unit_taxable_social_security: 0 + households: + household: + members: [person1,person2] + state_code: VT + output: + vt_retirement_income_exemption_eligible: True # Partial qualified 1000*0.50 + +- name: 2022, use military retirement system, have csrs retirement pay, not filing jointly with federal agi less than 50,000 + period: 2022 + input: + people: + person1: + military_retirement_pay: 1_000 + csrs_retirement_pay: 500 + tax_units: + tax_unit: + members: [person1] + filing_status: SINGLE + adjusted_gross_income: 40_000 + tax_unit_taxable_social_security: 0 + households: + household: + members: [person1] + state_code: VT + output: + vt_retirement_income_exemption_eligible: True # Fully qualified diff --git a/fiscalsim_us/tests/policy/baseline/gov/states/vt/agi/vt_capital_gains_exclusion.yaml b/fiscalsim_us/tests/policy/baseline/gov/states/vt/tax/income/agi/vt_capital_gains_exclusion.yaml similarity index 82% rename from fiscalsim_us/tests/policy/baseline/gov/states/vt/agi/vt_capital_gains_exclusion.yaml rename to fiscalsim_us/tests/policy/baseline/gov/states/vt/tax/income/agi/vt_capital_gains_exclusion.yaml index cfb9d7b85..6e92a9342 100644 --- a/fiscalsim_us/tests/policy/baseline/gov/states/vt/agi/vt_capital_gains_exclusion.yaml +++ b/fiscalsim_us/tests/policy/baseline/gov/states/vt/tax/income/agi/vt_capital_gains_exclusion.yaml @@ -47,3 +47,14 @@ vt_percentage_capital_gains_exclusion: 5_040 output: vt_capital_gains_exclusion: 5_000 # min(5040,5000) = 5000 + +- name: Adjusted net capital gain is reduced by the dividend income + period: 2022 + input: + state_code: VT + adjusted_net_capital_gain: 6_000 + taxable_income: 12_600 + vt_percentage_capital_gains_exclusion: 1_000 + qualified_dividend_income: 4_000 + output: + vt_capital_gains_exclusion: 2_000 diff --git a/fiscalsim_us/tests/policy/baseline/gov/states/vt/agi/vt_percentage_capital_gains_exclusion.yaml b/fiscalsim_us/tests/policy/baseline/gov/states/vt/tax/income/agi/vt_percentage_capital_gains_exclusion.yaml similarity index 78% rename from fiscalsim_us/tests/policy/baseline/gov/states/vt/agi/vt_percentage_capital_gains_exclusion.yaml rename to fiscalsim_us/tests/policy/baseline/gov/states/vt/tax/income/agi/vt_percentage_capital_gains_exclusion.yaml index d8a6d1340..3ef8fefaf 100644 --- a/fiscalsim_us/tests/policy/baseline/gov/states/vt/agi/vt_percentage_capital_gains_exclusion.yaml +++ b/fiscalsim_us/tests/policy/baseline/gov/states/vt/tax/income/agi/vt_percentage_capital_gains_exclusion.yaml @@ -29,3 +29,12 @@ adjusted_net_capital_gain: 900_000 output: vt_percentage_capital_gains_exclusion: 350_000 + +- name: Adjusted net capital reduced by dividend income + period: 2022 + input: + state_code: VT + adjusted_net_capital_gain: 900_000 + qualified_dividend_income: 1_000_000 + output: + vt_percentage_capital_gains_exclusion: 0 diff --git a/fiscalsim_us/tests/policy/baseline/gov/states/vt/tax/income/credits/cdcc/vt_cdcc.yaml b/fiscalsim_us/tests/policy/baseline/gov/states/vt/tax/income/credits/cdcc/vt_cdcc.yaml new file mode 100644 index 000000000..fc525b6e5 --- /dev/null +++ b/fiscalsim_us/tests/policy/baseline/gov/states/vt/tax/income/credits/cdcc/vt_cdcc.yaml @@ -0,0 +1,15 @@ +- name: Vermont CDCC + period: 2022 + input: + capped_cdcc: 1_000 + state_code: VT + output: + vt_cdcc: 720 + +- name: Vermont CDCC + period: 2022 + input: + capped_cdcc: 2_000 + state_code: VT + output: + vt_cdcc: 1440 diff --git a/fiscalsim_us/tests/policy/baseline/gov/states/vt/tax/income/credits/cdcc/vt_low_income_cdcc.yaml b/fiscalsim_us/tests/policy/baseline/gov/states/vt/tax/income/credits/cdcc/vt_low_income_cdcc.yaml new file mode 100644 index 000000000..13e7850f5 --- /dev/null +++ b/fiscalsim_us/tests/policy/baseline/gov/states/vt/tax/income/credits/cdcc/vt_low_income_cdcc.yaml @@ -0,0 +1,26 @@ +- name: Vermont low-income CDCC unit test 1 + period: 2021 + input: + state_code: VT + capped_cdcc: 1_000 + vt_low_income_cdcc_eligible: false + output: + vt_low_income_cdcc: 0 + +- name: Vermont low-income CDCC unit test 2 + period: 2021 + input: + state_code: VT + capped_cdcc: 1_000 + vt_low_income_cdcc_eligible: true + output: + vt_low_income_cdcc: 500 + +- name: Vermont low-income CDCC unit test 3 + period: 2020 + input: + state_code: VT + capped_cdcc: 1_000 + vt_low_income_cdcc_eligible: true + output: + vt_low_income_cdcc: 500 diff --git a/fiscalsim_us/tests/policy/baseline/gov/states/vt/tax/income/credits/cdcc/vt_low_income_cdcc_eligible.yaml b/fiscalsim_us/tests/policy/baseline/gov/states/vt/tax/income/credits/cdcc/vt_low_income_cdcc_eligible.yaml new file mode 100644 index 000000000..2bd8ce741 --- /dev/null +++ b/fiscalsim_us/tests/policy/baseline/gov/states/vt/tax/income/credits/cdcc/vt_low_income_cdcc_eligible.yaml @@ -0,0 +1,38 @@ +- name: Vermont low-income CDCC single filer not eligible + period: 2021 + input: + state_code: VT + adjusted_gross_income: 30_001 + filing_status: SINGLE + output: + vt_low_income_cdcc_eligible: false + +- name: Vermont low-income CDCC single filer eligible + period: 2021 + input: + state_code: VT + adjusted_gross_income: 30_000 + filing_status: SINGLE + output: + vt_low_income_cdcc_eligible: true + +- name: Vermont low-income CDCC joint filer not eligible + period: 2021 + input: + state_code: VT + adjusted_gross_income: 40_001 + filing_status: JOINT + output: + vt_low_income_cdcc_eligible: false + +- name: Vermont low-income CDCC joint filer eligible + period: 2021 + input: + state_code: VT + adjusted_gross_income: 40_000 + filing_status: JOINT + output: + vt_low_income_cdcc_eligible: true + + + diff --git a/fiscalsim_us/tests/policy/baseline/gov/states/vt/tax/income/credits/rent/vt_renter_credit.yaml b/fiscalsim_us/tests/policy/baseline/gov/states/vt/tax/income/credits/rent/vt_renter_credit.yaml new file mode 100644 index 000000000..217880ce0 --- /dev/null +++ b/fiscalsim_us/tests/policy/baseline/gov/states/vt/tax/income/credits/rent/vt_renter_credit.yaml @@ -0,0 +1,91 @@ +- name: test 1, no subsidized + period: 2022 + input: + vt_renter_credit_income: 24_500 + county: ADDISON_COUNTY_VT + tax_unit_size: 2 + rent_is_shared_with_another_tax_unit: false + housing_assistance: 0 + rent: 1_000 + state_code: VT + output: + vt_renter_credit: 1_161 + +- name: test 2, have subsidized + period: 2022 + input: + vt_renter_credit_income: 24_500 + county: ADDISON_COUNTY_VT + tax_unit_size: 2 + rent_is_shared_with_another_tax_unit: false + housing_assistance: 50 + rent: 5_000 + state_code: VT + output: + vt_renter_credit: 433 + +- name: test 3, have subsidized, share rent + period: 2022 + input: + vt_renter_credit_income: 24_500 + county: ADDISON_COUNTY_VT + tax_unit_size: 2 + rent_is_shared_with_another_tax_unit: true + housing_assistance: 50 + rent: 5_000 + state_code: VT + output: + vt_renter_credit: 217 + +- name: test 4, income higher than partial credit limit. + period: 2022 + input: + vt_renter_credit_income: 40_000 + county: ADDISON_COUNTY_VT + tax_unit_size: 2 + rent_is_shared_with_another_tax_unit: false + housing_assistance: 0 + rent: 0 + state_code: VT + output: + vt_renter_credit: 0 + +- name: test 5, income lower than full credit limit. + period: 2022 + input: + vt_renter_credit_income: 5_000 + county: ADDISON_COUNTY_VT + tax_unit_size: 2 + rent_is_shared_with_another_tax_unit: false + housing_assistance: 0 + rent: 0 + state_code: VT + output: + vt_renter_credit: 1_340 + +- name: test 6 no subsidized + period: 2022 + input: + vt_renter_credit_income: 24_500 + county: BENNINGTON_COUNTY_VT + tax_unit_size: 2 + rent_is_shared_with_another_tax_unit: false + housing_assistance: 0 + rent: 1_000 + state_code: VT + output: + vt_renter_credit: 874 + +- name: test 7 test for 0 situations in formula + period: 2022 + input: + vt_renter_credit_income: 24_500 + county: BENNINGTON_COUNTY_VT + tax_unit_size: 2 + rent_is_shared_with_another_tax_unit: false + housing_assistance: 0 + rent: 1_000 + state_code: VT + output: + vt_renter_credit: 874 + diff --git a/fiscalsim_us/tests/policy/baseline/gov/states/vt/tax/income/credits/rent/vt_renter_credit_countable_tax_exempt_ss.yaml b/fiscalsim_us/tests/policy/baseline/gov/states/vt/tax/income/credits/rent/vt_renter_credit_countable_tax_exempt_ss.yaml new file mode 100644 index 000000000..bfe89b138 --- /dev/null +++ b/fiscalsim_us/tests/policy/baseline/gov/states/vt/tax/income/credits/rent/vt_renter_credit_countable_tax_exempt_ss.yaml @@ -0,0 +1,15 @@ +- name: Test 1 + period: 2022 + input: + tax_exempt_social_security: 100 + state_code: VT + output: + vt_renter_credit_countable_tax_exempt_ss: 75 + +- name: Test 2 + period: 2022 + input: + tax_exempt_social_security: 0 + state_code: VT + output: + vt_renter_credit_countable_tax_exempt_ss: 0 diff --git a/fiscalsim_us/tests/policy/baseline/gov/states/vt/tax/income/credits/rent/vt_renter_credit_integration.yaml b/fiscalsim_us/tests/policy/baseline/gov/states/vt/tax/income/credits/rent/vt_renter_credit_integration.yaml new file mode 100644 index 000000000..b66b0c4dd --- /dev/null +++ b/fiscalsim_us/tests/policy/baseline/gov/states/vt/tax/income/credits/rent/vt_renter_credit_integration.yaml @@ -0,0 +1,70 @@ +- name: integration test 1 + period: 2022 + input: + people: + person1: + is_tax_unit_head: true + age: 40 + employment_income: 20_000 + rent: 8_000 + social_security: 300 + tax_exempt_interest_income: 500 + person2: + is_tax_unit_spouse: true + age: 38 + employment_income: 10_000 + rent: 4_000 + social_security: 200 + tax_exempt_interest_income: 500 + person3: + is_tax_unit_dependent: true + tax_units: + tax_unit: + members: [person1, person2, person3] + rent_is_shared_with_another_tax_unit: false + households: + household: + members: [person1, person2, person3] + county: ADDISON_COUNTY_VT + state_code: VT + output: + tax_unit_social_security: 500 + tax_unit_taxable_social_security: 0 + vt_renter_credit_income: 31_375 + vt_renter_credit: 1_097 + +- name: integration test 2 + period: 2022 + input: + people: + person1: + is_tax_unit_head: true + age: 40 + employment_income: 20_000 + rent: 8_000 + social_security: 3_000 + tax_exempt_interest_income: 500 + person2: + is_tax_unit_spouse: true + age: 38 + employment_income: 10_000 + rent: 4_000 + social_security: 2_000 + tax_exempt_interest_income: 500 + person3: + is_tax_unit_dependent: true + tax_units: + tax_unit: + members: [person1, person2, person3] + rent_is_shared_with_another_tax_unit: false + households: + household: + members: [person1, person2, person3] + county: ADDISON_COUNTY_VT + state_code: VT + output: + tax_unit_social_security: 5_000 + tax_unit_taxable_social_security: 750 + vt_renter_credit_income: 34_937.5 + vt_renter_credit: 734 + diff --git a/fiscalsim_us/tests/policy/baseline/gov/states/vt/tax/income/credits/vt_charitable_contributions_credit.yaml b/fiscalsim_us/tests/policy/baseline/gov/states/vt/tax/income/credits/vt_charitable_contributions_credit.yaml new file mode 100644 index 000000000..22a94dd66 --- /dev/null +++ b/fiscalsim_us/tests/policy/baseline/gov/states/vt/tax/income/credits/vt_charitable_contributions_credit.yaml @@ -0,0 +1,17 @@ +- name: Filer has 1,000 of total charitable donations + period: 2021 + input: + charitable_cash_donations: 500 + charitable_non_cash_donations: 500 + state_code: VT + output: + vt_charitable_contribution_credit: 50 + +- name: Filer has 30,000 of total charitable donations, capped at $1,000 + period: 2022 + input: + charitable_cash_donations: 20_000 + charitable_non_cash_donations: 10_000 + state_code: VT + output: + vt_charitable_contribution_credit: 1_000 diff --git a/fiscalsim_us/tests/policy/baseline/gov/states/vt/tax/income/credits/vt_ctc.yaml b/fiscalsim_us/tests/policy/baseline/gov/states/vt/tax/income/credits/vt_ctc.yaml new file mode 100644 index 000000000..16f934f91 --- /dev/null +++ b/fiscalsim_us/tests/policy/baseline/gov/states/vt/tax/income/credits/vt_ctc.yaml @@ -0,0 +1,55 @@ +- name: Five qualifying children. + period: 2023 + input: + people: + parent: + age: 30 + child1: + age: 10 #disqualified + child2: + age: 5 + child3: + age: 4 + child4: + age: 3 + child5: + age: 2 + child6: + age: 0 + households: + household: + members: [parent, child1, child2, child3, child4, child5, child6] + state_code: VT + tax_units: + tax_unit: + members: [parent, child1, child2, child3, child4, child5, child6] + adjusted_gross_income: 1_000 + output: + vt_ctc: 5_000 + +- name: Fully phases out at $175,000. 1000-20*(175000-125000)/1000 = 0 + period: 2023 + input: + state_code: VT + age: 5 + adjusted_gross_income: 175_000 + output: + vt_ctc: 0 + +- name: Check we're not creating a negative value. + period: 2023 + input: + state_code: VT + age: 5 + adjusted_gross_income: 200_000 + output: + vt_ctc: 0 + +- name: Halfway phased out at $150,000. 1000-20*(150000-125000)/1000 = 500 + period: 2023 + input: + state_code: VT + age: 5 + adjusted_gross_income: 150_000 + output: + vt_ctc: 500 diff --git a/fiscalsim_us/tests/policy/baseline/gov/states/vt/tax/income/credits/vt_elderly_or_disabled_credit.yaml b/fiscalsim_us/tests/policy/baseline/gov/states/vt/tax/income/credits/vt_elderly_or_disabled_credit.yaml new file mode 100644 index 000000000..e246df678 --- /dev/null +++ b/fiscalsim_us/tests/policy/baseline/gov/states/vt/tax/income/credits/vt_elderly_or_disabled_credit.yaml @@ -0,0 +1,7 @@ +- name: Vermont elderly or disabled credit amount + period: 2021 + input: + elderly_disabled_credit: 1_000 + state_code: VT + output: + vt_elderly_or_disabled_credit: 240 # 1000*0.24 diff --git a/fiscalsim_us/tests/policy/baseline/gov/states/vt/tax/income/exemptions/vt_personal_exemptions.yaml b/fiscalsim_us/tests/policy/baseline/gov/states/vt/tax/income/exemptions/vt_personal_exemptions.yaml index 1daf93067..cf8221ee3 100644 --- a/fiscalsim_us/tests/policy/baseline/gov/states/vt/tax/income/exemptions/vt_personal_exemptions.yaml +++ b/fiscalsim_us/tests/policy/baseline/gov/states/vt/tax/income/exemptions/vt_personal_exemptions.yaml @@ -2,8 +2,8 @@ period: 2022 input: filing_status: JOINT - tax_unit_dependent_elsewhere: true - tax_unit_spouse_dependent_elsewhere: true + head_is_dependent_elsewhere: true + spouse_is_dependent_elsewhere: true tax_unit_count_dependents: 0 state_code: VT output: @@ -13,8 +13,8 @@ period: 2022 input: filing_status: JOINT - tax_unit_dependent_elsewhere: true - tax_unit_spouse_dependent_elsewhere: true + head_is_dependent_elsewhere: true + spouse_is_dependent_elsewhere: true tax_unit_count_dependents: 2 state_code: VT output: @@ -24,8 +24,8 @@ period: 2022 input: filing_status: JOINT - tax_unit_dependent_elsewhere: true - tax_unit_spouse_dependent_elsewhere: false + head_is_dependent_elsewhere: true + spouse_is_dependent_elsewhere: false tax_unit_count_dependents: 0 state_code: VT output: @@ -35,8 +35,8 @@ period: 2022 input: filing_status: JOINT - tax_unit_dependent_elsewhere: true - tax_unit_spouse_dependent_elsewhere: false + head_is_dependent_elsewhere: true + spouse_is_dependent_elsewhere: false tax_unit_count_dependents: 2 state_code: VT output: @@ -46,8 +46,8 @@ period: 2022 input: filing_status: JOINT - tax_unit_dependent_elsewhere: false - tax_unit_spouse_dependent_elsewhere: false + head_is_dependent_elsewhere: false + spouse_is_dependent_elsewhere: false tax_unit_count_dependents: 0 state_code: VT output: @@ -57,8 +57,8 @@ period: 2022 input: filing_status: JOINT - tax_unit_dependent_elsewhere: false - tax_unit_spouse_dependent_elsewhere: false + head_is_dependent_elsewhere: false + spouse_is_dependent_elsewhere: false tax_unit_count_dependents: 2 state_code: VT output: @@ -68,7 +68,7 @@ period: 2022 input: filing_status: SINGLE - tax_unit_dependent_elsewhere: true + head_is_dependent_elsewhere: true tax_unit_count_dependents: 0 state_code: VT output: @@ -78,7 +78,7 @@ period: 2022 input: filing_status: SINGLE - tax_unit_dependent_elsewhere: true + head_is_dependent_elsewhere: true tax_unit_count_dependents: 2 state_code: VT output: @@ -88,7 +88,7 @@ period: 2022 input: filing_status: SINGLE - tax_unit_dependent_elsewhere: false + head_is_dependent_elsewhere: false tax_unit_count_dependents: 0 state_code: VT output: @@ -98,7 +98,7 @@ period: 2022 input: filing_status: SINGLE - tax_unit_dependent_elsewhere: false + head_is_dependent_elsewhere: false tax_unit_count_dependents: 2 state_code: VT output: @@ -108,7 +108,7 @@ period: 2022 input: filing_status: SINGLE - tax_unit_dependent_elsewhere: false + head_is_dependent_elsewhere: false tax_unit_count_dependents: 0 state_code: NY output: @@ -118,7 +118,7 @@ period: 2022 input: filing_status: HEAD_OF_HOUSEHOLD - tax_unit_dependent_elsewhere: false + head_is_dependent_elsewhere: false tax_unit_count_dependents: 2 state_code: VT output: @@ -128,7 +128,7 @@ period: 2021 input: filing_status: HEAD_OF_HOUSEHOLD - tax_unit_dependent_elsewhere: false + head_is_dependent_elsewhere: false tax_unit_count_dependents: 2 state_code: VT output: @@ -138,7 +138,7 @@ period: 2021 input: filing_status: HEAD_OF_HOUSEHOLD - tax_unit_dependent_elsewhere: false + head_is_dependent_elsewhere: false tax_unit_count_dependents: 2 state_code: VT output: diff --git a/fiscalsim_us/tests/policy/baseline/gov/states/vt/tax/income/vt_amt.yaml b/fiscalsim_us/tests/policy/baseline/gov/states/vt/tax/income/vt_amt.yaml new file mode 100644 index 000000000..59a670582 --- /dev/null +++ b/fiscalsim_us/tests/policy/baseline/gov/states/vt/tax/income/vt_amt.yaml @@ -0,0 +1,17 @@ +- name: Tax filer with federal agi of $200,000 and interest on U.S. government obligations of $1,000. + period: 2022 + input: + adjusted_gross_income: 200_000 + us_govt_interest: 1_000 + state_code: VT + output: + vt_amt: 5_000 + +- name: Tax filer with federal agi of $100,000 and interest on U.S. government obligations of $1,000. + period: 2022 + input: + adjusted_gross_income: 100_000 + us_govt_interest: 1_000 + state_code: VT + output: + vt_amt: 0 diff --git a/fiscalsim_us/tests/policy/baseline/gov/states/vt/tax/income/vt_eitc.yaml b/fiscalsim_us/tests/policy/baseline/gov/states/vt/tax/income/vt_eitc.yaml index dc843abab..747b7686e 100644 --- a/fiscalsim_us/tests/policy/baseline/gov/states/vt/tax/income/vt_eitc.yaml +++ b/fiscalsim_us/tests/policy/baseline/gov/states/vt/tax/income/vt_eitc.yaml @@ -1,7 +1,7 @@ - name: $0 federal EITC period: 2021 input: - earned_income_tax_credit: 0 + eitc: 0 state_code: VT output: vt_eitc: 0 @@ -9,7 +9,7 @@ - name: $1000 federal EITC period: 2022 input: - earned_income_tax_credit: 1_000 + eitc: 1_000 state_code: VT output: vt_eitc: 380 @@ -17,7 +17,7 @@ - name: $2000 federal EITC period: 2021 input: - earned_income_tax_credit: 2_000 + eitc: 2_000 state_code: VT output: vt_eitc: 720 diff --git a/fiscalsim_us/tests/policy/baseline/gov/states/vt/tax/income/vt_income_tax_before_non_refundable_credits.yaml b/fiscalsim_us/tests/policy/baseline/gov/states/vt/tax/income/vt_income_tax_before_non_refundable_credits.yaml index 79781748d..158b4fee5 100644 --- a/fiscalsim_us/tests/policy/baseline/gov/states/vt/tax/income/vt_income_tax_before_non_refundable_credits.yaml +++ b/fiscalsim_us/tests/policy/baseline/gov/states/vt/tax/income/vt_income_tax_before_non_refundable_credits.yaml @@ -1,131 +1,17 @@ -- name: 1 Single filer, taxable income is $250K in 2021. - period: 2021 - input: - vt_taxable_income: 250_000 - filing_status: SINGLE - state_code: VT - output: - # .0335*40950 + .066*(99200-40950) + .076*(206950-99200) + .0875*(250000-206950) = 17172.20 - vt_income_tax_before_non_refundable_credits: 17_172.20 - -- name: 2 Joint filer, taxable income is $300K in 2021. - period: 2021 - input: - vt_taxable_income: 300_000 - filing_status: JOINT - state_code: VT - output: - # .0335*68400 + .066*(165350-68400) + .076*(251950-165350) + .0875*(300000-251950) = 19476.074 - vt_income_tax_before_non_refundable_credits: 19_476.074 - -- name: 3 Head of household filer, taxable income is $250K in 2021. - period: 2021 - input: - vt_taxable_income: 250_000 - filing_status: HEAD_OF_HOUSEHOLD - state_code: VT - output: - # .0335*54850 + .066*(141700-54850) + .076*(229450-141700) + .0875*(250000-229450) = 16036.7 - vt_income_tax_before_non_refundable_credits: 16_036.70 - -- name: 4 Widow filer, taxable income is $300K in 2021. - period: 2021 - input: - vt_taxable_income: 300_000 - filing_status: SURVIVING_SPOUSE - state_code: VT - output: - # .0335*68400 + .066*(165350-68400) + .076*(251950-165350) + .0875*(300000-251950) = 19476.074 - vt_income_tax_before_non_refundable_credits: 19_476.074 - -- name: 5 Separate filer, taxable income is $150K in 2021. - period: 2021 - absolute_error_margin: 1 - input: - vt_taxable_income: 150_000 - filing_status: SEPARATE - state_code: VT - output: - # .0335*34200 + .066*(82675-34200) + .076*(125975-82675) + .0875*(150000-125975) = 9738.037 - vt_income_tax_before_non_refundable_credits: 9_738.037 - -- name: 6 Single filer, taxable income is $20K in 2022. - period: 2022 - input: - vt_taxable_income: 20_000 - filing_status: SINGLE - state_code: VT - output: - # .0335*20000 = 670 - vt_income_tax_before_non_refundable_credits: 670 - -- name: 7 Single filer, taxable income is $50K in 2022. - period: 2022 - input: - vt_taxable_income: 50_000 - filing_status: SINGLE - state_code: VT - output: - # .0335*42150 + .066*(50000-42150) = 1930.125 - vt_income_tax_before_non_refundable_credits: 1_930.125 - -- name: 8 Single filer, taxable income is $150K in 2022. - period: 2022 - input: - vt_taxable_income: 150_000 - filing_status: SINGLE - state_code: VT - output: - # .0335*42150 + .066*(102200-42150) + .076*(150000-102200) = 9008.125 - vt_income_tax_before_non_refundable_credits: 9_008.125 - -- name: 9 Single filer, taxable income is $250K in 2022. - period: 2022 - input: - vt_taxable_income: 250_000 - filing_status: SINGLE - state_code: VT - output: - # .0335*42150 + .066*(102200-42150) + .076*(213150-102200) + .0875*(250000-213150) = 17031.9 - vt_income_tax_before_non_refundable_credits: 17_031.9 - -- name: 10 Joint filer, taxable income is $300K in 2022. - period: 2022 - input: - vt_taxable_income: 300_000 - filing_status: JOINT - state_code: VT - output: - # .0335*70450 + .066*(170300-70450) + .076*(259500-170300) + .0875*(300000-259500) = 19273.125 - vt_income_tax_before_non_refundable_credits: 19_273.125 - -- name: 11 Head of household filer, taxable income is $250K in 2022. - period: 2022 - input: - vt_taxable_income: 250_000 - filing_status: HEAD_OF_HOUSEHOLD - state_code: VT - output: - # .0335*56500 + .066*(145950-56500) + .076*(236350-145950) + .0875*(250000-236350) = 15861.225 - vt_income_tax_before_non_refundable_credits: 15_861.225 - -- name: 12 Widow filer, taxable income is $300K in 2022. +- name: Tax filer with normal income tax of $9,500 and AMT of $0. period: 2022 input: - vt_taxable_income: 300_000 - filing_status: SURVIVING_SPOUSE + vt_amt: 0 + vt_normal_income_tax: 9_500 state_code: VT output: - # .0335*70450 + .066*(170300-70450) + .076*(259500-170300) + .0875*(300000-259500) = 19273.125 - vt_income_tax_before_non_refundable_credits: 19_273.125 + vt_income_tax_before_non_refundable_credits: 9_500 -- name: 13 Separate filer, taxable income is $150K in 2022. +- name: Tax filer with normal income tax of $9,636 and AMT of $10,000. period: 2022 - absolute_error_margin: 1 input: - vt_taxable_income: 150_000 - filing_status: SEPARATE + vt_amt: 10_000 + vt_normal_income_tax: 9_636 state_code: VT output: - # .0335*35255 + .066*(85150-35255) + .076*(129750-85150) + .0875*(150000-129750) = 9636.5625 - vt_income_tax_before_non_refundable_credits: 9_636.5625 + vt_income_tax_before_non_refundable_credits: 10_000 diff --git a/fiscalsim_us/tests/policy/baseline/gov/states/vt/tax/income/vt_normal_income_tax.yaml b/fiscalsim_us/tests/policy/baseline/gov/states/vt/tax/income/vt_normal_income_tax.yaml new file mode 100644 index 000000000..bc4d4ec1d --- /dev/null +++ b/fiscalsim_us/tests/policy/baseline/gov/states/vt/tax/income/vt_normal_income_tax.yaml @@ -0,0 +1,141 @@ +- name: 1 Single filer, taxable income is $250K in 2021. + period: 2021 + input: + vt_taxable_income: 250_000 + filing_status: SINGLE + state_code: VT + output: + # .0335*40950 + .066*(99200-40950) + .076*(206950-99200) + .0875*(250000-206950) = 17172.20 + vt_normal_income_tax: 17_172.20 + +- name: 2 Joint filer, taxable income is $300K in 2021. + period: 2021 + input: + vt_taxable_income: 300_000 + filing_status: JOINT + state_code: VT + output: + # .0335*68400 + .066*(165350-68400) + .076*(251950-165350) + .0875*(300000-251950) = 19476.074 + vt_normal_income_tax: 19_476.074 + +- name: 3 Head of household filer, taxable income is $250K in 2021. + period: 2021 + input: + vt_taxable_income: 250_000 + filing_status: HEAD_OF_HOUSEHOLD + state_code: VT + output: + # .0335*54850 + .066*(141700-54850) + .076*(229450-141700) + .0875*(250000-229450) = 16036.7 + vt_normal_income_tax: 16_036.70 + +- name: 4 Widow filer, taxable income is $300K in 2021. + period: 2021 + input: + vt_taxable_income: 300_000 + filing_status: SURVIVING_SPOUSE + state_code: VT + output: + # .0335*68400 + .066*(165350-68400) + .076*(251950-165350) + .0875*(300000-251950) = 19476.074 + vt_normal_income_tax: 19_476.074 + +- name: 5 Separate filer, taxable income is $150K in 2021. + period: 2021 + absolute_error_margin: 1 + input: + vt_taxable_income: 150_000 + filing_status: SEPARATE + state_code: VT + output: + # .0335*34200 + .066*(82675-34200) + .076*(125975-82675) + .0875*(150000-125975) = 9738.037 + vt_normal_income_tax: 9_738.037 + +- name: 6 Single filer, taxable income is $20K in 2022. + period: 2022 + input: + vt_taxable_income: 20_000 + filing_status: SINGLE + state_code: VT + output: + # .0335*20000 = 670 + vt_normal_income_tax: 670 + +- name: 7 Single filer, taxable income is $50K in 2022. + period: 2022 + input: + vt_taxable_income: 50_000 + filing_status: SINGLE + state_code: VT + output: + # .0335*42150 + .066*(50000-42150) = 1930.125 + vt_normal_income_tax: 1_930.125 + +- name: 8 Single filer, taxable income is $150K in 2022. + period: 2022 + input: + vt_taxable_income: 150_000 + filing_status: SINGLE + state_code: VT + output: + # .0335*42150 + .066*(102200-42150) + .076*(150000-102200) = 9008.125 + vt_normal_income_tax: 9_008.125 + +- name: 9 Single filer, taxable income is $250K in 2022. + period: 2022 + input: + vt_taxable_income: 250_000 + filing_status: SINGLE + state_code: VT + output: + # .0335*42150 + .066*(102200-42150) + .076*(213150-102200) + .0875*(250000-213150) = 17031.9 + vt_normal_income_tax: 17_031.9 + +- name: 10 Joint filer, taxable income is $300K in 2022. + period: 2022 + input: + vt_taxable_income: 300_000 + filing_status: JOINT + state_code: VT + output: + # .0335*70450 + .066*(170300-70450) + .076*(259500-170300) + .0875*(300000-259500) = 19273.125 + vt_normal_income_tax: 19_273.125 + +- name: 11 Head of household filer, taxable income is $250K in 2022. + period: 2022 + input: + vt_taxable_income: 250_000 + filing_status: HEAD_OF_HOUSEHOLD + state_code: VT + output: + # .0335*56500 + .066*(145950-56500) + .076*(236350-145950) + .0875*(250000-236350) = 15861.225 + vt_normal_income_tax: 15_861.225 + +- name: 12 Widow filer, taxable income is $300K in 2022. + period: 2022 + input: + vt_taxable_income: 300_000 + filing_status: SURVIVING_SPOUSE + state_code: VT + output: + # .0335*70450 + .066*(170300-70450) + .076*(259500-170300) + .0875*(300000-259500) = 19273.125 + vt_normal_income_tax: 19_273.125 + +- name: 13 Separate filer, taxable income is $150K in 2022. + period: 2022 + absolute_error_margin: 1 + input: + vt_taxable_income: 150_000 + filing_status: SEPARATE + state_code: VT + output: + # .0335*35255 + .066*(85150-35255) + .076*(129750-85150) + .0875*(150000-129750) = 9636.5625 + vt_normal_income_tax: 9_636.5625 + +- name: 14 Joint filer, taxable income is $75.25K in 2023. + period: 2023 + input: + vt_taxable_income: 75_250 + filing_status: JOINT + state_code: VT + output: + # .0335*75000 + .0335*(75250-75000) + vt_normal_income_tax: 2_520.875 diff --git a/fiscalsim_us/tests/policy/baseline/gov/states/vt/tax/income/vt_withheld_income_tax.yaml b/fiscalsim_us/tests/policy/baseline/gov/states/vt/tax/income/vt_withheld_income_tax.yaml new file mode 100644 index 000000000..57642f5a5 --- /dev/null +++ b/fiscalsim_us/tests/policy/baseline/gov/states/vt/tax/income/vt_withheld_income_tax.yaml @@ -0,0 +1,29 @@ +- name: Person with income over the personal exemption amount + period: 2022 + absolute_error_margin: 0.01 + input: + adjusted_gross_income_person: 10_000 + filing_status: JOINT + state_code: VT + output: + vt_withheld_income_tax: 117.25 + +- name: Changing the filing status should not change the output + period: 2022 + absolute_error_margin: 0.01 + input: + adjusted_gross_income_person: 10_000 + filing_status: SURVIVING_SPOUSE + state_code: VT + output: + vt_withheld_income_tax: 117.25 + +- name: Capped at 0 + period: 2022 + absolute_error_margin: 0.01 + input: + adjusted_gross_income_person: 6_400 + filing_status: SURVIVING_SPOUSE + state_code: VT + output: + vt_withheld_income_tax: 0 diff --git a/fiscalsim_us/tools/default_uprating.py b/fiscalsim_us/tools/default_uprating.py new file mode 100644 index 000000000..a69922ba8 --- /dev/null +++ b/fiscalsim_us/tools/default_uprating.py @@ -0,0 +1,117 @@ +INPUT_VARIABLES = [ + "tanf_reported", + "spm_unit_payroll_tax_reported", + "veterans_benefits", + "other_credits", + "tax_exempt_ira_distributions", + "ssi_reported", + "tax_exempt_403b_distributions", + "taxable_ira_distributions", + "w2_wages_from_qualified_business", + "roth_ira_contributions", + "social_security_retirement", + "domestic_production_ald", + "social_security_disability", + "health_savings_account_ald", + "investment_income_elected_form_4952", + "medical_out_of_pocket_expenses", + "unemployment_compensation", + "self_employment_income", + "interest_deduction", + "energy_efficient_home_improvement_credit", + "spm_unit_net_income_reported", + "roth_401k_contributions", + "spm_unit_federal_tax_reported", + "spm_unit_pre_subsidy_childcare_expenses", + "taxable_pension_income", + "keogh_distributions", + "social_security_survivors", + "amt_foreign_tax_credit", + "cdcc_relevant_expenses", + "social_security", + "workers_compensation", + "self_employed_health_insurance_ald", + "state_and_local_sales_or_income_tax", + "child_support_received", + "child_support_expense", + "tax_exempt_sep_distributions", + "salt_refund_income", + "spm_unit_total_income_reported", + "alimony_income", + "prior_year_minimum_tax_credit", + "self_employed_pension_contributions", + "taxable_unemployment_compensation", + "employment_income_last_year", + "taxable_sep_distributions", + "spm_unit_capped_housing_subsidy_reported", + "miscellaneous_income", + "short_term_capital_gains", + "qualified_dividend_income", + "tax_exempt_private_pension_income", + "rental_income", + "student_loan_interest", + "tax_exempt_interest_income", + "general_business_credit", + "early_withdrawal_penalty", + "spm_unit_weight", + "casualty_loss", + "partnership_s_corp_income", + "taxable_interest_income", + "spm_unit_spm_threshold", + "non_sch_d_capital_gains", + "spm_unit_state_tax_reported", + "spm_unit_capped_work_childcare_expenses", + "farm_income", + "taxable_403b_distributions", + "qualified_tuition_expenses", + "disability_benefits", + "taxable_401k_distributions", + "farm_rent_income", + "unreported_payroll_tax", + "traditional_ira_contributions", + "tax_exempt_401k_distributions", + "alimony_expense", + "taxable_private_pension_income", + "charitable_cash_donations", + "spm_unit_broadband_subsidy_reported", + "free_school_meals_reported", + "non_qualified_dividend_income", + "excess_withheld_payroll_tax", + "health_insurance_premiums", + "spm_unit_energy_subsidy_reported", + "real_estate_taxes", + "estate_income", + "misc_deduction", + "self_employed_pension_contribution_ald", + "spm_unit_wic_reported", + "unrecaptured_section_1250_gain", + "snap_reported", + "long_term_capital_gains_on_collectibles", + "self_employment_income_last_year", + "tax_exempt_pension_income", + "employment_income", + "foreign_tax_credit", + "pre_tax_contributions", + "social_security_dependents", + "american_opportunity_credit", + "charitable_non_cash_donations", + "recapture_of_investment_credit", + "savers_credit", + "educator_expense", + "long_term_capital_gains", + "traditional_401k_contributions", + "strike_benefits", + "other_medical_expenses", + "over_the_counter_health_expenses", + "medicare_part_b_premiums", + "health_insurance_premiums_without_medicare_part_b", +] + + +def add_default_uprating(system): + for variable in system.variables.values(): + if (variable.name in INPUT_VARIABLES) and (variable.uprating is None): + variable.uprating = ( + "calibration.gov.cbo.income_by_source.adjusted_gross_income" + ) + system.variables[variable.name] = variable diff --git a/fiscalsim_us/tools/general.py b/fiscalsim_us/tools/general.py index 9e291c8d0..4d89dd56d 100644 --- a/fiscalsim_us/tools/general.py +++ b/fiscalsim_us/tools/general.py @@ -51,29 +51,6 @@ def variable_alias(name: str, variable_cls: type) -> type: ) -def taxcalc_read_only_variable(name: str, variable_cls: type) -> type: - """ - Copy a variable class and return a new class for a tax-calc variable. - """ - class_dict = dict(variable_cls.__dict__) - class_dict["formula"] = lambda entity, period: entity( - variable_cls.__name__, period - ) - return type( - name, - (Variable,), - dict( - value_type=variable_cls.value_type, - entity=variable_cls.entity, - label=variable_cls.label + " (Tax-Calculator)", - definition_period=variable_cls.definition_period, - unit=variable_cls.unit, - documentation=variable_cls.documentation - + " This is a read-only copy variable, matching the corresponding variable in the open-source US federal tax model Tax-Calculator.", - ), - ) - - def sum_among_non_dependents(variable: str) -> Callable: def formula(tax_unit, period, parameters): return tax_unit_non_dep_sum(variable, tax_unit, period) diff --git a/fiscalsim_us/tools/taxcalc/convert_taxcalc_parameter.py b/fiscalsim_us/tools/taxcalc/convert_taxcalc_parameter.py deleted file mode 100644 index c205c1e9f..000000000 --- a/fiscalsim_us/tools/taxcalc/convert_taxcalc_parameter.py +++ /dev/null @@ -1,60 +0,0 @@ -import json -import yaml -import argparse - -TAXCALC_PARAM_FILE = ( - "/home/nikhil/pslmodels/Tax-Calculator/taxcalc/policy_current_law.json" -) - -MARS_map = { - "single": "SINGLE", - "mjoint": "JOINT", - "mseparate": "SEPARATE", - "headhh": "HEAD_OF_HOUSEHOLD", - "widow": "SURVIVING_SPOUSE", -} - - -def year_to_date(year: int) -> str: - return f"{year}-01-01" - - -def convert_param(param: dict) -> dict: - result = dict(description=param["title"], values={}) - for value in param["value"]: - date = year_to_date(value["year"]) - val = float(value["value"]) - if "MARS" not in value: - result["values"][date] = val - else: - mars = MARS_map[value["MARS"]] - if mars not in result: - result[mars] = dict(values={date: val}) - else: - result[mars]["values"][date] = val - result["metadata"] = dict( - unit=USD, - ) - if result["values"] == {}: - del result["values"] - return yaml.dump(result, sort_keys=False).replace("'", "") - - -if __name__ == "__main__": - parser = argparse.ArgumentParser( - description="Utility to convert tax-calculator parameters to FiscalSim parameters." - ) - parser.add_argument( - "--tc-params", - default=TAXCALC_PARAM_FILE, - help="Path to the tax-calculator policy_current_law.json file.", - ) - parser.add_argument( - "parameter", help="The name of the parameter to convert" - ) - args = parser.parse_args() - - with open(args.tc_params, "r") as f: - tc = json.load(f) - - print(convert_param(tc[args.parameter])) diff --git a/fiscalsim_us/tools/taxcalc/generate_taxcalc_unit_tests.py b/fiscalsim_us/tools/taxcalc/generate_taxcalc_unit_tests.py deleted file mode 100644 index 829031ba8..000000000 --- a/fiscalsim_us/tools/taxcalc/generate_taxcalc_unit_tests.py +++ /dev/null @@ -1,397 +0,0 @@ -from time import time -from pathlib import Path -from typing import Callable, Dict, List, Tuple -from taxcalc import Calculator, Policy, Records -from fiscalsim_us.tools.taxcalc.calcfunctions import * -from fiscalsim_us.system import CountryTaxBenefitSystem -import pandas as pd -import ast -import yaml -import argparse - -from fiscalsim_us.variables.gov.irs.income.sources import nu06 - -np.random.seed(int(time())) -variables = CountryTaxBenefitSystem().variables - - -def extract_return(fname): - for x in ast.walk( - ast.parse(open(Path(__file__).parent / "calcfunctions.py").read()) - ): - if not (isinstance(x, ast.FunctionDef)): - continue - if not (x.name == fname): - continue - for b in x.body: - if isinstance(b, ast.Return): - if isinstance(b.value, ast.Name): - yield b.value.id - elif isinstance(b.value, ast.Tuple): - yield from [element.id for element in b.value.elts] - - -def get_inputs(fn: Callable) -> Tuple: - """ - Return the inputs of a function. - """ - return fn.__code__.co_varnames[: fn.__code__.co_argcount] - - -def get_outputs(fn: Callable) -> Tuple: - """ - Return the outputs of a function. - """ - return list(extract_return(fn.__name__)) - - -policy = Policy() -TEST_YEAR = 2019 -DEBUG_MODE = True -TAXCALC_CPS_CSV_FILE = "~/PSLmodels/Tax-Calculator/cps.csv" -cps = pd.read_csv(TAXCALC_CPS_CSV_FILE, nrows=1 if DEBUG_MODE else None) -policy.set_year(TEST_YEAR) - - -def safe_cast(x, t): - try: - return t(x) - except: - return x - - -def generate_input_values( - inputs: List[str], output_names: List[str], overrides: Dict[str, float] -) -> Dict[str, float]: - """Fetches the parameter value if the input is a parameter, - otherwise returns the value from a random CPS tax unit. - - Args: - inputs (List[str]): The input names. - output_names (List[str]): The names of the outputs. - overrides (Dict[str, float]): A dictionary of overrides. - - Returns: - Dict[str, float]: The generated values. - """ - if not DEBUG_MODE: - try: - cps_tax_unit = cps[(cps[output_names] != 0).min(axis=1)].sample( - n=1 - ) - except: - cps_tax_unit = cps.sample(n=1) - result = {} - for input_ in inputs: - try: - result[input_] = getattr(policy, input_)[0] - except AttributeError: - if input_ in overrides: - result[input_] = overrides[input_] - elif DEBUG_MODE: - result[input_] = 0 - else: - result[input_] = int(cps_tax_unit[input_].values[0]) - return result - - -def generate_unit_test( - fn_name: str, input_overrides: Dict[str, float] = None -) -> Tuple[dict, Callable[[dict], Tuple[float]], Tuple[float]]: - """Generates a unit test for a calcfunctions function. - - Args: - fn_name (str): The name of the taxcalc function. - input_overrides (Dict[str, float]): A dictionary of overrides. - - Returns: - Tuple[dict, Callable[[dict, Tuple[float]]], Tuple[float]]: Keyword args, the function taking them and the expected result. - """ - if input_overrides is None: - input_overrides = {} - fn = CALCFUNCTIONS[fn_name] - - def fn_(inputs): - result = fn(**inputs) - if not isinstance(result, tuple): - result = (result,) - return result - - kwargs = generate_input_values( - get_inputs(fn), get_outputs(fn), overrides=input_overrides - ) - - return kwargs, fn_, list(map(lambda x: round(float(x), 2), fn_(kwargs))) - - -def attempt_generate_all_nonzero_unit_test( - fn_name: str, -) -> Tuple[dict, Callable[[dict], Tuple[float]], Tuple[float]]: - for _ in range(1_000): - kwargs, fn_, result = generate_unit_test(fn_name) - # This function often needs manually modifying depending on the function - if all([i != 0 for i in result]): - return kwargs, fn_, result - - -def generate_yaml_test_dict(fn_name: str, name: str = None): - kwargs, _, result = attempt_generate_all_nonzero_unit_test(fn_name) - outputs = get_outputs(CALCFUNCTIONS[fn_name]) - input_dict = { - rename_variable(x): safe_cast( - translate_value(x, y), lambda x: round(float(x), 2) - ) - for x, y in kwargs.items() - if x in cps and x not in outputs - } - structured_input_dict = convert_tc_structure_to_fiscalsim(input_dict) - test_dict = dict( - name=f"Unit test for {fn_name}" if name is None else name, - period=2019, - absolute_error_margin=0.01, - input=structured_input_dict, - output=get_test_output(structured_input_dict, fn_name), - ) - return test_dict - - -def convert_tc_structure_to_fiscalsim(input_dict: dict) -> dict: - new_input_dict = {"people": {}, "tax_units": {"tax_unit": {"members": []}}} - if "nu06" in input_dict and input_dict["nu06"] > 0: - for i in range(int(input_dict.get("nu06"))): - name = f"child_under_6_{i+1}" - new_input_dict["people"][name] = { - "age": 5, - "is_tax_unit_dependent": True, - } - new_input_dict["tax_units"]["tax_unit"]["members"].append(name) - if ( - "n24" in input_dict - and input_dict["n24"] - (input_dict.get("nu06") or 0) > 0 - ): - for i in range( - int(input_dict.get("n24") - (input_dict.get("nu06") or 0)) - ): - name = f"child_under_17_over_6_{i+1}" - new_input_dict["people"][name] = { - "age": 16, - "is_tax_unit_dependent": True, - } - new_input_dict["tax_units"]["tax_unit"]["members"].append(name) - if "xtot" in input_dict and "num" in input_dict and "n24" in input_dict: - num_adult_dependents = ( - input_dict["xtot"] - input_dict["num"] - input_dict["n24"] - ) - for i in range(int(num_adult_dependents)): - name = f"adult_dependent_{i+1}" - new_input_dict["people"][name] = { - "age": 18, - "is_tax_unit_dependent": True, - } - new_input_dict["tax_units"]["tax_unit"]["members"].append(name) - if "num" in input_dict: - if input_dict["num"] > 0: - name = "primary" - new_input_dict["people"]["primary"] = { - "age": 18, - "is_tax_unit_dependent": False, - } - new_input_dict["tax_units"]["tax_unit"]["members"].append(name) - if input_dict["num"] > 1: - name = "spouse" - new_input_dict["people"]["spouse"] = { - "age": 18, - "is_tax_unit_dependent": False, - } - new_input_dict["tax_units"]["tax_unit"]["members"].append(name) - for key in input_dict: - if key[-2:] == "_s" and "spouse" in input_dict["people"]: - new_input_dict["people"]["spouse"][key:-1] = input_dict[key] - elif key[-2:] == "_p" and "primary" in input_dict["people"]: - new_input_dict["people"]["primary"][key[:-1]] = input_dict[key] - elif variables[key].entity.key == "person": - new_input_dict["people"]["primary"][key] = input_dict[key] - elif variables[key].entity.key == "tax_unit": - new_input_dict["tax_units"]["tax_unit"][key] = input_dict[key] - return new_input_dict - - -def convert_fiscalsim_structure_to_tc(input_dict: dict) -> dict: - new_input_dict = {} - members = input_dict["tax_units"]["tax_unit"]["members"] - new_input_dict["nu06"] = len( - list( - filter(lambda name: input_dict["people"][name]["age"] < 6, members) - ) - ) - new_input_dict["n24"] = len( - list( - filter( - lambda name: input_dict["people"][name]["age"] < 17, members - ) - ) - ) - new_input_dict["n1820"] = len( - list( - filter( - lambda name: input_dict["people"][name]["age"] >= 18 - and input_dict["people"][name]["age"] < 21, - members, - ) - ) - ) - new_input_dict["n21"] = len( - list( - filter( - lambda name: input_dict["people"][name]["age"] >= 21, members - ) - ) - ) - new_input_dict["XTOT"] = len( - list( - filter( - lambda name: input_dict["people"][name][ - "is_tax_unit_dependent" - ], - members, - ) - ) - ) - new_input_dict["num"] = ( - 2 if input_dict["tax_units"]["tax_unit"]["mars"] == "JOINT" else 1 - ) - for person in input_dict["people"]: - for variable in input_dict["people"][person]: - if person == "primary": - new_input_dict[variable + "_p"] = input_dict["people"][person][ - variable - ] - if person == "spouse": - new_input_dict[variable + "_s"] = input_dict["people"][person][ - variable - ] - for variable in input_dict["tax_units"]["tax_unit"]: - if variable != "members": - new_input_dict[variable] = input_dict["tax_units"]["tax_unit"][ - variable - ] - return new_input_dict - - -def generate_yaml_tests(fn_name: str, n: int = 10) -> str: - return yaml.dump( - [ - generate_yaml_test_dict( - fn_name, - name=f"{fn_name} unit test {i + 1} (from generate_taxcalc_unit_tests.py)", - ) - for i in range(n) - ], - sort_keys=False, - ) - - -RENAMES = { - "MARS": "mars", - "XTOT": "xtot", -} - -VALUE_RENAMES = { - "MARS": { - 1: "SINGLE", - 2: "JOINT", - 3: "SEPARATE", - 4: "HEAD_OF_HOUSEHOLD", - 5: "SURVIVING_SPOUSE", - } -} - -INVERSE_RENAMES = {y: x for x, y in RENAMES.items()} - -INVERSE_VALUE_RENAMES = { - x: {b: a for a, b in y.items()} for x, y in VALUE_RENAMES.items() -} - - -def rename_variable(x): - return RENAMES.get(x, x) - - -def translate_value(name, x): - return VALUE_RENAMES[name].get(x, x) if name in VALUE_RENAMES else x - - -def inverse_rename_variable(x): - return INVERSE_RENAMES.get(x, x) - - -def inverse_translate_value(name, x): - return ( - INVERSE_VALUE_RENAMES[name].get(x, x) - if name in INVERSE_VALUE_RENAMES - else x - ) - - -def get_test_output(test: dict, fn_name: str) -> dict: - input_overrides = { - inverse_rename_variable(x): inverse_translate_value( - inverse_rename_variable(x), y - ) - for x, y in convert_fiscalsim_structure_to_tc(test).items() - } - kwargs, fn_, _ = generate_unit_test(fn_name, input_overrides) - result = { - x: float(y) - for x, y in zip(get_outputs(CALCFUNCTIONS[fn_name]), fn_(kwargs)) - } - return result - - -def debug_test_yaml(fn_name: str, file: str, i: int = 0): - with open(file, "r") as f: - tests = yaml.safe_load(f) - test = tests[i - 1] - input_overrides = { - inverse_rename_variable(x): inverse_translate_value( - inverse_rename_variable(x), y - ) - for x, y in convert_fiscalsim_structure_to_tc(test["input"]).items() - } - kwargs, fn_, _ = generate_unit_test(fn_name, input_overrides) - fn_(kwargs) - - -def generate_taxcalc_cps_df(): - r = Records.cps_constructor() - p = Policy(year=TEST_YEAR) - c = Calculator(policy=p, records=r) - df = c.dataframe(None, all_vars=True) - df.to_csv("cps.csv") - - -if __name__ == "__main__": - if not DEBUG_MODE: - parser = argparse.ArgumentParser( - description="Generate unit tests for calcfunctions." - ) - parser.add_argument( - "function", - type=str, - help="The name of the function to generate unit tests for.", - ) - parser.add_argument( - "--n", - type=int, - default=10, - help="The number of unit tests to generate.", - ) - args = parser.parse_args() - print(generate_yaml_tests(args.function, args.n)) - else: - # An example of debugging a unit test - debug_test_yaml( - "ChildDepTaxCredit", - "fiscalsim_us/tests/policy/baseline/calcfunctions/childdeptaxcredit.yaml", - 1, - ) diff --git a/fiscalsim_us/tools/taxcalc/generate_taxcalc_variable.py b/fiscalsim_us/tools/taxcalc/generate_taxcalc_variable.py deleted file mode 100644 index b42cb2f06..000000000 --- a/fiscalsim_us/tools/taxcalc/generate_taxcalc_variable.py +++ /dev/null @@ -1,98 +0,0 @@ -from matplotlib import units -import yaml -from fiscalsim_us.model_api import * -from policyengine_core.taxbenefitsystems import TaxBenefitSystem - - -def import_yaml(): - import yaml - - try: - from yaml import CLoader as Loader - except ImportError: - from yaml import SafeLoader as Loader - return yaml, Loader - - -yaml, Loader = import_yaml() - - -def create_taxcalc_alias(name: str, variable: Type[Variable]): - """Creates a new FiscalSim variable with the same metadata as the given variable, but the Tax-Calculator name. - The variable will be cast to tax unit level if it is not already. - - Args: - name (str): The name of the equivalent Tax-Calculator variable. - variable (Type[Variable]): The FiscalSim US variable class. - """ - - full_name = "taxcalc_" + name - - def formula(tax_unit, period, parameters): - if variable.entity == TaxUnit: - return tax_unit(variable.__name__, period) - elif variable.entity == Person: - return add(tax_unit, period, [variable.__name__]) - elif variable.entity == Household: - return tax_unit.value_from_first_person( - tax_unit.members.household(variable.__name__, period) - ) - else: - raise ValueError("Unsupported entity: {}".format(variable.entity)) - - original_documentation = ( - variable.documentation if hasattr(variable, "documentation") else None - ) - addition_to_documentation = ( - "This is a read-only variable alias returning the FiscalSim US variable " - + name - + " under the (prefixed) name for its equivalent in Tax-Calculator, " - + full_name - + "." - ) - documentation = ( - original_documentation + ". " + addition_to_documentation - if original_documentation - else addition_to_documentation - ) - - return type( - full_name, - (Variable,), - dict( - entity=TaxUnit, - definition_period=YEAR, - label=( - variable.label + " (Tax-Calculator)" - if hasattr(variable, "label") - else name + "(Tax-Calculator)" - ), - unit=variable.unit if hasattr(variable, "unit") else None, - documentation=documentation, - value_type=variable.value_type, - formula=formula, - module_name="tools.taxcalc", - ), - ) - - -def add_taxcalc_variable_aliases(system: TaxBenefitSystem): - """Adds aliases for all Tax-Calculator variables to the given TaxBenefitSystem. - - Args: - system (TaxBenefitSystem): The TaxBenefitSystem to which the aliases should be added. - """ - - with open(Path(__file__).parent / "variable_mapping.yaml") as f: - variable_map = yaml.load(f, Loader=Loader) - - for fiscalsim_us_name, taxcalc_name in variable_map.items(): - try: - system.add_variable( - create_taxcalc_alias( - taxcalc_name, type(system.variables[fiscalsim_us_name]) - ) - ) - except Exception as e: - print("Error adding alias for {}: {}".format(fiscalsim_us_name, e)) - raise e diff --git a/fiscalsim_us/tools/taxcalc/variable_mapping.yaml b/fiscalsim_us/tools/taxcalc/variable_mapping.yaml deleted file mode 100644 index e3eafe644..000000000 --- a/fiscalsim_us/tools/taxcalc/variable_mapping.yaml +++ /dev/null @@ -1,71 +0,0 @@ -employment_income: e00200 -pension_contributions: pencon -taxable_interest_income: e00300 -tax_exempt_interest_income: e00400 -dividend_income: e00600 -qualified_dividend_income: e00650 -salt_refund_income: e00700 -alimony_income: e00800 -self_employment_income: e00900 -non_sch_d_capital_gains: e01100 -other_net_gain: e01200 -pension_income: e01500 -taxable_pension_income: e01700 -rental_income: e02000 -farm_income: e02100 -unemployment_compensation: e02300 -social_security: e02400 -ira_contributions: e03150 -student_loan_interest: e03210 -educator_expense: e03220 -tuition_and_fees: e03230 -domestic_production_ald: e03240 -self_employed_health_insurance_ald: e03270 -health_savings_account_ald: e03290 -sep_simple_qualified_plan_contributions: e03300 -early_withdrawal_penalty: e03400 -alimony_expense: e03500 -recapture_of_investment_credit: e09700 -unreported_payroll_tax: e09800 -qualified_retirement_penalty: e09900 -excess_payroll_tax_withheld: e11200 -medical_expense: e17500 -real_estate_taxes: e18500 -interest_expense: e19200 -charitable_cash_donations: e19800 -charitable_non_cash_donations: e20100 -casualty_loss: e20400 -misc_deduction: g20500 -unrecaptured_section_1250_gain: e24515 -capital_gains_28_percent_rate_gain: e24518 -partnership_s_corp_income: e26270 -farm_rent_income: e27200 -tax_unit_childcare_expenses: e32800 -investment_income_form_4952: e58990 -foreign_tax_credit: e62900 -qualified_tuition_expenses: e87530 -count_cdcc_eligible: f2441 -amt_form_completed: f6251 -state_fips: fips -short_term_capital_gains: p22250 -long_term_capital_gains: p23250 -tax_unit_weight: s006 -business_is_qualified: pt_sstb_income -w2_wages_from_qualified_business: pt_binc_w2_wages -unadjusted_basis_qualified_property: pt_ubia_property -hasqdivltcg: hasqdivltcg -medical_expense_deduction: c17000 -salt_deduction: c18300 -interest_deduction: c19200 -charitable_deduction: c19700 -casualty_loss_deduction: c20500 -taxable_income_deductions_if_itemizing: c04470 -tax_unit_dependent_elsewhere: dsi -separate_filer_itemizes: midr -amt_non_agi_income: cmbtp -income_tax_before_refundable_credits: c09200 -net_investment_income_tax: niit -# We disaggregate the Residential Energy Credit into: -# a) Residential Clean Energy Credit, and -# b) Energy Efficient Home Improvement Credit -# residential_energy_credit: e07260 diff --git a/fiscalsim_us/variables/gov/states/ky/tax/income/credits/family_size_credit/ky_family_size_tax_credit.py b/fiscalsim_us/variables/gov/states/ky/tax/income/credits/family_size_credit/ky_family_size_tax_credit.py index f45c0c708..09da697f1 100644 --- a/fiscalsim_us/variables/gov/states/ky/tax/income/credits/family_size_credit/ky_family_size_tax_credit.py +++ b/fiscalsim_us/variables/gov/states/ky/tax/income/credits/family_size_credit/ky_family_size_tax_credit.py @@ -15,6 +15,9 @@ class ky_family_size_tax_credit(Variable): def formula(tax_unit, period, parameters): rate = tax_unit("ky_family_size_tax_credit_rate", period) income = tax_unit( - "ky_income_tax_before_non_refundable_credits", period + "ky_income_tax_before_non_refundable_credits_unit", period ) - return rate * income + personal_credits = tax_unit("ky_personal_tax_credits", period) + reduced_income = max_(income - personal_credits, 0) + + return rate * reduced_income diff --git a/fiscalsim_us/variables/gov/states/ky/tax/income/credits/family_size_credit/ky_modified_agi.py b/fiscalsim_us/variables/gov/states/ky/tax/income/credits/family_size_credit/ky_modified_agi.py index 167f54023..ebf7bfdfe 100644 --- a/fiscalsim_us/variables/gov/states/ky/tax/income/credits/family_size_credit/ky_modified_agi.py +++ b/fiscalsim_us/variables/gov/states/ky/tax/income/credits/family_size_credit/ky_modified_agi.py @@ -18,8 +18,7 @@ def formula(tax_unit, period, parameters): "form_4972_lumpsum_distributions", period ) total_fed_agi = fed_agi + tax_exempt_lump_sum - - ky_agi = tax_unit("ky_agi", period) + ky_agi = add(tax_unit, period, ["ky_agi"]) # Lump sum distributions which are not included in federal AGI are added to the state AGI total_ky_agi = ky_agi + tax_exempt_lump_sum return max_(total_fed_agi, total_ky_agi) diff --git a/fiscalsim_us/variables/gov/states/ky/tax/income/ky_non_refundable_credits.py b/fiscalsim_us/variables/gov/states/ky/tax/income/credits/ky_non_refundable_credits.py similarity index 100% rename from fiscalsim_us/variables/gov/states/ky/tax/income/ky_non_refundable_credits.py rename to fiscalsim_us/variables/gov/states/ky/tax/income/credits/ky_non_refundable_credits.py diff --git a/fiscalsim_us/variables/gov/states/ky/tax/income/credits/personal/ky_aged_personal_tax_credits.py b/fiscalsim_us/variables/gov/states/ky/tax/income/credits/personal/ky_aged_personal_tax_credits.py new file mode 100644 index 000000000..eacee10c0 --- /dev/null +++ b/fiscalsim_us/variables/gov/states/ky/tax/income/credits/personal/ky_aged_personal_tax_credits.py @@ -0,0 +1,18 @@ +from fiscalsim_us.model_api import * + + +class ky_aged_personal_tax_credits(Variable): + value_type = float + entity = Person + unit = USD + label = "Kentucky personal tax credits aged amount" + documentation = "https://apps.legislature.ky.gov/law/statutes/statute.aspx?id=53500#page=3" + definition_period = YEAR + defined_for = StateCode.KY + + def formula(person, period, parameters): + p = parameters(period).gov.states.ky.tax.income.credits.personal.amount + age = person("age", period) + age_credit_amount = p.aged.calc(age) + head_or_spouse = person("is_tax_unit_head_or_spouse", period) + return head_or_spouse * age_credit_amount diff --git a/fiscalsim_us/variables/gov/states/ky/tax/income/credits/personal/ky_blind_personal_tax_credits.py b/fiscalsim_us/variables/gov/states/ky/tax/income/credits/personal/ky_blind_personal_tax_credits.py new file mode 100644 index 000000000..ee8963112 --- /dev/null +++ b/fiscalsim_us/variables/gov/states/ky/tax/income/credits/personal/ky_blind_personal_tax_credits.py @@ -0,0 +1,17 @@ +from fiscalsim_us.model_api import * + + +class ky_blind_personal_tax_credits(Variable): + value_type = float + entity = Person + unit = USD + label = "Kentucky personal tax credits blind amount" + documentation = "https://apps.legislature.ky.gov/law/statutes/statute.aspx?id=53500#page=3" + definition_period = YEAR + defined_for = StateCode.KY + + def formula(person, period, parameters): + p = parameters(period).gov.states.ky.tax.income.credits.personal.amount + is_blind = person("is_blind", period) + head_or_spouse = person("is_tax_unit_head_or_spouse", period) + return head_or_spouse * is_blind * p.blind diff --git a/fiscalsim_us/variables/gov/states/ky/tax/income/credits/personal/ky_military_personal_tax_credits.py b/fiscalsim_us/variables/gov/states/ky/tax/income/credits/personal/ky_military_personal_tax_credits.py new file mode 100644 index 000000000..df990c5da --- /dev/null +++ b/fiscalsim_us/variables/gov/states/ky/tax/income/credits/personal/ky_military_personal_tax_credits.py @@ -0,0 +1,17 @@ +from fiscalsim_us.model_api import * + + +class ky_military_personal_tax_credits(Variable): + value_type = float + entity = Person + label = "Kentucky personal tax credits military service amount" + reference = "https://apps.legislature.ky.gov/law/statutes/statute.aspx?id=53500#page=3" # (3) (a) + unit = USD + definition_period = YEAR + defined_for = StateCode.KY + + def formula(person, period, parameters): + p = parameters(period).gov.states.ky.tax.income.credits.personal.amount + has_military_income = person("military_service_income", period) > 0 + head_or_spouse = person("is_tax_unit_head_or_spouse", period) + return head_or_spouse * has_military_income * p.military diff --git a/fiscalsim_us/variables/gov/states/ky/tax/income/credits/personal/ky_personal_tax_credits.py b/fiscalsim_us/variables/gov/states/ky/tax/income/credits/personal/ky_personal_tax_credits.py new file mode 100644 index 000000000..c0e06a574 --- /dev/null +++ b/fiscalsim_us/variables/gov/states/ky/tax/income/credits/personal/ky_personal_tax_credits.py @@ -0,0 +1,26 @@ +from fiscalsim_us.model_api import * + + +class ky_personal_tax_credits(Variable): + value_type = float + entity = TaxUnit + label = "Kentucky personal tax credits combined" + unit = USD + reference = "https://apps.legislature.ky.gov/law/statutes/statute.aspx?id=53500#page=3" # (3) (a) + definition_period = YEAR + defined_for = StateCode.KY + + def formula(tax_unit, period, parameters): + ky_files_separately = tax_unit("ky_files_separately", period) + person = tax_unit.members + ky_personal_tax_credits_indiv = person( + "ky_personal_tax_credits_indiv", period + ) + ky_personal_tax_credits_joint = person( + "ky_personal_tax_credits_joint", period + ) + return where( + ky_files_separately, + tax_unit.sum(ky_personal_tax_credits_indiv), + tax_unit.sum(ky_personal_tax_credits_joint), + ) diff --git a/fiscalsim_us/variables/gov/states/ky/tax/income/credits/personal/ky_personal_tax_credits_indiv.py b/fiscalsim_us/variables/gov/states/ky/tax/income/credits/personal/ky_personal_tax_credits_indiv.py new file mode 100644 index 000000000..99052bc80 --- /dev/null +++ b/fiscalsim_us/variables/gov/states/ky/tax/income/credits/personal/ky_personal_tax_credits_indiv.py @@ -0,0 +1,19 @@ +from fiscalsim_us.model_api import * + + +class ky_personal_tax_credits_indiv(Variable): + value_type = float + entity = Person + label = ( + "Kentucky personal tax credits when married couples file separately" + ) + unit = USD + reference = "https://apps.legislature.ky.gov/law/statutes/statute.aspx?id=53500#page=3" # (3) (a) + definition_period = YEAR + defined_for = StateCode.KY + + adds = [ + "ky_blind_personal_tax_credits", + "ky_aged_personal_tax_credits", + "ky_military_personal_tax_credits", + ] diff --git a/fiscalsim_us/variables/gov/states/ky/tax/income/credits/personal/ky_personal_tax_credits_joint.py b/fiscalsim_us/variables/gov/states/ky/tax/income/credits/personal/ky_personal_tax_credits_joint.py new file mode 100644 index 000000000..2c1de9ac1 --- /dev/null +++ b/fiscalsim_us/variables/gov/states/ky/tax/income/credits/personal/ky_personal_tax_credits_joint.py @@ -0,0 +1,23 @@ +from fiscalsim_us.model_api import * + + +class ky_personal_tax_credits_joint(Variable): + value_type = float + entity = Person + label = "Kentucky personal tax credits when married couples file jointly" + unit = USD + reference = "https://apps.legislature.ky.gov/law/statutes/statute.aspx?id=53500#page=3" # (3) (a) + definition_period = YEAR + defined_for = StateCode.KY + + def formula(person, period, parameters): + total_credits = add( + person.tax_unit, + period, + [ + "ky_blind_personal_tax_credits", + "ky_aged_personal_tax_credits", + "ky_military_personal_tax_credits", + ], + ) + return total_credits * person("is_tax_unit_head", period) diff --git a/fiscalsim_us/variables/gov/states/ky/tax/income/credits/tuition_tax/ky_tuition_tax_credit.py b/fiscalsim_us/variables/gov/states/ky/tax/income/credits/tuition_tax/ky_tuition_tax_credit.py new file mode 100644 index 000000000..a8fc25321 --- /dev/null +++ b/fiscalsim_us/variables/gov/states/ky/tax/income/credits/tuition_tax/ky_tuition_tax_credit.py @@ -0,0 +1,22 @@ +from fiscalsim_us.model_api import * + + +class ky_tuition_tax_credit(Variable): + value_type = float + entity = TaxUnit + label = "Kentucky tuition tax credit" # Form 8863-K + unit = USD + definition_period = YEAR + defined_for = "ky_tuition_tax_credit_eligible" + + def formula(tax_unit, period, parameters): + # We do not currently model the limitation to undergraduate studies at Kentucky institutions. + tentative_tax_credit = add( + tax_unit, + period, + ["american_opportunity_credit", "lifetime_learning_credit"], + ) + rate = parameters( + period + ).gov.states.ky.tax.income.credits.tuition_tax.rate + return tentative_tax_credit * rate diff --git a/fiscalsim_us/variables/gov/states/ky/tax/income/credits/tuition_tax/ky_tuition_tax_credit_eligible.py b/fiscalsim_us/variables/gov/states/ky/tax/income/credits/tuition_tax/ky_tuition_tax_credit_eligible.py new file mode 100644 index 000000000..2db841cab --- /dev/null +++ b/fiscalsim_us/variables/gov/states/ky/tax/income/credits/tuition_tax/ky_tuition_tax_credit_eligible.py @@ -0,0 +1,15 @@ +from fiscalsim_us.model_api import * + + +class ky_tuition_tax_credit_eligible(Variable): + value_type = float + entity = TaxUnit + label = "Eligible for the Kentucky tuition tax credit" # Form 8863-K + unit = USD + definition_period = YEAR + defined_for = StateCode.KY + + def formula(tax_unit, period, parameters): + filing_status = tax_unit("ky_filing_status", period) + # Married filing separate filers are ineligible. + return filing_status != filing_status.possible_values.SEPARATE diff --git a/fiscalsim_us/variables/gov/states/ky/tax/income/deductions/ky_deductions_indiv.py b/fiscalsim_us/variables/gov/states/ky/tax/income/deductions/ky_deductions_indiv.py new file mode 100644 index 000000000..11ed9fe4f --- /dev/null +++ b/fiscalsim_us/variables/gov/states/ky/tax/income/deductions/ky_deductions_indiv.py @@ -0,0 +1,17 @@ +from fiscalsim_us.model_api import * + + +class ky_deductions_indiv(Variable): + value_type = float + entity = Person + label = "Kentucky income deductions when married couples file separately" + unit = USD + definition_period = YEAR + reference = "https://law.justia.com/codes/kentucky/2022/chapter-141/section-141-019/" # (2)(i) + defined_for = StateCode.KY + + def formula(person, period, parameters): + itemizes = person.tax_unit("ky_tax_unit_itemizes", period) + itemized = person("ky_itemized_deductions_indiv", period) + standard = person("ky_standard_deduction_indiv", period) + return where(itemizes, itemized, standard) diff --git a/fiscalsim_us/variables/gov/states/ky/tax/income/deductions/ky_deductions_joint.py b/fiscalsim_us/variables/gov/states/ky/tax/income/deductions/ky_deductions_joint.py new file mode 100644 index 000000000..ff00ff0c9 --- /dev/null +++ b/fiscalsim_us/variables/gov/states/ky/tax/income/deductions/ky_deductions_joint.py @@ -0,0 +1,17 @@ +from fiscalsim_us.model_api import * + + +class ky_deductions_joint(Variable): + value_type = float + entity = Person + label = "Kentucky itemized deductions when married couples file jointly" + unit = USD + definition_period = YEAR + reference = "https://law.justia.com/codes/kentucky/2022/chapter-141/section-141-019/" # (2)(i) + defined_for = StateCode.KY + + def formula(person, period, parameters): + return max_( + person("ky_itemized_deductions_joint", period), + person("ky_standard_deduction_joint", period), + ) diff --git a/fiscalsim_us/variables/gov/states/ky/tax/income/deductions/ky_itemized_deduction_indiv.py b/fiscalsim_us/variables/gov/states/ky/tax/income/deductions/ky_itemized_deduction_indiv.py new file mode 100644 index 000000000..a4a11e279 --- /dev/null +++ b/fiscalsim_us/variables/gov/states/ky/tax/income/deductions/ky_itemized_deduction_indiv.py @@ -0,0 +1,27 @@ +from fiscalsim_us.model_api import * + + +class ky_itemized_deductions_indiv(Variable): + value_type = float + entity = Person + label = "Kentucky itemized deductions when married couples file separately" + unit = USD + definition_period = YEAR + reference = ( + "https://revenue.ky.gov/Forms/Form%20740%20Schedule%20A%202022.pdf" + "https://law.justia.com/codes/kentucky/2022/chapter-141/section-141-019/" # (2)(i) + ) + defined_for = StateCode.KY + + def formula(person, period, parameters): + head_or_spouse = person("is_tax_unit_head_or_spouse", period) + ky_agi = person("ky_agi", period) * head_or_spouse + ky_agi_sum = person.tax_unit.sum(ky_agi) + ky_agi_proportion = np.zeros_like(ky_agi_sum) + mask = ky_agi_sum > 0 + ky_agi_proportion[mask] = ky_agi[mask] / ky_agi_sum[mask] + itemized_deductions = person.tax_unit( + "ky_itemized_deductions_unit", period + ) + + return ky_agi_proportion * itemized_deductions diff --git a/fiscalsim_us/variables/gov/states/ky/tax/income/deductions/ky_itemized_deduction_joint.py b/fiscalsim_us/variables/gov/states/ky/tax/income/deductions/ky_itemized_deduction_joint.py new file mode 100644 index 000000000..245b7a040 --- /dev/null +++ b/fiscalsim_us/variables/gov/states/ky/tax/income/deductions/ky_itemized_deduction_joint.py @@ -0,0 +1,23 @@ +from fiscalsim_us.model_api import * + + +class ky_itemized_deductions_joint(Variable): + value_type = float + entity = Person + label = "Kentucky itemized deductions when married couples file jointly" + unit = USD + definition_period = YEAR + reference = ( + "https://revenue.ky.gov/Forms/Form%20740%20Schedule%20A%202022.pdf" + "https://law.justia.com/codes/kentucky/2022/chapter-141/section-141-019/" # (2)(i) + ) + defined_for = StateCode.KY + + def formula(person, period, parameters): + # If filing a joint return, only one standard deduction is allowed + is_head = person("is_tax_unit_head", period) + itemized_deductions = person.tax_unit( + "ky_itemized_deductions_unit", period + ) + + return is_head * itemized_deductions diff --git a/fiscalsim_us/variables/gov/states/ky/tax/income/deductions/ky_itemized_deductions_unit.py b/fiscalsim_us/variables/gov/states/ky/tax/income/deductions/ky_itemized_deductions_unit.py new file mode 100644 index 000000000..1752835ab --- /dev/null +++ b/fiscalsim_us/variables/gov/states/ky/tax/income/deductions/ky_itemized_deductions_unit.py @@ -0,0 +1,17 @@ +from fiscalsim_us.model_api import * + + +class ky_itemized_deductions_unit(Variable): + value_type = float + entity = TaxUnit + label = "Kentucky itemized deductions" + unit = USD + definition_period = YEAR + reference = ( + "https://revenue.ky.gov/Forms/Form%20740%20Schedule%20A%202022.pdf" + "https://law.justia.com/codes/kentucky/2022/chapter-141/section-141-019/" # (2)(i) + ) + defined_for = StateCode.KY + + adds = ["itemized_deductions_less_salt"] + subtracts = ["medical_expense_deduction"] diff --git a/fiscalsim_us/variables/gov/states/ky/tax/income/deductions/ky_standard_deduction.py b/fiscalsim_us/variables/gov/states/ky/tax/income/deductions/ky_standard_deduction.py deleted file mode 100644 index 6527a15e6..000000000 --- a/fiscalsim_us/variables/gov/states/ky/tax/income/deductions/ky_standard_deduction.py +++ /dev/null @@ -1,13 +0,0 @@ -from fiscalsim_us.model_api import * - - -class ky_standard_deduction(Variable): - value_type = float - entity = TaxUnit - label = "Kentucky standard deduction" - unit = USD - definition_period = YEAR - defined_for = StateCode.KY - - def formula(tax_unit, period, parameters): - return parameters(period).gov.states.ky.tax.income.deductions.standard diff --git a/fiscalsim_us/variables/gov/states/ky/tax/income/deductions/ky_standard_deduction_indiv.py b/fiscalsim_us/variables/gov/states/ky/tax/income/deductions/ky_standard_deduction_indiv.py new file mode 100644 index 000000000..41c0c2d6a --- /dev/null +++ b/fiscalsim_us/variables/gov/states/ky/tax/income/deductions/ky_standard_deduction_indiv.py @@ -0,0 +1,15 @@ +from fiscalsim_us.model_api import * + + +class ky_standard_deduction_indiv(Variable): + value_type = float + entity = Person + label = "Kentucky standard deduction when married couples file separately" + unit = USD + definition_period = YEAR + defined_for = StateCode.KY + + def formula(person, period, parameters): + head_or_spouse = person("is_tax_unit_head_or_spouse", period) + p = parameters(period).gov.states.ky.tax.income.deductions + return head_or_spouse * p.standard diff --git a/fiscalsim_us/variables/gov/states/ky/tax/income/deductions/ky_standard_deduction_joint.py b/fiscalsim_us/variables/gov/states/ky/tax/income/deductions/ky_standard_deduction_joint.py new file mode 100644 index 000000000..564be3483 --- /dev/null +++ b/fiscalsim_us/variables/gov/states/ky/tax/income/deductions/ky_standard_deduction_joint.py @@ -0,0 +1,16 @@ +from fiscalsim_us.model_api import * + + +class ky_standard_deduction_joint(Variable): + value_type = float + entity = Person + label = "Kentucky standard deduction when married couples file jointly" + unit = USD + definition_period = YEAR + defined_for = StateCode.KY + + def formula(person, period, parameters): + # If filing a joint return, only one standard deduction is allowed + is_head = person("is_tax_unit_head", period) + p = parameters(period).gov.states.ky.tax.income.deductions + return is_head * p.standard diff --git a/fiscalsim_us/variables/gov/states/ky/tax/income/deductions/ky_tax_unit_itemizes.py b/fiscalsim_us/variables/gov/states/ky/tax/income/deductions/ky_tax_unit_itemizes.py new file mode 100644 index 000000000..59fe0ea6b --- /dev/null +++ b/fiscalsim_us/variables/gov/states/ky/tax/income/deductions/ky_tax_unit_itemizes.py @@ -0,0 +1,14 @@ +from fiscalsim_us.model_api import * + + +class ky_tax_unit_itemizes(Variable): + value_type = bool + entity = TaxUnit + label = "Whether the tax unit in Kentucky itemizes the deductions when married filing separately" + definition_period = YEAR + defined_for = StateCode.KY + + def formula(tax_unit, period, parameters): + itemized_ded = add(tax_unit, period, ["ky_itemized_deductions_indiv"]) + standard_ded = add(tax_unit, period, ["ky_standard_deduction_indiv"]) + return itemized_ded > standard_ded diff --git a/fiscalsim_us/variables/gov/states/ky/tax/income/exclusions/pension_income/ky_pension_income_exclusion.py b/fiscalsim_us/variables/gov/states/ky/tax/income/exclusions/pension_income/ky_pension_income_exclusion.py new file mode 100644 index 000000000..e841fa12f --- /dev/null +++ b/fiscalsim_us/variables/gov/states/ky/tax/income/exclusions/pension_income/ky_pension_income_exclusion.py @@ -0,0 +1,44 @@ +from fiscalsim_us.model_api import * + + +class ky_pension_income_exclusion(Variable): + value_type = float + entity = Person + label = "KY Pension Income Exclusion" + definition_period = YEAR + defined_for = StateCode.KY + + def formula(person, period, parameters): + # Get the KY pension income exclusion parameter tree. + p = parameters( + period + ).gov.states.ky.tax.income.exclusions.pension_income + + # Get taxable pension and retirement income. + pension_income = person("taxable_pension_income", period) + + # Check if person is eligible for exemption. + exemption_eligible = person( + "ky_pension_income_exclusion_exemption_eligible", period + ) + + # Get the share of service credit months worked before 1998. + exemption_percentage = person( + "ky_service_credits_percentage_pre_1998", period + ) + + # Get the exempt amount, based on eligibility and share of months worked pre-1998. + exempt_amount = ( + exemption_eligible * exemption_percentage * pension_income + ) + non_exempt_amount = pension_income - exempt_amount + + # Get retirement income not already exempt. + other_income = ( + add(person, period, p.other_retirement_income_sources) + + non_exempt_amount + ) + # Apply cap (towards just other income if exemption eligible). + base = min_(other_income, p.threshold) + exemption = exemption_eligible * exempt_amount + return base + exemption diff --git a/fiscalsim_us/variables/gov/states/ky/tax/income/exclusions/pension_income/ky_pension_income_exclusion_exemption_eligible.py b/fiscalsim_us/variables/gov/states/ky/tax/income/exclusions/pension_income/ky_pension_income_exclusion_exemption_eligible.py new file mode 100644 index 000000000..e5973d04b --- /dev/null +++ b/fiscalsim_us/variables/gov/states/ky/tax/income/exclusions/pension_income/ky_pension_income_exclusion_exemption_eligible.py @@ -0,0 +1,18 @@ +from fiscalsim_us.model_api import * + + +class ky_pension_income_exclusion_exemption_eligible(Variable): + value_type = bool + entity = Person + label = "KY Pension Income Exclusion Exemption Eligible" + definition_period = YEAR + defined_for = StateCode.KY + reference = "https://revenue.ky.gov/Forms/Schedule%20P%202022.pdf" + + # Determine if person is eligible for exemption. + # True if they retired from federal or KY government or receive railroad benefits. + adds = [ + "retired_from_federal_government", + "retired_from_ky_government", + "railroad_benefits", + ] diff --git a/fiscalsim_us/variables/gov/states/ky/tax/income/exclusions/pension_income/ky_service_credit_months_post_1997.py b/fiscalsim_us/variables/gov/states/ky/tax/income/exclusions/pension_income/ky_service_credit_months_post_1997.py new file mode 100644 index 000000000..aba777772 --- /dev/null +++ b/fiscalsim_us/variables/gov/states/ky/tax/income/exclusions/pension_income/ky_service_credit_months_post_1997.py @@ -0,0 +1,9 @@ +from fiscalsim_us.model_api import * + + +class ky_service_credit_months_post_1997(Variable): + value_type = float + entity = Person + label = "Kentucky service credit months after 1997" + definition_period = YEAR + defined_for = StateCode.KY diff --git a/fiscalsim_us/variables/gov/states/ky/tax/income/exclusions/pension_income/ky_service_credit_months_pre_1998.py b/fiscalsim_us/variables/gov/states/ky/tax/income/exclusions/pension_income/ky_service_credit_months_pre_1998.py new file mode 100644 index 000000000..891e7bf96 --- /dev/null +++ b/fiscalsim_us/variables/gov/states/ky/tax/income/exclusions/pension_income/ky_service_credit_months_pre_1998.py @@ -0,0 +1,9 @@ +from fiscalsim_us.model_api import * + + +class ky_service_credit_months_pre_1998(Variable): + value_type = float + entity = Person + label = "Kentucky service credit months before 1998" + definition_period = YEAR + defined_for = StateCode.KY diff --git a/fiscalsim_us/variables/gov/states/ky/tax/income/exclusions/pension_income/ky_service_credits_percentage_pre_1998.py b/fiscalsim_us/variables/gov/states/ky/tax/income/exclusions/pension_income/ky_service_credits_percentage_pre_1998.py new file mode 100644 index 000000000..3ed4478ed --- /dev/null +++ b/fiscalsim_us/variables/gov/states/ky/tax/income/exclusions/pension_income/ky_service_credits_percentage_pre_1998.py @@ -0,0 +1,24 @@ +from fiscalsim_us.model_api import * + + +class ky_service_credits_percentage_pre_1998(Variable): + value_type = float + entity = Person + label = "Share of service credit months worked before 1998" + definition_period = YEAR + defined_for = StateCode.KY + + def formula(person, period, parameters): + pre_cutoff_months = person("ky_service_credit_months_pre_1998", period) + post_cutoff_months = person( + "ky_service_credit_months_post_1997", period + ) + + # Mask to avoid division by zero warning. + percentage_pre_1998 = np.zeros_like(pre_cutoff_months) + mask = pre_cutoff_months + post_cutoff_months > 0 + percentage_pre_1998[mask] = pre_cutoff_months[mask] / ( + pre_cutoff_months[mask] + post_cutoff_months[mask] + ) + + return percentage_pre_1998 diff --git a/fiscalsim_us/variables/gov/states/ky/tax/income/exclusions/pension_income/retired_from_ky_government.py b/fiscalsim_us/variables/gov/states/ky/tax/income/exclusions/pension_income/retired_from_ky_government.py new file mode 100644 index 000000000..4f8c4bce1 --- /dev/null +++ b/fiscalsim_us/variables/gov/states/ky/tax/income/exclusions/pension_income/retired_from_ky_government.py @@ -0,0 +1,10 @@ +from fiscalsim_us.model_api import * + + +class retired_from_ky_government(Variable): + value_type = bool + entity = Person + label = "Retired from state or local government in Kentucky" + definition_period = YEAR + defined_for = StateCode.KY + default_value = False diff --git a/fiscalsim_us/variables/gov/states/ky/tax/income/ky_additions.py b/fiscalsim_us/variables/gov/states/ky/tax/income/ky_additions.py new file mode 100644 index 000000000..6a51ed2e0 --- /dev/null +++ b/fiscalsim_us/variables/gov/states/ky/tax/income/ky_additions.py @@ -0,0 +1,17 @@ +from fiscalsim_us.model_api import * + + +class ky_additions(Variable): + value_type = float + entity = Person + label = "Kentucky additions" + unit = USD + definition_period = YEAR + reference = ( + "https://apps.legislature.ky.gov/law/statutes/statute.aspx?id=53498" + "https://revenue.ky.gov/Forms/Schedule%20M%202022.pdf#page=1" + "https://revenue.ky.gov/Forms/740%20Packet%20Instructions%205-9-23.pdf#page=23" + "https://revenue.ky.gov/Forms/Schedule%20M-2021.pdf#page=1" + "https://taxsim.nber.org/historical_state_tax_forms/KY/2021/Form%20740%20Packet%20Instructions-2021.pdf#page=27" + ) + defined_for = StateCode.KY diff --git a/fiscalsim_us/variables/gov/states/ky/tax/income/ky_agi.py b/fiscalsim_us/variables/gov/states/ky/tax/income/ky_agi.py index 45ebc04e2..7c952fbbe 100644 --- a/fiscalsim_us/variables/gov/states/ky/tax/income/ky_agi.py +++ b/fiscalsim_us/variables/gov/states/ky/tax/income/ky_agi.py @@ -3,9 +3,15 @@ class ky_agi(Variable): value_type = float - entity = TaxUnit + entity = Person label = "Kentucky adjusted gross income" unit = USD definition_period = YEAR reference = "https://revenue.ky.gov/Forms/740%20Packet%20Instructions%205-9-23.pdf#page=11" defined_for = StateCode.KY + + adds = [ + "ky_additions", + "adjusted_gross_income_person", + ] + subtracts = ["ky_subtractions"] diff --git a/fiscalsim_us/variables/gov/states/ky/tax/income/ky_filing_separately.py b/fiscalsim_us/variables/gov/states/ky/tax/income/ky_filing_separately.py new file mode 100644 index 000000000..7e1418556 --- /dev/null +++ b/fiscalsim_us/variables/gov/states/ky/tax/income/ky_filing_separately.py @@ -0,0 +1,24 @@ +from fiscalsim_us.model_api import * + + +class ky_files_separately(Variable): + value_type = bool + entity = TaxUnit + label = "Married couple file separately on the Kentucky tax return" + definition_period = YEAR + reference = "https://revenue.ky.gov/Forms/740%20Packet%20Instructions%205-9-23.pdf#page=11" + defined_for = StateCode.KY + + def formula(tax_unit, period, parameters): + itax_indiv = add( + tax_unit, + period, + ["ky_income_tax_before_non_refundable_credits_indiv"], + ) + + itax_joint = add( + tax_unit, + period, + ["ky_income_tax_before_non_refundable_credits_joint"], + ) + return itax_indiv < itax_joint diff --git a/fiscalsim_us/variables/gov/states/ky/tax/income/ky_filing_status.py b/fiscalsim_us/variables/gov/states/ky/tax/income/ky_filing_status.py new file mode 100644 index 000000000..ba366771e --- /dev/null +++ b/fiscalsim_us/variables/gov/states/ky/tax/income/ky_filing_status.py @@ -0,0 +1,37 @@ +from fiscalsim_us.model_api import * + + +class KyFilingStatus(Enum): + SINGLE = "Single" + JOINT = "Joint" + SEPARATE = "Separate" + + +class ky_filing_status(Variable): + value_type = Enum + entity = TaxUnit + possible_values = KyFilingStatus + default_value = KyFilingStatus.SINGLE + definition_period = YEAR + reference = ( + "https://codes.findlaw.com/ky/title-xi-revenue-and-taxation/ky-rev-st-sect-141-066.html", # Section (1), (c) & (d) + "https://revenue.ky.gov/Forms/740%20Packet%20Instructions%205-9-23.pdf#page=11", + ) + label = "Filing status for the tax unit in Kentucky" + defined_for = StateCode.KY + + def formula(tax_unit, period, parameters): + has_spouse = add(tax_unit, period, ["is_tax_unit_spouse"]) > 0 + person = tax_unit.members + is_separated = tax_unit.any(person("is_separated", period)) + return select( + [ + has_spouse, + is_separated, + ], + [ + KyFilingStatus.JOINT, + KyFilingStatus.SEPARATE, + ], + default=KyFilingStatus.SINGLE, + ) diff --git a/fiscalsim_us/variables/gov/states/ky/tax/income/ky_income_tax_before_non_refundable_credits.py b/fiscalsim_us/variables/gov/states/ky/tax/income/ky_income_tax_before_non_refundable_credits.py deleted file mode 100644 index 4c445927e..000000000 --- a/fiscalsim_us/variables/gov/states/ky/tax/income/ky_income_tax_before_non_refundable_credits.py +++ /dev/null @@ -1,15 +0,0 @@ -from fiscalsim_us.model_api import * - - -class ky_income_tax_before_non_refundable_credits(Variable): - value_type = float - entity = TaxUnit - label = "Kentucky income tax before non-refundable credits" - unit = USD - definition_period = YEAR - defined_for = StateCode.KY - - def formula(tax_unit, period, paramters): - income = tax_unit("ky_taxable_income", period) - rate = paramters(period).gov.states.ky.tax.income.rate - return income * rate diff --git a/fiscalsim_us/variables/gov/states/ky/tax/income/ky_income_tax_before_non_refundable_credits_indiv.py b/fiscalsim_us/variables/gov/states/ky/tax/income/ky_income_tax_before_non_refundable_credits_indiv.py new file mode 100644 index 000000000..0c88eccbe --- /dev/null +++ b/fiscalsim_us/variables/gov/states/ky/tax/income/ky_income_tax_before_non_refundable_credits_indiv.py @@ -0,0 +1,15 @@ +from fiscalsim_us.model_api import * + + +class ky_income_tax_before_non_refundable_credits_indiv(Variable): + value_type = float + entity = Person + label = "Kentucky income tax before non-refundable credits when married couples are filing separately" + unit = USD + definition_period = YEAR + defined_for = StateCode.KY + + def formula(person, period, parameters): + ky_taxable_income_indiv = person("ky_taxable_income_indiv", period) + p = parameters(period).gov.states.ky.tax.income + return ky_taxable_income_indiv * p.rate diff --git a/fiscalsim_us/variables/gov/states/ky/tax/income/ky_income_tax_before_non_refundable_credits_joint.py b/fiscalsim_us/variables/gov/states/ky/tax/income/ky_income_tax_before_non_refundable_credits_joint.py new file mode 100644 index 000000000..6a059af17 --- /dev/null +++ b/fiscalsim_us/variables/gov/states/ky/tax/income/ky_income_tax_before_non_refundable_credits_joint.py @@ -0,0 +1,15 @@ +from fiscalsim_us.model_api import * + + +class ky_income_tax_before_non_refundable_credits_joint(Variable): + value_type = float + entity = Person + label = "Kentucky income tax before non-refundable credits when married filing jointly" + unit = USD + definition_period = YEAR + defined_for = StateCode.KY + + def formula(person, period, parameters): + ky_taxable_income_joint = person("ky_taxable_income_joint", period) + p = parameters(period).gov.states.ky.tax.income + return ky_taxable_income_joint * p.rate diff --git a/fiscalsim_us/variables/gov/states/ky/tax/income/ky_income_tax_before_non_refundable_credits_unit.py b/fiscalsim_us/variables/gov/states/ky/tax/income/ky_income_tax_before_non_refundable_credits_unit.py new file mode 100644 index 000000000..8b75fa1c2 --- /dev/null +++ b/fiscalsim_us/variables/gov/states/ky/tax/income/ky_income_tax_before_non_refundable_credits_unit.py @@ -0,0 +1,25 @@ +from fiscalsim_us.model_api import * + + +class ky_income_tax_before_non_refundable_credits_unit(Variable): + value_type = float + entity = TaxUnit + label = "Kentucky income tax before non-refundable credits combined" + unit = USD + definition_period = YEAR + defined_for = StateCode.KY + + def formula(tax_unit, period, parameters): + filing_separately = tax_unit("ky_files_separately", period) + itax_indiv = add( + tax_unit, + period, + ["ky_income_tax_before_non_refundable_credits_indiv"], + ) + itax_joint = add( + tax_unit, + period, + ["ky_income_tax_before_non_refundable_credits_joint"], + ) + + return where(filing_separately, itax_indiv, itax_joint) diff --git a/fiscalsim_us/variables/gov/states/ky/tax/income/ky_income_tax_before_refundable_credits.py b/fiscalsim_us/variables/gov/states/ky/tax/income/ky_income_tax_before_refundable_credits.py index d17e6b67a..d34c5ddd3 100644 --- a/fiscalsim_us/variables/gov/states/ky/tax/income/ky_income_tax_before_refundable_credits.py +++ b/fiscalsim_us/variables/gov/states/ky/tax/income/ky_income_tax_before_refundable_credits.py @@ -11,7 +11,7 @@ class ky_income_tax_before_refundable_credits(Variable): def formula(tax_unit, period, paramters): tax_before_non_refundable = tax_unit( - "ky_income_tax_before_non_refundable_credits", period + "ky_income_tax_before_non_refundable_credits_unit", period ) non_refundable_credits = tax_unit("ky_non_refundable_credits", period) return max_(tax_before_non_refundable - non_refundable_credits, 0) diff --git a/fiscalsim_us/variables/gov/states/ky/tax/income/ky_subtractions.py b/fiscalsim_us/variables/gov/states/ky/tax/income/ky_subtractions.py new file mode 100644 index 000000000..e18d6788e --- /dev/null +++ b/fiscalsim_us/variables/gov/states/ky/tax/income/ky_subtractions.py @@ -0,0 +1,18 @@ +from fiscalsim_us.model_api import * + + +class ky_subtractions(Variable): + value_type = float + entity = Person + label = "Kentucky subtractions" + unit = USD + definition_period = YEAR + reference = ( + "https://apps.legislature.ky.gov/law/statutes/statute.aspx?id=53498" + "https://revenue.ky.gov/Forms/Schedule%20M%202022.pdf#page=1" + "https://revenue.ky.gov/Forms/740%20Packet%20Instructions%205-9-23.pdf#page=23" + "https://revenue.ky.gov/Forms/Schedule%20M-2021.pdf#page=1" + "https://taxsim.nber.org/historical_state_tax_forms/KY/2021/Form%20740%20Packet%20Instructions-2021.pdf#page=27" + ) + defined_for = StateCode.KY + adds = "gov.states.ky.tax.income.subtractions" diff --git a/fiscalsim_us/variables/gov/states/ky/tax/income/ky_taxable_income.py b/fiscalsim_us/variables/gov/states/ky/tax/income/ky_taxable_income.py deleted file mode 100644 index 4d1b06776..000000000 --- a/fiscalsim_us/variables/gov/states/ky/tax/income/ky_taxable_income.py +++ /dev/null @@ -1,10 +0,0 @@ -from fiscalsim_us.model_api import * - - -class ky_taxable_income(Variable): - value_type = float - entity = TaxUnit - label = "Kentucky taxable income" - unit = USD - definition_period = YEAR - defined_for = StateCode.KY diff --git a/fiscalsim_us/variables/gov/states/ky/tax/income/ky_taxable_income_indiv.py b/fiscalsim_us/variables/gov/states/ky/tax/income/ky_taxable_income_indiv.py new file mode 100644 index 000000000..ff0a743d3 --- /dev/null +++ b/fiscalsim_us/variables/gov/states/ky/tax/income/ky_taxable_income_indiv.py @@ -0,0 +1,17 @@ +from fiscalsim_us.model_api import * + + +class ky_taxable_income_indiv(Variable): + value_type = float + entity = Person + label = "Kentucky taxable income when married couples file separately" + unit = USD + definition_period = YEAR + defined_for = StateCode.KY + reference = "https://revenue.ky.gov/Forms/740%20Packet%20Instructions%205-9-23.pdf#page=11" + + def formula(person, period, parameters): + ky_agi = person("ky_agi", period) + deductions = person("ky_deductions_indiv", period) + + return max_(0, ky_agi - deductions) diff --git a/fiscalsim_us/variables/gov/states/ky/tax/income/ky_taxable_income_joint.py b/fiscalsim_us/variables/gov/states/ky/tax/income/ky_taxable_income_joint.py new file mode 100644 index 000000000..ab6a735ed --- /dev/null +++ b/fiscalsim_us/variables/gov/states/ky/tax/income/ky_taxable_income_joint.py @@ -0,0 +1,19 @@ +from fiscalsim_us.model_api import * + + +class ky_taxable_income_joint(Variable): + value_type = float + entity = Person + label = "Kentucky taxable income when married couples file jointly" + unit = USD + definition_period = YEAR + defined_for = StateCode.KY + reference = "https://revenue.ky.gov/Forms/740%20Packet%20Instructions%205-9-23.pdf#page=11" + + def formula(person, period, parameters): + ky_agi = person("ky_agi", period) + is_head = person("is_tax_unit_head", period) + total_agi = is_head * person.tax_unit.sum(ky_agi) + deductions = add(person.tax_unit, period, ["ky_deductions_joint"]) + + return max_(0, total_agi - deductions) diff --git a/fiscalsim_us/variables/gov/states/ky/tax/income/ky_withheld_income_tax.py b/fiscalsim_us/variables/gov/states/ky/tax/income/ky_withheld_income_tax.py new file mode 100644 index 000000000..7b31fc380 --- /dev/null +++ b/fiscalsim_us/variables/gov/states/ky/tax/income/ky_withheld_income_tax.py @@ -0,0 +1,18 @@ +from fiscalsim_us.model_api import * + + +class ky_withheld_income_tax(Variable): + value_type = float + entity = Person + label = "Kentucky withheld income tax" + defined_for = StateCode.KY + unit = USD + definition_period = YEAR + + def formula(person, period, parameters): + agi = person("adjusted_gross_income_person", period) + p = parameters(period).gov.states.ky.tax.income + # We apply the base standard deduction amount + standard_deduction = p.deductions.standard + reduced_agi = max_(agi - standard_deduction, 0) + return p.rate * reduced_agi diff --git a/fiscalsim_us/variables/gov/states/md/tanf/income/earned/md_tanf_gross_earned_income_deduction.py b/fiscalsim_us/variables/gov/states/md/tanf/income/earned/md_tanf_gross_earned_income_deduction.py index b5282d02d..b3fe11304 100644 --- a/fiscalsim_us/variables/gov/states/md/tanf/income/earned/md_tanf_gross_earned_income_deduction.py +++ b/fiscalsim_us/variables/gov/states/md/tanf/income/earned/md_tanf_gross_earned_income_deduction.py @@ -1,33 +1,33 @@ -from fiscalsim_us.model_api import * - - -class md_tanf_gross_earned_income_deduction(Variable): - value_type = float - entity = SPMUnit - label = "Maryland TANF earned income deduction" - unit = USD - definition_period = YEAR - defined_for = StateCode.MD - - def formula(spm_unit, period, parameters): - # Get TANF enrollment status. - is_tanf_enrolled = spm_unit("is_tanf_enrolled", period) - # Get earned income for the SPM unit. - earned_income = add(spm_unit, period, ["earned_income"]) - # Determine if the SPM unit has any self-employment income. - self_employment_income = add( - spm_unit, period, ["self_employment_income"] - ) - has_self_employment_income = self_employment_income > 0 - # Get the policy parameters. - p = parameters(period).gov.states.md.tanf.income.deductions.earned - percent = select( - # First arg: list of conditions - [~is_tanf_enrolled, has_self_employment_income], - # Second arg: list of values to return if the corresponding condition is True - [p.new, p.self_employed], - # Third arg: default value to return if none of the conditions are True - default=p.not_self_employed, - ) - # Multiply earned income by percent deduction. - return earned_income * percent +from fiscalsim_us.model_api import * + + +class md_tanf_gross_earned_income_deduction(Variable): + value_type = float + entity = SPMUnit + label = "Maryland TANF earned income deduction" + unit = USD + definition_period = YEAR + defined_for = StateCode.MD + + def formula(spm_unit, period, parameters): + # Get TANF enrollment status. + is_tanf_enrolled = spm_unit("is_tanf_enrolled", period) + # Get earned income for the SPM unit. + earned_income = add(spm_unit, period, ["earned_income"]) + # Determine if the SPM unit has any self-employment income. + self_employment_income = add( + spm_unit, period, ["self_employment_income"] + ) + has_self_employment_income = self_employment_income > 0 + # Get the policy parameters. + p = parameters(period).gov.states.md.tanf.income.deductions.earned + percent = select( + # First arg: list of conditions + [~is_tanf_enrolled, has_self_employment_income], + # Second arg: list of values to return if the corresponding condition is True + [p.new, p.self_employed], + # Third arg: default value to return if none of the conditions are True + default=p.not_self_employed, + ) + # Multiply earned income by percent deduction. + return earned_income * percent diff --git a/fiscalsim_us/variables/gov/states/md/tanf/md_tanf_eligible.py b/fiscalsim_us/variables/gov/states/md/tanf/md_tanf_eligible.py index af41a4d13..9fe04985d 100644 --- a/fiscalsim_us/variables/gov/states/md/tanf/md_tanf_eligible.py +++ b/fiscalsim_us/variables/gov/states/md/tanf/md_tanf_eligible.py @@ -1,10 +1,10 @@ -from fiscalsim_us.model_api import * - - -class md_tanf_eligible(Variable): - value_type = bool - entity = SPMUnit - label = "Maryland TANF eligible" - unit = USD - definition_period = YEAR - defined_for = StateCode.MD +from fiscalsim_us.model_api import * + + +class md_tanf_eligible(Variable): + value_type = bool + entity = SPMUnit + label = "Maryland TANF eligible" + unit = USD + definition_period = YEAR + defined_for = StateCode.MD diff --git a/fiscalsim_us/variables/gov/states/md/tanf/md_tanf_maximum_benefit.py b/fiscalsim_us/variables/gov/states/md/tanf/md_tanf_maximum_benefit.py index 468bfdc83..8ee5653e2 100644 --- a/fiscalsim_us/variables/gov/states/md/tanf/md_tanf_maximum_benefit.py +++ b/fiscalsim_us/variables/gov/states/md/tanf/md_tanf_maximum_benefit.py @@ -1,21 +1,21 @@ -from fiscalsim_us.model_api import * - - -class md_tanf_maximum_benefit(Variable): - value_type = float - entity = SPMUnit - label = "Maryland TANF maximum benefit" - unit = USD - definition_period = YEAR - defined_for = "md_tanf_eligible" - - def formula(spm_unit, period, parameters): - people = spm_unit("spm_unit_size", period) - # TODO: Add DHS layer. - p = parameters(period).gov.states.md.tanf.maximum_benefit - capped_people = min_(people, 8).astype(int) - additional_people = people - capped_people - base = p.main[capped_people] - additional_maximum_benefit = p.additional * additional_people - monthly = base + additional_maximum_benefit - return monthly * MONTHS_IN_YEAR +from fiscalsim_us.model_api import * + + +class md_tanf_maximum_benefit(Variable): + value_type = float + entity = SPMUnit + label = "Maryland TANF maximum benefit" + unit = USD + definition_period = YEAR + defined_for = "md_tanf_eligible" + + def formula(spm_unit, period, parameters): + people = spm_unit("spm_unit_size", period) + # TODO: Add DHS layer. + p = parameters(period).gov.states.md.tanf.maximum_benefit + capped_people = min_(people, 8).astype(int) + additional_people = people - capped_people + base = p.main[capped_people] + additional_maximum_benefit = p.additional * additional_people + monthly = base + additional_maximum_benefit + return monthly * MONTHS_IN_YEAR diff --git a/fiscalsim_us/variables/gov/states/md/tax/income/agi/subtractions/hundred_year/md_hundred_year_subtraction.py b/fiscalsim_us/variables/gov/states/md/tax/income/agi/subtractions/hundred_year/md_hundred_year_subtraction.py new file mode 100644 index 000000000..e27987e5b --- /dev/null +++ b/fiscalsim_us/variables/gov/states/md/tax/income/agi/subtractions/hundred_year/md_hundred_year_subtraction.py @@ -0,0 +1,13 @@ +from fiscalsim_us.model_api import * + + +class md_hundred_year_subtraction(Variable): + value_type = float + entity = TaxUnit + label = "Maryland hundred year subtraction" + unit = USD + definition_period = YEAR + reference = "https://trackbill.com/bill/maryland-house-bill-186-income-tax-subtraction-modification-for-centenarians/2173534/" + defined_for = "md_hundred_year_subtraction_eligible" + + adds = ["md_hundred_year_subtraction_person"] diff --git a/fiscalsim_us/variables/gov/states/md/tax/income/agi/subtractions/hundred_year/md_hundred_year_subtraction_eligible.py b/fiscalsim_us/variables/gov/states/md/tax/income/agi/subtractions/hundred_year/md_hundred_year_subtraction_eligible.py new file mode 100644 index 000000000..bcde4dd03 --- /dev/null +++ b/fiscalsim_us/variables/gov/states/md/tax/income/agi/subtractions/hundred_year/md_hundred_year_subtraction_eligible.py @@ -0,0 +1,17 @@ +from fiscalsim_us.model_api import * + + +class md_hundred_year_subtraction_eligible(Variable): + value_type = bool + entity = Person + label = "Eligible for the Maryland hundred year subtraction" + definition_period = YEAR + reference = "https://trackbill.com/bill/maryland-house-bill-186-income-tax-subtraction-modification-for-centenarians/2173534/" + defined_for = StateCode.MD + + def formula(person, period, parameters): + age = person("age", period) + p = parameters( + period + ).gov.states.md.tax.income.agi.subtractions.hundred_year + return age >= p.age_threshold diff --git a/fiscalsim_us/variables/gov/states/md/tax/income/agi/subtractions/hundred_year/md_hundred_year_subtraction_person.py b/fiscalsim_us/variables/gov/states/md/tax/income/agi/subtractions/hundred_year/md_hundred_year_subtraction_person.py new file mode 100644 index 000000000..db5967152 --- /dev/null +++ b/fiscalsim_us/variables/gov/states/md/tax/income/agi/subtractions/hundred_year/md_hundred_year_subtraction_person.py @@ -0,0 +1,16 @@ +from fiscalsim_us.model_api import * + + +class md_hundred_year_subtraction_person(Variable): + value_type = float + entity = Person + label = "Maryland hundred year subtraction per person" + unit = USD + definition_period = YEAR + reference = "https://trackbill.com/bill/maryland-house-bill-186-income-tax-subtraction-modification-for-centenarians/2173534/" + defined_for = "md_hundred_year_subtraction_eligible" + + def formula(person, period, parameters): + return parameters( + period + ).gov.states.md.tax.income.agi.subtractions.hundred_year.amount diff --git a/fiscalsim_us/variables/gov/states/md/tax/income/credits/eitc/federal_eitc_without_age_minimum.py b/fiscalsim_us/variables/gov/states/md/tax/income/credits/eitc/federal_eitc_without_age_minimum.py index 307d0c078..ee7f6d6d9 100644 --- a/fiscalsim_us/variables/gov/states/md/tax/income/credits/eitc/federal_eitc_without_age_minimum.py +++ b/fiscalsim_us/variables/gov/states/md/tax/income/credits/eitc/federal_eitc_without_age_minimum.py @@ -9,13 +9,13 @@ class federal_eitc_without_age_minimum(Variable): documentation = "The federal EITC with the minimum age condition ignored." definition_period = YEAR reference = "https://casetext.com/statute/code-of-maryland/article-tax-general/title-10-income-tax/subtitle-7-income-tax-credits/section-10-704-effective-until-6302023-for-earned-income" + defined_for = StateCode.MD def formula(tax_unit, period, parameters): - # Set up simulation clone + # set up simulation clone simulation = tax_unit.simulation simulation.max_spiral_loops = 10 simulation._check_for_cycle = lambda *args: None - EITC_VARIABLES = [ "eitc_agi_limit", "eitc_child_count", @@ -25,31 +25,27 @@ def formula(tax_unit, period, parameters): "eitc_maximum", "eitc_phased_in", "eitc_reduction", - "earned_income_tax_credit", "eitc", ] for variable in EITC_VARIABLES: simulation.get_holder(variable).delete_arrays() - # Modify EITC age condition - original_value = simulation.tax_benefit_system.parameters.gov.irs.credits.eitc.eligibility.age.min( + # modify EITC minimum age condition in simulation clone + tbs = simulation.tax_benefit_system + original_age = tbs.parameters.gov.irs.credits.eitc.eligibility.age.min( period ) - simulation.tax_benefit_system.parameters.gov.irs.credits.eitc.eligibility.age.min.update( + tbs.parameters.gov.irs.credits.eitc.eligibility.age.min.update( value=0, period=period, ) - simulation.tax_benefit_system.parameters.gov.irs.credits.eitc._at_instant_cache = ( - {} - ) + tbs.parameters.gov.irs.credits.eitc._at_instant_cache = {} eitc = simulation.calculate("eitc", period) for variable in EITC_VARIABLES: simulation.get_holder(variable).delete_arrays() - simulation.tax_benefit_system.parameters.gov.irs.credits.eitc.eligibility.age.min.update( - value=original_value, + tbs.parameters.gov.irs.credits.eitc.eligibility.age.min.update( + value=original_age, period=period, ) - simulation.tax_benefit_system.parameters.gov.irs.credits.eitc._at_instant_cache = ( - {} - ) + tbs.parameters.gov.irs.credits.eitc._at_instant_cache = {} return eitc diff --git a/fiscalsim_us/variables/gov/states/md/tax/income/credits/eitc/md_eitc.py b/fiscalsim_us/variables/gov/states/md/tax/income/credits/eitc/md_eitc.py index d33d39b66..4955ff0a0 100644 --- a/fiscalsim_us/variables/gov/states/md/tax/income/credits/eitc/md_eitc.py +++ b/fiscalsim_us/variables/gov/states/md/tax/income/credits/eitc/md_eitc.py @@ -11,8 +11,4 @@ class md_eitc(Variable): reference = "https://casetext.com/statute/code-of-maryland/article-tax-general/title-10-income-tax/subtitle-7-income-tax-credits/section-10-704-effective-until-6302023-for-earned-income" defined_for = StateCode.MD - adds = [ - "md_non_single_childless_non_refundable_eitc", - "md_non_single_childless_refundable_eitc", - "md_single_childless_eitc", - ] + adds = ["md_non_refundable_eitc", "md_refundable_eitc"] diff --git a/fiscalsim_us/variables/gov/states/md/tax/income/credits/eitc/md_non_single_childless_non_refundable_eitc.py b/fiscalsim_us/variables/gov/states/md/tax/income/credits/eitc/md_non_single_childless_non_refundable_eitc.py deleted file mode 100644 index c6524b648..000000000 --- a/fiscalsim_us/variables/gov/states/md/tax/income/credits/eitc/md_non_single_childless_non_refundable_eitc.py +++ /dev/null @@ -1,31 +0,0 @@ -from fiscalsim_us.model_api import * - - -class md_non_single_childless_non_refundable_eitc(Variable): - value_type = float - entity = TaxUnit - label = ( - "MD non-refundable EITC for filers who are not single and childless" - ) - unit = USD - definition_period = YEAR - reference = "https://casetext.com/statute/code-of-maryland/article-tax-general/title-10-income-tax/subtitle-7-income-tax-credits/section-10-704-effective-until-6302023-for-earned-income" # (c)(1) - defined_for = StateCode.MD - - def formula(tax_unit, period, parameters): - federal_eitc = tax_unit("eitc", period) - p = parameters(period).gov.states.md.tax.income.credits.eitc - tax_before_credits = tax_unit("md_income_tax_before_credits", period) - # Limited to filers who are not single and childless. - single_childless = tax_unit( - "md_qualifies_for_single_childless_eitc", period - ) - eligible = ~single_childless - uncapped = p.match.non_refundable * federal_eitc - amount = eligible * min_(tax_before_credits, uncapped) - has_children = add(tax_unit, period, ["is_child"]) > 0 - mca = parameters(period).gov.contrib.maryland_child_alliance - if mca.abolish_non_refundable_child_eitc: - return amount * ~has_children - else: - return amount diff --git a/fiscalsim_us/variables/gov/states/md/tax/income/credits/eitc/md_non_single_childless_refundable_eitc.py b/fiscalsim_us/variables/gov/states/md/tax/income/credits/eitc/md_non_single_childless_refundable_eitc.py deleted file mode 100644 index 5d2446728..000000000 --- a/fiscalsim_us/variables/gov/states/md/tax/income/credits/eitc/md_non_single_childless_refundable_eitc.py +++ /dev/null @@ -1,41 +0,0 @@ -from fiscalsim_us.model_api import * - - -class md_non_single_childless_refundable_eitc(Variable): - value_type = float - entity = TaxUnit - label = "MD refundable EITC for filers who are not single and childless" - unit = USD - definition_period = YEAR - reference = "https://casetext.com/statute/code-of-maryland/article-tax-general/title-10-income-tax/subtitle-7-income-tax-credits/section-10-704-effective-until-6302023-for-earned-income" - defined_for = StateCode.MD - - def formula(tax_unit, period, parameters): - single_childless = tax_unit( - "md_qualifies_for_single_childless_eitc", period - ) - # Must have zeroed out MD tax liability with non-refundable EITC. - md_tax_before_credits = tax_unit( - "md_income_tax_before_credits", period - ) - md_non_single_childless_non_refundable_eitc = tax_unit( - "md_non_single_childless_non_refundable_eitc", period - ) - md_tax_equals_non_refundable_eitc = ( - md_tax_before_credits - == md_non_single_childless_non_refundable_eitc - ) - eligible = ~single_childless & md_tax_equals_non_refundable_eitc - federal_eitc_without_age_minimum = tax_unit( - "federal_eitc_without_age_minimum", period - ) - params = parameters(period) - p = params.gov.states.md.tax.income.credits.eitc - matched_eitc = p.match.refundable * federal_eitc_without_age_minimum - amount = eligible * max_(0, matched_eitc - md_tax_before_credits) - has_children = add(tax_unit, period, ["is_child"]) > 0 - mca = params.gov.contrib.maryland_child_alliance - if mca.abolish_refundable_child_eitc: - return amount * ~has_children - else: - return amount diff --git a/fiscalsim_us/variables/gov/states/md/tax/income/credits/eitc/md_qualifies_for_single_childless_eitc.py b/fiscalsim_us/variables/gov/states/md/tax/income/credits/eitc/md_qualifies_for_unmarried_childless_eitc.py similarity index 88% rename from fiscalsim_us/variables/gov/states/md/tax/income/credits/eitc/md_qualifies_for_single_childless_eitc.py rename to fiscalsim_us/variables/gov/states/md/tax/income/credits/eitc/md_qualifies_for_unmarried_childless_eitc.py index 8f55eedf2..5f1ee62ec 100644 --- a/fiscalsim_us/variables/gov/states/md/tax/income/credits/eitc/md_qualifies_for_single_childless_eitc.py +++ b/fiscalsim_us/variables/gov/states/md/tax/income/credits/eitc/md_qualifies_for_unmarried_childless_eitc.py @@ -1,10 +1,10 @@ from fiscalsim_us.model_api import * -class md_qualifies_for_single_childless_eitc(Variable): +class md_qualifies_for_unmarried_childless_eitc(Variable): value_type = bool entity = TaxUnit - label = "Qualifies for the MD single childless EITC" + label = "Qualifies for the MD unmarried childless EITC" unit = USD definition_period = YEAR reference = "https://casetext.com/statute/code-of-maryland/article-tax-general/title-10-income-tax/subtitle-7-income-tax-credits/section-10-704-effective-until-6302023-for-earned-income" # (c)(3) diff --git a/fiscalsim_us/variables/gov/states/md/tax/income/credits/eitc/md_single_childless_eitc.py b/fiscalsim_us/variables/gov/states/md/tax/income/credits/eitc/md_single_childless_eitc.py deleted file mode 100644 index 36268cb1d..000000000 --- a/fiscalsim_us/variables/gov/states/md/tax/income/credits/eitc/md_single_childless_eitc.py +++ /dev/null @@ -1,21 +0,0 @@ -from fiscalsim_us.model_api import * - - -class md_single_childless_eitc(Variable): - value_type = float - entity = TaxUnit - label = "MD single childless EITC" - unit = USD - definition_period = YEAR - reference = "https://casetext.com/statute/code-of-maryland/article-tax-general/title-10-income-tax/subtitle-7-income-tax-credits/section-10-704-effective-until-6302023-for-earned-income" # (c)(3) - defined_for = StateCode.MD - - def formula(tax_unit, period, parameters): - eligible = tax_unit("md_qualifies_for_single_childless_eitc", period) - federal_eitc_without_age_minimum = tax_unit( - "federal_eitc_without_age_minimum", period - ) - p = parameters(period).gov.states.md.tax.income.credits.eitc.childless - match = p.percent_match * federal_eitc_without_age_minimum - cap = p.max_amount - return eligible * min_(match, cap) diff --git a/fiscalsim_us/variables/gov/states/md/tax/income/credits/eitc/non_refundable/md_married_or_has_child_non_refundable_eitc.py b/fiscalsim_us/variables/gov/states/md/tax/income/credits/eitc/non_refundable/md_married_or_has_child_non_refundable_eitc.py new file mode 100644 index 000000000..2b74d4031 --- /dev/null +++ b/fiscalsim_us/variables/gov/states/md/tax/income/credits/eitc/non_refundable/md_married_or_has_child_non_refundable_eitc.py @@ -0,0 +1,24 @@ +from fiscalsim_us.model_api import * + + +class md_married_or_has_child_non_refundable_eitc(Variable): + value_type = float + entity = TaxUnit + label = "Maryland non-refundable EITC for filers who are married or have qualifying child" + unit = USD + definition_period = YEAR + reference = "https://casetext.com/statute/code-of-maryland/article-tax-general/title-10-income-tax/subtitle-7-income-tax-credits/section-10-704-effective-until-6302023-for-earned-income" # (c)(1) + defined_for = StateCode.MD + + def formula(tax_unit, period, parameters): + federal_eitc = tax_unit("eitc", period) + + p = parameters( + period + ).gov.states.md.tax.income.credits.eitc.non_refundable.married_or_has_child + # Limited to filers who are married or have child + married_or_has_child = ~tax_unit( + "md_qualifies_for_unmarried_childless_eitc", period + ) + amount = federal_eitc * p.match + return married_or_has_child * amount diff --git a/fiscalsim_us/variables/gov/states/md/tax/income/credits/eitc/md_non_refundable_eitc.py b/fiscalsim_us/variables/gov/states/md/tax/income/credits/eitc/non_refundable/md_non_refundable_eitc.py similarity index 57% rename from fiscalsim_us/variables/gov/states/md/tax/income/credits/eitc/md_non_refundable_eitc.py rename to fiscalsim_us/variables/gov/states/md/tax/income/credits/eitc/non_refundable/md_non_refundable_eitc.py index 801bcb98b..af7eefe3e 100644 --- a/fiscalsim_us/variables/gov/states/md/tax/income/credits/eitc/md_non_refundable_eitc.py +++ b/fiscalsim_us/variables/gov/states/md/tax/income/credits/eitc/non_refundable/md_non_refundable_eitc.py @@ -11,12 +11,7 @@ class md_non_refundable_eitc(Variable): reference = "https://casetext.com/statute/code-of-maryland/article-tax-general/title-10-income-tax/subtitle-7-income-tax-credits/section-10-704-effective-until-6302023-for-earned-income" defined_for = StateCode.MD - def formula(tax_unit, period, parameters): - federal_eitc = tax_unit("eitc", period) - p = parameters(period).gov.states.md.tax.income.credits.eitc - childless = tax_unit("eitc_child_count", period) == 0 - return where( - childless, - min_(p.childless.max_amount, federal_eitc), - p.match.non_refundable * federal_eitc, - ) + adds = [ + "md_married_or_has_child_non_refundable_eitc", + "md_unmarried_childless_non_refundable_eitc", + ] diff --git a/fiscalsim_us/variables/gov/states/md/tax/income/credits/eitc/non_refundable/md_unmarried_childless_non_refundable_eitc.py b/fiscalsim_us/variables/gov/states/md/tax/income/credits/eitc/non_refundable/md_unmarried_childless_non_refundable_eitc.py new file mode 100644 index 000000000..1d505d7b7 --- /dev/null +++ b/fiscalsim_us/variables/gov/states/md/tax/income/credits/eitc/non_refundable/md_unmarried_childless_non_refundable_eitc.py @@ -0,0 +1,23 @@ +from fiscalsim_us.model_api import * + + +class md_unmarried_childless_non_refundable_eitc(Variable): + value_type = float + entity = TaxUnit + label = "Maryland unmarried childless non-refundable EITC" + unit = USD + definition_period = YEAR + reference = "https://casetext.com/statute/code-of-maryland/article-tax-general/title-10-income-tax/subtitle-7-income-tax-credits/section-10-704-effective-until-6302023-for-earned-income" # (c)(3) + defined_for = "md_qualifies_for_unmarried_childless_eitc" + + def formula(tax_unit, period, parameters): + # individuals can claim the state eitc even they do not meet the minimum age requirement under the federal credit + federal_eitc_without_age_minimum = tax_unit( + "federal_eitc_without_age_minimum", period + ) + p = parameters( + period + ).gov.states.md.tax.income.credits.eitc.non_refundable.unmarried_childless + match = p.match * federal_eitc_without_age_minimum + cap = p.max_amount + return min_(match, cap) diff --git a/fiscalsim_us/variables/gov/states/md/tax/income/credits/eitc/refundable/md_married_or_has_child_refundable_eitc.py b/fiscalsim_us/variables/gov/states/md/tax/income/credits/eitc/refundable/md_married_or_has_child_refundable_eitc.py new file mode 100644 index 000000000..74dd6f3a1 --- /dev/null +++ b/fiscalsim_us/variables/gov/states/md/tax/income/credits/eitc/refundable/md_married_or_has_child_refundable_eitc.py @@ -0,0 +1,33 @@ +from fiscalsim_us.model_api import * + + +class md_married_or_has_child_refundable_eitc(Variable): + value_type = float + entity = TaxUnit + label = "Maryland refundable EITC for filers who are married or have qualifying child" + unit = USD + definition_period = YEAR + reference = "https://www.marylandtaxes.gov/forms/21_forms/Resident_Booklet.pdf#page=23" + defined_for = StateCode.MD + + def formula(tax_unit, period, parameters): + # Limited to filers who are married or have child + does_not_qualify_for_unmarried_childless_eitc = ~tax_unit( + "md_qualifies_for_unmarried_childless_eitc", period + ) + + federal_eitc = tax_unit("eitc", period) + md_tax = tax_unit("md_income_tax_before_credits", period) + p = parameters( + period + ).gov.states.md.tax.income.credits.eitc.refundable.married_or_has_child + + total_refundable_eitc_amount = federal_eitc * p.match + applicable_refundable_eitc = max_( + total_refundable_eitc_amount - md_tax, 0 + ) + + return ( + does_not_qualify_for_unmarried_childless_eitc + * applicable_refundable_eitc + ) diff --git a/fiscalsim_us/variables/gov/states/md/tax/income/credits/eitc/md_refundable_eitc.py b/fiscalsim_us/variables/gov/states/md/tax/income/credits/eitc/refundable/md_refundable_eitc.py similarity index 51% rename from fiscalsim_us/variables/gov/states/md/tax/income/credits/eitc/md_refundable_eitc.py rename to fiscalsim_us/variables/gov/states/md/tax/income/credits/eitc/refundable/md_refundable_eitc.py index cbf25524e..cb3965432 100644 --- a/fiscalsim_us/variables/gov/states/md/tax/income/credits/eitc/md_refundable_eitc.py +++ b/fiscalsim_us/variables/gov/states/md/tax/income/credits/eitc/refundable/md_refundable_eitc.py @@ -11,11 +11,7 @@ class md_refundable_eitc(Variable): reference = "https://casetext.com/statute/code-of-maryland/article-tax-general/title-10-income-tax/subtitle-7-income-tax-credits/section-10-704-effective-until-6302023-for-earned-income" defined_for = StateCode.MD - def formula(tax_unit, period, parameters): - non_refundable_eitc = tax_unit("md_non_refundable_eitc", period) - p = parameters(period).gov.states.md.tax.income.credits.eitc - income_tax = tax_unit("md_income_tax_before_credits", period) - excess = max_(0, non_refundable_eitc - income_tax) - childless = tax_unit("eitc_child_count", period) == 0 - multiplier = where(childless, 1, p.match.refundable) - return excess * multiplier + adds = [ + "md_married_or_has_child_refundable_eitc", + "md_unmarried_childless_refundable_eitc", + ] diff --git a/fiscalsim_us/variables/gov/states/md/tax/income/credits/eitc/refundable/md_unmarried_childless_refundable_eitc.py b/fiscalsim_us/variables/gov/states/md/tax/income/credits/eitc/refundable/md_unmarried_childless_refundable_eitc.py new file mode 100644 index 000000000..c52ca2cae --- /dev/null +++ b/fiscalsim_us/variables/gov/states/md/tax/income/credits/eitc/refundable/md_unmarried_childless_refundable_eitc.py @@ -0,0 +1,18 @@ +from fiscalsim_us.model_api import * + + +class md_unmarried_childless_refundable_eitc(Variable): + value_type = float + entity = TaxUnit + label = "Maryland unmarried childless refundable EITC" + unit = USD + definition_period = YEAR + reference = "https://www.marylandtaxes.gov/forms/21_forms/Resident_Booklet.pdf#page=19" + defined_for = "md_qualifies_for_unmarried_childless_eitc" + + def formula(tax_unit, period, parameters): + md_tax = tax_unit("md_income_tax_before_credits", period) + md_unmarried_childless_non_refundable_eitc = tax_unit( + "md_unmarried_childless_non_refundable_eitc", period + ) + return max_(md_unmarried_childless_non_refundable_eitc - md_tax, 0) diff --git a/fiscalsim_us/variables/gov/states/md/tax/income/credits/poverty_line/is_eligible_md_poverty_line_credit.py b/fiscalsim_us/variables/gov/states/md/tax/income/credits/poverty_line/is_eligible_md_poverty_line_credit.py index 2b467ff35..32542ef93 100644 --- a/fiscalsim_us/variables/gov/states/md/tax/income/credits/poverty_line/is_eligible_md_poverty_line_credit.py +++ b/fiscalsim_us/variables/gov/states/md/tax/income/credits/poverty_line/is_eligible_md_poverty_line_credit.py @@ -31,7 +31,7 @@ def formula(tax_unit, period, parameters): earnings_below_fpg = earnings <= fpg # (iii) who is not claimed as an exemption on another individual’s # tax return under § 10–211 of this title; - # SKIP - assumed throughout FiscalSim-US. + # SKIP - assumed throughout PolicyEngine-us. # (iv) for whom the credit allowed under § 10–704(a)(1) of this # subtitle is less than the State income tax. # This appears to refer to the MD total EITC per @@ -39,7 +39,7 @@ def formula(tax_unit, period, parameters): # However, the tax form indicates it's only the non-refundable portion, # because it gets pooled with other non-refundable credits. md_eitc = tax_unit( - "md_non_single_childless_non_refundable_eitc", period + "md_married_or_has_child_non_refundable_eitc", period ) md_income_tax_before_credits = tax_unit( "md_income_tax_before_credits", period diff --git a/fiscalsim_us/variables/gov/states/md/tax/income/credits/poverty_line/md_poverty_line_credit.py b/fiscalsim_us/variables/gov/states/md/tax/income/credits/poverty_line/md_poverty_line_credit.py index 6bc61b96f..967e323d3 100644 --- a/fiscalsim_us/variables/gov/states/md/tax/income/credits/poverty_line/md_poverty_line_credit.py +++ b/fiscalsim_us/variables/gov/states/md/tax/income/credits/poverty_line/md_poverty_line_credit.py @@ -21,12 +21,12 @@ def formula(tax_unit, period, parameters): income_tax_before_credits = tax_unit( "md_income_tax_before_credits", period ) - md_non_single_childless_non_refundable_eitc = tax_unit( - "md_non_single_childless_non_refundable_eitc", period + md_married_or_has_child_non_refundable_eitc = tax_unit( + "md_married_or_has_child_non_refundable_eitc", period ) tax_after_non_refundable_eitc = ( income_tax_before_credits - - md_non_single_childless_non_refundable_eitc + - md_married_or_has_child_non_refundable_eitc ) # (2) an amount equal to 5% of the eligible low income taxpayer’s # earned income, as defined under § 32(c)(2) of the Internal Revenue diff --git a/fiscalsim_us/variables/gov/states/md/tax/income/md_withheld_income_tax.py b/fiscalsim_us/variables/gov/states/md/tax/income/md_withheld_income_tax.py new file mode 100644 index 000000000..c34101384 --- /dev/null +++ b/fiscalsim_us/variables/gov/states/md/tax/income/md_withheld_income_tax.py @@ -0,0 +1,18 @@ +from fiscalsim_us.model_api import * + + +class md_withheld_income_tax(Variable): + value_type = float + entity = Person + label = "Maryland withheld income tax" + defined_for = StateCode.MD + unit = USD + definition_period = YEAR + + def formula(person, period, parameters): + agi = person("adjusted_gross_income_person", period) + p = parameters(period).gov.states.md.tax.income + # We apply the maximum standard deduction amount + standard_deduction = p.deductions.standard.max["SINGLE"] + reduced_agi = max_(agi - standard_deduction, 0) + return p.rates.single.calc(reduced_agi) diff --git a/fiscalsim_us/variables/gov/states/md/usda/snap/min_allotment/md_snap_elderly_present.py b/fiscalsim_us/variables/gov/states/md/usda/snap/min_allotment/md_snap_elderly_present.py new file mode 100644 index 000000000..36c73e071 --- /dev/null +++ b/fiscalsim_us/variables/gov/states/md/usda/snap/min_allotment/md_snap_elderly_present.py @@ -0,0 +1,14 @@ +from fiscalsim_us.model_api import * + + +class md_snap_elderly_present(Variable): + value_type = bool + entity = SPMUnit + definition_period = YEAR + label = "Elderly person is present for the Maryland SNAP minimum allotment" + defined_for = StateCode.MD + + def formula(spm_unit, period, parameters): + person = spm_unit.members + elderly = person("md_snap_is_elderly", period) + return spm_unit.any(elderly) diff --git a/fiscalsim_us/variables/gov/states/md/usda/snap/min_allotment/md_snap_is_elderly.py b/fiscalsim_us/variables/gov/states/md/usda/snap/min_allotment/md_snap_is_elderly.py new file mode 100644 index 000000000..36b6b949a --- /dev/null +++ b/fiscalsim_us/variables/gov/states/md/usda/snap/min_allotment/md_snap_is_elderly.py @@ -0,0 +1,13 @@ +from fiscalsim_us.model_api import * + + +class md_snap_is_elderly(Variable): + value_type = bool + entity = Person + definition_period = YEAR + label = "Is an elderly person for Maryland SNAP minimum allotment" + defined_for = StateCode.MD + + def formula(person, period, parameters): + p = parameters(period).gov.states.md.usda.snap.min_allotment + return person("age", period) >= p.age_threshold diff --git a/fiscalsim_us/variables/gov/states/vt/tax/income/adjusted_gross_income/subtractions/retirement_income_exemption/vt_csrs_retirement_pay_exclusion.py b/fiscalsim_us/variables/gov/states/vt/tax/income/adjusted_gross_income/subtractions/retirement_income_exemption/vt_csrs_retirement_pay_exclusion.py new file mode 100644 index 000000000..015ef0085 --- /dev/null +++ b/fiscalsim_us/variables/gov/states/vt/tax/income/adjusted_gross_income/subtractions/retirement_income_exemption/vt_csrs_retirement_pay_exclusion.py @@ -0,0 +1,27 @@ +from fiscalsim_us.model_api import * + + +class vt_csrs_retirement_pay_exclusion(Variable): + value_type = float + entity = TaxUnit + definition_period = YEAR + label = "Vermont Civil Service Retirement System (CSRS) retirement income exclusion" + reference = ( + "https://tax.vermont.gov/individuals/seniors-and-retirees", + "https://legislature.vermont.gov/statutes/section/32/151/05830e", # Legal Code Titl. 32 V.S.A. § 5830e (b)(1)(B), (b)(2)(B) + ) + unit = USD + defined_for = StateCode.VT + documentation = "Vermont Civil Service Retirement System (CSRS) retirement benefits exempt from Vermont taxation." + + def formula(tax_unit, period, parameters): + person = tax_unit.members + p = parameters( + period + ).gov.states.vt.tax.income.agi.retirement_income_exemption.csrs + # Get retirement amount from military retirement system + tax_unit_csrs_retirement_pay = add( + tax_unit, period, ["csrs_retirement_pay"] + ) + # Retirement income from systems other than social security have maximum amount. + return min_(tax_unit_csrs_retirement_pay, p.amount) diff --git a/fiscalsim_us/variables/gov/states/vt/tax/income/adjusted_gross_income/subtractions/retirement_income_exemption/vt_military_retirement_pay_exclusion.py b/fiscalsim_us/variables/gov/states/vt/tax/income/adjusted_gross_income/subtractions/retirement_income_exemption/vt_military_retirement_pay_exclusion.py new file mode 100644 index 000000000..8082443d3 --- /dev/null +++ b/fiscalsim_us/variables/gov/states/vt/tax/income/adjusted_gross_income/subtractions/retirement_income_exemption/vt_military_retirement_pay_exclusion.py @@ -0,0 +1,31 @@ +from fiscalsim_us.model_api import * + + +class vt_military_retirement_pay_exclusion(Variable): + value_type = float + entity = TaxUnit + definition_period = YEAR + label = "Vermont military retirement income exclusion" + reference = ( + "https://tax.vermont.gov/individuals/seniors-and-retirees", + "https://legislature.vermont.gov/statutes/section/32/151/05830e", # Legal Code Titl. 32 V.S.A. § 5830e (d) + ) + unit = USD + defined_for = StateCode.VT + documentation = ( + "Vermont military retirement benefits exempt from Vermont taxation." + ) + + def formula(tax_unit, period, parameters): + person = tax_unit.members + p = parameters( + period + ).gov.states.vt.tax.income.agi.retirement_income_exemption + # Get retirement amount from military retirement system + tax_unit_military_retirement_pay = add( + tax_unit, period, ["military_retirement_pay"] + ) + # Retirement income from systems other than social security have maximum amount. + return min_( + tax_unit_military_retirement_pay, p.military_retirement.amount + ) diff --git a/fiscalsim_us/variables/gov/states/vt/tax/income/adjusted_gross_income/subtractions/retirement_income_exemption/vt_retirement_income_exemption.py b/fiscalsim_us/variables/gov/states/vt/tax/income/adjusted_gross_income/subtractions/retirement_income_exemption/vt_retirement_income_exemption.py new file mode 100644 index 000000000..e4ddf2b80 --- /dev/null +++ b/fiscalsim_us/variables/gov/states/vt/tax/income/adjusted_gross_income/subtractions/retirement_income_exemption/vt_retirement_income_exemption.py @@ -0,0 +1,81 @@ +from fiscalsim_us.model_api import * + + +class vt_retirement_income_exemption(Variable): + value_type = float + entity = TaxUnit + definition_period = YEAR + label = "Vermont retirement income exemption" + reference = ( + "https://legislature.vermont.gov/statutes/section/32/151/05811", # Titl. 32 V.S.A. § 5811(21)(B)(iv) + "https://legislature.vermont.gov/statutes/section/32/151/05830e" # Titl. 32 V.S.A. § 5830e + "https://tax.vermont.gov/sites/tax/files/documents/IN-112%20Instr-2022.pdf#page=3", # Instruction for 2022 SCHEDULE IN-112 - RETIREMENT INCOME EXEMPTION WORKSHEET + "https://tax.vermont.gov/individuals/seniors-and-retirees", # Instruction for exemption from different retirement system + ) + unit = USD + documentation = "Vermont retirement benefits exempt from Vermont taxation." + defined_for = "vt_retirement_income_exemption_eligible" + + def formula(tax_unit, period, parameters): + # Filer can choose from one of Social Security, + # Civil Service Retirement System (CSRS), Military Retirement Income + # or other eligible retirement systems + # to determine eligibility and calculate retirement income exemption. + + # Get social security amount + tax_unit_taxable_social_security = tax_unit( + "tax_unit_taxable_social_security", period + ) + # Get vt retirement income exclusion from military retirement system + vt_military_retirement_pay_exclusion = tax_unit( + "vt_military_retirement_pay_exclusion", period + ) + # Get vt retirement income exclusion from CSRS + vt_csrs_retirement_pay_exclusion = tax_unit( + "vt_csrs_retirement_pay_exclusion", period + ) + # Assume that filers will always choose the largest reitrement income + # exclusion from various retirement system + larger_retirement_income = max_( + tax_unit_taxable_social_security, + vt_military_retirement_pay_exclusion, + ) + chosen_retirement_income = max_( + larger_retirement_income, vt_csrs_retirement_pay_exclusion + ) + filing_status = tax_unit("filing_status", period) + agi = tax_unit("adjusted_gross_income", period) + # Get which retirement system the filer use + use_ss = tax_unit_taxable_social_security == chosen_retirement_income + # Get which parameter file to use + p = parameters( + period + ).gov.states.vt.tax.income.agi.retirement_income_exemption + reduction_start = where( + use_ss, + p.social_security.reduction.start[filing_status], + p.csrs.reduction.start[filing_status], + ) + reduction_end = where( + use_ss, + p.social_security.reduction.end[filing_status], + p.csrs.reduction.end[filing_status], + ) + # List of partial qualified tax unit(SECTION II) + partial_qualified = ( + (agi >= reduction_start) + & (agi < reduction_end) + & (chosen_retirement_income != 0) + ) + # Calculate the exemption ratio + partial_exemption_ratio = max_(reduction_end - agi, 0) / p.divisor + # Round the exemption ratio to two decimal point + partial_exemption_ratio = round_(partial_exemption_ratio, 2) + # The exemption ratio should be below one + partial_exemption_ratio = min_(partial_exemption_ratio, 1) + # Calculate parital exemption amount + partial_exemption = chosen_retirement_income * partial_exemption_ratio + # Return final exemption amount based on eligibility status + return where( + partial_qualified, partial_exemption, chosen_retirement_income + ) diff --git a/fiscalsim_us/variables/gov/states/vt/tax/income/adjusted_gross_income/subtractions/retirement_income_exemption/vt_retirement_income_exemption_eligible.py b/fiscalsim_us/variables/gov/states/vt/tax/income/adjusted_gross_income/subtractions/retirement_income_exemption/vt_retirement_income_exemption_eligible.py new file mode 100644 index 000000000..76c8a7eae --- /dev/null +++ b/fiscalsim_us/variables/gov/states/vt/tax/income/adjusted_gross_income/subtractions/retirement_income_exemption/vt_retirement_income_exemption_eligible.py @@ -0,0 +1,42 @@ +from fiscalsim_us.model_api import * + + +class vt_retirement_income_exemption_eligible(Variable): + value_type = bool + entity = TaxUnit + definition_period = YEAR + label = "Vermont retirement income exemption eligibility status" + reference = ( + "https://legislature.vermont.gov/statutes/section/32/151/05811", # Titl. 32 V.S.A. § 5811(21)(B)(iv) + "https://legislature.vermont.gov/statutes/section/32/151/05830e" # Titl. 32 V.S.A. § 5830e + "https://tax.vermont.gov/sites/tax/files/documents/IN-112%20Instr-2022.pdf#page=3", # Instruction for 2022 SCHEDULE IN-112 - RETIREMENT INCOME EXEMPTION WORKSHEET + "https://tax.vermont.gov/individuals/seniors-and-retirees", # Instruction for exemption from different retirement system + ) + defined_for = StateCode.VT + documentation = "Vermont filers use below criteria to check whether the tax unit is eligible for vermont retirement income exemption." + + def formula(tax_unit, period, parameters): + # Filer can choose from one of Social Security, + # Civil Service Retirement System (CSRS), Military Retirement Income + # or other eligible retirement systems to determine eligibility + filing_status = tax_unit("filing_status", period) + agi = tax_unit("adjusted_gross_income", period) + p = parameters( + period + ).gov.states.vt.tax.income.agi.retirement_income_exemption.csrs.reduction + # One of the retirement income should be greater than 0 + retirement_income = add( + tax_unit, + period, + [ + "tax_unit_taxable_social_security", + "military_retirement_pay", + "csrs_retirement_pay", + ], + ) + retirement_income_qualified = retirement_income > 0 + # The agi should below threshold + agi_qualified = agi < p.end[filing_status] + # Both qualified then the filer is qualified for vermont retirement + # income exemption + return retirement_income_qualified & agi_qualified diff --git a/fiscalsim_us/variables/gov/states/vt/tax/income/adjusted_gross_income/subtractions/vt_capital_gain_exclusion/vt_capital_gains_exclusion.py b/fiscalsim_us/variables/gov/states/vt/tax/income/adjusted_gross_income/subtractions/vt_capital_gain_exclusion/vt_capital_gains_exclusion.py index c604fdb19..c543fb73b 100644 --- a/fiscalsim_us/variables/gov/states/vt/tax/income/adjusted_gross_income/subtractions/vt_capital_gain_exclusion/vt_capital_gains_exclusion.py +++ b/fiscalsim_us/variables/gov/states/vt/tax/income/adjusted_gross_income/subtractions/vt_capital_gain_exclusion/vt_capital_gains_exclusion.py @@ -20,12 +20,18 @@ def formula(tax_unit, period, parameters): adjusted_net_capital_gain = tax_unit( "adjusted_net_capital_gain", period ) + qualified_dividend_income = add( + tax_unit, period, ["qualified_dividend_income"] + ) + reduced_adjusted_net_capital_gain = max_( + adjusted_net_capital_gain - qualified_dividend_income, 0 + ) p = parameters( period ).gov.states.vt.tax.income.agi.exclusions.capital_gain # The flat exclusion is the less of a capped amount # or the actual amount of net adjusted capital gains - flat_exclusion = min_(adjusted_net_capital_gain, p.flat.cap) + flat_exclusion = min_(reduced_adjusted_net_capital_gain, p.flat.cap) # Get percentage exclusion percentage_exclusion = tax_unit( "vt_percentage_capital_gains_exclusion", period diff --git a/fiscalsim_us/variables/gov/states/vt/tax/income/adjusted_gross_income/subtractions/vt_capital_gain_exclusion/vt_percentage_capital_gains_exclusion.py b/fiscalsim_us/variables/gov/states/vt/tax/income/adjusted_gross_income/subtractions/vt_capital_gain_exclusion/vt_percentage_capital_gains_exclusion.py index fc30fc8b0..0dc4b13ba 100644 --- a/fiscalsim_us/variables/gov/states/vt/tax/income/adjusted_gross_income/subtractions/vt_capital_gain_exclusion/vt_percentage_capital_gains_exclusion.py +++ b/fiscalsim_us/variables/gov/states/vt/tax/income/adjusted_gross_income/subtractions/vt_capital_gain_exclusion/vt_percentage_capital_gains_exclusion.py @@ -6,7 +6,7 @@ class vt_percentage_capital_gains_exclusion(Variable): entity = TaxUnit label = "Vermont percentage capital gains exclusion" unit = USD - documentation = "This can be selected to be subtracted from federal adjusted gross income in Vermont as percentage captial gains exclusion." + documentation = "This can be selected to be subtracted from federal adjusted gross income in Vermont as percentage capital gains exclusion." definition_period = YEAR defined_for = StateCode.VT reference = ( @@ -20,10 +20,18 @@ def formula(tax_unit, period, parameters): adjusted_net_capital_gain = tax_unit( "adjusted_net_capital_gain", period ) + qualified_dividend_income = add( + tax_unit, period, ["qualified_dividend_income"] + ) + reduced_adjusted_net_capital_gain = max_( + adjusted_net_capital_gain - qualified_dividend_income, 0 + ) p = parameters( period ).gov.states.vt.tax.income.agi.exclusions.capital_gain # The percentage exclusion equals to a percentage of # the adjusted net capital gain and has a maximum value - percentage_exclusion = adjusted_net_capital_gain * p.percentage.rate + percentage_exclusion = ( + reduced_adjusted_net_capital_gain * p.percentage.rate + ) return min_(percentage_exclusion, p.percentage.cap) diff --git a/fiscalsim_us/variables/gov/states/vt/tax/income/adjusted_gross_income/vt_agi_additions.py b/fiscalsim_us/variables/gov/states/vt/tax/income/adjusted_gross_income/vt_additions.py similarity index 93% rename from fiscalsim_us/variables/gov/states/vt/tax/income/adjusted_gross_income/vt_agi_additions.py rename to fiscalsim_us/variables/gov/states/vt/tax/income/adjusted_gross_income/vt_additions.py index c90ae68f4..45182c388 100644 --- a/fiscalsim_us/variables/gov/states/vt/tax/income/adjusted_gross_income/vt_agi_additions.py +++ b/fiscalsim_us/variables/gov/states/vt/tax/income/adjusted_gross_income/vt_additions.py @@ -1,7 +1,7 @@ from fiscalsim_us.model_api import * -class vt_agi_additions(Variable): +class vt_additions(Variable): value_type = float entity = TaxUnit label = "Vermont AGI additions" diff --git a/fiscalsim_us/variables/gov/states/vt/tax/income/adjusted_gross_income/vt_agi.py b/fiscalsim_us/variables/gov/states/vt/tax/income/adjusted_gross_income/vt_agi.py index c8e86fe5e..8abc97cb6 100644 --- a/fiscalsim_us/variables/gov/states/vt/tax/income/adjusted_gross_income/vt_agi.py +++ b/fiscalsim_us/variables/gov/states/vt/tax/income/adjusted_gross_income/vt_agi.py @@ -10,5 +10,5 @@ class vt_agi(Variable): defined_for = StateCode.VT reference = "https://tax.vermont.gov/sites/tax/files/documents/IN-111-2022.pdf (Line 3)" - adds = ["adjusted_gross_income", "vt_agi_additions"] + adds = ["adjusted_gross_income", "vt_additions"] subtracts = ["vt_subtractions"] diff --git a/fiscalsim_us/variables/gov/states/vt/tax/income/credits/cdcc/vt_cdcc.py b/fiscalsim_us/variables/gov/states/vt/tax/income/credits/cdcc/vt_cdcc.py new file mode 100644 index 000000000..af1a2f176 --- /dev/null +++ b/fiscalsim_us/variables/gov/states/vt/tax/income/credits/cdcc/vt_cdcc.py @@ -0,0 +1,21 @@ +from fiscalsim_us.model_api import * + + +class vt_cdcc(Variable): + value_type = float + entity = TaxUnit + label = "Vermont child care and dependent care credit" + unit = USD + definition_period = YEAR + reference = ( + "https://tax.vermont.gov/sites/tax/files/documents/IN-112-2022.pdf#page=2" + "https://law.justia.com/codes/vermont/2022/title-32/chapter-151/section-5828c/" + "https://www.irs.gov/pub/irs-prior/f2441--2022.pdf#page=1" + ) + defined_for = StateCode.VT + + def formula(tax_unit, period, parameters): + p = parameters(period).gov.states.vt.tax.income.credits.cdcc + # The form refers to 2022 Form 2441 line 11, which caps the credit at tax liability. + federal_cdcc = tax_unit("capped_cdcc", period) + return federal_cdcc * p.rate diff --git a/fiscalsim_us/variables/gov/states/vt/tax/income/credits/cdcc/vt_low_income_cdcc.py b/fiscalsim_us/variables/gov/states/vt/tax/income/credits/cdcc/vt_low_income_cdcc.py new file mode 100644 index 000000000..cac8b19a0 --- /dev/null +++ b/fiscalsim_us/variables/gov/states/vt/tax/income/credits/cdcc/vt_low_income_cdcc.py @@ -0,0 +1,19 @@ +from fiscalsim_us.model_api import * + + +class vt_low_income_cdcc(Variable): + value_type = float + entity = TaxUnit + label = "Vermont low-income child care and dependent care credit" + unit = USD + definition_period = YEAR + reference = ( + "https://tax.vermont.gov/sites/tax/files/documents/IN-112-2021.pdf#page=2" + "https://law.justia.com/codes/vermont/2021/title-32/chapter-151/section-5828c/" + ) + defined_for = "vt_low_income_cdcc_eligible" + + def formula(tax_unit, period, parameters): + p = parameters(period).gov.states.vt.tax.income.credits.cdcc.low_income + federal_cdcc = tax_unit("capped_cdcc", period) + return p.rate * federal_cdcc diff --git a/fiscalsim_us/variables/gov/states/vt/tax/income/credits/cdcc/vt_low_income_cdcc_eligible.py b/fiscalsim_us/variables/gov/states/vt/tax/income/credits/cdcc/vt_low_income_cdcc_eligible.py new file mode 100644 index 000000000..ed7a54311 --- /dev/null +++ b/fiscalsim_us/variables/gov/states/vt/tax/income/credits/cdcc/vt_low_income_cdcc_eligible.py @@ -0,0 +1,21 @@ +from fiscalsim_us.model_api import * + + +class vt_low_income_cdcc_eligible(Variable): + value_type = bool + entity = TaxUnit + label = "Eligible for the Vermont low-income child care and dependent care credit" + definition_period = YEAR + reference = ( + "https://tax.vermont.gov/sites/tax/files/documents/IN-112-2021.pdf#page=2" + "https://law.justia.com/codes/vermont/2021/title-32/chapter-151/section-5828c/" + ) + defined_for = StateCode.VT + + def formula(tax_unit, period, parameters): + p = parameters(period).gov.states.vt.tax.income.credits.cdcc.low_income + filing_status = tax_unit("filing_status", period) + federal_agi_threshold = p.income_threshold[filing_status] + federal_agi = tax_unit("adjusted_gross_income", period) + # Law says "less than" but tax form says "$x or less". We apply form rules. + return federal_agi <= federal_agi_threshold diff --git a/fiscalsim_us/variables/gov/states/vt/tax/income/credits/ctc/vt_ctc.py b/fiscalsim_us/variables/gov/states/vt/tax/income/credits/ctc/vt_ctc.py new file mode 100644 index 000000000..064c6db91 --- /dev/null +++ b/fiscalsim_us/variables/gov/states/vt/tax/income/credits/ctc/vt_ctc.py @@ -0,0 +1,29 @@ +from fiscalsim_us.model_api import * + + +class vt_ctc(Variable): + value_type = float + entity = TaxUnit + label = "Vermont child tax credit" + definition_period = YEAR + unit = USD + reference = "https://casetext.com/statute/vermont-statutes/title-32-taxation-and-finance/chapter-151-income-taxes/subchapter-002-taxation-of-individuals-trusts-and-estates/section-5830f-see-note-vermont-child-tax-credit/1" + defined_for = StateCode.VT + + def formula(tax_unit, period, parameters): + # Get age status of all people in the tax unit. + person = tax_unit.members + age = person("age", period) + p = parameters(period).gov.states.vt.tax.income.credits.ctc + eligible = age <= p.age_limit + count_eligible = tax_unit.sum(eligible) + # Get maximum credit amount. + max_credit = p.amount * count_eligible + # Get adjusted gross income. + agi = tax_unit("adjusted_gross_income", period) + # Reduce credit amount over the phaseout range. + excess_agi = max_(agi - p.reduction.start, 0) + increments = np.ceil(excess_agi / p.reduction.increment) + total_reduction = p.reduction.amount * increments + # Return reduced credit amount. + return max_(max_credit - total_reduction, 0) diff --git a/fiscalsim_us/variables/gov/states/vt/tax/income/credits/renter/vt_renter_credit.py b/fiscalsim_us/variables/gov/states/vt/tax/income/credits/renter/vt_renter_credit.py new file mode 100644 index 000000000..bb2a7dca6 --- /dev/null +++ b/fiscalsim_us/variables/gov/states/vt/tax/income/credits/renter/vt_renter_credit.py @@ -0,0 +1,75 @@ +from fiscalsim_us.model_api import * + + +class vt_renter_credit(Variable): + value_type = float + entity = TaxUnit + label = "Vermont renter credit" + unit = USD + definition_period = YEAR + reference = ( + "https://law.justia.com/codes/vermont/2022/title-32/chapter-154/section-6066/" # b + "https://tax.vermont.gov/sites/tax/files/documents/Income%20Booklet-2022.pdf#page=35" + # the formula used in this file is based on the excel sheet provided on the official Vermont government website + "https://tax.vermont.gov/individuals/renter-credit/calculator-and-credit-amounts" # link for the excel sheet + ) + defined_for = StateCode.VT + + def formula(tax_unit, period, parameters): + p = parameters(period).gov.states.vt.tax.income.credits.renter + # get tax unit size and county. + tax_unit_size = tax_unit("tax_unit_size", period) + county = tax_unit.household("county", period) + # locate the values by family size and county + full_credit_income_limit = p.income_limit_ami.thirty_percent[ + tax_unit_size + ][county] + partial_credit_income_limit = p.income_limit_ami.fifty_percent[ + tax_unit_size + ][county] + fmr = p.fair_market_rent[tax_unit_size][county] + base_credit_amount = fmr * MONTHS_IN_YEAR * p.fmr_rate + + # Compute what the spreadsheet calls the "percent reabte claimable" + vt_renter_credit_income = tax_unit("vt_renter_credit_income", period) + income_diff = partial_credit_income_limit - vt_renter_credit_income + income_threshold_diff = ( + partial_credit_income_limit - full_credit_income_limit + ) + percent_rebate_claimable = income_diff / income_threshold_diff + # If shared residence, reduce by a given fraction. + shared_rent = tax_unit("rent_is_shared_with_another_tax_unit", period) + shared_residence_reduction = shared_rent * p.shared_residence_reduction + # if subsidized, get base credit + has_housing_assistance = ( + tax_unit.spm_unit("housing_assistance", period) > 0 + ) + rent_amount = add(tax_unit, period, ["rent"]) + base_credit_subsidized = rent_amount * p.fmr_rate + + # income > partial credit income limit, then credit is 0 + # income < full credit income limit, then credit is fair market rent + # income is between partial credit income limit and full credit income limit: + ## if no subsidized: (partial credit income limit - income)/(partial credit income limit - full credit income limit) * fair market rent + ## if subsidized: (partial credit income limit - income)/(partial credit income limit - full credit income limit) * actual pay rent amount * rent rate + # for all of the above situations, mulitple by the share rent rate if the the rental unit was shared + high_income = vt_renter_credit_income > partial_credit_income_limit + low_income = vt_renter_credit_income < full_credit_income_limit + mid_income = ~(high_income | low_income) + credit_value = select( + [ + low_income & ~has_housing_assistance, + low_income & has_housing_assistance, + mid_income & ~has_housing_assistance, + mid_income & has_housing_assistance, + ], + [ + base_credit_amount, + base_credit_subsidized, + percent_rebate_claimable * base_credit_amount, + percent_rebate_claimable * base_credit_subsidized, + ], + default=0, + ) + unrounded = credit_value * (1 - shared_residence_reduction) + return np.round(unrounded) diff --git a/fiscalsim_us/variables/gov/states/vt/tax/income/credits/renter/vt_renter_credit_countable_tax_exempt_ss.py b/fiscalsim_us/variables/gov/states/vt/tax/income/credits/renter/vt_renter_credit_countable_tax_exempt_ss.py new file mode 100644 index 000000000..08521213b --- /dev/null +++ b/fiscalsim_us/variables/gov/states/vt/tax/income/credits/renter/vt_renter_credit_countable_tax_exempt_ss.py @@ -0,0 +1,21 @@ +from fiscalsim_us.model_api import * + + +class vt_renter_credit_countable_tax_exempt_ss(Variable): + value_type = float + entity = TaxUnit + label = "Vermont renter credit countable tax exempt social security" + unit = USD + definition_period = YEAR + reference = ( + "https://law.justia.com/codes/vermont/2022/title-32/chapter-154/section-6061/", # (18)(C) + "https://tax.vermont.gov/sites/tax/files/documents/Income%20Booklet-2022.pdf#page=36", + ) + defined_for = StateCode.VT + + def formula(tax_unit, period, parameters): + p = parameters(period).gov.states.vt.tax.income.credits.renter + return ( + tax_unit("tax_exempt_social_security", period) + * p.countable_tax_exempt_ss_fraction + ) diff --git a/fiscalsim_us/variables/gov/states/vt/tax/income/credits/renter/vt_renter_credit_income.py b/fiscalsim_us/variables/gov/states/vt/tax/income/credits/renter/vt_renter_credit_income.py new file mode 100644 index 000000000..452d54882 --- /dev/null +++ b/fiscalsim_us/variables/gov/states/vt/tax/income/credits/renter/vt_renter_credit_income.py @@ -0,0 +1,20 @@ +from fiscalsim_us.model_api import * + + +class vt_renter_credit_income(Variable): + value_type = float + entity = TaxUnit + label = "Vermont renter credit income" + unit = USD + definition_period = YEAR + reference = ( + "https://law.justia.com/codes/vermont/2022/title-32/chapter-154/section-6061/", # (18) + "https://tax.vermont.gov/sites/tax/files/documents/Income%20Booklet-2022.pdf#page=36", + ) + defined_for = StateCode.VT + + adds = [ + "adjusted_gross_income", + "vt_renter_credit_countable_tax_exempt_ss", + "tax_exempt_interest_income", + ] diff --git a/fiscalsim_us/variables/gov/states/vt/tax/income/credits/vt_charitable_contributions_credit.py b/fiscalsim_us/variables/gov/states/vt/tax/income/credits/vt_charitable_contributions_credit.py new file mode 100644 index 000000000..3c37d7e80 --- /dev/null +++ b/fiscalsim_us/variables/gov/states/vt/tax/income/credits/vt_charitable_contributions_credit.py @@ -0,0 +1,23 @@ +from fiscalsim_us.model_api import * + + +class vt_charitable_contribution_credit(Variable): + value_type = float + entity = TaxUnit + label = "Vermont charitable contribution credit" + unit = USD + definition_period = YEAR + reference = ( + "https://law.justia.com/codes/vermont/2022/title-32/chapter-151/section-5822/" + "https://tax.vermont.gov/sites/tax/files/documents/IN-111-2022.pdf#page=1" + ) + defined_for = StateCode.VT + + def formula(tax_unit, period, parameters): + charitable_contributions = add( + tax_unit, + period, + ["charitable_cash_donations", "charitable_non_cash_donations"], + ) + p = parameters(period).gov.states.vt.tax.income.credits + return p.charitable.calc(charitable_contributions) diff --git a/fiscalsim_us/variables/gov/states/vt/tax/income/credits/vt_elderly_or_disabled_credit.py b/fiscalsim_us/variables/gov/states/vt/tax/income/credits/vt_elderly_or_disabled_credit.py new file mode 100644 index 000000000..b20c61b8d --- /dev/null +++ b/fiscalsim_us/variables/gov/states/vt/tax/income/credits/vt_elderly_or_disabled_credit.py @@ -0,0 +1,23 @@ +from fiscalsim_us.model_api import * + + +class vt_elderly_or_disabled_credit(Variable): + value_type = float + entity = TaxUnit + definition_period = YEAR + label = "Vermont elderly or disabled credit" + documentation = "Schedule R credit for the elderly and the disabled" + unit = USD + reference = ( + "https://tax.vermont.gov/individuals/personal-income-tax/tax-credits" + ) + defined_for = StateCode.VT + # The Investment Tax Credit and Vermont Farm Income Averaging Credit are also subject to the match + # these are currently not included + + def formula(tax_unit, period, parameters): + p = parameters(period).gov.states.vt.tax.income.credits + us_elderly_disabled_credit = tax_unit( + "elderly_disabled_credit", period + ) + return p.elderly_or_disabled * us_elderly_disabled_credit diff --git a/fiscalsim_us/variables/gov/states/vt/tax/income/exemptions/vt_personal_exemptions.py b/fiscalsim_us/variables/gov/states/vt/tax/income/exemptions/vt_personal_exemptions.py index cd8c1c493..0cc6116a6 100644 --- a/fiscalsim_us/variables/gov/states/vt/tax/income/exemptions/vt_personal_exemptions.py +++ b/fiscalsim_us/variables/gov/states/vt/tax/income/exemptions/vt_personal_exemptions.py @@ -14,17 +14,13 @@ class vt_personal_exemptions(Variable): def formula(tax_unit, period, parameters): p = parameters(period).gov.states.vt.tax.income.exemption - # First, Need to determine the tax unit filing status, if they are filing jointly - filing_status = tax_unit("filing_status", period) - is_joint = filing_status == filing_status.possible_values.JOINT - # Then, determine whether either the head or the spouse of the tax unit is claimable as a dependent in another unit. - claimable_elsewhere_head = tax_unit("dsi", period) - claimable_elsewhere_spouse = tax_unit("dsi_spouse", period) - # If claimable elsewhere, it is not eligible for vt personal exemption (line 5a, line 5b) - eligible_head = (~claimable_elsewhere_head).astype(int) - eligible_spouse = (~claimable_elsewhere_spouse).astype(int) + is_joint = tax_unit("tax_unit_is_joint", period) + elsewhere_head = tax_unit("head_is_dependent_elsewhere", period) + elsewhere_spouse = tax_unit("spouse_is_dependent_elsewhere", period) + eligible_head = (~elsewhere_head).astype(int) + eligible_spouse = (~elsewhere_spouse).astype(int) eligible_count = eligible_head + (eligible_spouse * is_joint) - # Last, add number of other dependents claimed on federal Form 1040.(line 5c) + # add number of other dependents claimed on federal Form 1040 (line 5c) dependents = tax_unit("tax_unit_count_dependents", period) total_exemption_count = eligible_count + dependents return total_exemption_count * p.personal diff --git a/fiscalsim_us/variables/gov/states/vt/tax/income/vt_amt.py b/fiscalsim_us/variables/gov/states/vt/tax/income/vt_amt.py new file mode 100644 index 000000000..4c3004be3 --- /dev/null +++ b/fiscalsim_us/variables/gov/states/vt/tax/income/vt_amt.py @@ -0,0 +1,28 @@ +from fiscalsim_us.model_api import * + + +class vt_amt(Variable): + value_type = float + entity = TaxUnit + label = "Vermont alternative minimum tax (AMT)" + unit = USD + definition_period = YEAR + reference = ( + "https://casetext.com/statute/vermont-statutes/title-32-taxation-and-finance/chapter-151-income-taxes/subchapter-002-taxation-of-individuals-trusts-and-estates/section-5822-tax-on-income-of-individuals-estates-and-trusts", # Vermont §5822. Tax on income of individuals, estates, and trusts (a) + "https://tax.vermont.gov/sites/tax/files/documents/RateSched-2021.pdf#page=1", # Vermont 2021 Income Tax Rate Schedules + "https://tax.vermont.gov/sites/tax/files/documents/RateSched-2022.pdf#page=1", # Vermont 2022 Income Tax Return Booklet Forms and Instructions + ) + defined_for = StateCode.VT + + def formula(tax_unit, period, parameters): + p = parameters(period).gov.states.vt.tax.income.rates + # If AGI is bigger than a threshold, then we need to further compare a percentage + # of Adjusted Gross Income less interest from U.S. obligations and the initial Tax + # Rate Schedule calculation. + # The reduction of AGI by U.S. obligations is mentioned only in the tax forms, but + # not in the legal code (Vermont §5822 (a)(6)). + federal_agi = tax_unit("adjusted_gross_income", period) + us_govt_interest = tax_unit("us_govt_interest", period) + amt_rate = p.amt.calc(federal_agi) + base_amt = amt_rate * federal_agi + return max_(base_amt - us_govt_interest, 0) diff --git a/fiscalsim_us/variables/gov/states/vt/tax/income/vt_eitc.py b/fiscalsim_us/variables/gov/states/vt/tax/income/vt_eitc.py index 2c28349c6..0a0869218 100644 --- a/fiscalsim_us/variables/gov/states/vt/tax/income/vt_eitc.py +++ b/fiscalsim_us/variables/gov/states/vt/tax/income/vt_eitc.py @@ -11,6 +11,6 @@ class vt_eitc(Variable): defined_for = StateCode.VT def formula(tax_unit, period, parameters): - eitc = tax_unit("earned_income_tax_credit", period) + federal_eitc = tax_unit("eitc", period) rate = parameters(period).gov.states.vt.tax.income.credits.eitc.match - return eitc * rate + return federal_eitc * rate diff --git a/fiscalsim_us/variables/gov/states/vt/tax/income/vt_income_tax_before_non_refundable_credits.py b/fiscalsim_us/variables/gov/states/vt/tax/income/vt_income_tax_before_non_refundable_credits.py index 08b65ccd3..06036bffc 100644 --- a/fiscalsim_us/variables/gov/states/vt/tax/income/vt_income_tax_before_non_refundable_credits.py +++ b/fiscalsim_us/variables/gov/states/vt/tax/income/vt_income_tax_before_non_refundable_credits.py @@ -8,25 +8,13 @@ class vt_income_tax_before_non_refundable_credits(Variable): unit = USD definition_period = YEAR defined_for = StateCode.VT + reference = ( + "https://casetext.com/statute/vermont-statutes/title-32-taxation-and-finance/chapter-151-income-taxes/subchapter-002-taxation-of-individuals-trusts-and-estates/section-5822-tax-on-income-of-individuals-estates-and-trusts", # Vermont §5822. Tax on income of individuals, estates, and trusts (a) + "https://tax.vermont.gov/sites/tax/files/documents/RateSched-2021.pdf#page=1", # Vermont 2021 Income Tax Rate Schedules + "https://tax.vermont.gov/sites/tax/files/documents/RateSched-2022.pdf#page=1", # Vermont 2022 Income Tax Return Booklet Forms and Instructions + ) def formula(tax_unit, period, parameters): - income = tax_unit("vt_taxable_income", period) - filing_status = tax_unit("filing_status", period) - status = filing_status.possible_values - p = parameters(period).gov.states.vt.tax.income.rates - return select( - [ - filing_status == status.SINGLE, - filing_status == status.JOINT, - filing_status == status.SEPARATE, - filing_status == status.SURVIVING_SPOUSE, - filing_status == status.HEAD_OF_HOUSEHOLD, - ], - [ - p.single.calc(income), - p.joint.calc(income), - p.separate.calc(income), - p.widow.calc(income), - p.head_of_household.calc(income), - ], - ) + vt_amt = tax_unit("vt_amt", period) + vt_normal_income_tax = tax_unit("vt_normal_income_tax", period) + return max_(vt_normal_income_tax, vt_amt) diff --git a/fiscalsim_us/variables/gov/states/vt/tax/income/vt_normal_income_tax.py b/fiscalsim_us/variables/gov/states/vt/tax/income/vt_normal_income_tax.py new file mode 100644 index 000000000..a6ae77d4e --- /dev/null +++ b/fiscalsim_us/variables/gov/states/vt/tax/income/vt_normal_income_tax.py @@ -0,0 +1,37 @@ +from fiscalsim_us.model_api import * + + +class vt_normal_income_tax(Variable): + value_type = float + entity = TaxUnit + label = "Vermont normal income tax before non-refundable credits" + unit = USD + definition_period = YEAR + defined_for = StateCode.VT + reference = ( + "https://casetext.com/statute/vermont-statutes/title-32-taxation-and-finance/chapter-151-income-taxes/subchapter-002-taxation-of-individuals-trusts-and-estates/section-5822-tax-on-income-of-individuals-estates-and-trusts", # Vermont §5822. Tax on income of individuals, estates, and trusts (a) + "https://tax.vermont.gov/sites/tax/files/documents/RateSched-2021.pdf#page=1", # Vermont 2021 Income Tax Rate Schedules + "https://tax.vermont.gov/sites/tax/files/documents/RateSched-2022.pdf#page=1", # Vermont 2022 Income Tax Return Booklet Forms and Instructions + ) + + def formula(tax_unit, period, parameters): + income = tax_unit("vt_taxable_income", period) + filing_status = tax_unit("filing_status", period) + status = filing_status.possible_values + p = parameters(period).gov.states.vt.tax.income.rates + return select( + [ + filing_status == status.SINGLE, + filing_status == status.JOINT, + filing_status == status.SEPARATE, + filing_status == status.SURVIVING_SPOUSE, + filing_status == status.HEAD_OF_HOUSEHOLD, + ], + [ + p.single.calc(income), + p.joint.calc(income), + p.separate.calc(income), + p.widow.calc(income), + p.head_of_household.calc(income), + ], + ) diff --git a/fiscalsim_us/variables/gov/states/vt/tax/income/vt_withheld_income_tax.py b/fiscalsim_us/variables/gov/states/vt/tax/income/vt_withheld_income_tax.py new file mode 100644 index 000000000..f36b5bf7e --- /dev/null +++ b/fiscalsim_us/variables/gov/states/vt/tax/income/vt_withheld_income_tax.py @@ -0,0 +1,18 @@ +from fiscalsim_us.model_api import * + + +class vt_withheld_income_tax(Variable): + value_type = float + entity = Person + label = "Vermont withheld income tax" + defined_for = StateCode.VT + unit = USD + definition_period = YEAR + + def formula(person, period, parameters): + agi = person("adjusted_gross_income_person", period) + p = parameters(period).gov.states.vt.tax.income + # We apply the base standard deduction amount + personal_exmptions = p.deductions.standard.base["SINGLE"] + reduced_agi = max_(agi - personal_exmptions, 0) + return p.rates.single.calc(reduced_agi) diff --git a/fiscalsim_us/variables/household/demographic/household/rent_is_shared_with_another_tax_unit.py b/fiscalsim_us/variables/household/demographic/household/rent_is_shared_with_another_tax_unit.py new file mode 100644 index 000000000..09959fa26 --- /dev/null +++ b/fiscalsim_us/variables/household/demographic/household/rent_is_shared_with_another_tax_unit.py @@ -0,0 +1,8 @@ +from fiscalsim_us.model_api import * + + +class rent_is_shared_with_another_tax_unit(Variable): + value_type = bool + entity = TaxUnit + label = "Whether the household shares rent with others" + definition_period = YEAR diff --git a/fiscalsim_us/variables/household/demographic/person/claimed_as_dependent_on_another_return.py b/fiscalsim_us/variables/household/demographic/person/claimed_as_dependent_on_another_return.py new file mode 100644 index 000000000..7ca16ce70 --- /dev/null +++ b/fiscalsim_us/variables/household/demographic/person/claimed_as_dependent_on_another_return.py @@ -0,0 +1,11 @@ +from fiscalsim_us.model_api import * + + +class claimed_as_dependent_on_another_return(Variable): + value_type = bool + entity = Person + definition_period = YEAR + label = "Is claimed as a dependent elsewhere" + documentation = ( + "Whether the person is claimed as a dependent in another tax unit." + ) diff --git a/fiscalsim_us/variables/household/demographic/person/retired_from_federal_government.py b/fiscalsim_us/variables/household/demographic/person/retired_from_federal_government.py new file mode 100644 index 000000000..54a80d78d --- /dev/null +++ b/fiscalsim_us/variables/household/demographic/person/retired_from_federal_government.py @@ -0,0 +1,10 @@ +from fiscalsim_us.model_api import * + + +class retired_from_federal_government(Variable): + value_type = bool + entity = Person + label = "Retired from Federal Government" + definition_period = YEAR + defined_for = "is_retired" + default_value = False diff --git a/fiscalsim_us/variables/household/demographic/tax_unit/head_is_dependent_elsewhere.py b/fiscalsim_us/variables/household/demographic/tax_unit/head_is_dependent_elsewhere.py new file mode 100644 index 000000000..87657f533 --- /dev/null +++ b/fiscalsim_us/variables/household/demographic/tax_unit/head_is_dependent_elsewhere.py @@ -0,0 +1,17 @@ +from fiscalsim_us.model_api import * + + +class head_is_dependent_elsewhere(Variable): + value_type = bool + entity = TaxUnit + definition_period = YEAR + label = "Is tax-unit head a dependent elsewhere" + documentation = "Whether the filer for this tax unit is claimed as a dependent in another tax unit." + + def formula(tax_unit, period, parameters): + person = tax_unit.members + claimed_on_another_return = person( + "claimed_as_dependent_on_another_return", period + ) + is_head = person("is_tax_unit_head", period) + return tax_unit.any(claimed_on_another_return & is_head) diff --git a/fiscalsim_us/variables/household/demographic/tax_unit/is_tax_unit_head.py b/fiscalsim_us/variables/household/demographic/tax_unit/is_tax_unit_head.py index 96306e5b4..7045538e9 100644 --- a/fiscalsim_us/variables/household/demographic/tax_unit/is_tax_unit_head.py +++ b/fiscalsim_us/variables/household/demographic/tax_unit/is_tax_unit_head.py @@ -1,15 +1,15 @@ -from fiscalsim_us.model_api import * - - -class is_tax_unit_head(Variable): - value_type = bool - entity = Person - label = "Head of tax unit" - definition_period = YEAR - - def formula(person, period, parameters): - # Only adults can be heads. - eligible = ~person("is_child", period) - age = person("age", period) - tax_unit = person.tax_unit - return person.get_rank(tax_unit, -age, eligible) == 0 +from fiscalsim_us.model_api import * + + +class is_tax_unit_head(Variable): + value_type = bool + entity = Person + label = "Head of tax unit" + definition_period = YEAR + + def formula(person, period, parameters): + # Only adults can be heads. + eligible = ~person("is_child", period) + age = person("age", period) + tax_unit = person.tax_unit + return person.get_rank(tax_unit, -age, eligible) == 0 diff --git a/fiscalsim_us/variables/household/demographic/tax_unit/is_tax_unit_spouse.py b/fiscalsim_us/variables/household/demographic/tax_unit/is_tax_unit_spouse.py index 1574f0014..497b36c5d 100644 --- a/fiscalsim_us/variables/household/demographic/tax_unit/is_tax_unit_spouse.py +++ b/fiscalsim_us/variables/household/demographic/tax_unit/is_tax_unit_spouse.py @@ -1,5 +1,4 @@ from fiscalsim_us.model_api import * -from policyengine_core.populations import GroupPopulation, Population class is_tax_unit_spouse(Variable): @@ -10,9 +9,10 @@ class is_tax_unit_spouse(Variable): def formula(person, period, parameters): # Only non-head adults can be spouses. + is_separated = person.tax_unit.any(person("is_separated", period)) adult = ~person("is_child", period) head = person("is_tax_unit_head", period) - eligible = adult & ~head + eligible = adult & ~head & ~is_separated tax_unit = person.tax_unit age = person("age", period) return person.get_rank(tax_unit, -age, eligible) == 0 diff --git a/fiscalsim_us/variables/household/demographic/tax_unit/spouse_is_dependent_elsewhere.py b/fiscalsim_us/variables/household/demographic/tax_unit/spouse_is_dependent_elsewhere.py new file mode 100644 index 000000000..0e3b6877d --- /dev/null +++ b/fiscalsim_us/variables/household/demographic/tax_unit/spouse_is_dependent_elsewhere.py @@ -0,0 +1,17 @@ +from fiscalsim_us.model_api import * + + +class spouse_is_dependent_elsewhere(Variable): + value_type = bool + entity = TaxUnit + definition_period = YEAR + label = "Tax-unit spouse is dependent elsewhere" + documentation = "Whether the spouse of the filer for this tax unit is claimed as a dependent in another tax unit." + + def formula(tax_unit, period, parameters): + person = tax_unit.members + claimed_on_another_return = person( + "claimed_as_dependent_on_another_return", period + ) + is_spouse = person("is_tax_unit_spouse", period) + return tax_unit.any(claimed_on_another_return & is_spouse) diff --git a/setup.py b/setup.py index ae2422f08..0cd70d434 100644 --- a/setup.py +++ b/setup.py @@ -7,7 +7,7 @@ setup( name="fiscalsim-us", - version="0.3.2", + version="0.3.3", author="Richard W. Evans", author_email="rick@abundance.institute", long_description=readme,