Skip to content

Commit 09715b9

Browse files
changed grouping from name to priority
1 parent e1d20a9 commit 09715b9

2 files changed

Lines changed: 99 additions & 4 deletions

File tree

src/eligibility_signposting_api/services/calculators/eligibility_calculator.py

Lines changed: 4 additions & 4 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,
32-
)
31+
IterationName, RuleType,
32+
)
3333
from eligibility_signposting_api.model.person import Person
3434

3535
logger = logging.getLogger(__name__)
@@ -165,8 +165,8 @@ def build_condition_results(iteration_result: IterationResult, condition_name: C
165165
deduplicated_reasons = []
166166
for cohort in group:
167167
for reason in cohort.reasons:
168-
if reason.rule_name not in unique_rule_codes and reason.rule_description:
169-
unique_rule_codes.add(reason.rule_name)
168+
if reason.rule_priority not in unique_rule_codes and reason.rule_description:
169+
unique_rule_codes.add(reason.rule_priority)
170170
deduplicated_reasons.append(reason)
171171

172172
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: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -845,3 +845,98 @@ def test_build_condition_results_cohorts_status_not_matching_iteration_status(se
845845
assert_that(len(result.cohort_results), is_(1))
846846
assert_that(result.cohort_results[0].cohort_code, is_("COHORT_X"))
847847
assert_that(result.cohort_results[0].status, is_(Status.not_eligible))
848+
849+
@pytest.mark.parametrize(
850+
("reason_2", "expected_reasons"),
851+
[
852+
# Same rule name and priority, different description
853+
(
854+
Reason(
855+
RuleType.suppression,
856+
eligibility_status.RuleName("Supress Rule 1"),
857+
RulePriority("1"),
858+
RuleDescription("Matching"),
859+
matcher_matched=True,
860+
),
861+
[ # Only reason_1 expected
862+
Reason(
863+
RuleType.suppression,
864+
eligibility_status.RuleName("Supress Rule 1"),
865+
RulePriority("1"),
866+
RuleDescription("Not matching"),
867+
matcher_matched=True,
868+
)
869+
],
870+
),
871+
# Different rule name, same priority
872+
(
873+
Reason(
874+
RuleType.suppression,
875+
eligibility_status.RuleName("Supress Rule 2"),
876+
RulePriority("1"),
877+
RuleDescription("Matching"),
878+
matcher_matched=True,
879+
),
880+
[ # Only reason_1 expected
881+
Reason(
882+
RuleType.suppression,
883+
eligibility_status.RuleName("Supress Rule 1"),
884+
RulePriority("1"),
885+
RuleDescription("Not matching"),
886+
matcher_matched=True,
887+
)
888+
],
889+
),
890+
# Same rule name, different priority
891+
(
892+
Reason(
893+
RuleType.suppression,
894+
eligibility_status.RuleName("Supress Rule 1"),
895+
RulePriority("2"),
896+
RuleDescription("Matching"),
897+
matcher_matched=True,
898+
),
899+
[ # Both reasons expected
900+
Reason(
901+
RuleType.suppression,
902+
eligibility_status.RuleName("Supress Rule 1"),
903+
RulePriority("1"),
904+
RuleDescription("Not matching"),
905+
matcher_matched=True,
906+
),
907+
Reason(
908+
RuleType.suppression,
909+
eligibility_status.RuleName("Supress Rule 1"),
910+
RulePriority("2"),
911+
RuleDescription("Matching"),
912+
matcher_matched=True,
913+
),
914+
],
915+
),
916+
],
917+
)
918+
def test_build_condition_results_grouping_reasons(self, reason_2, expected_reasons):
919+
reason_1 = Reason(
920+
RuleType.suppression,
921+
eligibility_status.RuleName("Supress Rule 1"),
922+
RulePriority("1"),
923+
RuleDescription("Not matching"),
924+
matcher_matched=True,
925+
)
926+
927+
cohort_group_results = [
928+
CohortGroupResult(
929+
"COHORT_Y",
930+
Status.not_actionable,
931+
[reason_1, reason_2],
932+
"Cohort Y Description",
933+
[],
934+
)
935+
]
936+
937+
iteration_result = IterationResult(Status.not_actionable, cohort_group_results, [])
938+
939+
result = EligibilityCalculator.build_condition_results(iteration_result, ConditionName("RSV"))
940+
941+
assert_that(len(result.cohort_results), is_(1))
942+
assert_that(result.cohort_results[0].reasons, contains_inanyorder(*expected_reasons))

0 commit comments

Comments
 (0)