|
11 | 11 | from wireup import service |
12 | 12 |
|
13 | 13 | from eligibility_signposting_api.model import eligibility, rules |
14 | | -from eligibility_signposting_api.model.eligibility import Status, CohortStatus |
| 14 | +from eligibility_signposting_api.model.eligibility import Status, CohortStatus, Condition, ConditionName |
15 | 15 | from eligibility_signposting_api.services.calculators.rule_calculator import RuleCalculator |
16 | 16 |
|
17 | 17 | Row = Collection[Mapping[str, Any]] |
@@ -86,7 +86,7 @@ def get_best_cohort( |
86 | 86 | def evaluate_eligibility(self): |
87 | 87 | """Iterates over campaign groups, evaluates eligibility, and returns a consolidated status.""" |
88 | 88 | priority_getter = attrgetter("priority") |
89 | | - results: dict[str, tuple[Status, list[CohortStatus]]] = defaultdict() |
| 89 | + results: dict[ConditionName, tuple[Status, list[CohortStatus]]] = defaultdict() |
90 | 90 | for condition_name, campaign_group in self.campaigns_grouped_by_condition_name: |
91 | 91 | iteration_results: dict[str, tuple[Status, list[CohortStatus]]] = defaultdict() |
92 | 92 | for active_iteration in [cc.current_iteration for cc in campaign_group]: |
@@ -138,12 +138,18 @@ def evaluate_eligibility(self): |
138 | 138 | for name, iteration_result in iteration_results.items(): |
139 | 139 | if iteration_result[0] is best_so_far: |
140 | 140 | results[condition_name] = iteration_result |
141 | | - break |
| 141 | + break # if the status is the same, we can break out of the loop - we are picking the first one |
142 | 142 | # Consolidate all the results and return |
143 | | - # TODO |
144 | | - #results: dict[str, tuple[Status, list[CohortStatus]]] = defaultdict() |
| 143 | + final_result = [ |
| 144 | + Condition( |
| 145 | + condition_name=condition_name, |
| 146 | + status=status, |
| 147 | + reasons=sum((cohort.reasons for cohort in cohort_status_list), []) |
| 148 | + ) |
| 149 | + for condition_name, (status, cohort_status_list) in results.items() |
| 150 | + ] |
145 | 151 |
|
146 | | - return eligibility.EligibilityStatus(conditions=list(self.results)) |
| 152 | + return eligibility.EligibilityStatus(conditions=final_result) |
147 | 153 |
|
148 | 154 | def get_the_base_eligible_campaigns(self, campaign_group: list[rules.CampaignConfig]) -> list[rules.CampaignConfig]: |
149 | 155 | """Return campaigns for which the person is base eligible via cohorts.""" |
|
0 commit comments