diff --git a/changelog_entry.yaml b/changelog_entry.yaml index e69de29bb2d..7ed46c9d33b 100644 --- a/changelog_entry.yaml +++ b/changelog_entry.yaml @@ -0,0 +1,4 @@ +- bump: minor + changes: + added: + - New Jeresy TANF earned income disregards. diff --git a/policyengine_us/parameters/gov/states/nj/njdhs/tanf/income/earned_income_deduction/consecutive_month_threshold.yaml b/policyengine_us/parameters/gov/states/nj/njdhs/tanf/income/earned_income_deduction/consecutive_month_threshold.yaml new file mode 100644 index 00000000000..a64f42ffe6c --- /dev/null +++ b/policyengine_us/parameters/gov/states/nj/njdhs/tanf/income/earned_income_deduction/consecutive_month_threshold.yaml @@ -0,0 +1,11 @@ +description: New Jersey fully excludes 50% earned income for person who enrolled TANF program over this amount of time. + +metadata: + unit: month + label: New Jersey TANF earned income deduction + reference: + - title: New Jersey Administrative Code(N.J.A.C 10:90-3.8) + href: https://advance.lexis.com/documentpage/teaserdocument/?pdmfid=1000516&crid=1e9b7e3d-233e-4b7c-898f-b53548066f3f&config=00JAA1YTg5OGJlYi04MTI4LTRlNjQtYTc4Yi03NTQxN2E5NmE0ZjQKAFBvZENhdGFsb2ftaXPxZTR7bRPtX1Jok9kz&pddocfullpath=%2Fshared%2Fdocument%2Fadministrative-codes%2Furn%3AcontentItem%3A5XKV-PW31-F22N-X2CF-00008-00&pddocid=urn%3AcontentItem%3A5XKV-PW31-F22N-X2CF-00008-00&pdcontentcomponentid=234122&pdteaserkey=h1&pditab=allpods&ecomp=8s65kkk&earg=sr0&prid=187e8c01-622c-460c-be94-0bb33d5ca4d2 + +values: + 2022-10-01: 7.0 diff --git a/policyengine_us/parameters/gov/states/nj/njdhs/tanf/income/earned_income_deduction/first_month_threshold.yaml b/policyengine_us/parameters/gov/states/nj/njdhs/tanf/income/earned_income_deduction/first_month_threshold.yaml new file mode 100644 index 00000000000..f254bad44af --- /dev/null +++ b/policyengine_us/parameters/gov/states/nj/njdhs/tanf/income/earned_income_deduction/first_month_threshold.yaml @@ -0,0 +1,11 @@ +description: New Jersey fully excludes 100% of earned income for person who have enrolled in TANF program below this amount of time. + +metadata: + unit: month + label: New Jersey TANF earned income deduction first month threshold + reference: + - title: New Jersey Administrative Code(N.J.A.C 10:90-3.8) + href: https://advance.lexis.com/documentpage/teaserdocument/?pdmfid=1000516&crid=1e9b7e3d-233e-4b7c-898f-b53548066f3f&config=00JAA1YTg5OGJlYi04MTI4LTRlNjQtYTc4Yi03NTQxN2E5NmE0ZjQKAFBvZENhdGFsb2ftaXPxZTR7bRPtX1Jok9kz&pddocfullpath=%2Fshared%2Fdocument%2Fadministrative-codes%2Furn%3AcontentItem%3A5XKV-PW31-F22N-X2CF-00008-00&pddocid=urn%3AcontentItem%3A5XKV-PW31-F22N-X2CF-00008-00&pdcontentcomponentid=234122&pdteaserkey=h1&pditab=allpods&ecomp=8s65kkk&earg=sr0&prid=187e8c01-622c-460c-be94-0bb33d5ca4d2 + +values: + 2022-10-01: 1.0 diff --git a/policyengine_us/parameters/gov/states/nj/njdhs/tanf/income/earned_income_deduction/higher_work_hours/additional_percent.yaml b/policyengine_us/parameters/gov/states/nj/njdhs/tanf/income/earned_income_deduction/higher_work_hours/additional_percent.yaml new file mode 100644 index 00000000000..6daf8b6fed5 --- /dev/null +++ b/policyengine_us/parameters/gov/states/nj/njdhs/tanf/income/earned_income_deduction/higher_work_hours/additional_percent.yaml @@ -0,0 +1,11 @@ +description: New Jersey excludes this percentage of earned income for household enrolled in TANF for each additional month. + +metadata: + unit: /1 + label: New Jersey TANF earned income deduction + reference: + - title: New Jersey Administrative Code(N.J.A.C 10:90-3.8) + href: https://advance.lexis.com/documentpage/teaserdocument/?pdmfid=1000516&crid=1e9b7e3d-233e-4b7c-898f-b53548066f3f&config=00JAA1YTg5OGJlYi04MTI4LTRlNjQtYTc4Yi03NTQxN2E5NmE0ZjQKAFBvZENhdGFsb2ftaXPxZTR7bRPtX1Jok9kz&pddocfullpath=%2Fshared%2Fdocument%2Fadministrative-codes%2Furn%3AcontentItem%3A5XKV-PW31-F22N-X2CF-00008-00&pddocid=urn%3AcontentItem%3A5XKV-PW31-F22N-X2CF-00008-00&pdcontentcomponentid=234122&pdteaserkey=h1&pditab=allpods&ecomp=8s65kkk&earg=sr0&prid=187e8c01-622c-460c-be94-0bb33d5ca4d2 + +values: + 2022-10-01: 0.5 diff --git a/policyengine_us/parameters/gov/states/nj/njdhs/tanf/income/earned_income_deduction/higher_work_hours/consecutive_month_percent.yaml b/policyengine_us/parameters/gov/states/nj/njdhs/tanf/income/earned_income_deduction/higher_work_hours/consecutive_month_percent.yaml new file mode 100644 index 00000000000..9cc8b8e4903 --- /dev/null +++ b/policyengine_us/parameters/gov/states/nj/njdhs/tanf/income/earned_income_deduction/higher_work_hours/consecutive_month_percent.yaml @@ -0,0 +1,11 @@ +description: New Jersey excludes this percentage of earned income for 6 consecutive months for person who enrolles in TANF Program and continues work for more than 20h/week after the first month. + +metadata: + unit: /1 + label: New Jersey TANF earned income deduction + reference: + - title: New Jersey Administrative Code(N.J.A.C 10:90-3.8) + href: https://advance.lexis.com/documentpage/teaserdocument/?pdmfid=1000516&crid=1e9b7e3d-233e-4b7c-898f-b53548066f3f&config=00JAA1YTg5OGJlYi04MTI4LTRlNjQtYTc4Yi03NTQxN2E5NmE0ZjQKAFBvZENhdGFsb2ftaXPxZTR7bRPtX1Jok9kz&pddocfullpath=%2Fshared%2Fdocument%2Fadministrative-codes%2Furn%3AcontentItem%3A5XKV-PW31-F22N-X2CF-00008-00&pddocid=urn%3AcontentItem%3A5XKV-PW31-F22N-X2CF-00008-00&pdcontentcomponentid=234122&pdteaserkey=h1&pditab=allpods&ecomp=8s65kkk&earg=sr0&prid=187e8c01-622c-460c-be94-0bb33d5ca4d2 + +values: + 2022-10-01: 0.75 diff --git a/policyengine_us/parameters/gov/states/nj/njdhs/tanf/income/earned_income_deduction/higher_work_hours/first_month_percent.yaml b/policyengine_us/parameters/gov/states/nj/njdhs/tanf/income/earned_income_deduction/higher_work_hours/first_month_percent.yaml new file mode 100644 index 00000000000..cdfa9645568 --- /dev/null +++ b/policyengine_us/parameters/gov/states/nj/njdhs/tanf/income/earned_income_deduction/higher_work_hours/first_month_percent.yaml @@ -0,0 +1,11 @@ +description: New Jersey fully excludes this percentage of earned income for person who enrolled in the first month of TANF program. + +metadata: + unit: /1 + label: New Jersey TANF earned income deduction + reference: + - title: New Jersey Administrative Code(N.J.A.C 10:90-3.8) + href: https://advance.lexis.com/documentpage/teaserdocument/?pdmfid=1000516&crid=1e9b7e3d-233e-4b7c-898f-b53548066f3f&config=00JAA1YTg5OGJlYi04MTI4LTRlNjQtYTc4Yi03NTQxN2E5NmE0ZjQKAFBvZENhdGFsb2ftaXPxZTR7bRPtX1Jok9kz&pddocfullpath=%2Fshared%2Fdocument%2Fadministrative-codes%2Furn%3AcontentItem%3A5XKV-PW31-F22N-X2CF-00008-00&pddocid=urn%3AcontentItem%3A5XKV-PW31-F22N-X2CF-00008-00&pdcontentcomponentid=234122&pdteaserkey=h1&pditab=allpods&ecomp=8s65kkk&earg=sr0&prid=187e8c01-622c-460c-be94-0bb33d5ca4d2 + +values: + 2022-10-01: 1.0 diff --git a/policyengine_us/parameters/gov/states/nj/njdhs/tanf/income/earned_income_deduction/lower_work_hours/additional_percent.yaml b/policyengine_us/parameters/gov/states/nj/njdhs/tanf/income/earned_income_deduction/lower_work_hours/additional_percent.yaml new file mode 100644 index 00000000000..6daf8b6fed5 --- /dev/null +++ b/policyengine_us/parameters/gov/states/nj/njdhs/tanf/income/earned_income_deduction/lower_work_hours/additional_percent.yaml @@ -0,0 +1,11 @@ +description: New Jersey excludes this percentage of earned income for household enrolled in TANF for each additional month. + +metadata: + unit: /1 + label: New Jersey TANF earned income deduction + reference: + - title: New Jersey Administrative Code(N.J.A.C 10:90-3.8) + href: https://advance.lexis.com/documentpage/teaserdocument/?pdmfid=1000516&crid=1e9b7e3d-233e-4b7c-898f-b53548066f3f&config=00JAA1YTg5OGJlYi04MTI4LTRlNjQtYTc4Yi03NTQxN2E5NmE0ZjQKAFBvZENhdGFsb2ftaXPxZTR7bRPtX1Jok9kz&pddocfullpath=%2Fshared%2Fdocument%2Fadministrative-codes%2Furn%3AcontentItem%3A5XKV-PW31-F22N-X2CF-00008-00&pddocid=urn%3AcontentItem%3A5XKV-PW31-F22N-X2CF-00008-00&pdcontentcomponentid=234122&pdteaserkey=h1&pditab=allpods&ecomp=8s65kkk&earg=sr0&prid=187e8c01-622c-460c-be94-0bb33d5ca4d2 + +values: + 2022-10-01: 0.5 diff --git a/policyengine_us/parameters/gov/states/nj/njdhs/tanf/income/earned_income_deduction/lower_work_hours/first_month_percent.yaml b/policyengine_us/parameters/gov/states/nj/njdhs/tanf/income/earned_income_deduction/lower_work_hours/first_month_percent.yaml new file mode 100644 index 00000000000..cdfa9645568 --- /dev/null +++ b/policyengine_us/parameters/gov/states/nj/njdhs/tanf/income/earned_income_deduction/lower_work_hours/first_month_percent.yaml @@ -0,0 +1,11 @@ +description: New Jersey fully excludes this percentage of earned income for person who enrolled in the first month of TANF program. + +metadata: + unit: /1 + label: New Jersey TANF earned income deduction + reference: + - title: New Jersey Administrative Code(N.J.A.C 10:90-3.8) + href: https://advance.lexis.com/documentpage/teaserdocument/?pdmfid=1000516&crid=1e9b7e3d-233e-4b7c-898f-b53548066f3f&config=00JAA1YTg5OGJlYi04MTI4LTRlNjQtYTc4Yi03NTQxN2E5NmE0ZjQKAFBvZENhdGFsb2ftaXPxZTR7bRPtX1Jok9kz&pddocfullpath=%2Fshared%2Fdocument%2Fadministrative-codes%2Furn%3AcontentItem%3A5XKV-PW31-F22N-X2CF-00008-00&pddocid=urn%3AcontentItem%3A5XKV-PW31-F22N-X2CF-00008-00&pdcontentcomponentid=234122&pdteaserkey=h1&pditab=allpods&ecomp=8s65kkk&earg=sr0&prid=187e8c01-622c-460c-be94-0bb33d5ca4d2 + +values: + 2022-10-01: 1.0 diff --git a/policyengine_us/parameters/gov/states/nj/njdhs/tanf/income/earned_income_deduction/work_hours_threshold.yaml b/policyengine_us/parameters/gov/states/nj/njdhs/tanf/income/earned_income_deduction/work_hours_threshold.yaml new file mode 100644 index 00000000000..d310e530e66 --- /dev/null +++ b/policyengine_us/parameters/gov/states/nj/njdhs/tanf/income/earned_income_deduction/work_hours_threshold.yaml @@ -0,0 +1,11 @@ +description: New York excludes this percentage of earned income for the purposes of its TANF program. + +metadata: + unit: hours + label: New Jeresy TANF + reference: + - title: New Jersey Administrative Code(N.J.A.C 10:90-3.8) + href: https://advance.lexis.com/documentpage/teaserdocument/?pdmfid=1000516&crid=1e9b7e3d-233e-4b7c-898f-b53548066f3f&config=00JAA1YTg5OGJlYi04MTI4LTRlNjQtYTc4Yi03NTQxN2E5NmE0ZjQKAFBvZENhdGFsb2ftaXPxZTR7bRPtX1Jok9kz&pddocfullpath=%2Fshared%2Fdocument%2Fadministrative-codes%2Furn%3AcontentItem%3A5XKV-PW31-F22N-X2CF-00008-00&pddocid=urn%3AcontentItem%3A5XKV-PW31-F22N-X2CF-00008-00&pdcontentcomponentid=234122&pdteaserkey=h1&pditab=allpods&ecomp=8s65kkk&earg=sr0&prid=187e8c01-622c-460c-be94-0bb33d5ca4d2 + +values: + 2022-10-01: 20 diff --git a/policyengine_us/tests/policy/baseline/gov/states/nj/njdhs/tanf/nj_tanf_countable_earned_income.yaml b/policyengine_us/tests/policy/baseline/gov/states/nj/njdhs/tanf/nj_tanf_countable_earned_income.yaml new file mode 100644 index 00000000000..8304ff51061 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/nj/njdhs/tanf/nj_tanf_countable_earned_income.yaml @@ -0,0 +1,59 @@ +- name: NJ countable earned income = gross earned income*(1-100%) for first month. + period: 2023 + input: + state_code: NJ + nj_tanf_gross_earned_income: 6_000 + months_enrolled_in_tanf: 1 + hours_worked: 2_080 + output: + nj_tanf_countable_earned_income: 0 + +- name: NJ countable earned income = gross earned income*(1-75%) for applicant with weekly working hours over 20 in 2nd month. + period: 2023 + input: + state_code: NJ + nj_tanf_gross_earned_income: 6_000 + months_enrolled_in_tanf: 2 + hours_worked: 2_080 + output: + nj_tanf_countable_earned_income: 1_500 + +- name: NJ countable earned income = gross earned income*(1-50%) for applicant with weekly working hours under 20 in 2nd month. + period: 2023 + input: + state_code: NJ + nj_tanf_gross_earned_income: 6_000 + months_enrolled_in_tanf: 2 + hours_worked: 988 + output: + nj_tanf_countable_earned_income: 3_000 + +- name: NJ countable earned income = gross earned income*(1-75%) for applicant with weekly working hours over 20 in 7nd month. + period: 2023 + input: + state_code: NJ + nj_tanf_gross_earned_income: 6_000 + months_enrolled_in_tanf: 7 + hours_worked: 2_080 + output: + nj_tanf_countable_earned_income: 1_500 + +- name: NJ countable earned income = gross earned income*(1-50%) for applicant with weekly working hours over 20 in 8nd month. + period: 2023 + input: + state_code: NJ + nj_tanf_gross_earned_income: 6_000 + months_enrolled_in_tanf: 8 + hours_worked: 2_080 + output: + nj_tanf_countable_earned_income: 3_000 + +- name: NJ countable earned income = gross earned income*(1-75%) for applicant with weekly working hours over 20 in 2nd month. + period: 2023 + input: + state_code: NJ + nj_tanf_gross_earned_income: 6_000 + months_enrolled_in_tanf: 2 + hours_worked: 1_040 + output: + nj_tanf_countable_earned_income: 1_500 diff --git a/policyengine_us/variables/gov/states/nj/njdhs/tanf/income/nj_tanf_countable_earned_income.py b/policyengine_us/variables/gov/states/nj/njdhs/tanf/income/nj_tanf_countable_earned_income.py new file mode 100644 index 00000000000..54a47a44c20 --- /dev/null +++ b/policyengine_us/variables/gov/states/nj/njdhs/tanf/income/nj_tanf_countable_earned_income.py @@ -0,0 +1,75 @@ +from policyengine_us.model_api import * + + +class nj_tanf_countable_earned_income(Variable): + value_type = float + entity = SPMUnit + label = "New Jersey TANF countable earned income" + unit = USD + definition_period = YEAR + defined_for = StateCode.NJ + + def formula(spm_unit, period, parameters): + person = spm_unit.members + # Get gross earned income. + gross_earned_income = spm_unit("nj_tanf_gross_earned_income", period) + p = parameters( + period + ).gov.states.nj.njdhs.tanf.income.earned_income_deduction + months_enrolled_in_tanf = person("months_enrolled_in_tanf", period) + weekly_hours_worked = person("weekly_hours_worked", period) + # New Jerset Admin Code 10:90-3.8(b) + person_meet_higher_work_hours_threshold = ( + weekly_hours_worked >= p.work_hours_threshold + ) + person_meet_lower_work_hours_threshold = ( + weekly_hours_worked < p.work_hours_threshold + ) + person_enrolled_in_tanf_for_first_month = ( + months_enrolled_in_tanf <= p.first_month_threshold + ) + person_enrolled_in_tanf_for_consecutive_months_with_work_hours_over_20 = ( + months_enrolled_in_tanf <= p.consecutive_month_threshold + and months_enrolled_in_tanf > p.first_month_threshold + and person_meet_higher_work_hours_threshold + ) + person_enrolled_in_tanf_for_additional_months_with_work_hours_over_20 = ( + months_enrolled_in_tanf > p.consecutive_month_threshold + and person_meet_higher_work_hours_threshold + ) + person_enrolled_in_tanf_for_additional_months_with_work_hours_below_20 = ( + months_enrolled_in_tanf > p.first_month_threshold + and person_meet_lower_work_hours_threshold + ) + # The value of result will only change, if the first condition in "where" is met. If the condition is not met, the value of result will not change + result = 0 + # If applicant is enrolled in TANF for the first month, the earned income deduction is 100%. + result = where( + person_enrolled_in_tanf_for_first_month, + gross_earned_income + * (1 - p.higher_work_hours.first_month_percent), + result, + ) + # If applicant is enrolled in TANF for consecutive months with work hours over 20, the earned income deduction is 75%. + result = where( + ( + person_meet_higher_work_hours_threshold + and person_enrolled_in_tanf_for_consecutive_months_with_work_hours_over_20 + ), + gross_earned_income + * (1 - p.higher_work_hours.consecutive_month_percent), + result, + ) + # If applicant is enrolled in TANF for additional months with work hours over 20, the earned income deduction is 50%. + result = where( + person_enrolled_in_tanf_for_additional_months_with_work_hours_over_20, + gross_earned_income * (1 - p.higher_work_hours.additional_percent), + result, + ) + # If applicant is enrolled in TANF for additional months with work hours below 20, the earned income deduction is 50%. + result = where( + person_enrolled_in_tanf_for_additional_months_with_work_hours_below_20, + gross_earned_income * (1 - p.lower_work_hours.additional_percent), + result, + ) + return result diff --git a/policyengine_us/variables/household/income/person/tanf_enrolled/months_enrolled_in_tanf.py b/policyengine_us/variables/household/income/person/tanf_enrolled/months_enrolled_in_tanf.py new file mode 100644 index 00000000000..059fe8db97c --- /dev/null +++ b/policyengine_us/variables/household/income/person/tanf_enrolled/months_enrolled_in_tanf.py @@ -0,0 +1,9 @@ +from policyengine_us.model_api import * + + +class months_enrolled_in_tanf(Variable): + value_type = float + entity = Person + label = "Months enrolled in TANF" + definition_period = YEAR + unit = "month" diff --git a/policyengine_us/variables/household/income/person/work/hours_worked.py b/policyengine_us/variables/household/income/person/work/hours_worked.py new file mode 100644 index 00000000000..bd9cae7c29c --- /dev/null +++ b/policyengine_us/variables/household/income/person/work/hours_worked.py @@ -0,0 +1,9 @@ +from policyengine_us.model_api import * + + +class hours_worked(Variable): + value_type = float + entity = Person + label = "Total amount of hours worked by this person" + definition_period = YEAR + unit = "hour" diff --git a/policyengine_us/variables/household/income/person/work/weekly_hours_worked.py b/policyengine_us/variables/household/income/person/work/weekly_hours_worked.py new file mode 100644 index 00000000000..25d33c768da --- /dev/null +++ b/policyengine_us/variables/household/income/person/work/weekly_hours_worked.py @@ -0,0 +1,14 @@ +from policyengine_us.model_api import * + + +class weekly_hours_worked(Variable): + value_type = float + entity = Person + label = "Weekly hours" + documentation = "Average weekly hours worked" + definition_period = YEAR + unit = "hour" + quantity_type = FLOW + + def formula(person, period, parameters): + return person("hours_worked", period) / WEEKS_IN_YEAR