1
1
from app .api import cla_backend
2
2
from flask import session
3
3
from app .means_test .forms .income import IncomeForm
4
- from app .means_test .forms .property import PropertiesPayload
4
+ from app .means_test .forms .benefits import BenefitsForm , AdditionalBenefitsForm
5
+ from app .means_test .forms .property import MultiplePropertiesForm
5
6
from app .means_test .money_interval import MoneyInterval
6
7
from tests .unit_tests .means_test .payload .test_cases import EligibilityData
7
- from app .means_test .data import BenefitsData , AdditionalBenefitData
8
-
9
-
10
- def deep_update (original , updates ):
11
- """
12
- Recursively updates a nested dictionary with values from another dictionary.
13
- Only updates keys present in the `updates` dictionary.
14
- """
15
- for key , value in updates .items ():
16
- if (
17
- isinstance (value , dict )
18
- and key in original
19
- and isinstance (original [key ], dict )
20
- ):
21
- deep_update (original [key ], value ) # Recursive call for nested dict
22
- else :
23
- original [key ] = value
24
8
25
9
26
10
def update_means_test (payload ):
@@ -47,15 +31,7 @@ def is_eligible(reference):
47
31
48
32
def get_means_test_payload (eligibility_data : EligibilityData ) -> dict :
49
33
about = eligibility_data .forms .get ("about-you" , {})
50
-
51
- income_form = eligibility_data .forms .get ("income" , {})
52
34
savings_form = eligibility_data .forms .get ("savings" , {})
53
- property_form = eligibility_data .forms .get ("property" , {})
54
- benefits = BenefitsData (** eligibility_data .forms .get ("benefits" , {})).to_payload ()
55
-
56
- additional_benefits = AdditionalBenefitData (
57
- ** eligibility_data .forms .get ("additional-benefits" , {})
58
- ).to_payload ()
59
35
60
36
has_partner = eligibility_data .forms .get ("about-you" , {}).get (
61
37
"has_partner" , False
@@ -65,41 +41,51 @@ def get_means_test_payload(eligibility_data: EligibilityData) -> dict:
65
41
is_partner_employed = about .get ("is_partner_employed" , None )
66
42
is_partner_self_employed = about .get ("is_partner_self_employed" , None )
67
43
68
- income_data : dict [str , dict ] = IncomeForm (** income_form ).get_payload (
44
+ # The below data code needs refactoring to only take in eligibility_data
45
+ benefits_data = BenefitsForm .get_payload (eligibility_data .forms .get ("benefits" , {}))
46
+ additional_benefits_data = AdditionalBenefitsForm .get_payload (
47
+ eligibility_data .forms .get ("additional-benefits" , {})
48
+ )
49
+ income_data = IncomeForm (** eligibility_data .forms .get ("income" , {})).get_payload (
69
50
employed = is_employed ,
70
51
self_employed = is_self_employed ,
71
52
partner_employed = is_partner_employed ,
72
53
partner_self_employed = is_partner_self_employed ,
73
54
)
74
-
75
- you_income = income_data .get ("you" , {}).get ("income" , {})
76
- you_income .update (
77
- {
78
- "benefits" : additional_benefits ["benefits" ],
79
- "child_benefits" : benefits ["child_benefits" ],
80
- }
81
- )
82
- partner_income = income_data .get ("partner" , {}).get ("income" , {})
83
- partner_income .update (
84
- {
85
- "benefits" : additional_benefits ["benefits" ],
86
- "child_benefits" : benefits ["child_benefits" ],
87
- }
55
+ property_data = MultiplePropertiesForm .get_payload (
56
+ eligibility_data .forms .get ("property" , {})
88
57
)
89
58
90
- # Remove rent field from property set and setup payload
91
- if eligibility_data .forms .get ("about-you" , {}).get ("own_property" ):
92
- property_payload = PropertiesPayload (property_form )
93
- for property_item in property_payload .get ("property_set" , []):
94
- property_item .pop ("rent" , None )
59
+ # Sums rent to the other income field for you
60
+ other_income = MoneyInterval (
61
+ property_data .get ("you" ).get ("income" , {}).get ("other_income" , 0 )
62
+ ) + income_data .get ("you" ).get ("income" , {}).get ("other_income" , 0 )
95
63
96
64
payload = {
97
65
"category" : eligibility_data .category ,
98
66
"your_problem_notes" : "" ,
99
67
"notes" : "" ,
100
- "property_set" : [] ,
68
+ "property_set" : property_data . get ( "property_set" ) ,
101
69
"you" : {
102
- "income" : you_income ,
70
+ "income" : {
71
+ "earnings" : income_data .get ("you" , {})
72
+ .get ("income" , {})
73
+ .get ("earnings" ),
74
+ "self_employment_drawings" : income_data .get ("you" , {})
75
+ .get ("income" , {})
76
+ .get ("self_employment_drawings" ),
77
+ "tax_credits" : income_data .get ("you" , {})
78
+ .get ("income" , {})
79
+ .get ("tax_credits" ),
80
+ "maintenance_received" : income_data .get ("you" , {})
81
+ .get ("income" , {})
82
+ .get ("maintenance_received" ),
83
+ "pension" : income_data .get ("you" , {}).get ("income" , {}).get ("pension" ),
84
+ "other_income" : other_income ,
85
+ "self_employed" : is_self_employed ,
86
+ "benefits" : additional_benefits_data .get ("benefits" ),
87
+ "child_benefits" : benefits_data .get ("child_benefits" ),
88
+ },
103
89
"savings" : {
104
90
"bank_balance" : savings_form .get ("savings" , 0 ),
105
91
"investment_balance" : savings_form .get ("investments" , 0 ),
@@ -121,10 +107,7 @@ def get_means_test_payload(eligibility_data: EligibilityData) -> dict:
121
107
"per_interval_value" : None ,
122
108
"interval_period" : "per_month" ,
123
109
},
124
- "mortgage" : {
125
- "per_interval_value" : None ,
126
- "interval_period" : "per_month" ,
127
- },
110
+ "mortgage" : property_data .get ("deductions" , {}).get ("mortgage" , {}),
128
111
"rent" : {
129
112
"per_interval_value" : None ,
130
113
"interval_period" : "per_month" ,
@@ -133,8 +116,43 @@ def get_means_test_payload(eligibility_data: EligibilityData) -> dict:
133
116
},
134
117
},
135
118
"partner" : {
136
- "income" : partner_income ,
137
- # Question: Should partner savings be included in the payload, assuming they are always 0.
119
+ "income" : {
120
+ "earnings" : income_data .get ("partner" , {})
121
+ .get ("income" , {})
122
+ .get ("earnings" ),
123
+ "self_employment_drawings" : income_data .get ("partner" , {})
124
+ .get ("income" , {})
125
+ .get ("self_employment_drawings" ),
126
+ "tax_credits" : income_data .get ("partner" , {})
127
+ .get ("income" , {})
128
+ .get ("tax_credits" ),
129
+ "maintenance_received" : income_data .get ("partner" , {})
130
+ .get ("income" , {})
131
+ .get ("maintenance_received" ),
132
+ "pension" : income_data .get ("partner" , {})
133
+ .get ("income" , {})
134
+ .get ("pension" ),
135
+ "other_income" : income_data .get ("partner" , {})
136
+ .get ("income" , {})
137
+ .get ("other_income" ),
138
+ "self_employed" : "0" ,
139
+ "benefits" : {
140
+ "per_interval_value" : 0 ,
141
+ "per_interval_value_pounds" : None ,
142
+ "interval_period" : "per_month" ,
143
+ },
144
+ "child_benefits" : {
145
+ "per_interval_value" : 0 ,
146
+ "per_interval_value_pounds" : None ,
147
+ "interval_period" : "per_month" ,
148
+ },
149
+ },
150
+ "savings" : {
151
+ "bank_balance" : None ,
152
+ "investment_balance" : None ,
153
+ "asset_balance" : None ,
154
+ "credit_balance" : None ,
155
+ },
138
156
"deductions" : {
139
157
"income_tax" : income_data .get ("partner" , {})
140
158
.get ("deductions" , {})
@@ -169,16 +187,12 @@ def get_means_test_payload(eligibility_data: EligibilityData) -> dict:
169
187
else 0 ,
170
188
"is_you_or_your_partner_over_60" : about .get ("aged_60_or_over" , False ),
171
189
"has_partner" : has_partner ,
172
- "on_passported_benefits" : benefits ["on_passported_benefits" ],
173
- "on_nass_benefits" : additional_benefits ["on_nass_benefits" ],
174
- "specific_benefits" : benefits ["specific_benefits" ],
190
+ "on_passported_benefits" : benefits_data ["on_passported_benefits" ],
191
+ "on_nass_benefits" : additional_benefits_data ["on_nass_benefits" ],
192
+ "specific_benefits" : benefits_data ["specific_benefits" ],
175
193
"disregards" : [],
176
194
}
177
195
178
- # Add in the property payload
179
- if eligibility_data .forms .get ("about-you" , {}).get ("own_property" ):
180
- deep_update (payload , property_payload )
181
-
182
196
if not has_partner :
183
197
del payload ["partner" ]
184
198
0 commit comments