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.
- policyengine_us/parameters/gov/contrib/aca/ptc_additional_bracket/brackets.yaml +42 -0
- policyengine_us/parameters/gov/contrib/aca/ptc_additional_bracket/in_effect.yaml +10 -0
- policyengine_us/parameters/gov/contrib/aca/ptc_additional_bracket/income_eligibility.yaml +28 -0
- policyengine_us/parameters/gov/contrib/aca/ptc_simplified_bracket/brackets.yaml +28 -0
- policyengine_us/parameters/gov/contrib/aca/ptc_simplified_bracket/in_effect.yaml +10 -0
- policyengine_us/parameters/gov/contrib/aca/ptc_simplified_bracket/income_eligibility.yaml +28 -0
- policyengine_us/parameters/gov/states/ma/eec/README.md +1 -0
- policyengine_us/parameters/gov/states/ma/eec/ccfa/README.md +1 -0
- policyengine_us/parameters/gov/states/ma/eec/ccfa/activity_requirements/weekly_hours.yaml +11 -0
- policyengine_us/parameters/gov/states/ma/eec/ccfa/activity_requirements/work_exempt_age.yaml +11 -0
- policyengine_us/parameters/gov/states/ma/eec/ccfa/age_threshold/child.yaml +13 -0
- policyengine_us/parameters/gov/states/ma/eec/ccfa/age_threshold/disabled_child.yaml +14 -0
- policyengine_us/parameters/gov/states/ma/eec/ccfa/age_threshold/infant.yaml +11 -0
- policyengine_us/parameters/gov/states/ma/eec/ccfa/age_threshold/school_age.yaml +11 -0
- policyengine_us/parameters/gov/states/ma/eec/ccfa/age_threshold/toddler.yaml +11 -0
- policyengine_us/parameters/gov/states/ma/eec/ccfa/assets/limit.yaml +11 -0
- policyengine_us/parameters/gov/states/ma/eec/ccfa/copay/fee_level/fee_percentages.yaml +69 -0
- policyengine_us/parameters/gov/states/ma/eec/ccfa/copay/fee_level/income_ratio_increments.yaml +39 -0
- policyengine_us/parameters/gov/states/ma/eec/ccfa/copay/fee_level/maximum_level.yaml +11 -0
- policyengine_us/parameters/gov/states/ma/eec/ccfa/copay/ratio/additional_child.yaml +11 -0
- policyengine_us/parameters/gov/states/ma/eec/ccfa/copay/ratio/first_child.yaml +11 -0
- policyengine_us/parameters/gov/states/ma/eec/ccfa/copay/ratio/second_child.yaml +11 -0
- policyengine_us/parameters/gov/states/ma/eec/ccfa/income/countable_income/sources.yaml +30 -0
- policyengine_us/parameters/gov/states/ma/eec/ccfa/income/smi_rate/new_applicants.yaml +15 -0
- policyengine_us/parameters/gov/states/ma/eec/ccfa/income/smi_rate/redetermination.yaml +12 -0
- policyengine_us/parameters/gov/states/ma/eec/ccfa/qualified_immigration_statuses.yaml +19 -0
- policyengine_us/parameters/gov/states/ma/eec/ccfa/region/metro_and_boston_metro.yaml +15 -0
- policyengine_us/parameters/gov/states/ma/eec/ccfa/region/northeast.yaml +16 -0
- policyengine_us/parameters/gov/states/ma/eec/ccfa/region/western_central_and_southeast.yaml +21 -0
- policyengine_us/parameters/gov/states/ma/eec/ccfa/reimbursement_rates/amount_ratio.yaml +23 -0
- policyengine_us/parameters/gov/states/ma/eec/ccfa/reimbursement_rates/center_based/early_education.yaml +46 -0
- policyengine_us/parameters/gov/states/ma/eec/ccfa/reimbursement_rates/center_based/school_age.yaml +59 -0
- policyengine_us/parameters/gov/states/ma/eec/ccfa/reimbursement_rates/family_child_care/age_threshold.yaml +12 -0
- policyengine_us/parameters/gov/states/ma/eec/ccfa/reimbursement_rates/family_child_care/older.yaml +24 -0
- policyengine_us/parameters/gov/states/ma/eec/ccfa/reimbursement_rates/family_child_care/younger.yaml +24 -0
- policyengine_us/parameters/gov/states/ma/eec/ccfa/reimbursement_rates/head_start_partner_and_kindergarten.yaml +55 -0
- policyengine_us/parameters/gov/states/ma/eec/ccfa/reimbursement_rates/informal_child_care/child_home.yaml +14 -0
- policyengine_us/parameters/gov/states/ma/eec/ccfa/reimbursement_rates/informal_child_care/relative_home.yaml +14 -0
- policyengine_us/reforms/aca/__init__.py +6 -0
- policyengine_us/reforms/aca/aca_ptc_additional_bracket.py +126 -0
- policyengine_us/reforms/aca/aca_ptc_simplified_bracket.py +127 -0
- policyengine_us/reforms/reforms.py +12 -0
- policyengine_us/tests/policy/baseline/gov/states/ma/eec/ccfa/copay/ma_ccfa_base_copay.yaml +31 -0
- policyengine_us/tests/policy/baseline/gov/states/ma/eec/ccfa/copay/ma_ccfa_total_copay.yaml +104 -0
- policyengine_us/tests/policy/baseline/gov/states/ma/eec/ccfa/copay/ma_ccsp_copay_level.yaml +44 -0
- policyengine_us/tests/policy/baseline/gov/states/ma/eec/ccfa/eligibility/ma_ccfa_activity_eligible.yaml +111 -0
- policyengine_us/tests/policy/baseline/gov/states/ma/eec/ccfa/eligibility/ma_ccfa_asset_eligible.yaml +15 -0
- policyengine_us/tests/policy/baseline/gov/states/ma/eec/ccfa/eligibility/ma_ccfa_eligible.yaml +44 -0
- policyengine_us/tests/policy/baseline/gov/states/ma/eec/ccfa/eligibility/ma_ccfa_eligible_child.yaml +43 -0
- policyengine_us/tests/policy/baseline/gov/states/ma/eec/ccfa/eligibility/ma_ccfa_immigration_status_eligible.yaml +23 -0
- policyengine_us/tests/policy/baseline/gov/states/ma/eec/ccfa/eligibility/ma_ccfa_income_eligible.yaml +42 -0
- policyengine_us/tests/policy/baseline/gov/states/ma/eec/ccfa/enum_variables/ma_ccfa_child_age_category.yaml +87 -0
- policyengine_us/tests/policy/baseline/gov/states/ma/eec/ccfa/ma_ccfa.yaml +249 -0
- policyengine_us/tests/policy/baseline/gov/states/ma/eec/ccfa/ma_ccfa_fpg.yaml +26 -0
- policyengine_us/tests/policy/baseline/gov/states/ma/eec/ccfa/ma_ccfa_maximum_benefit_amount.yaml +209 -0
- policyengine_us/tests/policy/baseline/gov/states/ma/eec/ccfa/ma_ccfa_region.yaml +23 -0
- policyengine_us/tests/policy/baseline/gov/states/ma/eec/ccfa/reimbursement/ma_ccfa_center_based_early_education_reimbursement.yaml +10 -0
- policyengine_us/tests/policy/baseline/gov/states/ma/eec/ccfa/reimbursement/ma_ccfa_center_based_school_age_reimbursement.yaml +11 -0
- policyengine_us/tests/policy/baseline/gov/states/ma/eec/ccfa/reimbursement/ma_ccfa_family_child_care_reimbursement.yaml +10 -0
- policyengine_us/tests/policy/baseline/gov/states/ma/eec/ccfa/reimbursement/ma_ccfa_head_start_partner_and_kindergarten_reimbursement.yaml +10 -0
- policyengine_us/tests/policy/baseline/gov/states/ma/eec/ccfa/reimbursement/ma_ccfa_informal_child_care_reimbursement.yaml +10 -0
- policyengine_us/tests/policy/baseline/gov/states/ma/eec/ccfa/reimbursement/ma_ccfa_maximum_reimbursement.yaml +27 -0
- policyengine_us/tests/policy/baseline/gov/states/ma/eec/ccfa/reimbursement/ma_ccfa_reimbursement_ratio.yaml +31 -0
- policyengine_us/tests/policy/baseline/gov/states/ma/eec/ccfa/reimbursement/ma_ccfa_uncapped_daily_payment.yaml +8 -0
- policyengine_us/tests/policy/contrib/aca/ptc_additional_bracket.yaml +117 -0
- policyengine_us/tests/policy/contrib/aca/ptc_simplified_bracket.yaml +117 -0
- policyengine_us/variables/gov/states/ma/eec/ccfa/copay/ma_ccfa_base_copay.py +27 -0
- policyengine_us/variables/gov/states/ma/eec/ccfa/copay/ma_ccfa_copay_level.py +30 -0
- policyengine_us/variables/gov/states/ma/eec/ccfa/copay/ma_ccfa_total_copay.py +35 -0
- policyengine_us/variables/gov/states/ma/eec/ccfa/eligibility/ma_ccfa_activity_eligible.py +43 -0
- policyengine_us/variables/gov/states/ma/eec/ccfa/eligibility/ma_ccfa_asset_eligible.py +15 -0
- policyengine_us/variables/gov/states/ma/eec/ccfa/eligibility/ma_ccfa_eligible.py +34 -0
- policyengine_us/variables/gov/states/ma/eec/ccfa/eligibility/ma_ccfa_eligible_child.py +23 -0
- policyengine_us/variables/gov/states/ma/eec/ccfa/eligibility/ma_ccfa_immigration_status_eligible.py +19 -0
- policyengine_us/variables/gov/states/ma/eec/ccfa/eligibility/ma_ccfa_income_eligible.py +27 -0
- policyengine_us/variables/gov/states/ma/eec/ccfa/ma_ccfa.py +25 -0
- policyengine_us/variables/gov/states/ma/eec/ccfa/ma_ccfa_care_provider_type.py +22 -0
- policyengine_us/variables/gov/states/ma/eec/ccfa/ma_ccfa_child_age_category.py +45 -0
- policyengine_us/variables/gov/states/ma/eec/ccfa/ma_ccfa_countable_income.py +15 -0
- policyengine_us/variables/gov/states/ma/eec/ccfa/ma_ccfa_enrolled.py +9 -0
- policyengine_us/variables/gov/states/ma/eec/ccfa/ma_ccfa_fpg.py +27 -0
- policyengine_us/variables/gov/states/ma/eec/ccfa/ma_ccfa_is_in_relatives_home_care.py +9 -0
- policyengine_us/variables/gov/states/ma/eec/ccfa/ma_ccfa_maximum_benefit_amount.py +19 -0
- policyengine_us/variables/gov/states/ma/eec/ccfa/ma_ccfa_region.py +45 -0
- policyengine_us/variables/gov/states/ma/eec/ccfa/ma_ccfa_schedule_type.py +21 -0
- policyengine_us/variables/gov/states/ma/eec/ccfa/ma_child_care_subsidies.py +11 -0
- policyengine_us/variables/gov/states/ma/eec/ccfa/reimbursement/ma_ccfa_center_based_early_education_reimbursement.py +19 -0
- policyengine_us/variables/gov/states/ma/eec/ccfa/reimbursement/ma_ccfa_center_based_school_age_reimbursement.py +20 -0
- policyengine_us/variables/gov/states/ma/eec/ccfa/reimbursement/ma_ccfa_family_child_care_reimbursement.py +21 -0
- policyengine_us/variables/gov/states/ma/eec/ccfa/reimbursement/ma_ccfa_head_start_partner_and_kindergarten_reimbursement.py +17 -0
- policyengine_us/variables/gov/states/ma/eec/ccfa/reimbursement/ma_ccfa_informal_child_care_reimbursement.py +20 -0
- policyengine_us/variables/gov/states/ma/eec/ccfa/reimbursement/ma_ccfa_maximum_reimbursement.py +23 -0
- policyengine_us/variables/gov/states/ma/eec/ccfa/reimbursement/ma_ccfa_reimbursement_ratio.py +17 -0
- policyengine_us/variables/gov/states/ma/eec/ccfa/reimbursement/ma_ccfa_uncapped_daily_payment.py +66 -0
- policyengine_us/variables/household/expense/childcare/childcare_attending_days_per_month.py +9 -0
- policyengine_us/variables/household/expense/childcare/childcare_expenses.py +1 -1
- {policyengine_us-1.409.0.dist-info → policyengine_us-1.411.0.dist-info}/METADATA +1 -1
- {policyengine_us-1.409.0.dist-info → policyengine_us-1.411.0.dist-info}/RECORD +101 -7
- {policyengine_us-1.409.0.dist-info → policyengine_us-1.411.0.dist-info}/WHEEL +0 -0
- {policyengine_us-1.409.0.dist-info → policyengine_us-1.411.0.dist-info}/entry_points.txt +0 -0
- {policyengine_us-1.409.0.dist-info → policyengine_us-1.411.0.dist-info}/licenses/LICENSE +0 -0
policyengine_us/tests/policy/baseline/gov/states/ma/eec/ccfa/ma_ccfa_maximum_benefit_amount.yaml
ADDED
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
- name: No benefit when not eligible for CCFA
|
|
2
|
+
period: 2025-01
|
|
3
|
+
input:
|
|
4
|
+
ma_ccfa_eligible: false
|
|
5
|
+
state_code: MA
|
|
6
|
+
output:
|
|
7
|
+
ma_ccfa_maximum_benefit_amount: 0
|
|
8
|
+
|
|
9
|
+
- name: Full reimbursement with zero copay
|
|
10
|
+
period: 2025-01
|
|
11
|
+
input:
|
|
12
|
+
people:
|
|
13
|
+
parent:
|
|
14
|
+
age: 30
|
|
15
|
+
child:
|
|
16
|
+
age: 3
|
|
17
|
+
ma_ccfa_maximum_reimbursement: 1_200
|
|
18
|
+
spm_units:
|
|
19
|
+
spm_unit:
|
|
20
|
+
members: [parent, child]
|
|
21
|
+
ma_ccfa_eligible: true
|
|
22
|
+
ma_ccfa_total_copay: 0
|
|
23
|
+
households:
|
|
24
|
+
household:
|
|
25
|
+
state_code: MA
|
|
26
|
+
members: [parent, child]
|
|
27
|
+
output:
|
|
28
|
+
ma_ccfa_maximum_benefit_amount: 1_200
|
|
29
|
+
|
|
30
|
+
- name: Reduced benefit with copay
|
|
31
|
+
period: 2025-01
|
|
32
|
+
input:
|
|
33
|
+
people:
|
|
34
|
+
parent:
|
|
35
|
+
age: 30
|
|
36
|
+
child:
|
|
37
|
+
age: 3
|
|
38
|
+
ma_ccfa_maximum_reimbursement: 1_200
|
|
39
|
+
spm_units:
|
|
40
|
+
spm_unit:
|
|
41
|
+
members: [parent, child]
|
|
42
|
+
ma_ccfa_eligible: true
|
|
43
|
+
ma_ccfa_total_copay: 300
|
|
44
|
+
households:
|
|
45
|
+
household:
|
|
46
|
+
state_code: MA
|
|
47
|
+
members: [parent, child]
|
|
48
|
+
output:
|
|
49
|
+
ma_ccfa_maximum_benefit_amount: 900
|
|
50
|
+
|
|
51
|
+
- name: Multiple children with different reimbursement rates
|
|
52
|
+
period: 2025-01
|
|
53
|
+
input:
|
|
54
|
+
people:
|
|
55
|
+
parent:
|
|
56
|
+
age: 35
|
|
57
|
+
infant:
|
|
58
|
+
age: 1
|
|
59
|
+
ma_ccfa_maximum_reimbursement: 1_500
|
|
60
|
+
toddler:
|
|
61
|
+
age: 3
|
|
62
|
+
ma_ccfa_maximum_reimbursement: 1_200
|
|
63
|
+
school_age:
|
|
64
|
+
age: 8
|
|
65
|
+
ma_ccfa_maximum_reimbursement: 800
|
|
66
|
+
spm_units:
|
|
67
|
+
spm_unit:
|
|
68
|
+
members: [parent, infant, toddler, school_age]
|
|
69
|
+
ma_ccfa_eligible: true
|
|
70
|
+
ma_ccfa_total_copay: 400
|
|
71
|
+
households:
|
|
72
|
+
household:
|
|
73
|
+
state_code: MA
|
|
74
|
+
members: [parent, infant, toddler, school_age]
|
|
75
|
+
output:
|
|
76
|
+
ma_ccfa_maximum_benefit_amount: 3_100 # (1500 + 1200 + 800) - 400
|
|
77
|
+
|
|
78
|
+
- name: Zero benefit when copay exceeds reimbursement
|
|
79
|
+
period: 2025-01
|
|
80
|
+
input:
|
|
81
|
+
people:
|
|
82
|
+
parent:
|
|
83
|
+
age: 30
|
|
84
|
+
child:
|
|
85
|
+
age: 4
|
|
86
|
+
ma_ccfa_maximum_reimbursement: 500
|
|
87
|
+
spm_units:
|
|
88
|
+
spm_unit:
|
|
89
|
+
members: [parent, child]
|
|
90
|
+
ma_ccfa_eligible: true
|
|
91
|
+
ma_ccfa_total_copay: 600
|
|
92
|
+
households:
|
|
93
|
+
household:
|
|
94
|
+
state_code: MA
|
|
95
|
+
members: [parent, child]
|
|
96
|
+
output:
|
|
97
|
+
ma_ccfa_maximum_benefit_amount: 0 # max(500 - 600, 0) = 0
|
|
98
|
+
|
|
99
|
+
- name: TAFDC recipient with categorical eligibility and no copay
|
|
100
|
+
period: 2025-01
|
|
101
|
+
input:
|
|
102
|
+
people:
|
|
103
|
+
parent:
|
|
104
|
+
age: 28
|
|
105
|
+
child1:
|
|
106
|
+
age: 2
|
|
107
|
+
ma_ccfa_maximum_reimbursement: 1_400
|
|
108
|
+
child2:
|
|
109
|
+
age: 5
|
|
110
|
+
ma_ccfa_maximum_reimbursement: 1_100
|
|
111
|
+
spm_units:
|
|
112
|
+
spm_unit:
|
|
113
|
+
members: [parent, child1, child2]
|
|
114
|
+
ma_ccfa_eligible: true
|
|
115
|
+
ma_tafdc_eligible: true
|
|
116
|
+
ma_ccfa_total_copay: 0 # TAFDC recipients typically have no copay
|
|
117
|
+
households:
|
|
118
|
+
household:
|
|
119
|
+
state_code: MA
|
|
120
|
+
members: [parent, child1, child2]
|
|
121
|
+
output:
|
|
122
|
+
ma_ccfa_maximum_benefit_amount: 2_500 # 1400 + 1100
|
|
123
|
+
|
|
124
|
+
- name: High income family with maximum copay
|
|
125
|
+
period: 2025-01
|
|
126
|
+
input:
|
|
127
|
+
people:
|
|
128
|
+
parent1:
|
|
129
|
+
age: 40
|
|
130
|
+
parent2:
|
|
131
|
+
age: 38
|
|
132
|
+
child:
|
|
133
|
+
age: 6
|
|
134
|
+
ma_ccfa_maximum_reimbursement: 1_000
|
|
135
|
+
spm_units:
|
|
136
|
+
spm_unit:
|
|
137
|
+
members: [parent1, parent2, child]
|
|
138
|
+
ma_ccfa_eligible: true
|
|
139
|
+
ma_ccfa_total_copay: 800
|
|
140
|
+
households:
|
|
141
|
+
household:
|
|
142
|
+
state_code: MA
|
|
143
|
+
members: [parent1, parent2, child]
|
|
144
|
+
output:
|
|
145
|
+
ma_ccfa_maximum_benefit_amount: 200 # 1000 - 800
|
|
146
|
+
|
|
147
|
+
- name: Single parent with infant - higher reimbursement rate
|
|
148
|
+
period: 2025-01
|
|
149
|
+
input:
|
|
150
|
+
people:
|
|
151
|
+
parent:
|
|
152
|
+
age: 25
|
|
153
|
+
infant:
|
|
154
|
+
age: 0.5 # 6 months old
|
|
155
|
+
ma_ccfa_maximum_reimbursement: 1_800 # Infants typically have higher rates
|
|
156
|
+
spm_units:
|
|
157
|
+
spm_unit:
|
|
158
|
+
members: [parent, infant]
|
|
159
|
+
ma_ccfa_eligible: true
|
|
160
|
+
ma_ccfa_total_copay: 150
|
|
161
|
+
households:
|
|
162
|
+
household:
|
|
163
|
+
state_code: MA
|
|
164
|
+
members: [parent, infant]
|
|
165
|
+
output:
|
|
166
|
+
ma_ccfa_maximum_benefit_amount: 1_650 # 1800 - 150
|
|
167
|
+
|
|
168
|
+
- name: Family with disabled child - extended age eligibility
|
|
169
|
+
period: 2025-01
|
|
170
|
+
input:
|
|
171
|
+
people:
|
|
172
|
+
parent:
|
|
173
|
+
age: 45
|
|
174
|
+
disabled_child:
|
|
175
|
+
age: 14
|
|
176
|
+
is_disabled: true
|
|
177
|
+
ma_ccfa_maximum_reimbursement: 1_300
|
|
178
|
+
spm_units:
|
|
179
|
+
spm_unit:
|
|
180
|
+
members: [parent, disabled_child]
|
|
181
|
+
ma_ccfa_eligible: true
|
|
182
|
+
ma_ccfa_total_copay: 250
|
|
183
|
+
households:
|
|
184
|
+
household:
|
|
185
|
+
state_code: MA
|
|
186
|
+
members: [parent, disabled_child]
|
|
187
|
+
output:
|
|
188
|
+
ma_ccfa_maximum_benefit_amount: 1_050 # 1300 - 250
|
|
189
|
+
|
|
190
|
+
- name: Edge case - exactly zero after copay
|
|
191
|
+
period: 2025-01
|
|
192
|
+
input:
|
|
193
|
+
people:
|
|
194
|
+
parent:
|
|
195
|
+
age: 32
|
|
196
|
+
child:
|
|
197
|
+
age: 7
|
|
198
|
+
ma_ccfa_maximum_reimbursement: 750
|
|
199
|
+
spm_units:
|
|
200
|
+
spm_unit:
|
|
201
|
+
members: [parent, child]
|
|
202
|
+
ma_ccfa_eligible: true
|
|
203
|
+
ma_ccfa_total_copay: 750
|
|
204
|
+
households:
|
|
205
|
+
household:
|
|
206
|
+
state_code: MA
|
|
207
|
+
members: [parent, child]
|
|
208
|
+
output:
|
|
209
|
+
ma_ccfa_maximum_benefit_amount: 0 # 750 - 750 = 0
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
- name: Case 1
|
|
2
|
+
period: 2024-01
|
|
3
|
+
input:
|
|
4
|
+
county_str: BERKSHIRE_COUNTY_MA
|
|
5
|
+
state_code: MA
|
|
6
|
+
output:
|
|
7
|
+
ma_ccfa_region: WESTERN_CENTRAL_AND_SOUTHEAST
|
|
8
|
+
|
|
9
|
+
- name: Case 2
|
|
10
|
+
period: 2024-01
|
|
11
|
+
input:
|
|
12
|
+
county_str: ESSEX_COUNTY_MA
|
|
13
|
+
state_code: MA
|
|
14
|
+
output:
|
|
15
|
+
ma_ccfa_region: NORTHEAST
|
|
16
|
+
|
|
17
|
+
- name: Case 3
|
|
18
|
+
period: 2024-01
|
|
19
|
+
input:
|
|
20
|
+
county_str: SUFFOLK_COUNTY_MA
|
|
21
|
+
state_code: MA
|
|
22
|
+
output:
|
|
23
|
+
ma_ccfa_region: METRO_AND_BOSTON_METRO
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
- name: Case 1, region 1, infant.
|
|
2
|
+
period: 2025-01
|
|
3
|
+
absolute_error_margin: 0.2
|
|
4
|
+
input:
|
|
5
|
+
age: 0.5
|
|
6
|
+
county_str: BERKSHIRE_COUNTY_MA
|
|
7
|
+
ma_ccfa_care_provider_type: CENTER_BASED_CARE_EARLY_EDUCATION
|
|
8
|
+
state_code: MA
|
|
9
|
+
output:
|
|
10
|
+
ma_ccfa_center_based_early_education_reimbursement: 105
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
- name: Case 1, region 1, school age, full day.
|
|
2
|
+
period: 2025-01
|
|
3
|
+
absolute_error_margin: 0.2
|
|
4
|
+
input:
|
|
5
|
+
age: 6
|
|
6
|
+
county_str: BERKSHIRE_COUNTY_MA
|
|
7
|
+
ma_ccfa_care_provider_type: CENTER_BASED_CARE_SCHOOL_AGE
|
|
8
|
+
ma_ccfa_schedule_type: FULL_DAY
|
|
9
|
+
state_code: MA
|
|
10
|
+
output:
|
|
11
|
+
ma_ccfa_center_based_school_age_reimbursement: 49.69
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
- name: Case 1, region 1, 2 years old.
|
|
2
|
+
period: 2025-01
|
|
3
|
+
absolute_error_margin: 0.2
|
|
4
|
+
input:
|
|
5
|
+
county_str: BERKSHIRE_COUNTY_MA
|
|
6
|
+
ma_ccfa_care_provider_type: FAMILY_CHILD_CARE
|
|
7
|
+
age: 2
|
|
8
|
+
state_code: MA
|
|
9
|
+
output:
|
|
10
|
+
ma_ccfa_family_child_care_reimbursement: 49.39
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
- name: Case 1, region 1, full day.
|
|
2
|
+
period: 2025-01
|
|
3
|
+
absolute_error_margin: 0.2
|
|
4
|
+
input:
|
|
5
|
+
county_str: BERKSHIRE_COUNTY_MA
|
|
6
|
+
ma_ccfa_care_provider_type: HEAD_START_PARTNER_AND_KINDERGARTEN
|
|
7
|
+
ma_ccfa_schedule_type: FULL_DAY
|
|
8
|
+
state_code: MA
|
|
9
|
+
output:
|
|
10
|
+
ma_ccfa_head_start_partner_and_kindergarten_reimbursement: 58.09
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
- name: Case 1, informal child care in relative home.
|
|
2
|
+
period: 2025-01
|
|
3
|
+
absolute_error_margin: 0.2
|
|
4
|
+
input:
|
|
5
|
+
county_str: BERKSHIRE_COUNTY_MA
|
|
6
|
+
ma_ccfa_care_provider_type: INFORMAL_CHILD_CARE
|
|
7
|
+
state_code: MA
|
|
8
|
+
ma_ccfa_is_in_relatives_home_care: true
|
|
9
|
+
output:
|
|
10
|
+
ma_ccfa_informal_child_care_reimbursement: 24.57
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
- name: Case 1, region 1, center based care school age full day for 10 days.
|
|
2
|
+
period: 2025-01
|
|
3
|
+
absolute_error_margin: 0.2
|
|
4
|
+
input:
|
|
5
|
+
county_str: BERKSHIRE_COUNTY_MA
|
|
6
|
+
ma_ccfa_child_age_category: SCHOOL_AGE
|
|
7
|
+
ma_ccfa_schedule_type: FULL_DAY
|
|
8
|
+
ma_ccfa_care_provider_type: CENTER_BASED_CARE_SCHOOL_AGE
|
|
9
|
+
childcare_attending_days_per_month: 10
|
|
10
|
+
childcare_hours_per_day: 6
|
|
11
|
+
state_code: MA
|
|
12
|
+
output:
|
|
13
|
+
ma_ccfa_maximum_reimbursement: 496.9
|
|
14
|
+
|
|
15
|
+
- name: Case 2, region 1, informal child care full day for 10 days.
|
|
16
|
+
period: 2025-01
|
|
17
|
+
absolute_error_margin: 0.2
|
|
18
|
+
input:
|
|
19
|
+
county_str: BERKSHIRE_COUNTY_MA
|
|
20
|
+
ma_ccfa_care_provider_type: INFORMAL_CHILD_CARE
|
|
21
|
+
ma_ccfa_is_in_relatives_home_care: true
|
|
22
|
+
childcare_attending_days_per_month: 10
|
|
23
|
+
childcare_hours_per_day: 6
|
|
24
|
+
state_code: MA
|
|
25
|
+
output:
|
|
26
|
+
ma_ccfa_uncapped_daily_payment: 24.57
|
|
27
|
+
ma_ccfa_maximum_reimbursement: 245.7
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
- name: Case 1, in 2024, 6 hours per day, part time.
|
|
2
|
+
period: 2024-01
|
|
3
|
+
input:
|
|
4
|
+
childcare_hours_per_day: 6
|
|
5
|
+
state_code: MA
|
|
6
|
+
output:
|
|
7
|
+
ma_ccfa_reimbursement_ratio: 0.6
|
|
8
|
+
|
|
9
|
+
- name: Case 2, in 2024, 7 hours per day, full time.
|
|
10
|
+
period: 2024-01
|
|
11
|
+
input:
|
|
12
|
+
childcare_hours_per_day: 7
|
|
13
|
+
state_code: MA
|
|
14
|
+
output:
|
|
15
|
+
ma_ccfa_reimbursement_ratio: 1
|
|
16
|
+
|
|
17
|
+
- name: Case 3, in 2025, 6 hours per day, full time.
|
|
18
|
+
period: 2025-01
|
|
19
|
+
input:
|
|
20
|
+
childcare_hours_per_day: 6
|
|
21
|
+
state_code: MA
|
|
22
|
+
output:
|
|
23
|
+
ma_ccfa_reimbursement_ratio: 1
|
|
24
|
+
|
|
25
|
+
- name: Case 4, in 2025, 5 hours per day, part time.
|
|
26
|
+
period: 2025-01
|
|
27
|
+
input:
|
|
28
|
+
childcare_hours_per_day: 5
|
|
29
|
+
state_code: MA
|
|
30
|
+
output:
|
|
31
|
+
ma_ccfa_reimbursement_ratio: 0.6
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
- name: Single filer at 250% FPL - uses baseline value
|
|
2
|
+
period: 2026
|
|
3
|
+
reforms: policyengine_us.reforms.aca.aca_ptc_additional_bracket.aca_ptc_additional_bracket
|
|
4
|
+
absolute_error_margin: 0.00001
|
|
5
|
+
input:
|
|
6
|
+
gov.contrib.aca.ptc_additional_bracket.in_effect: true
|
|
7
|
+
aca_magi_fraction: 2.5
|
|
8
|
+
output:
|
|
9
|
+
aca_ptc_phase_out_rate: 0.04
|
|
10
|
+
|
|
11
|
+
- name: Single filer at 300% FPL - uses baseline value
|
|
12
|
+
period: 2026
|
|
13
|
+
reforms: policyengine_us.reforms.aca.aca_ptc_additional_bracket.aca_ptc_additional_bracket
|
|
14
|
+
absolute_error_margin: 0.00001
|
|
15
|
+
input:
|
|
16
|
+
gov.contrib.aca.ptc_additional_bracket.in_effect: true
|
|
17
|
+
aca_magi_fraction: 3.0
|
|
18
|
+
output:
|
|
19
|
+
aca_ptc_phase_out_rate: 0.06
|
|
20
|
+
|
|
21
|
+
- name: Single filer at 400% FPL - linear increase to 10%
|
|
22
|
+
period: 2026
|
|
23
|
+
reforms: policyengine_us.reforms.aca.aca_ptc_additional_bracket.aca_ptc_additional_bracket
|
|
24
|
+
absolute_error_margin: 0.00001
|
|
25
|
+
input:
|
|
26
|
+
gov.contrib.aca.ptc_additional_bracket.in_effect: true
|
|
27
|
+
aca_magi_fraction: 4.0
|
|
28
|
+
output:
|
|
29
|
+
aca_ptc_phase_out_rate: 0.10
|
|
30
|
+
|
|
31
|
+
- name: Single filer at 500% FPL - linear increase to 14%
|
|
32
|
+
period: 2026
|
|
33
|
+
reforms: policyengine_us.reforms.aca.aca_ptc_additional_bracket.aca_ptc_additional_bracket
|
|
34
|
+
absolute_error_margin: 0.00001
|
|
35
|
+
input:
|
|
36
|
+
gov.contrib.aca.ptc_additional_bracket.in_effect: true
|
|
37
|
+
aca_magi_fraction: 5.0
|
|
38
|
+
output:
|
|
39
|
+
aca_ptc_phase_out_rate: 0.14
|
|
40
|
+
|
|
41
|
+
- name: Single filer at 600% FPL - linear increase to 18%
|
|
42
|
+
period: 2026
|
|
43
|
+
reforms: policyengine_us.reforms.aca.aca_ptc_additional_bracket.aca_ptc_additional_bracket
|
|
44
|
+
absolute_error_margin: 0.00001
|
|
45
|
+
input:
|
|
46
|
+
gov.contrib.aca.ptc_additional_bracket.in_effect: true
|
|
47
|
+
aca_magi_fraction: 6.0
|
|
48
|
+
output:
|
|
49
|
+
aca_ptc_phase_out_rate: 0.18
|
|
50
|
+
|
|
51
|
+
- name: Single filer at 350% FPL - interpolated value
|
|
52
|
+
period: 2026
|
|
53
|
+
reforms: policyengine_us.reforms.aca.aca_ptc_additional_bracket.aca_ptc_additional_bracket
|
|
54
|
+
absolute_error_margin: 0.00001
|
|
55
|
+
input:
|
|
56
|
+
gov.contrib.aca.ptc_additional_bracket.in_effect: true
|
|
57
|
+
aca_magi_fraction: 3.5
|
|
58
|
+
output:
|
|
59
|
+
aca_ptc_phase_out_rate: 0.08
|
|
60
|
+
|
|
61
|
+
- name: Baseline comparison at 400% FPL - shows difference
|
|
62
|
+
period: 2026
|
|
63
|
+
absolute_error_margin: 0.00001
|
|
64
|
+
input:
|
|
65
|
+
aca_magi_fraction: 4.0
|
|
66
|
+
output:
|
|
67
|
+
aca_ptc_phase_out_rate: 0.0996
|
|
68
|
+
|
|
69
|
+
- name: Edge case - Lower boundary at 0% FPL
|
|
70
|
+
period: 2026
|
|
71
|
+
reforms: policyengine_us.reforms.aca.aca_ptc_additional_bracket.aca_ptc_additional_bracket
|
|
72
|
+
absolute_error_margin: 0.00001
|
|
73
|
+
input:
|
|
74
|
+
gov.contrib.aca.ptc_additional_bracket.in_effect: true
|
|
75
|
+
aca_magi_fraction: 0.0
|
|
76
|
+
output:
|
|
77
|
+
aca_ptc_phase_out_rate: 0.0
|
|
78
|
+
|
|
79
|
+
- name: Edge case - Lower boundary at 150% FPL (first bracket threshold)
|
|
80
|
+
period: 2026
|
|
81
|
+
reforms: policyengine_us.reforms.aca.aca_ptc_additional_bracket.aca_ptc_additional_bracket
|
|
82
|
+
absolute_error_margin: 0.00001
|
|
83
|
+
input:
|
|
84
|
+
gov.contrib.aca.ptc_additional_bracket.in_effect: true
|
|
85
|
+
aca_magi_fraction: 1.5
|
|
86
|
+
output:
|
|
87
|
+
aca_ptc_phase_out_rate: 0.0
|
|
88
|
+
|
|
89
|
+
- name: Edge case - First positive bracket at 200% FPL
|
|
90
|
+
period: 2026
|
|
91
|
+
reforms: policyengine_us.reforms.aca.aca_ptc_additional_bracket.aca_ptc_additional_bracket
|
|
92
|
+
absolute_error_margin: 0.00001
|
|
93
|
+
input:
|
|
94
|
+
gov.contrib.aca.ptc_additional_bracket.in_effect: true
|
|
95
|
+
aca_magi_fraction: 2.0
|
|
96
|
+
output:
|
|
97
|
+
aca_ptc_phase_out_rate: 0.02
|
|
98
|
+
|
|
99
|
+
- name: Edge case - Upper boundary at 1000% FPL (highest defined bracket)
|
|
100
|
+
period: 2026
|
|
101
|
+
reforms: policyengine_us.reforms.aca.aca_ptc_additional_bracket.aca_ptc_additional_bracket
|
|
102
|
+
absolute_error_margin: 0.00001
|
|
103
|
+
input:
|
|
104
|
+
gov.contrib.aca.ptc_additional_bracket.in_effect: true
|
|
105
|
+
aca_magi_fraction: 10.0
|
|
106
|
+
output:
|
|
107
|
+
aca_ptc_phase_out_rate: 0.34
|
|
108
|
+
|
|
109
|
+
- name: Edge case - Interpolation between 1.5 and 2.0 at 175% FPL
|
|
110
|
+
period: 2026
|
|
111
|
+
reforms: policyengine_us.reforms.aca.aca_ptc_additional_bracket.aca_ptc_additional_bracket
|
|
112
|
+
absolute_error_margin: 0.00001
|
|
113
|
+
input:
|
|
114
|
+
gov.contrib.aca.ptc_additional_bracket.in_effect: true
|
|
115
|
+
aca_magi_fraction: 1.75
|
|
116
|
+
output:
|
|
117
|
+
aca_ptc_phase_out_rate: 0.01
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
- name: Single filer at 100% FPL - starts at 0%
|
|
2
|
+
period: 2028
|
|
3
|
+
reforms: policyengine_us.reforms.aca.aca_ptc_simplified_bracket.aca_ptc_simplified_bracket
|
|
4
|
+
absolute_error_margin: 0.00001
|
|
5
|
+
input:
|
|
6
|
+
gov.contrib.aca.ptc_simplified_bracket.in_effect: true
|
|
7
|
+
aca_magi_fraction: 1.0
|
|
8
|
+
output:
|
|
9
|
+
aca_ptc_phase_out_rate: 0.0
|
|
10
|
+
|
|
11
|
+
- name: Single filer at 200% FPL - linear increase to 4%
|
|
12
|
+
period: 2028
|
|
13
|
+
reforms: policyengine_us.reforms.aca.aca_ptc_simplified_bracket.aca_ptc_simplified_bracket
|
|
14
|
+
absolute_error_margin: 0.00001
|
|
15
|
+
input:
|
|
16
|
+
gov.contrib.aca.ptc_simplified_bracket.in_effect: true
|
|
17
|
+
aca_magi_fraction: 2.0
|
|
18
|
+
output:
|
|
19
|
+
aca_ptc_phase_out_rate: 0.04
|
|
20
|
+
|
|
21
|
+
- name: Single filer at 300% FPL - linear increase to 8%
|
|
22
|
+
period: 2028
|
|
23
|
+
reforms: policyengine_us.reforms.aca.aca_ptc_simplified_bracket.aca_ptc_simplified_bracket
|
|
24
|
+
absolute_error_margin: 0.00001
|
|
25
|
+
input:
|
|
26
|
+
gov.contrib.aca.ptc_simplified_bracket.in_effect: true
|
|
27
|
+
aca_magi_fraction: 3.0
|
|
28
|
+
output:
|
|
29
|
+
aca_ptc_phase_out_rate: 0.08
|
|
30
|
+
|
|
31
|
+
- name: Single filer at 400% FPL - linear increase to 12%
|
|
32
|
+
period: 2028
|
|
33
|
+
reforms: policyengine_us.reforms.aca.aca_ptc_simplified_bracket.aca_ptc_simplified_bracket
|
|
34
|
+
absolute_error_margin: 0.00001
|
|
35
|
+
input:
|
|
36
|
+
gov.contrib.aca.ptc_simplified_bracket.in_effect: true
|
|
37
|
+
aca_magi_fraction: 4.0
|
|
38
|
+
output:
|
|
39
|
+
aca_ptc_phase_out_rate: 0.12
|
|
40
|
+
|
|
41
|
+
- name: Single filer at 500% FPL - linear increase to 16%
|
|
42
|
+
period: 2028
|
|
43
|
+
reforms: policyengine_us.reforms.aca.aca_ptc_simplified_bracket.aca_ptc_simplified_bracket
|
|
44
|
+
absolute_error_margin: 0.00001
|
|
45
|
+
input:
|
|
46
|
+
gov.contrib.aca.ptc_simplified_bracket.in_effect: true
|
|
47
|
+
aca_magi_fraction: 5.0
|
|
48
|
+
output:
|
|
49
|
+
aca_ptc_phase_out_rate: 0.16
|
|
50
|
+
|
|
51
|
+
- name: Single filer at 600% FPL - linear increase to 20%
|
|
52
|
+
period: 2028
|
|
53
|
+
reforms: policyengine_us.reforms.aca.aca_ptc_simplified_bracket.aca_ptc_simplified_bracket
|
|
54
|
+
absolute_error_margin: 0.00001
|
|
55
|
+
input:
|
|
56
|
+
gov.contrib.aca.ptc_simplified_bracket.in_effect: true
|
|
57
|
+
aca_magi_fraction: 6.0
|
|
58
|
+
output:
|
|
59
|
+
aca_ptc_phase_out_rate: 0.20
|
|
60
|
+
|
|
61
|
+
- name: Single filer at 150% FPL - interpolated value
|
|
62
|
+
period: 2028
|
|
63
|
+
reforms: policyengine_us.reforms.aca.aca_ptc_simplified_bracket.aca_ptc_simplified_bracket
|
|
64
|
+
absolute_error_margin: 0.00001
|
|
65
|
+
input:
|
|
66
|
+
gov.contrib.aca.ptc_simplified_bracket.in_effect: true
|
|
67
|
+
aca_magi_fraction: 1.5
|
|
68
|
+
output:
|
|
69
|
+
aca_ptc_phase_out_rate: 0.02
|
|
70
|
+
|
|
71
|
+
- name: Baseline comparison at 400% FPL - shows difference
|
|
72
|
+
period: 2028
|
|
73
|
+
absolute_error_margin: 0.00001
|
|
74
|
+
input:
|
|
75
|
+
aca_magi_fraction: 4.0
|
|
76
|
+
output:
|
|
77
|
+
aca_ptc_phase_out_rate: 0.0996
|
|
78
|
+
|
|
79
|
+
- name: Edge case - Lower boundary at 0% FPL
|
|
80
|
+
period: 2028
|
|
81
|
+
reforms: policyengine_us.reforms.aca.aca_ptc_simplified_bracket.aca_ptc_simplified_bracket
|
|
82
|
+
absolute_error_margin: 0.00001
|
|
83
|
+
input:
|
|
84
|
+
gov.contrib.aca.ptc_simplified_bracket.in_effect: true
|
|
85
|
+
aca_magi_fraction: 0.0
|
|
86
|
+
output:
|
|
87
|
+
aca_ptc_phase_out_rate: 0.0
|
|
88
|
+
|
|
89
|
+
- name: Edge case - Upper boundary at 1000% FPL
|
|
90
|
+
period: 2028
|
|
91
|
+
reforms: policyengine_us.reforms.aca.aca_ptc_simplified_bracket.aca_ptc_simplified_bracket
|
|
92
|
+
absolute_error_margin: 0.00001
|
|
93
|
+
input:
|
|
94
|
+
gov.contrib.aca.ptc_simplified_bracket.in_effect: true
|
|
95
|
+
aca_magi_fraction: 10.0
|
|
96
|
+
output:
|
|
97
|
+
aca_ptc_phase_out_rate: 0.36
|
|
98
|
+
|
|
99
|
+
- name: Edge case - Interpolation between 1.0 and 2.0 at 175% FPL
|
|
100
|
+
period: 2028
|
|
101
|
+
reforms: policyengine_us.reforms.aca.aca_ptc_simplified_bracket.aca_ptc_simplified_bracket
|
|
102
|
+
absolute_error_margin: 0.00001
|
|
103
|
+
input:
|
|
104
|
+
gov.contrib.aca.ptc_simplified_bracket.in_effect: true
|
|
105
|
+
aca_magi_fraction: 1.75
|
|
106
|
+
output:
|
|
107
|
+
aca_ptc_phase_out_rate: 0.03
|
|
108
|
+
|
|
109
|
+
- name: Comparison with additional bracket reform at 600% FPL
|
|
110
|
+
period: 2028
|
|
111
|
+
reforms: policyengine_us.reforms.aca.aca_ptc_simplified_bracket.aca_ptc_simplified_bracket
|
|
112
|
+
absolute_error_margin: 0.00001
|
|
113
|
+
input:
|
|
114
|
+
gov.contrib.aca.ptc_simplified_bracket.in_effect: true
|
|
115
|
+
aca_magi_fraction: 6.0
|
|
116
|
+
output:
|
|
117
|
+
aca_ptc_phase_out_rate: 0.20
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
from policyengine_us.model_api import *
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class ma_ccfa_base_copay(Variable):
|
|
5
|
+
value_type = float
|
|
6
|
+
entity = SPMUnit
|
|
7
|
+
unit = USD
|
|
8
|
+
label = "Massachusetts Child Care Financial Assistance (CCFA) parent base copay"
|
|
9
|
+
definition_period = MONTH
|
|
10
|
+
defined_for = StateCode.MA
|
|
11
|
+
reference = "https://www.mass.gov/doc/eecs-financial-assistance-policy-guide-february-1-2022/download#page=76"
|
|
12
|
+
|
|
13
|
+
def formula(spm_unit, period, parameters):
|
|
14
|
+
p = parameters(period).gov.states.ma.eec.ccfa.copay.fee_level
|
|
15
|
+
|
|
16
|
+
# Step 1: Get the family's copay level
|
|
17
|
+
copay_level = spm_unit("ma_ccfa_copay_level", period)
|
|
18
|
+
|
|
19
|
+
# Step 2: Get the fee percentage for that level
|
|
20
|
+
fee_percentage = p.fee_percentages[copay_level]
|
|
21
|
+
|
|
22
|
+
# Step 3: Calculate fee on income above poverty
|
|
23
|
+
income = spm_unit("ma_ccfa_countable_income", period)
|
|
24
|
+
fpg = spm_unit("ma_ccfa_fpg", period)
|
|
25
|
+
income_above_poverty_level = max_(income - fpg, 0)
|
|
26
|
+
|
|
27
|
+
return income_above_poverty_level * fee_percentage
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
from policyengine_us.model_api import *
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class ma_ccfa_copay_level(Variable):
|
|
5
|
+
value_type = int
|
|
6
|
+
entity = SPMUnit
|
|
7
|
+
label = "Massachusetts CCSP copay level"
|
|
8
|
+
definition_period = MONTH
|
|
9
|
+
defined_for = StateCode.MA
|
|
10
|
+
reference = "https://www.mass.gov/doc/parent-fee-chart-fy2025/download"
|
|
11
|
+
|
|
12
|
+
def formula(spm_unit, period, parameters):
|
|
13
|
+
p = parameters(period).gov.states.ma.eec.ccfa.copay.fee_level
|
|
14
|
+
income = spm_unit("ma_ccfa_countable_income", period)
|
|
15
|
+
family_size = spm_unit("spm_unit_size", period)
|
|
16
|
+
capped_size = np.clip(family_size, 2, 12)
|
|
17
|
+
fpg = spm_unit("ma_ccfa_fpg", period)
|
|
18
|
+
|
|
19
|
+
# Calculate income as ratio of FPG
|
|
20
|
+
income_ratio = income / fpg
|
|
21
|
+
|
|
22
|
+
# Get the increment for this family size
|
|
23
|
+
ratio_increment = p.income_ratio_increments[capped_size]
|
|
24
|
+
|
|
25
|
+
# Calculate how many increments above 100% FPG the income is.
|
|
26
|
+
levels_above_fpg = max_(0, income_ratio - 1) / ratio_increment
|
|
27
|
+
|
|
28
|
+
fee_level = 1 + np.ceil(levels_above_fpg)
|
|
29
|
+
|
|
30
|
+
return min_(fee_level, p.maximum_level)
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
from policyengine_us.model_api import *
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class ma_ccfa_total_copay(Variable):
|
|
5
|
+
value_type = float
|
|
6
|
+
entity = SPMUnit
|
|
7
|
+
unit = USD
|
|
8
|
+
label = "Massachusetts Child Care Financial Assistance (CCFA) parent total copay"
|
|
9
|
+
definition_period = MONTH
|
|
10
|
+
defined_for = StateCode.MA
|
|
11
|
+
reference = "https://www.mass.gov/doc/eecs-financial-assistance-policy-guide-february-1-2022/download#page=76"
|
|
12
|
+
|
|
13
|
+
def formula(spm_unit, period, parameters):
|
|
14
|
+
# TAFDC recipients get free child care (no copay)
|
|
15
|
+
tafdc_eligible = spm_unit("ma_tafdc_eligible", period)
|
|
16
|
+
|
|
17
|
+
p = parameters(period).gov.states.ma.eec.ccfa.copay.ratio
|
|
18
|
+
base_copay = spm_unit("ma_ccfa_base_copay", period)
|
|
19
|
+
eligible_child = spm_unit.members("ma_ccfa_eligible_child", period)
|
|
20
|
+
num_children = spm_unit.sum(eligible_child)
|
|
21
|
+
|
|
22
|
+
first_child_fee = (num_children >= 1) * (base_copay * p.first_child)
|
|
23
|
+
second_child_fee = (num_children >= 2) * (base_copay * p.second_child)
|
|
24
|
+
|
|
25
|
+
additional_children_count = max_(0, num_children - 2)
|
|
26
|
+
additional_children_fee = additional_children_count * (
|
|
27
|
+
base_copay * p.additional_child
|
|
28
|
+
)
|
|
29
|
+
|
|
30
|
+
total_copay = (
|
|
31
|
+
first_child_fee + second_child_fee + additional_children_fee
|
|
32
|
+
)
|
|
33
|
+
|
|
34
|
+
# Return zero copay for TAFDC recipients
|
|
35
|
+
return where(tafdc_eligible, 0, total_copay)
|