1212if TYPE_CHECKING :
1313 from eligibility_signposting_api .model .rules import (
1414 ActionsMapper ,
15+ CampaignConfig ,
1516 CampaignID ,
1617 CampaignVersion ,
1718 Iteration ,
@@ -67,9 +68,14 @@ def campaigns_grouped_by_condition_name(
6768 ) -> Iterator [tuple [eligibility .ConditionName , list [rules .CampaignConfig ]]]:
6869 """Generator that yields campaign groups filtered by condition names and campaign category."""
6970
70- allowed_types = (
71- {"V" , "S" } if category == "ALL" else {category [0 ]} if category in {"VACCINATIONS" , "SCREENING" } else set ()
72- )
71+ mapping = {
72+ "ALL" : {"V" , "S" },
73+ "VACCINATIONS" : {"V" },
74+ "SCREENING" : {"S" },
75+ }
76+
77+ allowed_types = mapping .get (category , set ())
78+
7379 filter_all_conditions = "ALL" in conditions
7480
7581 for condition_name , campaign_group in groupby (
@@ -159,23 +165,7 @@ def evaluate_eligibility(
159165 best_campaign_version : CampaignVersion | None
160166 best_cohort_results : dict [str , CohortGroupResult ] | None
161167
162- iteration_results : dict [
163- str , tuple [Iteration , IterationResult , CampaignID , CampaignVersion , dict [str , CohortGroupResult ]]
164- ] = {}
165-
166- for cc in campaign_group :
167- active_iteration = cc .current_iteration
168- cohort_results : dict [str , CohortGroupResult ] = self .get_cohort_results (active_iteration )
169-
170- # Determine Result between cohorts - get the best
171- status , best_cohorts = self .get_the_best_cohort_memberships (cohort_results )
172- iteration_results [active_iteration .name ] = (
173- active_iteration ,
174- IterationResult (status , best_cohorts , actions ),
175- cc .id ,
176- cc .version ,
177- cohort_results ,
178- )
168+ iteration_results = self .get_iteration_results (actions , campaign_group )
179169
180170 # Determine results between iterations - get the best
181171 if iteration_results :
@@ -229,6 +219,27 @@ def evaluate_eligibility(
229219 final_result = self .build_condition_results (condition_results )
230220 return eligibility .EligibilityStatus (conditions = final_result )
231221
222+ def get_iteration_results (
223+ self , actions : list [SuggestedAction ] | None , campaign_group : list [CampaignConfig ]
224+ ) -> dict [str , tuple [Iteration , IterationResult , CampaignID , CampaignVersion , dict [str , CohortGroupResult ]]]:
225+ iteration_results : dict [
226+ str , tuple [Iteration , IterationResult , CampaignID , CampaignVersion , dict [str , CohortGroupResult ]]
227+ ] = {}
228+ for cc in campaign_group :
229+ active_iteration = cc .current_iteration
230+ cohort_results : dict [str , CohortGroupResult ] = self .get_cohort_results (active_iteration )
231+
232+ # Determine Result between cohorts - get the best
233+ status , best_cohorts = self .get_the_best_cohort_memberships (cohort_results )
234+ iteration_results [active_iteration .name ] = (
235+ active_iteration ,
236+ IterationResult (status , best_cohorts , actions ),
237+ cc .id ,
238+ cc .version ,
239+ cohort_results ,
240+ )
241+ return iteration_results
242+
232243 def handle_redirect_rules (
233244 self , best_active_iteration : Iteration
234245 ) -> tuple [list [SuggestedAction ] | None , RulePriority | None , RuleName | None ]:
@@ -311,6 +322,7 @@ def build_condition_results(condition_results: dict[ConditionName, IterationResu
311322 status = active_iteration_result .status ,
312323 cohort_results = list (deduplicated_cohort_results ),
313324 actions = condition_results [condition_name ].actions ,
325+ status_text = active_iteration_result .status .get_status_text (condition_name ),
314326 )
315327 )
316328 return conditions
@@ -326,9 +338,7 @@ def is_eligible_by_filter_rules(
326338 sorted_rules_by_priority = sorted (self .get_exclusion_rules (cohort , filter_rules ), key = priority_getter )
327339
328340 for _ , rule_group in groupby (sorted_rules_by_priority , key = priority_getter ):
329- status , group_inclusion_reasons , group_exclusion_reasons , rule_stop = self .evaluate_rules_priority_group (
330- rule_group
331- )
341+ status , group_exclusion_reasons , _ = self .evaluate_rules_priority_group (rule_group )
332342 if status .is_exclusion :
333343 if cohort .cohort_label is not None :
334344 cohort_results [cohort .cohort_label ] = CohortGroupResult (
@@ -355,9 +365,7 @@ def evaluate_suppression_rules(
355365 sorted_rules_by_priority = sorted (self .get_exclusion_rules (cohort , suppression_rules ), key = priority_getter )
356366
357367 for _ , rule_group in groupby (sorted_rules_by_priority , key = priority_getter ):
358- status , group_inclusion_reasons , group_exclusion_reasons , rule_stop = self .evaluate_rules_priority_group (
359- rule_group
360- )
368+ status , group_exclusion_reasons , rule_stop = self .evaluate_rules_priority_group (rule_group )
361369 if status .is_exclusion :
362370 is_actionable = False
363371 suppression_reasons .extend (group_exclusion_reasons )
@@ -381,9 +389,9 @@ def evaluate_suppression_rules(
381389
382390 def evaluate_rules_priority_group (
383391 self , rules_group : Iterator [rules .IterationRule ]
384- ) -> tuple [eligibility .Status , list [eligibility .Reason ], list [ eligibility . Reason ], bool ]:
392+ ) -> tuple [eligibility .Status , list [eligibility .Reason ], bool ]:
385393 is_rule_stop = False
386- inclusion_reasons , exclusion_reasons = [], []
394+ exclusion_reasons = []
387395 best_status = eligibility .Status .not_eligible
388396
389397 for rule in rules_group :
@@ -395,9 +403,8 @@ def evaluate_rules_priority_group(
395403 exclusion_reasons .append (reason )
396404 else :
397405 best_status = eligibility .Status .actionable
398- inclusion_reasons .append (reason )
399406
400- return best_status , inclusion_reasons , exclusion_reasons , is_rule_stop
407+ return best_status , exclusion_reasons , is_rule_stop
401408
402409 @staticmethod
403410 def get_actions_from_comms (action_mapper : ActionsMapper , comms : str ) -> list [SuggestedAction ] | None :
0 commit comments