1515
1616def test_not_base_eligible (faker : Faker ):
1717 # Given
18- nhs_number = NHSNumber (f"5 { faker .random_int ( max = 999999999 ):09d } " )
18+ nhs_number = NHSNumber (faker .nhs_number () )
1919
2020 person_rows = person_rows_builder (nhs_number , cohorts = ["cohort1" ])
2121 campaign_configs = [
@@ -48,7 +48,7 @@ def test_not_base_eligible(faker: Faker):
4848@freeze_time ("2025-04-25" )
4949def test_only_live_campaigns_considered (faker : Faker ):
5050 # Given
51- nhs_number = NHSNumber (f"5 { faker .random_int ( max = 999999999 ):09d } " )
51+ nhs_number = NHSNumber (faker .nhs_number () )
5252
5353 person_rows = person_rows_builder (nhs_number , cohorts = ["cohort1" ])
5454 campaign_configs = [
@@ -95,7 +95,7 @@ def test_only_live_campaigns_considered(faker: Faker):
9595
9696def test_base_eligible_and_simple_rule_includes (faker : Faker ):
9797 # Given
98- nhs_number = NHSNumber (f"5 { faker .random_int ( max = 999999999 ):09d } " )
98+ nhs_number = NHSNumber (faker .nhs_number () )
9999 date_of_birth = DateOfBirth (faker .date_of_birth (minimum_age = 76 , maximum_age = 79 ))
100100
101101 person_rows = person_rows_builder (nhs_number , date_of_birth = date_of_birth , cohorts = ["cohort1" ])
@@ -127,7 +127,7 @@ def test_base_eligible_and_simple_rule_includes(faker: Faker):
127127
128128def test_base_eligible_but_simple_rule_excludes (faker : Faker ):
129129 # Given
130- nhs_number = NHSNumber (f"5 { faker .random_int ( max = 999999999 ):09d } " )
130+ nhs_number = NHSNumber (faker .nhs_number () )
131131 date_of_birth = DateOfBirth (faker .date_of_birth (minimum_age = 18 , maximum_age = 74 ))
132132
133133 person_rows = person_rows_builder (nhs_number , date_of_birth = date_of_birth , cohorts = ["cohort1" ])
@@ -160,7 +160,7 @@ def test_base_eligible_but_simple_rule_excludes(faker: Faker):
160160@freeze_time ("2025-04-25" )
161161def test_simple_rule_only_excludes_from_live_iteration (faker : Faker ):
162162 # Given
163- nhs_number = NHSNumber (f"5 { faker .random_int ( max = 999999999 ):09d } " )
163+ nhs_number = NHSNumber (faker .nhs_number () )
164164 date_of_birth = DateOfBirth (faker .date_of_birth (minimum_age = 66 , maximum_age = 74 ))
165165
166166 person_rows = person_rows_builder (nhs_number , date_of_birth = date_of_birth , cohorts = ["cohort1" ])
@@ -207,7 +207,7 @@ def test_simple_rule_only_excludes_from_live_iteration(faker: Faker):
207207@freeze_time ("2025-04-25" )
208208def test_campaign_with_no_active_iteration_not_considered (faker : Faker ):
209209 # Given
210- nhs_number = NHSNumber (f"5 { faker .random_int ( max = 999999999 ):09d } " )
210+ nhs_number = NHSNumber (faker .nhs_number () )
211211
212212 person_rows = person_rows_builder (nhs_number )
213213 campaign_configs = [
@@ -240,7 +240,7 @@ def test_campaign_with_no_active_iteration_not_considered(faker: Faker):
240240)
241241def test_rule_types_cause_correct_statuses (rule_type : rules_model .RuleType , expected_status : Status , faker : Faker ):
242242 # Given
243- nhs_number = NHSNumber (f"5 { faker .random_int ( max = 999999999 ):09d } " )
243+ nhs_number = NHSNumber (faker .nhs_number () )
244244 date_of_birth = DateOfBirth (faker .date_of_birth (minimum_age = 18 , maximum_age = 74 ))
245245
246246 person_rows = person_rows_builder (nhs_number , date_of_birth = date_of_birth , cohorts = ["cohort1" ])
@@ -272,7 +272,7 @@ def test_rule_types_cause_correct_statuses(rule_type: rules_model.RuleType, expe
272272
273273def test_multiple_rule_types_cause_correct_status (faker : Faker ):
274274 # Given
275- nhs_number = NHSNumber (f"5 { faker .random_int ( max = 999999999 ):09d } " )
275+ nhs_number = NHSNumber (faker .nhs_number () )
276276 date_of_birth = DateOfBirth (faker .date_of_birth (minimum_age = 18 , maximum_age = 74 ))
277277
278278 person_rows = person_rows_builder (nhs_number , date_of_birth = date_of_birth , cohorts = ["cohort1" ])
@@ -369,7 +369,7 @@ def test_rules_with_same_priority_must_all_match_to_exclude(
369369 faker : Faker ,
370370):
371371 # Given
372- nhs_number = NHSNumber (f"5 { faker .random_int ( max = 999999999 ):09d } " )
372+ nhs_number = NHSNumber (faker .nhs_number () )
373373 date_of_birth = DateOfBirth (faker .date_of_birth (minimum_age = 66 , maximum_age = 74 ))
374374
375375 person_rows = person_rows_builder (
@@ -404,7 +404,7 @@ def test_rules_with_same_priority_must_all_match_to_exclude(
404404
405405def test_multiple_conditions_where_both_are_actionable (faker : Faker ):
406406 # Given
407- nhs_number = NHSNumber (f"5 { faker .random_int ( max = 999999999 ):09d } " )
407+ nhs_number = NHSNumber (faker .nhs_number () )
408408 date_of_birth = DateOfBirth (faker .date_of_birth (minimum_age = 76 , maximum_age = 78 ))
409409
410410 person_rows = person_rows_builder (nhs_number , date_of_birth = date_of_birth , cohorts = ["cohort1" ])
@@ -448,7 +448,7 @@ def test_multiple_conditions_where_both_are_actionable(faker: Faker):
448448
449449def test_multiple_conditions_where_all_give_unique_statuses (faker : Faker ):
450450 # Given
451- nhs_number = NHSNumber (f"5 { faker .random_int ( max = 999999999 ):09d } " )
451+ nhs_number = NHSNumber (faker .nhs_number () )
452452 date_of_birth = DateOfBirth (faker .date_of_birth (minimum_age = 76 , maximum_age = 78 ))
453453
454454 person_rows = person_rows_builder (nhs_number , date_of_birth = date_of_birth , cohorts = ["cohort1" ])
@@ -551,7 +551,7 @@ def test_multiple_campaigns_for_single_condition(
551551 test_comment : str , campaign1 : rules_model .CampaignConfig , campaign2 : rules_model .CampaignConfig , faker : Faker
552552):
553553 # Given
554- nhs_number = NHSNumber (f"5 { faker .random_int ( max = 999999999 ):09d } " )
554+ nhs_number = NHSNumber (faker .nhs_number () )
555555 date_of_birth = DateOfBirth (faker .date_of_birth (minimum_age = 76 , maximum_age = 78 ))
556556
557557 person_rows = person_rows_builder (nhs_number , date_of_birth = date_of_birth , cohorts = ["cohort1" ])
@@ -570,3 +570,49 @@ def test_multiple_campaigns_for_single_condition(
570570 ),
571571 test_comment ,
572572 )
573+
574+
575+ @pytest .mark .parametrize (
576+ ("icb" , "rule_type" , "expected_status" ),
577+ [
578+ ("QE1" , rules_model .RuleType .suppression , Status .actionable ),
579+ ("QWU" , rules_model .RuleType .suppression , Status .not_actionable ),
580+ ("" , rules_model .RuleType .suppression , Status .not_actionable ),
581+ (None , rules_model .RuleType .suppression , Status .not_actionable ),
582+ ("QE1" , rules_model .RuleType .filter , Status .actionable ),
583+ ("QWU" , rules_model .RuleType .filter , Status .not_eligible ),
584+ ("" , rules_model .RuleType .filter , Status .not_eligible ),
585+ (None , rules_model .RuleType .filter , Status .not_eligible ),
586+ ],
587+ )
588+ def test_base_eligible_and_icb_example (
589+ icb : str | None , rule_type : rules_model .RuleType , expected_status : Status , faker : Faker
590+ ):
591+ # Given
592+ nhs_number = NHSNumber (faker .nhs_number ())
593+
594+ person_rows = person_rows_builder (nhs_number , cohorts = ["cohort1" ], icb = icb )
595+ campaign_configs = [
596+ rule_builder .CampaignConfigFactory .build (
597+ target = "RSV" ,
598+ iterations = [
599+ rule_builder .IterationFactory .build (
600+ iteration_rules = [rule_builder .ICBSuppressionRuleFactory .build (type = rule_type )],
601+ iteration_cohorts = [rule_builder .IterationCohortFactory .build (cohort_label = "cohort1" )],
602+ )
603+ ],
604+ )
605+ ]
606+
607+ calculator = EligibilityCalculator (person_rows , campaign_configs )
608+
609+ # When
610+ actual = calculator .evaluate_eligibility ()
611+
612+ # Then
613+ assert_that (
614+ actual ,
615+ is_eligibility_status ().with_conditions (
616+ has_item (is_condition ().with_condition_name (ConditionName ("RSV" )).and_status (expected_status ))
617+ ),
618+ )
0 commit comments