From 8f22563d1e6a0f11318919557ba5edf35614a5a8 Mon Sep 17 00:00:00 2001 From: Shayla Wu Date: Thu, 20 Apr 2023 16:04:35 -0400 Subject: [PATCH 1/8] Maryland Tanf add Variables Fixes #2154 --- .../tanf/income/deductions/earned/earned.yaml | 15 +++++++++ .../income/deductions/earned/unearned.yaml | 19 +++++++++++ .../income/deductions/earned/workhours.yaml | 12 +++++++ .../md_tanf_continuous_earnings_deduction.py | 33 +++++++++++++++++++ .../md_tanf_initial_earnings_deduction.py | 31 +++++++++++++++++ .../others/md_tanf_childcare_deduction.py | 21 ++++++++++++ .../md_tanf_gross_earned_income_deduction.py | 33 ------------------- .../gross/md_tanf_gross_earned_income.py | 14 ++++++++ .../gross/md_tanf_gross_unearned_income.py | 15 +++++++++ .../net/md_tanf_net_countable_income.py | 27 +++++++++++++++ .../md_tanf_net_initial_countable_income.py | 27 +++++++++++++++ 11 files changed, 214 insertions(+), 33 deletions(-) create mode 100644 policyengine_us/parameters/gov/states/md/tanf/income/deductions/earned/earned.yaml create mode 100644 policyengine_us/parameters/gov/states/md/tanf/income/deductions/earned/unearned.yaml create mode 100644 policyengine_us/parameters/gov/states/md/tanf/income/deductions/earned/workhours.yaml create mode 100644 policyengine_us/variables/gov/states/md/tanf/income/deductions/earnings/md_tanf_continuous_earnings_deduction.py create mode 100644 policyengine_us/variables/gov/states/md/tanf/income/deductions/earnings/md_tanf_initial_earnings_deduction.py create mode 100644 policyengine_us/variables/gov/states/md/tanf/income/deductions/others/md_tanf_childcare_deduction.py delete mode 100644 policyengine_us/variables/gov/states/md/tanf/income/earned/md_tanf_gross_earned_income_deduction.py create mode 100644 policyengine_us/variables/gov/states/md/tanf/income/gross/md_tanf_gross_earned_income.py create mode 100644 policyengine_us/variables/gov/states/md/tanf/income/gross/md_tanf_gross_unearned_income.py create mode 100644 policyengine_us/variables/gov/states/md/tanf/income/net/md_tanf_net_countable_income.py create mode 100644 policyengine_us/variables/gov/states/md/tanf/income/net/md_tanf_net_initial_countable_income.py diff --git a/policyengine_us/parameters/gov/states/md/tanf/income/deductions/earned/earned.yaml b/policyengine_us/parameters/gov/states/md/tanf/income/deductions/earned/earned.yaml new file mode 100644 index 00000000000..0dab7511e64 --- /dev/null +++ b/policyengine_us/parameters/gov/states/md/tanf/income/deductions/earned/earned.yaml @@ -0,0 +1,15 @@ +description: Maryland TANF counts these income sources as earned income. +values: + 2022-11-01: + - salary + - wage + - self_employment + - commission + - tips + - allowance + - irregular earnings +metadata: + unit: list + reference: + title: Temporary-Cash-Assistance-Manual | 0902 TCA Earned Income rev 11.22 | 902.1 + href: https://dhs.maryland.gov/documents/Manuals/Temporary-Cash-Assistance-Manual/0900-Financial-Eligibility/0902%20TCA%20Earned%20Income%20rev%2011.22.doc diff --git a/policyengine_us/parameters/gov/states/md/tanf/income/deductions/earned/unearned.yaml b/policyengine_us/parameters/gov/states/md/tanf/income/deductions/earned/unearned.yaml new file mode 100644 index 00000000000..61cc0aa3697 --- /dev/null +++ b/policyengine_us/parameters/gov/states/md/tanf/income/deductions/earned/unearned.yaml @@ -0,0 +1,19 @@ +description: Maryland TANF counts these income sources as unearned income. +values: + 2022-11-01: + - investment_income + - pension_income + - alimony_income + - dividend_income + - interest_income + - miscellaneous_income + - pension_income + - unemployment_compensation + - gi_cash_assistance + - social_security + - ssi +metadata: + unit: list + reference: + title: CODE OF COLORADO REGULATIONS 9 CCR 2503-6 | Income Maintenance (Volume 3) | 3.605.3 + href: https://www.sos.state.co.us/CCR/GenerateRulePdf.do?ruleVersionId=10321#page=45 diff --git a/policyengine_us/parameters/gov/states/md/tanf/income/deductions/earned/workhours.yaml b/policyengine_us/parameters/gov/states/md/tanf/income/deductions/earned/workhours.yaml new file mode 100644 index 00000000000..9f15b32d283 --- /dev/null +++ b/policyengine_us/parameters/gov/states/md/tanf/income/deductions/earned/workhours.yaml @@ -0,0 +1,12 @@ +description: Maryland workhours for verifying full-time employment . + +values: + 2022-11-01: 100 + +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/policyengine_us/variables/gov/states/md/tanf/income/deductions/earnings/md_tanf_continuous_earnings_deduction.py b/policyengine_us/variables/gov/states/md/tanf/income/deductions/earnings/md_tanf_continuous_earnings_deduction.py new file mode 100644 index 00000000000..98a895ca781 --- /dev/null +++ b/policyengine_us/variables/gov/states/md/tanf/income/deductions/earnings/md_tanf_continuous_earnings_deduction.py @@ -0,0 +1,33 @@ +from policyengine_us.model_api import * + + +class md_tanf_continuous_earnings_deduction(Variable): + value_type = float + entity = SPMUnit + label = "Maryland TANF continuous earnings deduction" + unit = USD + definition_period = YEAR + defined_for = StateCode.MD + + def formula(spm_unit, period, parameters): + # Get earned income for the SPM unit. + earned_income = add(spm_unit, period, p.earned) + # Determine if the SPM unit has any self-employment income. + self_employment_income = add( + spm_unit, period, ["self_employment_income"] + ) + # Get the policy parameters. + + p = parameters(period).gov.states.md.tanf.income.deductions.earned + + return select( + # First arg: self employed or not + [earned_income > 0, self_employment_income > 0], + # Second arg: multiply by the percent deduction (0.4, 0.5) + [ + earned_income * p.not_self_employed, + self_employment_income * p.self_employed, + ], + # Third arg: default value to return if none of the conditions are True + default=0, + ) diff --git a/policyengine_us/variables/gov/states/md/tanf/income/deductions/earnings/md_tanf_initial_earnings_deduction.py b/policyengine_us/variables/gov/states/md/tanf/income/deductions/earnings/md_tanf_initial_earnings_deduction.py new file mode 100644 index 00000000000..46f6664994f --- /dev/null +++ b/policyengine_us/variables/gov/states/md/tanf/income/deductions/earnings/md_tanf_initial_earnings_deduction.py @@ -0,0 +1,31 @@ +from policyengine_us.model_api import * + + +class md_tanf_initial_earnings_deduction(Variable): + value_type = float + entity = SPMUnit + label = "Maryland TANF initial earnings deduction" + unit = USD + definition_period = YEAR + defined_for = StateCode.MD + + def formula(spm_unit, period, parameters): + # Get earned income for the SPM unit. + earned_income = add(spm_unit, period, p.earned) + # Determine if the SPM unit has any self-employment income. + self_employment_income = add( + spm_unit, period, ["self_employment_income"] + ) + # Get the policy parameters. + + p = parameters(period).gov.states.md.tanf.income.deductions.earned + + return select( + # First arg: self employed or not + [earned_income > 0, self_employment_income > 0], + # Second arg: multiply by the percent deduction (0.2, 0.5) + [earned_income * p.new, self_employment_income * p.self_employed], + # Third arg: default value to return if none of the conditions are True + default=0, + ) + # Return if initially eligible diff --git a/policyengine_us/variables/gov/states/md/tanf/income/deductions/others/md_tanf_childcare_deduction.py b/policyengine_us/variables/gov/states/md/tanf/income/deductions/others/md_tanf_childcare_deduction.py new file mode 100644 index 00000000000..9a9b8480d96 --- /dev/null +++ b/policyengine_us/variables/gov/states/md/tanf/income/deductions/others/md_tanf_childcare_deduction.py @@ -0,0 +1,21 @@ +from policyengine_us.model_api import * +from policyengine_us.variables.gov.states.md.tanf.md_tanf_count_children import md_tanf_count_children + + +class md_tanf_childcare_deduction(Variable): + value_type = float + entity = SPMUnit + label = "Maryland TANF childcare deduction" + unit = USD + definition_period = YEAR + defined_for = StateCode.MD + + def formula(spm_unit, period, parameters): + workhours = add(spm_unit, period, ["workhour"]) + + # Get the policy parameters. + p = parameters(period).gov.states.md.tanf.income.deductions.earned + childcare_deduction = 200 * (workhours >= 100) * md_tanf_count_children + 100 * (workhours < 100) * md_tanf_count_children + + # Return if initially eligible + return childcare_deduction diff --git a/policyengine_us/variables/gov/states/md/tanf/income/earned/md_tanf_gross_earned_income_deduction.py b/policyengine_us/variables/gov/states/md/tanf/income/earned/md_tanf_gross_earned_income_deduction.py deleted file mode 100644 index 721f6b00b35..00000000000 --- a/policyengine_us/variables/gov/states/md/tanf/income/earned/md_tanf_gross_earned_income_deduction.py +++ /dev/null @@ -1,33 +0,0 @@ -from policyengine_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/policyengine_us/variables/gov/states/md/tanf/income/gross/md_tanf_gross_earned_income.py b/policyengine_us/variables/gov/states/md/tanf/income/gross/md_tanf_gross_earned_income.py new file mode 100644 index 00000000000..2731f471c0c --- /dev/null +++ b/policyengine_us/variables/gov/states/md/tanf/income/gross/md_tanf_gross_earned_income.py @@ -0,0 +1,14 @@ +from policyengine_us.model_api import * + + +class md_tanf_countable_gross_earned_income(Variable): + value_type = float + entity = SPMUnit + label = "Maryland TANF countable gross earned income" + unit = USD + definition_period = YEAR + + def formula(spm_unit, period, parameters): + p = parameters(period).gov.states.md.tanf.income.deeductions.earned + gross_earned = add(spm_unit, period, p.earned) + return gross_earned diff --git a/policyengine_us/variables/gov/states/md/tanf/income/gross/md_tanf_gross_unearned_income.py b/policyengine_us/variables/gov/states/md/tanf/income/gross/md_tanf_gross_unearned_income.py new file mode 100644 index 00000000000..06dfb1d17aa --- /dev/null +++ b/policyengine_us/variables/gov/states/md/tanf/income/gross/md_tanf_gross_unearned_income.py @@ -0,0 +1,15 @@ +from policyengine_us.model_api import * + + +class md_tanf_gross_unearned_income(Variable): + value_type = float + entity = SPMUnit + label = "Maryland TANF gross unearned income" + unit = USD + definition_period = YEAR + defined_for = StateCode.MD + + def formula(spm_unit, period, parameters): + p = parameters(period).gov.states.md.tanf.income.deeductions.earned + gross_unearned = add(spm_unit, period, p.unearned) + return gross_unearned diff --git a/policyengine_us/variables/gov/states/md/tanf/income/net/md_tanf_net_countable_income.py b/policyengine_us/variables/gov/states/md/tanf/income/net/md_tanf_net_countable_income.py new file mode 100644 index 00000000000..b60260b52f6 --- /dev/null +++ b/policyengine_us/variables/gov/states/md/tanf/income/net/md_tanf_net_countable_income.py @@ -0,0 +1,27 @@ +from policyengine_us.model_api import * + + +class md_tanf_net_countable_income(Variable): + value_type = float + entity = SPMUnit + label = "Maryland TANF net countable income" + unit = USD + definition_period = YEAR + defined_for = StateCode.MD + + def formula(spm_unit, period, parameters): + # Get gross income for the SPM unit. + gross_earned_income = spm_unit("md_tanf_gross_earned_income", period) + gross_unearned_income = spm_unit("md_tanf_gross_unearned_income", period) + # Get countinuous deductions for the SPM unit. + countinuous_deductions = spm_unit("md_tanf_continuous_earnings_deductions", period) + # Get alimony deductions for the SPM unit. + p1 = parameters(period).household.income.person.misc + alimony_deduction = add(spm_unit, period, p1.alimony_income) + # Get child support deductions for the SPM unit. + p2 = parameters(period).household.expense.child_support + child_support_deduction = add(spm_unit, period, p2.child_support_received) + # Get childcare deductions for the SPM unit. + childcare_deduction = spm_unit("md_tanf_childcare_deduction", period) + + return gross_earned_income + gross_unearned_income - countinuous_deductions - alimony_deduction - child_support_deduction - childcare_deduction diff --git a/policyengine_us/variables/gov/states/md/tanf/income/net/md_tanf_net_initial_countable_income.py b/policyengine_us/variables/gov/states/md/tanf/income/net/md_tanf_net_initial_countable_income.py new file mode 100644 index 00000000000..64fdc4b58b7 --- /dev/null +++ b/policyengine_us/variables/gov/states/md/tanf/income/net/md_tanf_net_initial_countable_income.py @@ -0,0 +1,27 @@ +from policyengine_us.model_api import * + + +class md_tanf_net_initial_countable_income(Variable): + value_type = float + entity = SPMUnit + label = "Maryland TANF net initial countable income" + unit = USD + definition_period = YEAR + defined_for = StateCode.MD + + def formula(spm_unit, period, parameters): + # Get gross income for the SPM unit. + gross_earned_income = spm_unit("md_tanf_gross_earned_income", period) + gross_unearned_income = spm_unit("md_tanf_gross_unearned_income", period) + # Get initial deductions for the SPM unit. + initial_deductions = spm_unit("md_tanf_initial_deductions", period) + # Get alimony deductions for the SPM unit. + p1 = parameters(period).household.income.person.misc + alimony_deduction = add(spm_unit, period, p1.alimony_income) + # Get child support deductions for the SPM unit. + p2 = parameters(period).household.expense.child_support + child_support_deduction = add(spm_unit, period, p2.child_support_received) + # Get childcare deductions for the SPM unit. + childcare_deduction = spm_unit("md_tanf_childcare_deduction", period) + + return gross_earned_income + gross_unearned_income - initial_deductions - alimony_deduction - child_support_deduction - childcare_deduction From 48f291a5470d5eca5ddb109f50888bbe9c98d896 Mon Sep 17 00:00:00 2001 From: Shayla Wu Date: Wed, 26 Apr 2023 10:07:59 -0400 Subject: [PATCH 2/8] Maryland Tanf make format of new variable files Fixes #2154 --- changelog_entry.yaml | 1 + .../others/md_tanf_childcare_deduction.py | 11 +++++++--- .../net/md_tanf_net_countable_income.py | 21 +++++++++++++++---- .../md_tanf_net_initial_countable_income.py | 17 ++++++++++++--- 4 files changed, 40 insertions(+), 10 deletions(-) diff --git a/changelog_entry.yaml b/changelog_entry.yaml index e69de29bb2d..8b137891791 100644 --- a/changelog_entry.yaml +++ b/changelog_entry.yaml @@ -0,0 +1 @@ + diff --git a/policyengine_us/variables/gov/states/md/tanf/income/deductions/others/md_tanf_childcare_deduction.py b/policyengine_us/variables/gov/states/md/tanf/income/deductions/others/md_tanf_childcare_deduction.py index 9a9b8480d96..654fd70cade 100644 --- a/policyengine_us/variables/gov/states/md/tanf/income/deductions/others/md_tanf_childcare_deduction.py +++ b/policyengine_us/variables/gov/states/md/tanf/income/deductions/others/md_tanf_childcare_deduction.py @@ -1,5 +1,7 @@ from policyengine_us.model_api import * -from policyengine_us.variables.gov.states.md.tanf.md_tanf_count_children import md_tanf_count_children +from policyengine_us.variables.gov.states.md.tanf.md_tanf_count_children import ( + md_tanf_count_children, +) class md_tanf_childcare_deduction(Variable): @@ -15,7 +17,10 @@ def formula(spm_unit, period, parameters): # Get the policy parameters. p = parameters(period).gov.states.md.tanf.income.deductions.earned - childcare_deduction = 200 * (workhours >= 100) * md_tanf_count_children + 100 * (workhours < 100) * md_tanf_count_children - + childcare_deduction = ( + 200 * (workhours >= 100) * md_tanf_count_children + + 100 * (workhours < 100) * md_tanf_count_children + ) + # Return if initially eligible return childcare_deduction diff --git a/policyengine_us/variables/gov/states/md/tanf/income/net/md_tanf_net_countable_income.py b/policyengine_us/variables/gov/states/md/tanf/income/net/md_tanf_net_countable_income.py index b60260b52f6..6fb0cd9ea27 100644 --- a/policyengine_us/variables/gov/states/md/tanf/income/net/md_tanf_net_countable_income.py +++ b/policyengine_us/variables/gov/states/md/tanf/income/net/md_tanf_net_countable_income.py @@ -12,16 +12,29 @@ class md_tanf_net_countable_income(Variable): def formula(spm_unit, period, parameters): # Get gross income for the SPM unit. gross_earned_income = spm_unit("md_tanf_gross_earned_income", period) - gross_unearned_income = spm_unit("md_tanf_gross_unearned_income", period) + gross_unearned_income = spm_unit( + "md_tanf_gross_unearned_income", period + ) # Get countinuous deductions for the SPM unit. - countinuous_deductions = spm_unit("md_tanf_continuous_earnings_deductions", period) + countinuous_deductions = spm_unit( + "md_tanf_continuous_earnings_deductions", period + ) # Get alimony deductions for the SPM unit. p1 = parameters(period).household.income.person.misc alimony_deduction = add(spm_unit, period, p1.alimony_income) # Get child support deductions for the SPM unit. p2 = parameters(period).household.expense.child_support - child_support_deduction = add(spm_unit, period, p2.child_support_received) + child_support_deduction = add( + spm_unit, period, p2.child_support_received + ) # Get childcare deductions for the SPM unit. childcare_deduction = spm_unit("md_tanf_childcare_deduction", period) - return gross_earned_income + gross_unearned_income - countinuous_deductions - alimony_deduction - child_support_deduction - childcare_deduction + return ( + gross_earned_income + + gross_unearned_income + - countinuous_deductions + - alimony_deduction + - child_support_deduction + - childcare_deduction + ) diff --git a/policyengine_us/variables/gov/states/md/tanf/income/net/md_tanf_net_initial_countable_income.py b/policyengine_us/variables/gov/states/md/tanf/income/net/md_tanf_net_initial_countable_income.py index 64fdc4b58b7..f3fb442310c 100644 --- a/policyengine_us/variables/gov/states/md/tanf/income/net/md_tanf_net_initial_countable_income.py +++ b/policyengine_us/variables/gov/states/md/tanf/income/net/md_tanf_net_initial_countable_income.py @@ -12,7 +12,9 @@ class md_tanf_net_initial_countable_income(Variable): def formula(spm_unit, period, parameters): # Get gross income for the SPM unit. gross_earned_income = spm_unit("md_tanf_gross_earned_income", period) - gross_unearned_income = spm_unit("md_tanf_gross_unearned_income", period) + gross_unearned_income = spm_unit( + "md_tanf_gross_unearned_income", period + ) # Get initial deductions for the SPM unit. initial_deductions = spm_unit("md_tanf_initial_deductions", period) # Get alimony deductions for the SPM unit. @@ -20,8 +22,17 @@ def formula(spm_unit, period, parameters): alimony_deduction = add(spm_unit, period, p1.alimony_income) # Get child support deductions for the SPM unit. p2 = parameters(period).household.expense.child_support - child_support_deduction = add(spm_unit, period, p2.child_support_received) + child_support_deduction = add( + spm_unit, period, p2.child_support_received + ) # Get childcare deductions for the SPM unit. childcare_deduction = spm_unit("md_tanf_childcare_deduction", period) - return gross_earned_income + gross_unearned_income - initial_deductions - alimony_deduction - child_support_deduction - childcare_deduction + return ( + gross_earned_income + + gross_unearned_income + - initial_deductions + - alimony_deduction + - child_support_deduction + - childcare_deduction + ) From 2b53d8d1ad5eea0b3441026d16b8415d3aa01760 Mon Sep 17 00:00:00 2001 From: Shayla Wu Date: Wed, 26 Apr 2023 10:51:21 -0400 Subject: [PATCH 3/8] Maryland Tanf add Variables Fixes #2154 --- .../md/tanf/income/{deductions/earned => sources}/earned.yaml | 0 .../md/tanf/income/{deductions/earned => sources}/unearned.yaml | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename policyengine_us/parameters/gov/states/md/tanf/income/{deductions/earned => sources}/earned.yaml (100%) rename policyengine_us/parameters/gov/states/md/tanf/income/{deductions/earned => sources}/unearned.yaml (100%) diff --git a/policyengine_us/parameters/gov/states/md/tanf/income/deductions/earned/earned.yaml b/policyengine_us/parameters/gov/states/md/tanf/income/sources/earned.yaml similarity index 100% rename from policyengine_us/parameters/gov/states/md/tanf/income/deductions/earned/earned.yaml rename to policyengine_us/parameters/gov/states/md/tanf/income/sources/earned.yaml diff --git a/policyengine_us/parameters/gov/states/md/tanf/income/deductions/earned/unearned.yaml b/policyengine_us/parameters/gov/states/md/tanf/income/sources/unearned.yaml similarity index 100% rename from policyengine_us/parameters/gov/states/md/tanf/income/deductions/earned/unearned.yaml rename to policyengine_us/parameters/gov/states/md/tanf/income/sources/unearned.yaml From 0d6cea0166184187f08860d412e88aaf11d06990 Mon Sep 17 00:00:00 2001 From: Shayla Wu Date: Wed, 26 Apr 2023 12:17:23 -0400 Subject: [PATCH 4/8] Maryland tanf test files --- .../deductions/earnings/md_tanf_initial_earnings_deduction.py | 2 +- .../states/md/tanf/income/gross/md_tanf_gross_earned_income.py | 2 +- .../md/tanf/income/gross/md_tanf_gross_unearned_income.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/policyengine_us/variables/gov/states/md/tanf/income/deductions/earnings/md_tanf_initial_earnings_deduction.py b/policyengine_us/variables/gov/states/md/tanf/income/deductions/earnings/md_tanf_initial_earnings_deduction.py index 46f6664994f..d7ebb800b1f 100644 --- a/policyengine_us/variables/gov/states/md/tanf/income/deductions/earnings/md_tanf_initial_earnings_deduction.py +++ b/policyengine_us/variables/gov/states/md/tanf/income/deductions/earnings/md_tanf_initial_earnings_deduction.py @@ -18,7 +18,7 @@ def formula(spm_unit, period, parameters): ) # Get the policy parameters. - p = parameters(period).gov.states.md.tanf.income.deductions.earned + p = parameters(period).gov.states.md.tanf.income.sources return select( # First arg: self employed or not diff --git a/policyengine_us/variables/gov/states/md/tanf/income/gross/md_tanf_gross_earned_income.py b/policyengine_us/variables/gov/states/md/tanf/income/gross/md_tanf_gross_earned_income.py index 2731f471c0c..bbab12236d7 100644 --- a/policyengine_us/variables/gov/states/md/tanf/income/gross/md_tanf_gross_earned_income.py +++ b/policyengine_us/variables/gov/states/md/tanf/income/gross/md_tanf_gross_earned_income.py @@ -9,6 +9,6 @@ class md_tanf_countable_gross_earned_income(Variable): definition_period = YEAR def formula(spm_unit, period, parameters): - p = parameters(period).gov.states.md.tanf.income.deeductions.earned + p = parameters(period).gov.states.md.tanf.income.sources gross_earned = add(spm_unit, period, p.earned) return gross_earned diff --git a/policyengine_us/variables/gov/states/md/tanf/income/gross/md_tanf_gross_unearned_income.py b/policyengine_us/variables/gov/states/md/tanf/income/gross/md_tanf_gross_unearned_income.py index 06dfb1d17aa..079dae7ed16 100644 --- a/policyengine_us/variables/gov/states/md/tanf/income/gross/md_tanf_gross_unearned_income.py +++ b/policyengine_us/variables/gov/states/md/tanf/income/gross/md_tanf_gross_unearned_income.py @@ -10,6 +10,6 @@ class md_tanf_gross_unearned_income(Variable): defined_for = StateCode.MD def formula(spm_unit, period, parameters): - p = parameters(period).gov.states.md.tanf.income.deeductions.earned + p = parameters(period).gov.states.md.tanf.income.sources gross_unearned = add(spm_unit, period, p.unearned) return gross_unearned From d812d2b804ee11073184b0faab88359db3b9ff37 Mon Sep 17 00:00:00 2001 From: Shayla Wu Date: Wed, 26 Apr 2023 12:17:28 -0400 Subject: [PATCH 5/8] Maryland Tanf test files --- ...md_tanf_continuous_earnings_deduction.yaml | 25 +++++++++++++ ...md_tanf_gross_earned_income_deduction.yaml | 37 ------------------- .../md_tanf_initial_earnings_deduction.yaml | 25 +++++++++++++ .../md_tanf_continuous_earnings_deduction.py | 5 +-- .../md_tanf_initial_earnings_deduction.py | 10 ++--- 5 files changed, 55 insertions(+), 47 deletions(-) create mode 100644 policyengine_us/tests/policy/baseline/gov/states/md/tanf/income/md_tanf_continuous_earnings_deduction.yaml delete mode 100644 policyengine_us/tests/policy/baseline/gov/states/md/tanf/income/md_tanf_gross_earned_income_deduction.yaml create mode 100644 policyengine_us/tests/policy/baseline/gov/states/md/tanf/income/md_tanf_initial_earnings_deduction.yaml diff --git a/policyengine_us/tests/policy/baseline/gov/states/md/tanf/income/md_tanf_continuous_earnings_deduction.yaml b/policyengine_us/tests/policy/baseline/gov/states/md/tanf/income/md_tanf_continuous_earnings_deduction.yaml new file mode 100644 index 00000000000..e4cbdb9429e --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/md/tanf/income/md_tanf_continuous_earnings_deduction.yaml @@ -0,0 +1,25 @@ +- name: If zero earned income, zero deduction. + period: 2023 + input: + state_code: MD + tanf_gross_earned_income: 0 + output: + md_tanf_continuous_earnings_deduction: 0 + + +- name: If not self-employed, 40% deduction. + period: 2023 + input: + state_code: MD + tanf_gross_earned_income: 100 + output: + md_tanf_continuous_earnings_deduction: 40 + +- name: If self-employed, 50% deduction. + period: 2023 + input: + state_code: MD + self_employment_income: 100 + etanf_gross_earned_income: 100 + output: + md_tanf_continuous_earnings_deduction: 50 diff --git a/policyengine_us/tests/policy/baseline/gov/states/md/tanf/income/md_tanf_gross_earned_income_deduction.yaml b/policyengine_us/tests/policy/baseline/gov/states/md/tanf/income/md_tanf_gross_earned_income_deduction.yaml deleted file mode 100644 index e8fc19871cc..00000000000 --- a/policyengine_us/tests/policy/baseline/gov/states/md/tanf/income/md_tanf_gross_earned_income_deduction.yaml +++ /dev/null @@ -1,37 +0,0 @@ -- 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/policyengine_us/tests/policy/baseline/gov/states/md/tanf/income/md_tanf_initial_earnings_deduction.yaml b/policyengine_us/tests/policy/baseline/gov/states/md/tanf/income/md_tanf_initial_earnings_deduction.yaml new file mode 100644 index 00000000000..d08c1ad941b --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/md/tanf/income/md_tanf_initial_earnings_deduction.yaml @@ -0,0 +1,25 @@ +- name: If zero earned income, zero deduction. + period: 2023 + input: + state_code: MD + tanf_gross_earned_income: 0 + output: + md_tanf_initial_earnings_deduction: 0 + + +- name: If not self-employed, 20% deduction. + period: 2023 + input: + state_code: MD + tanf_gross_earned_income: 100 + output: + md_tanf_initial_earnings_deduction: 20 + +- name: If self-employed, 50% deduction. + period: 2023 + input: + state_code: MD + self_employment_income: 100 + etanf_gross_earned_income: 100 + output: + md_tanf_initial_earnings_deduction: 50 diff --git a/policyengine_us/variables/gov/states/md/tanf/income/deductions/earnings/md_tanf_continuous_earnings_deduction.py b/policyengine_us/variables/gov/states/md/tanf/income/deductions/earnings/md_tanf_continuous_earnings_deduction.py index 98a895ca781..6302d61c166 100644 --- a/policyengine_us/variables/gov/states/md/tanf/income/deductions/earnings/md_tanf_continuous_earnings_deduction.py +++ b/policyengine_us/variables/gov/states/md/tanf/income/deductions/earnings/md_tanf_continuous_earnings_deduction.py @@ -13,11 +13,8 @@ def formula(spm_unit, period, parameters): # Get earned income for the SPM unit. earned_income = add(spm_unit, period, p.earned) # Determine if the SPM unit has any self-employment income. - self_employment_income = add( - spm_unit, period, ["self_employment_income"] - ) + self_employment_income = spm_unit("self_employment_income", period) # Get the policy parameters. - p = parameters(period).gov.states.md.tanf.income.deductions.earned return select( diff --git a/policyengine_us/variables/gov/states/md/tanf/income/deductions/earnings/md_tanf_initial_earnings_deduction.py b/policyengine_us/variables/gov/states/md/tanf/income/deductions/earnings/md_tanf_initial_earnings_deduction.py index d7ebb800b1f..3e26517330f 100644 --- a/policyengine_us/variables/gov/states/md/tanf/income/deductions/earnings/md_tanf_initial_earnings_deduction.py +++ b/policyengine_us/variables/gov/states/md/tanf/income/deductions/earnings/md_tanf_initial_earnings_deduction.py @@ -1,4 +1,5 @@ from policyengine_us.model_api import * +from policyengine_us.tools import variables class md_tanf_initial_earnings_deduction(Variable): @@ -13,16 +14,13 @@ def formula(spm_unit, period, parameters): # Get earned income for the SPM unit. earned_income = add(spm_unit, period, p.earned) # Determine if the SPM unit has any self-employment income. - self_employment_income = add( - spm_unit, period, ["self_employment_income"] - ) + self_employment_income = spm_unit("self_employment_income", period) # Get the policy parameters. - p = parameters(period).gov.states.md.tanf.income.sources - + return select( # First arg: self employed or not - [earned_income > 0, self_employment_income > 0], + [earned_income, self_employment_income > 0], # Second arg: multiply by the percent deduction (0.2, 0.5) [earned_income * p.new, self_employment_income * p.self_employed], # Third arg: default value to return if none of the conditions are True From b70abb7481f16e0e12b0189cb9943d1b93f9912e Mon Sep 17 00:00:00 2001 From: Shayla Wu Date: Wed, 26 Apr 2023 12:19:36 -0400 Subject: [PATCH 6/8] Maryland Tanf make format --- .../deductions/earnings/md_tanf_initial_earnings_deduction.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/policyengine_us/variables/gov/states/md/tanf/income/deductions/earnings/md_tanf_initial_earnings_deduction.py b/policyengine_us/variables/gov/states/md/tanf/income/deductions/earnings/md_tanf_initial_earnings_deduction.py index 3e26517330f..57fcdef35d9 100644 --- a/policyengine_us/variables/gov/states/md/tanf/income/deductions/earnings/md_tanf_initial_earnings_deduction.py +++ b/policyengine_us/variables/gov/states/md/tanf/income/deductions/earnings/md_tanf_initial_earnings_deduction.py @@ -17,7 +17,7 @@ def formula(spm_unit, period, parameters): self_employment_income = spm_unit("self_employment_income", period) # Get the policy parameters. p = parameters(period).gov.states.md.tanf.income.sources - + return select( # First arg: self employed or not [earned_income, self_employment_income > 0], From 318d13851e34dc75e734118df0bc68786409ff22 Mon Sep 17 00:00:00 2001 From: Shayla Wu Date: Thu, 4 May 2023 14:09:01 -0400 Subject: [PATCH 7/8] md tanf test files --- .../income/md_tanf_childcare_deduction.yaml | 30 ++++++++++ ...md_tanf_continuous_earnings_deduction.yaml | 10 ++-- .../md_tanf_initial_earnings_deduction.yaml | 13 +++-- .../income/md_tanf_net_countable_income.yaml | 51 +++++++++++++++++ .../md_tanf_net_initial_countable_income.yaml | 55 +++++++++++++++++++ 5 files changed, 150 insertions(+), 9 deletions(-) create mode 100644 policyengine_us/tests/policy/baseline/gov/states/md/tanf/income/md_tanf_childcare_deduction.yaml create mode 100644 policyengine_us/tests/policy/baseline/gov/states/md/tanf/income/md_tanf_net_countable_income.yaml create mode 100644 policyengine_us/tests/policy/baseline/gov/states/md/tanf/income/md_tanf_net_initial_countable_income.yaml diff --git a/policyengine_us/tests/policy/baseline/gov/states/md/tanf/income/md_tanf_childcare_deduction.yaml b/policyengine_us/tests/policy/baseline/gov/states/md/tanf/income/md_tanf_childcare_deduction.yaml new file mode 100644 index 00000000000..ff46fa7f51b --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/md/tanf/income/md_tanf_childcare_deduction.yaml @@ -0,0 +1,30 @@ +childcare_deduction = ( + 200 * (workhours >= 100) * md_tanf_count_children + + 100 * (workhours < 100) * md_tanf_count_children + ) + +- name: 0 children, $0 deductions + period: 2023 + input: + state_code: MD + md_tanf_count_children: 0 + output: + md_tanf_childcare_deduction: 0 + +- name: 2 children, full-time work, $400 deductions + period: 2023 + input: + state_code: MD + md_tanf_count_children: 2 + workhours: 100 + output: + md_tanf_childcare_deduction: 400 + +- name: 2 children, part-time work, $200 deductions + period: 2023 + input: + state_code: MD + md_tanf_count_children: 2 + workhours: 50 + output: + md_tanf_childcare_deduction: 200 \ No newline at end of file diff --git a/policyengine_us/tests/policy/baseline/gov/states/md/tanf/income/md_tanf_continuous_earnings_deduction.yaml b/policyengine_us/tests/policy/baseline/gov/states/md/tanf/income/md_tanf_continuous_earnings_deduction.yaml index e4cbdb9429e..6a4bcc7f855 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/md/tanf/income/md_tanf_continuous_earnings_deduction.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/md/tanf/income/md_tanf_continuous_earnings_deduction.yaml @@ -2,16 +2,16 @@ period: 2023 input: state_code: MD - tanf_gross_earned_income: 0 + md_tanf_gross_earned_income: 0 output: md_tanf_continuous_earnings_deduction: 0 - - name: If not self-employed, 40% deduction. period: 2023 input: state_code: MD - tanf_gross_earned_income: 100 + self_employment_income: 0 + md_tanf_gross_earned_income: 100 output: md_tanf_continuous_earnings_deduction: 40 @@ -20,6 +20,8 @@ input: state_code: MD self_employment_income: 100 - etanf_gross_earned_income: 100 + md_tanf_gross_earned_income: 100 output: md_tanf_continuous_earnings_deduction: 50 + + diff --git a/policyengine_us/tests/policy/baseline/gov/states/md/tanf/income/md_tanf_initial_earnings_deduction.yaml b/policyengine_us/tests/policy/baseline/gov/states/md/tanf/income/md_tanf_initial_earnings_deduction.yaml index d08c1ad941b..70c1f00e88e 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/md/tanf/income/md_tanf_initial_earnings_deduction.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/md/tanf/income/md_tanf_initial_earnings_deduction.yaml @@ -2,24 +2,27 @@ period: 2023 input: state_code: MD - tanf_gross_earned_income: 0 + md_tanf_gross_earned_income: 0 output: md_tanf_initial_earnings_deduction: 0 -- name: If not self-employed, 20% deduction. +- name: If not self-employed, new enrolled, 20% deduction. period: 2023 input: state_code: MD - tanf_gross_earned_income: 100 + is_tanf_enrolled: false + md_tanf_gross_earned_income: 100 output: md_tanf_initial_earnings_deduction: 20 -- name: If self-employed, 50% deduction. +- name: If self-employed, new enrolled, 50% deduction. period: 2023 input: state_code: MD self_employment_income: 100 - etanf_gross_earned_income: 100 + is_tanf_enrolled: false + md_tanf_gross_earned_income: 100 output: md_tanf_initial_earnings_deduction: 50 + diff --git a/policyengine_us/tests/policy/baseline/gov/states/md/tanf/income/md_tanf_net_countable_income.yaml b/policyengine_us/tests/policy/baseline/gov/states/md/tanf/income/md_tanf_net_countable_income.yaml new file mode 100644 index 00000000000..a8e69c716a4 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/md/tanf/income/md_tanf_net_countable_income.yaml @@ -0,0 +1,51 @@ +- name: No alimony, child support, or childcare, countinuous deductions of $40, earned income of $100, $60 per year + period: 2023 + input: + state_code: MD + alimony_income: 0 + childcare_expenses: 0 + child_support_received: 0 + md_tanf_countinuous_earnings_deductions: 40 + md_tanf_gross_earned_income: 100 + md_tanf_gross_unearned_income: 0 + output: + md_tanf_net_countable_income: 60 + +- name: No alimony or child support, childcare of $10, countinuous deductions of $40, earned income of $100, $50 per year + period: 2023 + input: + state_code: MD + alimony_income: 0 + childcare_expenses: 10 + child_support_received: 0 + md_tanf_countinuous_earnings_deductions: 40 + md_tanf_gross_earned_income: 100 + md_tanf_gross_unearned_income: 0 + output: + md_tanf_net_countable_income: 50 + +- name: No alimony or childcare, child support of $10, countinuous deductions of $40, earned income of $100, $50 per year + period: 2023 + input: + state_code: MD + alimony_income: 0 + childcare_expenses: 0 + child_support_received: 10 + md_tanf_countinuous_earnings_deductions: 40 + md_tanf_gross_earned_income: 100 + md_tanf_gross_unearned_income: 0 + output: + md_tanf_net_countable_income: 50 + +- name: No childcare or child support, alimony of $10, countinuous deductions of $40, earned income of $100, $50 per year + period: 2023 + input: + state_code: MD + alimony_income: 10 + childcare_expenses: 0 + child_support_received: 0 + md_tanf_countinuous_earnings_deductions: 40 + md_tanf_gross_earned_income: 100 + md_tanf_gross_unearned_income: 0 + output: + md_tanf_net_countable_income: 50 \ No newline at end of file diff --git a/policyengine_us/tests/policy/baseline/gov/states/md/tanf/income/md_tanf_net_initial_countable_income.yaml b/policyengine_us/tests/policy/baseline/gov/states/md/tanf/income/md_tanf_net_initial_countable_income.yaml new file mode 100644 index 00000000000..647cb68fb5e --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/md/tanf/income/md_tanf_net_initial_countable_income.yaml @@ -0,0 +1,55 @@ +- name: No alimony, child support, or childcare, initial deductions of $20, earned income of $100, $80 per year + period: 2023 + input: + state_code: MD + alimony_income: 0 + childcare_expenses: 0 + child_support_received: 0 + is_tanf_enrolled: false + md_tanf_initial_earnings_deductions: 20 + md_tanf_gross_earned_income: 100 + md_tanf_gross_unearned_income: 0 + output: + md_tanf_net_initial_countable_income: 80 + +- name: No alimony or child support, childcare of $10, initial deductions of $20, earned income of $100, $70 per year + period: 2023 + input: + state_code: MD + alimony_income: 0 + childcare_expenses: 10 + child_support_received: 0 + is_tanf_enrolled: false + md_tanf_initial_earnings_deductions: 20 + md_tanf_gross_earned_income: 100 + md_tanf_gross_unearned_income: 0 + output: + md_tanf_net_initial_countable_income: 70 + +- name: No alimony or childcare, child support of $10, initial deductions of $20, earned income of $100, $70 per year + period: 2023 + input: + state_code: MD + alimony_income: 0 + childcare_expenses: 0 + child_support_received: 10 + is_tanf_enrolled: false + md_tanf_initial_earnings_deductions: 20 + md_tanf_gross_earned_income: 100 + md_tanf_gross_unearned_income: 0 + output: + md_tanf_net_initial_countable_income: 70 + +- name: No childcare or child support, alimony of $10, initial deductions of $20, earned income of $100, $70 per year + period: 2023 + input: + state_code: MD + alimony_income: 10 + childcare_expenses: 0 + child_support_received: 0 + is_tanf_enrolled: false + md_tanf_initial_earnings_deductions: 20 + md_tanf_gross_earned_income: 100 + md_tanf_gross_unearned_income: 0 + output: + md_tanf_net_initial_countable_income: 70 \ No newline at end of file From fce4c88a27b62c2fb015f8d438631ea70a168023 Mon Sep 17 00:00:00 2001 From: Shayla Wu Date: Thu, 4 May 2023 15:37:52 -0400 Subject: [PATCH 8/8] md tanf make format --- .../parameters/calibration/payroll_tax/revenue_historical.yaml | 2 +- .../parameters/calibration/payroll_tax/revenue_projection.yaml | 2 +- .../gov/states/md/tanf/income/md_tanf_childcare_deduction.yaml | 2 +- .../gov/states/md/tanf/income/md_tanf_net_countable_income.yaml | 2 +- .../md/tanf/income/md_tanf_net_initial_countable_income.yaml | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/policyengine_us/parameters/calibration/payroll_tax/revenue_historical.yaml b/policyengine_us/parameters/calibration/payroll_tax/revenue_historical.yaml index 9fe7f79b790..dbcf9e5327d 100644 --- a/policyengine_us/parameters/calibration/payroll_tax/revenue_historical.yaml +++ b/policyengine_us/parameters/calibration/payroll_tax/revenue_historical.yaml @@ -10,4 +10,4 @@ values: 2019-01-01: 1_243_100_000_000 2020-01-01: 1_310_000_000_000 2021-01-01: 1_314_100_000_000 - 2022-01-01: 1_483_500_000_000 \ No newline at end of file + 2022-01-01: 1_483_500_000_000 diff --git a/policyengine_us/parameters/calibration/payroll_tax/revenue_projection.yaml b/policyengine_us/parameters/calibration/payroll_tax/revenue_projection.yaml index 41779ef9617..6624fd8ff67 100644 --- a/policyengine_us/parameters/calibration/payroll_tax/revenue_projection.yaml +++ b/policyengine_us/parameters/calibration/payroll_tax/revenue_projection.yaml @@ -15,4 +15,4 @@ values: 2030-01-01: 2_068_000_000_000 2031-01-01: 2_147_000_000_000 2032-01-01: 2_226_000_000_000 - 2033-01-01: 2_307_000_000_000 \ No newline at end of file + 2033-01-01: 2_307_000_000_000 diff --git a/policyengine_us/tests/policy/baseline/gov/states/md/tanf/income/md_tanf_childcare_deduction.yaml b/policyengine_us/tests/policy/baseline/gov/states/md/tanf/income/md_tanf_childcare_deduction.yaml index ff46fa7f51b..6fcf0417d15 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/md/tanf/income/md_tanf_childcare_deduction.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/md/tanf/income/md_tanf_childcare_deduction.yaml @@ -27,4 +27,4 @@ childcare_deduction = ( md_tanf_count_children: 2 workhours: 50 output: - md_tanf_childcare_deduction: 200 \ No newline at end of file + md_tanf_childcare_deduction: 200 diff --git a/policyengine_us/tests/policy/baseline/gov/states/md/tanf/income/md_tanf_net_countable_income.yaml b/policyengine_us/tests/policy/baseline/gov/states/md/tanf/income/md_tanf_net_countable_income.yaml index a8e69c716a4..b999a56608d 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/md/tanf/income/md_tanf_net_countable_income.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/md/tanf/income/md_tanf_net_countable_income.yaml @@ -48,4 +48,4 @@ md_tanf_gross_earned_income: 100 md_tanf_gross_unearned_income: 0 output: - md_tanf_net_countable_income: 50 \ No newline at end of file + md_tanf_net_countable_income: 50 diff --git a/policyengine_us/tests/policy/baseline/gov/states/md/tanf/income/md_tanf_net_initial_countable_income.yaml b/policyengine_us/tests/policy/baseline/gov/states/md/tanf/income/md_tanf_net_initial_countable_income.yaml index 647cb68fb5e..40dd33e48e2 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/md/tanf/income/md_tanf_net_initial_countable_income.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/md/tanf/income/md_tanf_net_initial_countable_income.yaml @@ -52,4 +52,4 @@ md_tanf_gross_earned_income: 100 md_tanf_gross_unearned_income: 0 output: - md_tanf_net_initial_countable_income: 70 \ No newline at end of file + md_tanf_net_initial_countable_income: 70