@@ -76,6 +76,7 @@ def get_the_best_cohort_memberships(
7676 def get_eligibility_status (self , include_actions : str , conditions : list [str ], category : str ) -> EligibilityStatus :
7777 include_actions_flag = include_actions .upper () == "Y"
7878 condition_results : dict [ConditionName , IterationResult ] = {}
79+ final_result = []
7980
8081 requested_grouped_campaigns = self .campaign_evaluator .get_requested_grouped_campaigns (
8182 self .campaign_configs , conditions , category
@@ -93,10 +94,17 @@ def get_eligibility_status(self, include_actions: str, conditions: list[str], ca
9394 condition_results [condition_name ] = best_iteration_result .iteration_result
9495 condition_results [condition_name ].actions = matched_action_detail .actions
9596
96- AuditContext .append_audit_condition (condition_name , best_iteration_result , matched_action_detail )
97+ condition_result = self .build_condition_results (condition_results [condition_name ], condition_name )
98+ final_result .append (condition_result )
99+
100+ AuditContext .append_audit_condition (
101+ condition_name ,
102+ best_iteration_result ,
103+ matched_action_detail ,
104+ condition_results [condition_name ].cohort_results ,
105+ )
97106
98107 # Consolidate all the results and return
99- final_result = self .build_condition_results (condition_results )
100108 return eligibility_status .EligibilityStatus (conditions = final_result )
101109
102110 def get_best_iteration_result (self , campaign_group : list [CampaignConfig ]) -> BestIterationResult :
@@ -133,39 +141,39 @@ def get_iteration_results(self, campaign_group: list[CampaignConfig]) -> dict[It
133141 return iteration_results
134142
135143 @staticmethod
136- def build_condition_results (condition_results : dict [ConditionName , IterationResult ]) -> list [Condition ]:
137- conditions : list [Condition ] = []
138- # iterate over conditions
139- for condition_name , active_iteration_result in condition_results .items ():
140- grouped_cohort_results = defaultdict (list )
141- # iterate over cohorts and group them by status and cohort_group
142- for cohort_result in active_iteration_result .cohort_results :
143- if active_iteration_result .status == cohort_result .status :
144- grouped_cohort_results [cohort_result .cohort_code ].append (cohort_result )
145-
146- # deduplicate grouped cohort results by cohort_code
147- deduplicated_cohort_results = [
148- CohortGroupResult (
144+ def build_condition_results (iteration_result : IterationResult , condition_name : ConditionName ) -> Condition :
145+ grouped_cohort_results = defaultdict (list )
146+
147+ for cohort_result in iteration_result .cohort_results :
148+ if iteration_result .status == cohort_result .status :
149+ grouped_cohort_results [cohort_result .cohort_code ].append (cohort_result )
150+
151+ deduplicated_cohort_results = []
152+
153+ for group_cohort_code , group in grouped_cohort_results .items ():
154+ if group :
155+ unique_rule_codes = set ()
156+ deduplicated_reasons = []
157+ for cohort in group :
158+ for reason in cohort .reasons :
159+ if reason .rule_name not in unique_rule_codes and reason .rule_description :
160+ unique_rule_codes .add (reason .rule_name )
161+ deduplicated_reasons .append (reason )
162+
163+ non_empty_description = next ((c .description for c in group if c .description ), group [0 ].description )
164+ cohort_group_result = CohortGroupResult (
149165 cohort_code = group_cohort_code ,
150166 status = group [0 ].status ,
151- # Flatten all reasons from the group
152- reasons = [reason for cohort in group for reason in cohort .reasons ],
153- # get the first nonempty description
154- description = next ((c .description for c in group if c .description ), group [0 ].description ),
167+ reasons = deduplicated_reasons ,
168+ description = non_empty_description ,
155169 audit_rules = [],
156170 )
157- for group_cohort_code , group in grouped_cohort_results .items ()
158- if group
159- ]
160-
161- # return condition with cohort results
162- conditions .append (
163- Condition (
164- condition_name = condition_name ,
165- status = active_iteration_result .status ,
166- cohort_results = list (deduplicated_cohort_results ),
167- actions = condition_results [condition_name ].actions ,
168- status_text = active_iteration_result .status .get_status_text (condition_name ),
169- )
170- )
171- return conditions
171+ deduplicated_cohort_results .append (cohort_group_result )
172+
173+ return Condition (
174+ condition_name = condition_name ,
175+ status = iteration_result .status ,
176+ cohort_results = list (deduplicated_cohort_results ),
177+ actions = iteration_result .actions ,
178+ status_text = iteration_result .status .get_status_text (condition_name ),
179+ )
0 commit comments