Skip to content

Commit beab1dc

Browse files
changed grouping from name to priority, type
1 parent 09715b9 commit beab1dc

2 files changed

Lines changed: 41 additions & 14 deletions

File tree

src/eligibility_signposting_api/services/calculators/eligibility_calculator.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@
2828
from eligibility_signposting_api.model.campaign_config import (
2929
CampaignConfig,
3030
CohortLabel,
31-
IterationName, RuleType,
32-
)
31+
IterationName,
32+
)
3333
from eligibility_signposting_api.model.person import Person
3434

3535
logger = logging.getLogger(__name__)
@@ -161,12 +161,13 @@ def build_condition_results(iteration_result: IterationResult, condition_name: C
161161

162162
for group_cohort_code, group in grouped_cohort_results.items():
163163
if group:
164-
unique_rule_codes = set()
164+
unique_reasons = set()
165165
deduplicated_reasons = []
166166
for cohort in group:
167167
for reason in cohort.reasons:
168-
if reason.rule_priority not in unique_rule_codes and reason.rule_description:
169-
unique_rule_codes.add(reason.rule_priority)
168+
key = (reason.rule_type, reason.rule_priority)
169+
if key not in unique_reasons:
170+
unique_reasons.add(key)
170171
deduplicated_reasons.append(reason)
171172

172173
non_empty_description = next((c.description for c in group if c.description), group[0].description)

tests/unit/services/calculators/test_eligibility_calculator.py

Lines changed: 35 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -735,14 +735,14 @@ def test_build_condition_results_single_condition_single_cohort_not_eligible_wit
735735

736736
def test_build_condition_results_single_condition_multiple_cohorts_same_cohort_code_same_status(self):
737737
reason_1 = Reason(
738-
RuleType.filter,
738+
RuleType.suppression,
739739
eligibility_status.RuleName("Filter Rule 1"),
740740
RulePriority("1"),
741741
RuleDescription("Filter Rule Description 2"),
742742
matcher_matched=True,
743743
)
744744
reason_2 = Reason(
745-
RuleType.filter,
745+
RuleType.suppression,
746746
eligibility_status.RuleName("Filter Rule 2"),
747747
RulePriority("2"),
748748
RuleDescription("Filter Rule Description 2"),
@@ -779,14 +779,14 @@ def test_build_condition_results_single_condition_multiple_cohorts_same_cohort_c
779779

780780
def test_build_condition_results_multiple_cohorts_different_cohort_code_same_status(self):
781781
reason_1 = Reason(
782-
RuleType.filter,
782+
RuleType.suppression,
783783
eligibility_status.RuleName("Filter Rule 1"),
784784
RulePriority("1"),
785785
RuleDescription("Filter Rule Description 2"),
786786
matcher_matched=True,
787787
)
788788
reason_2 = Reason(
789-
RuleType.filter,
789+
RuleType.suppression,
790790
eligibility_status.RuleName("Filter Rule 2"),
791791
RulePriority("2"),
792792
RuleDescription("Filter Rule Description 2"),
@@ -820,14 +820,14 @@ def test_build_condition_results_multiple_cohorts_different_cohort_code_same_sta
820820

821821
def test_build_condition_results_cohorts_status_not_matching_iteration_status(self):
822822
reason_1 = Reason(
823-
RuleType.filter,
823+
RuleType.suppression,
824824
eligibility_status.RuleName("Filter Rule 1"),
825825
RulePriority("1"),
826826
RuleDescription("Matching"),
827827
matcher_matched=True,
828828
)
829829
reason_2 = Reason(
830-
RuleType.filter,
830+
RuleType.suppression,
831831
eligibility_status.RuleName("Filter Rule 2"),
832832
RulePriority("2"),
833833
RuleDescription("Not matching"),
@@ -849,7 +849,7 @@ def test_build_condition_results_cohorts_status_not_matching_iteration_status(se
849849
@pytest.mark.parametrize(
850850
("reason_2", "expected_reasons"),
851851
[
852-
# Same rule name and priority, different description
852+
# Same rule name , type, and priority, different description
853853
(
854854
Reason(
855855
RuleType.suppression,
@@ -868,7 +868,7 @@ def test_build_condition_results_cohorts_status_not_matching_iteration_status(se
868868
)
869869
],
870870
),
871-
# Different rule name, same priority
871+
# Different rule name, same type, same priority
872872
(
873873
Reason(
874874
RuleType.suppression,
@@ -887,7 +887,7 @@ def test_build_condition_results_cohorts_status_not_matching_iteration_status(se
887887
)
888888
],
889889
),
890-
# Same rule name, different priority
890+
# Same rule name, same type, different priority
891891
(
892892
Reason(
893893
RuleType.suppression,
@@ -913,6 +913,32 @@ def test_build_condition_results_cohorts_status_not_matching_iteration_status(se
913913
),
914914
],
915915
),
916+
# Same rule name, same priority, different type
917+
(
918+
Reason(
919+
RuleType.filter,
920+
eligibility_status.RuleName("Supress Rule 1"),
921+
RulePriority("2"),
922+
RuleDescription("Matching"),
923+
matcher_matched=True,
924+
),
925+
[ # Both reasons expected
926+
Reason(
927+
RuleType.suppression,
928+
eligibility_status.RuleName("Supress Rule 1"),
929+
RulePriority("1"),
930+
RuleDescription("Not matching"),
931+
matcher_matched=True,
932+
),
933+
Reason(
934+
RuleType.filter,
935+
eligibility_status.RuleName("Supress Rule 1"),
936+
RulePriority("2"),
937+
RuleDescription("Matching"),
938+
matcher_matched=True,
939+
),
940+
],
941+
),
916942
],
917943
)
918944
def test_build_condition_results_grouping_reasons(self, reason_2, expected_reasons):

0 commit comments

Comments
 (0)