-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy patheligibility_result_builder.py
More file actions
48 lines (43 loc) · 2.06 KB
/
eligibility_result_builder.py
File metadata and controls
48 lines (43 loc) · 2.06 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
from collections import defaultdict
from eligibility_signposting_api.model.eligibility_status import (
CohortGroupResult,
Condition,
ConditionName,
IterationResult,
)
class EligibilityResultBuilder:
@staticmethod
def build_condition_results(condition_results: dict[ConditionName, IterationResult]) -> list[Condition]:
conditions: list[Condition] = []
# iterate over conditions
for condition_name, active_iteration_result in condition_results.items():
grouped_cohort_results = defaultdict(list)
# iterate over cohorts and group them by status and cohort_group
for cohort_result in active_iteration_result.cohort_results:
if active_iteration_result.status == cohort_result.status:
grouped_cohort_results[cohort_result.cohort_code].append(cohort_result)
# deduplicate grouped cohort results by cohort_code
deduplicated_cohort_results = [
CohortGroupResult(
cohort_code=group_cohort_code,
status=group[0].status,
# Flatten all reasons from the group
reasons=[reason for cohort in group for reason in cohort.reasons],
# get the first nonempty description
description=next((c.description for c in group if c.description), group[0].description),
audit_rules=[],
)
for group_cohort_code, group in grouped_cohort_results.items()
if group
]
# return condition with cohort results
conditions.append(
Condition(
condition_name=condition_name,
status=active_iteration_result.status,
cohort_results=list(deduplicated_cohort_results),
actions=condition_results[condition_name].actions,
status_text=active_iteration_result.status.get_status_text(condition_name),
)
)
return conditions