@@ -50,10 +50,13 @@ def is_eligible(
5050 ) -> bool :
5151 is_eligible = True
5252 priority_getter = attrgetter ("priority" )
53- sorted_rules_by_priority = sorted (self . get_exclusion_rules ( cohort , filter_rules ) , key = priority_getter )
53+ sorted_rules_by_priority = sorted (filter_rules , key = priority_getter )
5454
5555 for _ , rule_group in groupby (sorted_rules_by_priority , key = priority_getter ):
56- status , group_exclusion_reasons , _ = self .evaluate_rules_priority_group (person , rule_group )
56+ group_rules = list (rule_group )
57+ if self ._should_skip_rule_group (cohort , group_rules ):
58+ continue
59+ status , group_exclusion_reasons , _ = self .evaluate_rules_priority_group (person , iter (group_rules ))
5760 if status .is_exclusion :
5861 if cohort .cohort_label is not None :
5962 cohort_results [cohort .cohort_label ] = CohortGroupResult (
@@ -65,6 +68,7 @@ def is_eligible(
6568 )
6669 is_eligible = False
6770 break
71+
6872 return is_eligible
6973
7074 def is_actionable (
@@ -78,10 +82,14 @@ def is_actionable(
7882 priority_getter = attrgetter ("priority" )
7983 suppression_reasons = []
8084
81- sorted_rules_by_priority = sorted (self . get_exclusion_rules ( cohort , suppression_rules ) , key = priority_getter )
85+ sorted_rules_by_priority = sorted (suppression_rules , key = priority_getter )
8286
8387 for _ , rule_group in groupby (sorted_rules_by_priority , key = priority_getter ):
84- status , group_exclusion_reasons , rule_stop = self .evaluate_rules_priority_group (person , rule_group )
88+ group_rules = list (rule_group )
89+ if self ._should_skip_rule_group (cohort , group_rules ):
90+ continue
91+
92+ status , group_exclusion_reasons , rule_stop = self .evaluate_rules_priority_group (person , iter (group_rules ))
8593 if status .is_exclusion :
8694 is_actionable = False
8795 suppression_reasons .extend (group_exclusion_reasons )
@@ -103,6 +111,12 @@ def is_actionable(
103111 suppression_reasons ,
104112 )
105113
114+ @staticmethod
115+ def _should_skip_rule_group (cohort : IterationCohort , group_rules : list [IterationRule ]) -> bool :
116+ cohort_specific_rules = [rule for rule in group_rules if rule .cohort_label is not None ]
117+ matching_specific_rules = [rule for rule in cohort_specific_rules if rule .cohort_label == cohort .cohort_label ]
118+ return bool (cohort_specific_rules and not matching_specific_rules )
119+
106120 def evaluate_rules_priority_group (
107121 self , person : Person , rules_group : Iterator [IterationRule ]
108122 ) -> tuple [eligibility_status .Status , list [eligibility_status .Reason ], bool ]:
0 commit comments