policyengine-us 1.409.0__py3-none-any.whl → 1.411.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of policyengine-us might be problematic. Click here for more details.

Files changed (101) hide show
  1. policyengine_us/parameters/gov/contrib/aca/ptc_additional_bracket/brackets.yaml +42 -0
  2. policyengine_us/parameters/gov/contrib/aca/ptc_additional_bracket/in_effect.yaml +10 -0
  3. policyengine_us/parameters/gov/contrib/aca/ptc_additional_bracket/income_eligibility.yaml +28 -0
  4. policyengine_us/parameters/gov/contrib/aca/ptc_simplified_bracket/brackets.yaml +28 -0
  5. policyengine_us/parameters/gov/contrib/aca/ptc_simplified_bracket/in_effect.yaml +10 -0
  6. policyengine_us/parameters/gov/contrib/aca/ptc_simplified_bracket/income_eligibility.yaml +28 -0
  7. policyengine_us/parameters/gov/states/ma/eec/README.md +1 -0
  8. policyengine_us/parameters/gov/states/ma/eec/ccfa/README.md +1 -0
  9. policyengine_us/parameters/gov/states/ma/eec/ccfa/activity_requirements/weekly_hours.yaml +11 -0
  10. policyengine_us/parameters/gov/states/ma/eec/ccfa/activity_requirements/work_exempt_age.yaml +11 -0
  11. policyengine_us/parameters/gov/states/ma/eec/ccfa/age_threshold/child.yaml +13 -0
  12. policyengine_us/parameters/gov/states/ma/eec/ccfa/age_threshold/disabled_child.yaml +14 -0
  13. policyengine_us/parameters/gov/states/ma/eec/ccfa/age_threshold/infant.yaml +11 -0
  14. policyengine_us/parameters/gov/states/ma/eec/ccfa/age_threshold/school_age.yaml +11 -0
  15. policyengine_us/parameters/gov/states/ma/eec/ccfa/age_threshold/toddler.yaml +11 -0
  16. policyengine_us/parameters/gov/states/ma/eec/ccfa/assets/limit.yaml +11 -0
  17. policyengine_us/parameters/gov/states/ma/eec/ccfa/copay/fee_level/fee_percentages.yaml +69 -0
  18. policyengine_us/parameters/gov/states/ma/eec/ccfa/copay/fee_level/income_ratio_increments.yaml +39 -0
  19. policyengine_us/parameters/gov/states/ma/eec/ccfa/copay/fee_level/maximum_level.yaml +11 -0
  20. policyengine_us/parameters/gov/states/ma/eec/ccfa/copay/ratio/additional_child.yaml +11 -0
  21. policyengine_us/parameters/gov/states/ma/eec/ccfa/copay/ratio/first_child.yaml +11 -0
  22. policyengine_us/parameters/gov/states/ma/eec/ccfa/copay/ratio/second_child.yaml +11 -0
  23. policyengine_us/parameters/gov/states/ma/eec/ccfa/income/countable_income/sources.yaml +30 -0
  24. policyengine_us/parameters/gov/states/ma/eec/ccfa/income/smi_rate/new_applicants.yaml +15 -0
  25. policyengine_us/parameters/gov/states/ma/eec/ccfa/income/smi_rate/redetermination.yaml +12 -0
  26. policyengine_us/parameters/gov/states/ma/eec/ccfa/qualified_immigration_statuses.yaml +19 -0
  27. policyengine_us/parameters/gov/states/ma/eec/ccfa/region/metro_and_boston_metro.yaml +15 -0
  28. policyengine_us/parameters/gov/states/ma/eec/ccfa/region/northeast.yaml +16 -0
  29. policyengine_us/parameters/gov/states/ma/eec/ccfa/region/western_central_and_southeast.yaml +21 -0
  30. policyengine_us/parameters/gov/states/ma/eec/ccfa/reimbursement_rates/amount_ratio.yaml +23 -0
  31. policyengine_us/parameters/gov/states/ma/eec/ccfa/reimbursement_rates/center_based/early_education.yaml +46 -0
  32. policyengine_us/parameters/gov/states/ma/eec/ccfa/reimbursement_rates/center_based/school_age.yaml +59 -0
  33. policyengine_us/parameters/gov/states/ma/eec/ccfa/reimbursement_rates/family_child_care/age_threshold.yaml +12 -0
  34. policyengine_us/parameters/gov/states/ma/eec/ccfa/reimbursement_rates/family_child_care/older.yaml +24 -0
  35. policyengine_us/parameters/gov/states/ma/eec/ccfa/reimbursement_rates/family_child_care/younger.yaml +24 -0
  36. policyengine_us/parameters/gov/states/ma/eec/ccfa/reimbursement_rates/head_start_partner_and_kindergarten.yaml +55 -0
  37. policyengine_us/parameters/gov/states/ma/eec/ccfa/reimbursement_rates/informal_child_care/child_home.yaml +14 -0
  38. policyengine_us/parameters/gov/states/ma/eec/ccfa/reimbursement_rates/informal_child_care/relative_home.yaml +14 -0
  39. policyengine_us/reforms/aca/__init__.py +6 -0
  40. policyengine_us/reforms/aca/aca_ptc_additional_bracket.py +126 -0
  41. policyengine_us/reforms/aca/aca_ptc_simplified_bracket.py +127 -0
  42. policyengine_us/reforms/reforms.py +12 -0
  43. policyengine_us/tests/policy/baseline/gov/states/ma/eec/ccfa/copay/ma_ccfa_base_copay.yaml +31 -0
  44. policyengine_us/tests/policy/baseline/gov/states/ma/eec/ccfa/copay/ma_ccfa_total_copay.yaml +104 -0
  45. policyengine_us/tests/policy/baseline/gov/states/ma/eec/ccfa/copay/ma_ccsp_copay_level.yaml +44 -0
  46. policyengine_us/tests/policy/baseline/gov/states/ma/eec/ccfa/eligibility/ma_ccfa_activity_eligible.yaml +111 -0
  47. policyengine_us/tests/policy/baseline/gov/states/ma/eec/ccfa/eligibility/ma_ccfa_asset_eligible.yaml +15 -0
  48. policyengine_us/tests/policy/baseline/gov/states/ma/eec/ccfa/eligibility/ma_ccfa_eligible.yaml +44 -0
  49. policyengine_us/tests/policy/baseline/gov/states/ma/eec/ccfa/eligibility/ma_ccfa_eligible_child.yaml +43 -0
  50. policyengine_us/tests/policy/baseline/gov/states/ma/eec/ccfa/eligibility/ma_ccfa_immigration_status_eligible.yaml +23 -0
  51. policyengine_us/tests/policy/baseline/gov/states/ma/eec/ccfa/eligibility/ma_ccfa_income_eligible.yaml +42 -0
  52. policyengine_us/tests/policy/baseline/gov/states/ma/eec/ccfa/enum_variables/ma_ccfa_child_age_category.yaml +87 -0
  53. policyengine_us/tests/policy/baseline/gov/states/ma/eec/ccfa/ma_ccfa.yaml +249 -0
  54. policyengine_us/tests/policy/baseline/gov/states/ma/eec/ccfa/ma_ccfa_fpg.yaml +26 -0
  55. policyengine_us/tests/policy/baseline/gov/states/ma/eec/ccfa/ma_ccfa_maximum_benefit_amount.yaml +209 -0
  56. policyengine_us/tests/policy/baseline/gov/states/ma/eec/ccfa/ma_ccfa_region.yaml +23 -0
  57. policyengine_us/tests/policy/baseline/gov/states/ma/eec/ccfa/reimbursement/ma_ccfa_center_based_early_education_reimbursement.yaml +10 -0
  58. policyengine_us/tests/policy/baseline/gov/states/ma/eec/ccfa/reimbursement/ma_ccfa_center_based_school_age_reimbursement.yaml +11 -0
  59. policyengine_us/tests/policy/baseline/gov/states/ma/eec/ccfa/reimbursement/ma_ccfa_family_child_care_reimbursement.yaml +10 -0
  60. policyengine_us/tests/policy/baseline/gov/states/ma/eec/ccfa/reimbursement/ma_ccfa_head_start_partner_and_kindergarten_reimbursement.yaml +10 -0
  61. policyengine_us/tests/policy/baseline/gov/states/ma/eec/ccfa/reimbursement/ma_ccfa_informal_child_care_reimbursement.yaml +10 -0
  62. policyengine_us/tests/policy/baseline/gov/states/ma/eec/ccfa/reimbursement/ma_ccfa_maximum_reimbursement.yaml +27 -0
  63. policyengine_us/tests/policy/baseline/gov/states/ma/eec/ccfa/reimbursement/ma_ccfa_reimbursement_ratio.yaml +31 -0
  64. policyengine_us/tests/policy/baseline/gov/states/ma/eec/ccfa/reimbursement/ma_ccfa_uncapped_daily_payment.yaml +8 -0
  65. policyengine_us/tests/policy/contrib/aca/ptc_additional_bracket.yaml +117 -0
  66. policyengine_us/tests/policy/contrib/aca/ptc_simplified_bracket.yaml +117 -0
  67. policyengine_us/variables/gov/states/ma/eec/ccfa/copay/ma_ccfa_base_copay.py +27 -0
  68. policyengine_us/variables/gov/states/ma/eec/ccfa/copay/ma_ccfa_copay_level.py +30 -0
  69. policyengine_us/variables/gov/states/ma/eec/ccfa/copay/ma_ccfa_total_copay.py +35 -0
  70. policyengine_us/variables/gov/states/ma/eec/ccfa/eligibility/ma_ccfa_activity_eligible.py +43 -0
  71. policyengine_us/variables/gov/states/ma/eec/ccfa/eligibility/ma_ccfa_asset_eligible.py +15 -0
  72. policyengine_us/variables/gov/states/ma/eec/ccfa/eligibility/ma_ccfa_eligible.py +34 -0
  73. policyengine_us/variables/gov/states/ma/eec/ccfa/eligibility/ma_ccfa_eligible_child.py +23 -0
  74. policyengine_us/variables/gov/states/ma/eec/ccfa/eligibility/ma_ccfa_immigration_status_eligible.py +19 -0
  75. policyengine_us/variables/gov/states/ma/eec/ccfa/eligibility/ma_ccfa_income_eligible.py +27 -0
  76. policyengine_us/variables/gov/states/ma/eec/ccfa/ma_ccfa.py +25 -0
  77. policyengine_us/variables/gov/states/ma/eec/ccfa/ma_ccfa_care_provider_type.py +22 -0
  78. policyengine_us/variables/gov/states/ma/eec/ccfa/ma_ccfa_child_age_category.py +45 -0
  79. policyengine_us/variables/gov/states/ma/eec/ccfa/ma_ccfa_countable_income.py +15 -0
  80. policyengine_us/variables/gov/states/ma/eec/ccfa/ma_ccfa_enrolled.py +9 -0
  81. policyengine_us/variables/gov/states/ma/eec/ccfa/ma_ccfa_fpg.py +27 -0
  82. policyengine_us/variables/gov/states/ma/eec/ccfa/ma_ccfa_is_in_relatives_home_care.py +9 -0
  83. policyengine_us/variables/gov/states/ma/eec/ccfa/ma_ccfa_maximum_benefit_amount.py +19 -0
  84. policyengine_us/variables/gov/states/ma/eec/ccfa/ma_ccfa_region.py +45 -0
  85. policyengine_us/variables/gov/states/ma/eec/ccfa/ma_ccfa_schedule_type.py +21 -0
  86. policyengine_us/variables/gov/states/ma/eec/ccfa/ma_child_care_subsidies.py +11 -0
  87. policyengine_us/variables/gov/states/ma/eec/ccfa/reimbursement/ma_ccfa_center_based_early_education_reimbursement.py +19 -0
  88. policyengine_us/variables/gov/states/ma/eec/ccfa/reimbursement/ma_ccfa_center_based_school_age_reimbursement.py +20 -0
  89. policyengine_us/variables/gov/states/ma/eec/ccfa/reimbursement/ma_ccfa_family_child_care_reimbursement.py +21 -0
  90. policyengine_us/variables/gov/states/ma/eec/ccfa/reimbursement/ma_ccfa_head_start_partner_and_kindergarten_reimbursement.py +17 -0
  91. policyengine_us/variables/gov/states/ma/eec/ccfa/reimbursement/ma_ccfa_informal_child_care_reimbursement.py +20 -0
  92. policyengine_us/variables/gov/states/ma/eec/ccfa/reimbursement/ma_ccfa_maximum_reimbursement.py +23 -0
  93. policyengine_us/variables/gov/states/ma/eec/ccfa/reimbursement/ma_ccfa_reimbursement_ratio.py +17 -0
  94. policyengine_us/variables/gov/states/ma/eec/ccfa/reimbursement/ma_ccfa_uncapped_daily_payment.py +66 -0
  95. policyengine_us/variables/household/expense/childcare/childcare_attending_days_per_month.py +9 -0
  96. policyengine_us/variables/household/expense/childcare/childcare_expenses.py +1 -1
  97. {policyengine_us-1.409.0.dist-info → policyengine_us-1.411.0.dist-info}/METADATA +1 -1
  98. {policyengine_us-1.409.0.dist-info → policyengine_us-1.411.0.dist-info}/RECORD +101 -7
  99. {policyengine_us-1.409.0.dist-info → policyengine_us-1.411.0.dist-info}/WHEEL +0 -0
  100. {policyengine_us-1.409.0.dist-info → policyengine_us-1.411.0.dist-info}/entry_points.txt +0 -0
  101. {policyengine_us-1.409.0.dist-info → policyengine_us-1.411.0.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,59 @@
1
+ description: Massachusetts provides these reimbursement rates for center-based school age child care under the Child Care Financial Assistance program.
2
+ metadata:
3
+ period: day
4
+ unit: currency-USD
5
+ label: Massachusetts CCFA center-based school age reimbursement rates
6
+ breakdown:
7
+ - ma_ccfa_region
8
+ - ma_ccfa_child_age_category
9
+ - ma_ccfa_schedule_type
10
+ reference:
11
+ - title: FY 2025 Child Care Financial Assistance Daily Reimbursement Rates
12
+ href: https://www.mass.gov/doc/fiscal-year-2025-child-care-financial-assistance-daily-reimbursement-rates/download
13
+ - title: FY 2024 Child Care Financial Assistance Daily Reimbursement Rates
14
+ href: https://www.mass.gov/doc/fiscal-year-2024-child-care-financial-assistance-daily-reimbursement-rates/download
15
+
16
+ WESTERN_CENTRAL_AND_SOUTHEAST:
17
+ SCHOOL_AGE:
18
+ BEFORE_ONLY:
19
+ 2023-07-01: 11.57
20
+ 2024-07-01: 11.74
21
+ AFTER_ONLY:
22
+ 2023-07-01: 24.32
23
+ 2024-07-01: 24.68
24
+ BEFORE_AND_AFTER:
25
+ 2023-07-01: 35.89
26
+ 2024-07-01: 36.43
27
+ FULL_DAY:
28
+ 2023-07-01: 48.96
29
+ 2024-07-01: 49.69
30
+
31
+ NORTHEAST:
32
+ SCHOOL_AGE:
33
+ BEFORE_ONLY:
34
+ 2023-07-01: 12.29
35
+ 2024-07-01: 12.74
36
+ AFTER_ONLY:
37
+ 2023-07-01: 27.18
38
+ 2024-07-01: 27.58
39
+ BEFORE_AND_AFTER:
40
+ 2023-07-01: 39.47
41
+ 2024-07-01: 40.06
42
+ FULL_DAY:
43
+ 2023-07-01: 50.62
44
+ 2024-07-01: 51.38
45
+
46
+ METRO_AND_BOSTON_METRO:
47
+ SCHOOL_AGE:
48
+ BEFORE_ONLY:
49
+ 2023-07-01: 12.62
50
+ 2024-07-01: 12.81
51
+ AFTER_ONLY:
52
+ 2023-07-01: 27.89
53
+ 2024-07-01: 28.31
54
+ BEFORE_AND_AFTER:
55
+ 2023-07-01: 40.51
56
+ 2024-07-01: 41.12
57
+ FULL_DAY:
58
+ 2023-07-01: 52.03
59
+ 2024-07-01: 52.81
@@ -0,0 +1,12 @@
1
+ description: Massachusetts provides different family child care reimbursement rates based on this age threshold under the Child Care Financial Assistance program.
2
+ values:
3
+ 2020-01-01: 2
4
+
5
+ metadata:
6
+ unit: year
7
+ period: year
8
+ label: Massachusetts CCFA family child care reimbursement rate age threshold
9
+ reference:
10
+ - title: FY 2025 Child Care Financial Assistance Daily Reimbursement Rates
11
+ href: https://www.mass.gov/doc/fiscal-year-2025-child-care-financial-assistance-daily-reimbursement-rates/download#page=3
12
+
@@ -0,0 +1,24 @@
1
+ description: Massachusetts provides these reimbursement rates for family child care older child under the Child Care Financial Assistance program.
2
+ metadata:
3
+ period: day
4
+ unit: currency-USD
5
+ label: Massachusetts CCFA family child care older child reimbursement rates
6
+ breakdown:
7
+ - ma_ccfa_region
8
+ reference:
9
+ - title: FY 2025 Child Care Financial Assistance Daily Reimbursement Rates
10
+ href: https://www.mass.gov/doc/fiscal-year-2025-child-care-financial-assistance-daily-reimbursement-rates/download#page=3
11
+ - title: FY 2024 Child Care Financial Assistance Daily Reimbursement Rates
12
+ href: https://www.mass.gov/doc/fiscal-year-2024-child-care-financial-assistance-daily-reimbursement-rates/download#page=3
13
+
14
+ WESTERN_CENTRAL_AND_SOUTHEAST:
15
+ 2023-07-01: 48.9
16
+ 2024-07-01: 49.39
17
+
18
+ NORTHEAST:
19
+ 2023-07-01: 46.5
20
+ 2024-07-01: 49.15
21
+
22
+ METRO_AND_BOSTON_METRO:
23
+ 2023-07-01: 54.33
24
+ 2024-07-01: 56.16
@@ -0,0 +1,24 @@
1
+ description: Massachusetts provides these reimbursement rates for family child care younger child under the Child Care Financial Assistance program.
2
+ metadata:
3
+ period: day
4
+ unit: currency-USD
5
+ label: Massachusetts CCFA family child care younger child reimbursement rates
6
+ breakdown:
7
+ - ma_ccfa_region
8
+ reference:
9
+ - title: FY 2025 Child Care Financial Assistance Daily Reimbursement Rates
10
+ href: https://www.mass.gov/doc/fiscal-year-2025-child-care-financial-assistance-daily-reimbursement-rates/download#page=3
11
+ - title: FY 2024 Child Care Financial Assistance Daily Reimbursement Rates
12
+ href: https://www.mass.gov/doc/fiscal-year-2024-child-care-financial-assistance-daily-reimbursement-rates/download#page=3
13
+
14
+ WESTERN_CENTRAL_AND_SOUTHEAST:
15
+ 2023-07-01: 58.45
16
+ 2024-07-01: 59.03
17
+
18
+ NORTHEAST:
19
+ 2023-07-01: 58.45
20
+ 2024-07-01: 59.03
21
+
22
+ METRO_AND_BOSTON_METRO:
23
+ 2023-07-01: 87.66
24
+ 2024-07-01: 88.54
@@ -0,0 +1,55 @@
1
+ description: Massachusetts provides these reimbursement rates for head start partner and kindergarten child care under the Child Care Financial Assistance program.
2
+ metadata:
3
+ period: day
4
+ unit: currency-USD
5
+ label: Massachusetts CCFA head start partner and kindergarten reimbursement rates
6
+ breakdown:
7
+ - ma_ccfa_region
8
+ - ma_ccfa_schedule_type
9
+ reference:
10
+ - title: FY 2025 Child Care Financial Assistance Daily Reimbursement Rates
11
+ href: https://www.mass.gov/doc/fiscal-year-2025-child-care-financial-assistance-daily-reimbursement-rates/download#page=2
12
+ - title: FY 2024 Child Care Financial Assistance Daily Reimbursement Rates
13
+ href: https://www.mass.gov/doc/fiscal-year-2024-child-care-financial-assistance-daily-reimbursement-rates/download#page=2
14
+
15
+ WESTERN_CENTRAL_AND_SOUTHEAST:
16
+ BEFORE_ONLY:
17
+ 2023-07-01: 10.88
18
+ 2024-07-01: 11.04
19
+ AFTER_ONLY:
20
+ 2023-07-01: 32.34
21
+ 2024-07-01: 32.83
22
+ BEFORE_AND_AFTER:
23
+ 2023-07-01: 43.21
24
+ 2024-07-01: 43.87
25
+ FULL_DAY:
26
+ 2023-07-01: 57.23
27
+ 2024-07-01: 58.09
28
+
29
+ NORTHEAST:
30
+ BEFORE_ONLY:
31
+ 2023-07-01: 11.42
32
+ 2024-07-01: 12.04
33
+ AFTER_ONLY:
34
+ 2023-07-01: 34.1
35
+ 2024-07-01: 34.61
36
+ BEFORE_AND_AFTER:
37
+ 2023-07-01: 45.51
38
+ 2024-07-01: 46.2
39
+ FULL_DAY:
40
+ 2023-07-01: 57.99
41
+ 2024-07-01: 59.09
42
+
43
+ METRO_AND_BOSTON_METRO:
44
+ BEFORE_ONLY:
45
+ 2023-07-01: 15.6
46
+ 2024-07-01: 15.83
47
+ AFTER_ONLY:
48
+ 2023-07-01: 46.83
49
+ 2024-07-01: 47.53
50
+ BEFORE_AND_AFTER:
51
+ 2023-07-01: 62.43
52
+ 2024-07-01: 63.36
53
+ FULL_DAY:
54
+ 2023-07-01: 80.13
55
+ 2024-07-01: 81.33
@@ -0,0 +1,14 @@
1
+ description: Massachusetts provides these reimbursement rates for informal child care child's home under the Child Care Financial Assistance program.
2
+ metadata:
3
+ period: day
4
+ unit: currency-USD
5
+ label: Massachusetts CCFA informal child care child's home reimbursement rates
6
+ reference:
7
+ - title: FY 2025 Child Care Financial Assistance Daily Reimbursement Rates
8
+ href: https://www.mass.gov/doc/fiscal-year-2025-child-care-financial-assistance-daily-reimbursement-rates/download#page=2
9
+ - title: FY 2024 Child Care Financial Assistance Daily Reimbursement Rates
10
+ href: https://www.mass.gov/doc/fiscal-year-2024-child-care-financial-assistance-daily-reimbursement-rates/download#page=2
11
+
12
+ values:
13
+ 2023-07-01: 17.16
14
+ 2024-07-01: 17.33
@@ -0,0 +1,14 @@
1
+ description: Massachusetts provides these reimbursement rates for informal child care relative's home under the Child Care Financial Assistance program.
2
+ metadata:
3
+ period: day
4
+ unit: currency-USD
5
+ label: Massachusetts CCFA informal child care relative's home reimbursement rates
6
+ reference:
7
+ - title: FY 2025 Child Care Financial Assistance Daily Reimbursement Rates
8
+ href: https://www.mass.gov/doc/fiscal-year-2025-child-care-financial-assistance-daily-reimbursement-rates/download#page=2
9
+ - title: FY 2024 Child Care Financial Assistance Daily Reimbursement Rates
10
+ href: https://www.mass.gov/doc/fiscal-year-2024-child-care-financial-assistance-daily-reimbursement-rates/download#page=2
11
+
12
+ values:
13
+ 2023-07-01: 24.33
14
+ 2024-07-01: 24.57
@@ -0,0 +1,6 @@
1
+ from policyengine_us.reforms.aca.aca_ptc_additional_bracket import (
2
+ create_aca_ptc_additional_bracket_reform,
3
+ )
4
+ from policyengine_us.reforms.aca.aca_ptc_simplified_bracket import (
5
+ create_aca_ptc_simplified_bracket_reform,
6
+ )
@@ -0,0 +1,126 @@
1
+ from policyengine_us.model_api import *
2
+ from policyengine_core.periods import period as period_
3
+
4
+
5
+ def create_aca_ptc_additional_bracket() -> Reform:
6
+ class aca_ptc_phase_out_rate(Variable):
7
+ """
8
+ ACA Premium Tax Credit phase-out rate with linear bracket extension.
9
+
10
+ This reform extends premium subsidies beyond the standard 400% FPL cliff
11
+ using a linear formula. Above the transition threshold (typically 300% FPL),
12
+ the contribution percentage increases linearly based on the increment rate
13
+ (typically 4 percentage points per 100% FPL).
14
+
15
+ The reform creates a more gradual phase-out of subsidies, reducing the
16
+ cliff effect where households just above 400% FPL lose all subsidies.
17
+
18
+ Related issue: https://github.com/PolicyEngine/policyengine-us/issues/6629
19
+ """
20
+
21
+ value_type = float
22
+ entity = TaxUnit
23
+ label = "ACA PTC phase-out rate with additional bracket (i.e., IRS Form 8962 'applicable figure')"
24
+ unit = "/1"
25
+ definition_period = YEAR
26
+ reference = [
27
+ "26 U.S. Code § 36B(b)(3)(A) - Refundable credit for coverage under a qualified health plan",
28
+ "https://www.law.cornell.edu/uscode/text/26/36B#b_3_A",
29
+ ]
30
+
31
+ def formula(tax_unit, period, parameters):
32
+ magi_frac = tax_unit("aca_magi_fraction", period)
33
+ p = parameters(
34
+ period
35
+ ).gov.contrib.aca.ptc_additional_bracket.brackets
36
+ return np.interp(magi_frac, p.thresholds, p.amounts)
37
+
38
+ class is_aca_ptc_eligible(Variable):
39
+ """
40
+ Extended ACA PTC eligibility beyond 400% FPL.
41
+ """
42
+
43
+ value_type = bool
44
+ entity = Person
45
+ label = "Person is eligible for ACA premium tax credit and pays ACA premium"
46
+ definition_period = YEAR
47
+
48
+ def formula(person, period, parameters):
49
+ # determine status eligibility for ACA PTC
50
+ fstatus = person.tax_unit("filing_status", period)
51
+ separate = fstatus == fstatus.possible_values.SEPARATE
52
+ immigration_eligible = person(
53
+ "is_aca_ptc_immigration_status_eligible", period
54
+ )
55
+ taxpayer_has_itin = person.tax_unit("taxpayer_has_itin", period)
56
+ is_status_eligible = (
57
+ taxpayer_has_itin & ~separate & immigration_eligible
58
+ )
59
+
60
+ # determine coverage eligibility for ACA plan
61
+ INELIGIBLE_COVERAGE = [
62
+ "is_medicaid_eligible",
63
+ "is_chip_eligible",
64
+ "is_aca_eshi_eligible",
65
+ "is_medicare_eligible",
66
+ ]
67
+ is_coverage_eligible = (
68
+ add(person, period, INELIGIBLE_COVERAGE) == 0
69
+ )
70
+
71
+ # determine income eligibility for ACA PTC (using reform parameter)
72
+ p = parameters(period).gov.contrib.aca.ptc_additional_bracket
73
+ magi_frac = person.tax_unit("aca_magi_fraction", period)
74
+ is_income_eligible = p.income_eligibility.calc(magi_frac)
75
+
76
+ # determine which people pay an age-based ACA plan premium
77
+ p_aca = parameters(period).gov.aca
78
+ is_aca_adult = person("age", period) > p_aca.slcsp.max_child_age
79
+ child_pays = (
80
+ person("aca_child_index", period) <= p_aca.max_child_count
81
+ )
82
+ pays_aca_premium = is_aca_adult | child_pays
83
+
84
+ return (
85
+ is_status_eligible
86
+ & is_coverage_eligible
87
+ & is_income_eligible
88
+ & pays_aca_premium
89
+ )
90
+
91
+ class reform(Reform):
92
+ def apply(self):
93
+ self.update_variable(aca_ptc_phase_out_rate)
94
+ self.update_variable(is_aca_ptc_eligible)
95
+
96
+ return reform
97
+
98
+
99
+ def create_aca_ptc_additional_bracket_reform(
100
+ parameters, period, bypass: bool = False
101
+ ):
102
+ if bypass:
103
+ return create_aca_ptc_additional_bracket()
104
+
105
+ p = parameters.gov.contrib.aca.ptc_additional_bracket
106
+ current_period = period_(period)
107
+
108
+ # Check if reform is active within a 5-year lookahead window
109
+ # This allows the reform to be selected in the web app interface
110
+ # even if it's scheduled to start in a future year
111
+ reform_active = False
112
+ for i in range(5):
113
+ if p(current_period).in_effect:
114
+ reform_active = True
115
+ break
116
+ current_period = current_period.offset(1, "year")
117
+
118
+ if reform_active:
119
+ return create_aca_ptc_additional_bracket()
120
+ else:
121
+ return None
122
+
123
+
124
+ aca_ptc_additional_bracket = create_aca_ptc_additional_bracket_reform(
125
+ None, None, bypass=True
126
+ )
@@ -0,0 +1,127 @@
1
+ from policyengine_us.model_api import *
2
+ from policyengine_core.periods import period as period_
3
+
4
+
5
+ def create_aca_ptc_simplified_bracket() -> Reform:
6
+ class aca_ptc_phase_out_rate(Variable):
7
+ """
8
+ ACA Premium Tax Credit phase-out rate with simplified linear progression.
9
+
10
+ This reform creates a single linear phase-out starting at 100% FPL,
11
+ where the contribution percentage increases by 4 percentage points
12
+ per 100% FPL increment. This results in a simpler, more aggressive
13
+ phase-out compared to the additional bracket reform.
14
+
15
+ The reform eliminates the standard ACA bracket structure entirely,
16
+ replacing it with one continuous linear progression from 100% FPL
17
+ onwards.
18
+
19
+ Related issue: https://github.com/PolicyEngine/policyengine-us/issues/6629
20
+ """
21
+
22
+ value_type = float
23
+ entity = TaxUnit
24
+ label = "ACA PTC phase-out rate with simplified bracket (i.e., IRS Form 8962 'applicable figure')"
25
+ unit = "/1"
26
+ definition_period = YEAR
27
+ reference = [
28
+ "26 U.S. Code § 36B(b)(3)(A) - Refundable credit for coverage under a qualified health plan",
29
+ "https://www.law.cornell.edu/uscode/text/26/36B#b_3_A",
30
+ ]
31
+
32
+ def formula(tax_unit, period, parameters):
33
+ magi_frac = tax_unit("aca_magi_fraction", period)
34
+ p = parameters(
35
+ period
36
+ ).gov.contrib.aca.ptc_simplified_bracket.brackets
37
+ return np.interp(magi_frac, p.thresholds, p.amounts)
38
+
39
+ class is_aca_ptc_eligible(Variable):
40
+ """
41
+ Extended ACA PTC eligibility beyond 400% FPL.
42
+ """
43
+
44
+ value_type = bool
45
+ entity = Person
46
+ label = "Person is eligible for ACA premium tax credit and pays ACA premium"
47
+ definition_period = YEAR
48
+
49
+ def formula(person, period, parameters):
50
+ # determine status eligibility for ACA PTC
51
+ fstatus = person.tax_unit("filing_status", period)
52
+ separate = fstatus == fstatus.possible_values.SEPARATE
53
+ immigration_eligible = person(
54
+ "is_aca_ptc_immigration_status_eligible", period
55
+ )
56
+ taxpayer_has_itin = person.tax_unit("taxpayer_has_itin", period)
57
+ is_status_eligible = (
58
+ taxpayer_has_itin & ~separate & immigration_eligible
59
+ )
60
+
61
+ # determine coverage eligibility for ACA plan
62
+ INELIGIBLE_COVERAGE = [
63
+ "is_medicaid_eligible",
64
+ "is_chip_eligible",
65
+ "is_aca_eshi_eligible",
66
+ "is_medicare_eligible",
67
+ ]
68
+ is_coverage_eligible = (
69
+ add(person, period, INELIGIBLE_COVERAGE) == 0
70
+ )
71
+
72
+ # determine income eligibility for ACA PTC (using reform parameter)
73
+ p = parameters(period).gov.contrib.aca.ptc_simplified_bracket
74
+ magi_frac = person.tax_unit("aca_magi_fraction", period)
75
+ is_income_eligible = p.income_eligibility.calc(magi_frac)
76
+
77
+ # determine which people pay an age-based ACA plan premium
78
+ p_aca = parameters(period).gov.aca
79
+ is_aca_adult = person("age", period) > p_aca.slcsp.max_child_age
80
+ child_pays = (
81
+ person("aca_child_index", period) <= p_aca.max_child_count
82
+ )
83
+ pays_aca_premium = is_aca_adult | child_pays
84
+
85
+ return (
86
+ is_status_eligible
87
+ & is_coverage_eligible
88
+ & is_income_eligible
89
+ & pays_aca_premium
90
+ )
91
+
92
+ class reform(Reform):
93
+ def apply(self):
94
+ self.update_variable(aca_ptc_phase_out_rate)
95
+ self.update_variable(is_aca_ptc_eligible)
96
+
97
+ return reform
98
+
99
+
100
+ def create_aca_ptc_simplified_bracket_reform(
101
+ parameters, period, bypass: bool = False
102
+ ):
103
+ if bypass:
104
+ return create_aca_ptc_simplified_bracket()
105
+
106
+ p = parameters.gov.contrib.aca.ptc_simplified_bracket
107
+ current_period = period_(period)
108
+
109
+ # Check if reform is active within a 5-year lookahead window
110
+ # This allows the reform to be selected in the web app interface
111
+ # even if it's scheduled to start in a future year
112
+ reform_active = False
113
+ for i in range(5):
114
+ if p(current_period).in_effect:
115
+ reform_active = True
116
+ break
117
+ current_period = current_period.offset(1, "year")
118
+
119
+ if reform_active:
120
+ return create_aca_ptc_simplified_bracket()
121
+ else:
122
+ return None
123
+
124
+
125
+ aca_ptc_simplified_bracket = create_aca_ptc_simplified_bracket_reform(
126
+ None, None, bypass=True
127
+ )
@@ -108,6 +108,10 @@ from .crfb import (
108
108
  create_non_refundable_ss_credit_reform,
109
109
  create_senior_deduction_extension_reform,
110
110
  )
111
+ from .aca import (
112
+ create_aca_ptc_additional_bracket_reform,
113
+ create_aca_ptc_simplified_bracket_reform,
114
+ )
111
115
 
112
116
 
113
117
  from policyengine_core.reforms import Reform
@@ -248,6 +252,12 @@ def create_structural_reforms_from_parameters(parameters, period):
248
252
  ctc_minimum_refundable_amount = (
249
253
  create_ctc_minimum_refundable_amount_reform(parameters, period)
250
254
  )
255
+ aca_ptc_additional_bracket = create_aca_ptc_additional_bracket_reform(
256
+ parameters, period
257
+ )
258
+ aca_ptc_simplified_bracket = create_aca_ptc_simplified_bracket_reform(
259
+ parameters, period
260
+ )
251
261
 
252
262
  reforms = [
253
263
  afa_reform,
@@ -298,6 +308,8 @@ def create_structural_reforms_from_parameters(parameters, period):
298
308
  ctc_per_child_phase_out,
299
309
  ctc_per_child_phase_in,
300
310
  ctc_minimum_refundable_amount,
311
+ aca_ptc_additional_bracket,
312
+ aca_ptc_simplified_bracket,
301
313
  ]
302
314
  reforms = tuple(filter(lambda x: x is not None, reforms))
303
315
 
@@ -0,0 +1,31 @@
1
+ - name: Case 1, family of 2, $1700 income.
2
+ period: 2025-01
3
+ absolute_error_margin: 0.3
4
+ input:
5
+ spm_unit_size: 2
6
+ ma_ccfa_countable_income: 1_700
7
+ state_code: MA
8
+ output:
9
+ ma_ccfa_base_copay: 0
10
+
11
+ - name: Case 2, family of 2, $1800 income.
12
+ period: 2025-01
13
+ absolute_error_margin: 0.3
14
+ input:
15
+ spm_unit_size: 2
16
+ ma_ccfa_countable_income: 1_800
17
+ state_code: MA
18
+ output:
19
+ ma_ccfa_base_copay: 3.88
20
+ # (1800 - 1703)*0.04
21
+
22
+ - name: Case 3, family of 4, $3800 income.
23
+ period: 2025-01
24
+ absolute_error_margin: 0.3
25
+ input:
26
+ spm_unit_size: 4
27
+ ma_ccfa_countable_income: 3_800
28
+ state_code: MA
29
+ output:
30
+ ma_ccfa_base_copay: 64.2
31
+ # (3800 - 2600)*0.0535
@@ -0,0 +1,104 @@
1
+ - name: Case 1, applicant has an eligible child, no income.
2
+ period: 2025-01
3
+ input:
4
+ people:
5
+ person1:
6
+ age: 40
7
+ employment_income: 0
8
+ person2:
9
+ age: 1
10
+ ma_ccfa_eligible_child: true
11
+ spm_units:
12
+ spm_unit:
13
+ members: [person1, person2]
14
+ tax_units:
15
+ tax_unit:
16
+ members: [person1, person2]
17
+ households:
18
+ household:
19
+ members: [person1, person2]
20
+ state_code: MA
21
+ output:
22
+ ma_ccfa_total_copay: 0
23
+
24
+ - name: Case 2, applicant has an eligible child, $1800 monthly income.
25
+ period: 2025-01
26
+ absolute_error_margin: 0.3
27
+ input:
28
+ people:
29
+ person1:
30
+ age: 40
31
+ employment_income: 1_800 * 12
32
+ person2:
33
+ age: 1
34
+ ma_ccfa_eligible_child: true
35
+ spm_units:
36
+ spm_unit:
37
+ members: [person1, person2]
38
+ tax_units:
39
+ tax_unit:
40
+ members: [person1, person2]
41
+ households:
42
+ household:
43
+ members: [person1, person2]
44
+ state_code: MA
45
+ output:
46
+ ma_ccfa_total_copay: 3.88
47
+
48
+ - name: Case 3, household of 4, $3800 monthly income.
49
+ period: 2025-01
50
+ absolute_error_margin: 0.3
51
+ input:
52
+ people:
53
+ person1:
54
+ age: 40
55
+ employment_income: 3_800 * 12
56
+ person2:
57
+ age: 1
58
+ ma_ccfa_eligible_child: true
59
+ person3:
60
+ age: 3
61
+ ma_ccfa_eligible_child: true
62
+ person4:
63
+ age: 5
64
+ ma_ccfa_eligible_child: true
65
+ spm_units:
66
+ spm_unit:
67
+ members: [person1, person2, person3, person4]
68
+ tax_units:
69
+ tax_unit:
70
+ members: [person1, person2, person3, person4]
71
+ households:
72
+ household:
73
+ members: [person1, person2, person3, person4]
74
+ state_code: MA
75
+ output:
76
+ ma_ccfa_total_copay: 112.35
77
+ # 64.2 + 64.2*0.5 + 64.2*0.25
78
+
79
+ - name: Case 4, TAFDC recipient with children has zero copay.
80
+ period: 2025-01
81
+ input:
82
+ people:
83
+ person1:
84
+ age: 30
85
+ employment_income: 2_000 * 12
86
+ person2:
87
+ age: 2
88
+ ma_ccfa_eligible_child: true
89
+ person3:
90
+ age: 4
91
+ ma_ccfa_eligible_child: true
92
+ spm_units:
93
+ spm_unit:
94
+ members: [person1, person2, person3]
95
+ ma_tafdc_eligible: true
96
+ tax_units:
97
+ tax_unit:
98
+ members: [person1, person2, person3]
99
+ households:
100
+ household:
101
+ members: [person1, person2, person3]
102
+ state_code: MA
103
+ output:
104
+ ma_ccfa_total_copay: 0
@@ -0,0 +1,44 @@
1
+ - name: Case 1, family of 2, $1700 income.
2
+ period: 2025-01
3
+ input:
4
+ spm_unit_size: 2
5
+ ma_ccfa_countable_income: 1_700
6
+ state_code: MA
7
+ output:
8
+ ma_ccfa_copay_level: 1
9
+
10
+ - name: Case 2, family of 2, $1800 income.
11
+ period: 2025-01
12
+ input:
13
+ spm_unit_size: 2
14
+ ma_ccfa_countable_income: 1_800
15
+ state_code: MA
16
+ output:
17
+ ma_ccfa_copay_level: 2
18
+
19
+ - name: Case 3, family of 4, $3000 income.
20
+ period: 2025-01
21
+ input:
22
+ spm_unit_size: 4
23
+ ma_ccfa_countable_income: 3_000
24
+ state_code: MA
25
+ output:
26
+ ma_ccfa_copay_level: 3
27
+
28
+ - name: Case 4, family of 13, $10,000 income.
29
+ period: 2025-01
30
+ input:
31
+ spm_unit_size: 13
32
+ ma_ccfa_countable_income: 10_000
33
+ state_code: MA
34
+ output:
35
+ ma_ccfa_copay_level: 11
36
+
37
+ - name: Case 5, family of 2, $8,000 income.
38
+ period: 2025-01
39
+ input:
40
+ spm_unit_size: 2
41
+ ma_ccfa_countable_income: 8_000
42
+ state_code: MA
43
+ output:
44
+ ma_ccfa_copay_level: 28