From ca964a7e4f487b97421e37eba3001cfb7ce507f1 Mon Sep 17 00:00:00 2001 From: Adam Waller <176666249+adam-wallernhs1@users.noreply.github.com> Date: Thu, 9 Apr 2026 10:49:46 +0100 Subject: [PATCH 01/10] initial commit with first 4 scenarios --- .gitignore | 1 - .../consumer_mapping_config.json | 14 +- .../preprod/consumer_mapping_config.json | 8 +- ...S_Flu_Config_AutumnWinter2026_v0.2WIP.json | 557 ++++++++++++++++++ .../AUTO_FLU_NBS_INT_A01.json | 34 ++ .../AUTO_FLU_NBS_INT_A02.json | 42 ++ .../AUTO_FLU_NBS_INT_A03.json | 35 ++ .../AUTO_FLU_NBS_INT_A04.json | 36 ++ .../AUTO_FLU_NBS_INT_A01.json | 30 + .../AUTO_FLU_NBS_INT_A02.json | 35 ++ .../AUTO_FLU_NBS_INT_A03.json | 30 + .../AUTO_FLU_NBS_INT_A04.json | 37 ++ 12 files changed, 847 insertions(+), 12 deletions(-) create mode 100644 data/configs/inProgressTestConfigs/NBS_Flu_Config_AutumnWinter2026_v0.2WIP.json create mode 100644 data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_A01.json create mode 100644 data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_A02.json create mode 100644 data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_A03.json create mode 100644 data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_A04.json create mode 100644 data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_A01.json create mode 100644 data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_A02.json create mode 100644 data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_A03.json create mode 100644 data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_A04.json diff --git a/.gitignore b/.gitignore index 67c889c5..3b143737 100644 --- a/.gitignore +++ b/.gitignore @@ -256,4 +256,3 @@ vscode node_modules /certs/ temp* -inProgress* diff --git a/data/configs/consumerMappings/consumer_mapping_config.json b/data/configs/consumerMappings/consumer_mapping_config.json index 7bd06b7e..34267bf1 100644 --- a/data/configs/consumerMappings/consumer_mapping_config.json +++ b/data/configs/consumerMappings/consumer_mapping_config.json @@ -6,11 +6,11 @@ }, { "CampaignConfigID": "VITA_Campaign_Config_ID_COVID", - "Description": "RSV Ongoing for My Vaccines" + "Description": "COVID Ongoing for My Vaccines" }, { "CampaignConfigID": "VITA_Campaign_Config_ID_FLU", - "Description": "RSV Ongoing for My Vaccines" + "Description": "FLU Ongoing for My Vaccines" }, { "CampaignConfigID": "VITA_NBS_Campaign_Config_ID_COVID", @@ -22,9 +22,13 @@ "CampaignConfigID": "7fcb742b-45fa-4w0d-8f2f-9c2efb1f46d1", "Description": "RSV Ongoing for NBS" }, + { + "CampaignConfigID": "b21cff69-a2c7-4e78-a514-ce067c09df0c", + "Description": "FLU Ongoing for NBS" + }, { "CampaignConfigID": "NBS_Campaign_Config_ID_RSV", - "Description": "RSV Ongoing for NBS" + "Description": "RSV Test Config for NBS" }, { "CampaignConfigID": "NBS_Campaign_Config_ID_COVID", @@ -34,10 +38,6 @@ "CampaignConfigID": "NBS_Campaign_Config_ID_COVID_ACTIVE", "Description": "COVID Ongoing for NBS" }, - { - "CampaignConfigID": "NBS_Campaign_Config_ID_FLU", - "Description": "FLU Ongoing for NBS" - }, { "CampaignConfigID": "VITA_NBS_Campaign_Config_ID_COVID", "Description": "Shared Config for My Vaccines and NBS" diff --git a/data/configs/consumerMappings/preprod/consumer_mapping_config.json b/data/configs/consumerMappings/preprod/consumer_mapping_config.json index a51fa56d..8d2f1df2 100644 --- a/data/configs/consumerMappings/preprod/consumer_mapping_config.json +++ b/data/configs/consumerMappings/preprod/consumer_mapping_config.json @@ -22,6 +22,10 @@ "CampaignConfigID": "7fcb742b-45fa-4w0d-8f2f-9c2efb1f46d1", "Description": "RSV Ongoing for NBS" }, + { + "CampaignConfigID": "b21cff69-a2c7-4e78-a514-ce067c09df0c", + "Description": "FLU Ongoing for NBS" + }, { "CampaignConfigID": "NBS_Campaign_Config_ID_RSV", "Description": "RSV Ongoing for NBS" @@ -34,10 +38,6 @@ "CampaignConfigID": "NBS_Campaign_Config_ID_COVID_ACTIVE", "Description": "COVID Ongoing for NBS" }, - { - "CampaignConfigID": "NBS_Campaign_Config_ID_FLU", - "Description": "FLU Ongoing for NBS" - }, { "CampaignConfigID": "VITA_NBS_Campaign_Config_ID_COVID", "Description": "Shared Config for My Vaccines and NBS" diff --git a/data/configs/inProgressTestConfigs/NBS_Flu_Config_AutumnWinter2026_v0.2WIP.json b/data/configs/inProgressTestConfigs/NBS_Flu_Config_AutumnWinter2026_v0.2WIP.json new file mode 100644 index 00000000..1883412c --- /dev/null +++ b/data/configs/inProgressTestConfigs/NBS_Flu_Config_AutumnWinter2026_v0.2WIP.json @@ -0,0 +1,557 @@ +{ + "CampaignConfig": { + "ID": "b21cff69-a2c7-4e78-a514-ce067c09df0c", + "Version": 1, + "Name": "EliD NBS Flu campaign config Release 1", + "Type": "V", + "Target": "FLU", + "Manager": [ + "example@nhs.net" + ], + "Approver": [ + "example@nhs.net" + ], + "Reviewer": [ + "example@nhs.net" + ], + "IterationFrequency": "X", + "IterationType": "O", + "IterationTime": "07:00:00", + "StartDate": "<>", + "EndDate": "20270331", + "ApprovalMinimum": 0, + "ApprovalMaximum": 0, + "DefaultCommsRouting": "BOOK_NBS", + "Iterations": [ + { + "ID": "2834b74a-4170-4594-9d2c-9e6d9af41d20", + "DefaultCommsRouting": "BOOK_NBS", + "DefaultNotActionableRouting": "", + "DefaultNotEligibleRouting": "", + "Version": 1, + "Name": "EliD NBS Flu campaign config Release 1", + "IterationDate": "<>", + "IterationNumber": 1, + "CommsType": "I", + "ApprovalMinimum": 0, + "ApprovalMaximum": 0, + "Type": "O", + "StatusText": { + "NotEligible": "We do not believe you can have it", + "NotActionable": "You should have the Flu vaccine", + "Actionable": "You should have the Flu vaccine" + }, + "IterationCohorts": [ + { + "CohortLabel": "flu_65+_autumnwinter2026", + "CohortGroup": "flu_age_65+", + "PositiveDescription": "are aged 65 or over (including those who will be 65 by 31 March 2027)", + "NegativeDescription": "are not aged 65 or over (including those who will be 65 by 31 March 2027)", + "Priority": 10, + "Virtual": "N" + }, + { + "CohortLabel": "flu_2to3_autumnwinter2026", + "CohortGroup": "flu_age_2to3", + "PositiveDescription": "are aged 2 or 3 years (born between 1 September 2022 and 31 August 2024)", + "NegativeDescription": "are not aged 2 or 3 years (born between 1 September 2022 and 31 August 2024)", + "Priority": 15, + "Virtual": "N" + }, + { + "CohortLabel": "flu_4to16_autumnwinter2026", + "CohortGroup": "flu_school_age", + "PositiveDescription": "are of school age (Reception to Year 11)", + "NegativeDescription": "are not of school age (Reception to Year 11)", + "Priority": 20, + "Virtual": "N" + }, + { + "CohortLabel": "flu_immunosuppression", + "CohortGroup": "flu_clinical_risk", + "PositiveDescription": "have a weakened immune system because of a health condition or treatment", + "NegativeDescription": "do not have a weakened immune system because of a health condition or treatment", + "Priority": 25, + "Virtual": "N" + }, + { + "CohortLabel": "flu_diabetes", + "CohortGroup": "flu_clinical_risk", + "PositiveDescription": "have a weakened immune system because of a health condition or treatment", + "NegativeDescription": "do not have a weakened immune system because of a health condition or treatment", + "Priority": 30, + "Virtual": "N" + }, + { + "CohortLabel": "flu_chronic_heart_disease", + "CohortGroup": "flu_clinical_risk", + "PositiveDescription": "have a weakened immune system because of a health condition or treatment", + "NegativeDescription": "do not have a weakened immune system because of a health condition or treatment", + "Priority": 35, + "Virtual": "N" + }, + { + "CohortLabel": "flu_chronic_kidney_disease", + "CohortGroup": "flu_clinical_risk", + "PositiveDescription": "have a weakened immune system because of a health condition or treatment", + "NegativeDescription": "do not have a weakened immune system because of a health condition or treatment", + "Priority": 40, + "Virtual": "N" + }, + { + "CohortLabel": "flu_chronic_liver_disease", + "CohortGroup": "flu_clinical_risk", + "PositiveDescription": "have a weakened immune system because of a health condition or treatment", + "NegativeDescription": "do not have a weakened immune system because of a health condition or treatment", + "Priority": 45, + "Virtual": "N" + }, + { + "CohortLabel": "flu_chronic_neurological_disease", + "CohortGroup": "flu_clinical_risk", + "PositiveDescription": "have a weakened immune system because of a health condition or treatment", + "NegativeDescription": "do not have a weakened immune system because of a health condition or treatment", + "Priority": 50, + "Virtual": "N" + }, + { + "CohortLabel": "flu_chronic_respiratory_disease", + "CohortGroup": "flu_clinical_risk", + "PositiveDescription": "have a weakened immune system because of a health condition or treatment", + "NegativeDescription": "do not have a weakened immune system because of a health condition or treatment", + "Priority": 55, + "Virtual": "N" + }, + { + "CohortLabel": "flu_coded_eligibility", + "CohortGroup": "flu_clinical_risk", + "PositiveDescription": "have a weakened immune system because of a health condition or treatment", + "NegativeDescription": "do not have a weakened immune system because of a health condition or treatment", + "Priority": 60, + "Virtual": "N" + }, + { + "CohortLabel": "flu_morbid_obesity", + "CohortGroup": "flu_clinical_risk", + "PositiveDescription": "have a weakened immune system because of a health condition or treatment", + "NegativeDescription": "do not have a weakened immune system because of a health condition or treatment", + "Priority": 65, + "Virtual": "N" + }, + { + "CohortLabel": "care_home_residents_older_adults", + "CohortGroup": "care_home_residents", + "PositiveDescription": "live in a care home for older adults", + "NegativeDescription": "do not live in a care home for older adults", + "Priority": 70, + "Virtual": "N" + }, + { + "CohortLabel": "elid_all_people", + "CohortGroup": "magic_cohort", + "PositiveDescription": "", + "NegativeDescription": "", + "Priority": 90, + "Virtual": "Y" + } + ], + "IterationRules": [ + { + "Type": "F", + "Name": "Remove from magic cohort unless already vaccinated or have future booking", + "Description": "Remove anyone NOT already vaccinated within the current campaign and do not have a future booking from the magic cohort", + "Operator": "<", + "Comparator": "<>[[NVL:18000101]]", + "AttributeTarget": "FLU", + "AttributeLevel": "TARGET", + "AttributeName": "LAST_SUCCESSFUL_DATE", + "CohortLabel": "elid_all_people", + "Priority": 100 + }, + { + "Type": "F", + "Name": "Remove from magic cohort unless already vaccinated or have future booking", + "Description": "Remove anyone without a future booking from magic cohort", + "Operator": "D<", + "Comparator": "0[[NVL:18000101]]", + "AttributeTarget": "FLU", + "AttributeLevel": "TARGET", + "AttributeName": "BOOKED_APPOINTMENT_DATE", + "CohortLabel": "elid_all_people", + "Priority": 100 + }, + { + "Type": "F", + "Name": "Remove under 65 Years at end of campaign", + "Description": "Ensure anyone who has a PDS date of birth which determines their age to be less than 65 years at the end of campaign is filtered out.", + "Priority": 120, + "AttributeLevel": "PERSON", + "AttributeName": "DATE_OF_BIRTH", + "Operator": ">=", + "Comparator": "19620401", + "CohortLabel": "flu_65+_autumnwinter2026" + }, + { + "Type": "S", + "Name": "AlreadyVaccinated", + "Description": "Vaccinated within the current campaign", + "Priority": 500, + "AttributeLevel": "TARGET", + "AttributeTarget": "FLU", + "AttributeName": "LAST_SUCCESSFUL_DATE", + "Operator": ">=", + "Comparator": "<>", + "RuleStop": "Y" + }, + { + "Type": "S", + "Name": "AlreadyVaccinated", + "Description": "Aged 9 years or over", + "Priority": 500, + "AttributeLevel": "PERSON", + "AttributeName": "DATE_OF_BIRTH", + "Operator": "Y<=", + "Comparator": "-9", + "RuleStop": "Y" + }, + { + "Type": "S", + "Name": "TooClose", + "Description": "Vaccinated within the current campaign", + "Priority": 520, + "AttributeLevel": "TARGET", + "AttributeTarget": "FLU", + "AttributeName": "LAST_SUCCESSFUL_DATE", + "Operator": ">=", + "Comparator": "<>", + "RuleStop": "Y" + }, + { + "Type": "S", + "Name": "TooClose", + "Description": "Less that 4 weeks since last vaccination", + "Priority": 520, + "AttributeLevel": "TARGET", + "AttributeTarget": "FLU", + "AttributeName": "LAST_SUCCESSFUL_DATE", + "Operator": "D>=", + "Comparator": "-28", + "RuleStop": "Y" + }, + { + "Type": "S", + "Name": "TooClose", + "Description": "Member of the immunosuppressed eligible cohort", + "Priority": 520, + "AttributeLevel": "COHORT", + "AttributeName": "COHORT_LABEL", + "Operator": "MemberOf", + "Comparator": "flu_immunosuppression", + "RuleStop": "Y" + }, + { + "Type": "S", + "Name": "TooClose", + "Description": "Have had only 1 previous vaccination including previous campaigns", + "Priority": 520, + "AttributeLevel": "TARGET", + "AttributeTarget": "FLU", + "AttributeName": "SUCCESSFUL_PROCEDURE_COUNT", + "Operator": "=", + "Comparator": "1", + "RuleStop": "Y" + }, + { + "Type": "S", + "Name": "AlreadyVaccinatedNoAdditionalDose", + "Description": "Vaccinated within the current campaign", + "Priority": 540, + "AttributeLevel": "TARGET", + "AttributeTarget": "FLU", + "AttributeName": "LAST_SUCCESSFUL_DATE", + "Operator": ">=", + "Comparator": "<>", + "RuleStop": "Y" + }, + { + "Type": "S", + "Name": "AlreadyVaccinatedNoAdditionalDose", + "Description": "Have had two or more vaccinations including previous campaigns", + "Priority": 540, + "AttributeLevel": "TARGET", + "AttributeTarget": "FLU", + "AttributeName": "SUCCESSFUL_PROCEDURE_COUNT", + "Operator": ">=", + "Comparator": "2", + "RuleStop": "Y" + }, + { + "Type": "S", + "Name": "AlreadyVaccinated", + "Description": "Under 9 years old", + "Priority": 540, + "AttributeLevel": "PERSON", + "AttributeName": "DATE_OF_BIRTH", + "Operator": "Y>", + "Comparator": "-9", + "RuleStop": "Y" + }, + { + "Type": "S", + "Name": "SchoolAge", + "Description": "", + "Priority": 560, + "AttributeLevel": "COHORT", + "AttributeName": "COHORT_LABEL", + "Operator": "MemberOf", + "Comparator": "flu_4to16_autumnwinter2026", + "RuleStop": "Y" + }, + { + "Type": "S", + "Name": "FutureBookingNBS", + "Description": "Future booking", + "Priority": 700, + "Operator": "D>=", + "Comparator": "0", + "AttributeTarget": "FLU", + "AttributeLevel": "TARGET", + "AttributeName": "BOOKED_APPOINTMENT_DATE", + "RuleStop": "Y" + }, + { + "Type": "S", + "Name": "FutureBookingNBS", + "Description": "Booking Provider is MYA or NBS", + "Priority": 700, + "Operator": "in", + "Comparator": "NBS,MYA", + "AttributeTarget": "FLU", + "AttributeLevel": "TARGET", + "AttributeName": "BOOKED_APPOINTMENT_PROVIDER", + "RuleStop": "Y" + }, + { + "Type": "S", + "Name": "FutureBookingLocal", + "Description": "Local future booking", + "Priority": 750, + "Operator": "D>=", + "Comparator": "0", + "AttributeTarget": "FLU", + "AttributeLevel": "TARGET", + "AttributeName": "BOOKED_APPOINTMENT_DATE", + "RuleStop": "Y" + }, + { + "Type": "R", + "Name": "AdditionalDoseRequired", + "Description": "Vaccinated within the current campaign", + "Priority": 1000, + "AttributeLevel": "TARGET", + "AttributeTarget": "FLU", + "AttributeName": "LAST_SUCCESSFUL_DATE", + "Operator": ">=", + "Comparator": "<>", + "CommsRouting": "BOOK_NBS|ADDITIONAL_DOSE_REQUIRED" + }, + { + "Type": "R", + "Name": "AdditionalDoseRequired", + "Description": "Under 9 years old", + "Priority": 1000, + "AttributeLevel": "PERSON", + "AttributeName": "DATE_OF_BIRTH", + "Operator": "Y>", + "Comparator": "-9", + "CommsRouting": "BOOK_NBS|ADDITIONAL_DOSE_REQUIRED" + }, + { + "Type": "R", + "Name": "AdditionalDoseRequired", + "Description": "Member of the immunosuppressed eligible cohort", + "Priority": 1000, + "AttributeLevel": "COHORT", + "AttributeName": "COHORT_LABEL", + "Operator": "MemberOf", + "Comparator": "flu_immunosuppression", + "CommsRouting": "BOOK_NBS|ADDITIONAL_DOSE_REQUIRED" + }, + { + "Type": "R", + "Name": "AdditionalDoseRequired", + "Description": "Have had only 1 previous vaccination including previous campaigns", + "Priority": 1000, + "AttributeLevel": "TARGET", + "AttributeTarget": "FLU", + "AttributeName": "SUCCESSFUL_PROCEDURE_COUNT", + "Operator": "=", + "Comparator": "1", + "CommsRouting": "BOOK_NBS|ADDITIONAL_DOSE_REQUIRED" + }, + { + "Type": "X", + "Name": "MayRequireAdditionalDose", + "Description": "Under 9 years old", + "Priority": 3000, + "AttributeLevel": "PERSON", + "AttributeName": "DATE_OF_BIRTH", + "Operator": "Y<", + "Comparator": "-9", + "CommsRouting": "MAY_REQUIRE_ADDITIONAL_DOSE" + }, + { + "Type": "X", + "Name": "MayRequireAdditionalDose", + "Description": "Vaccinated within the current campaign", + "Priority": 3000, + "AttributeLevel": "TARGET", + "AttributeTarget": "FLU", + "AttributeName": "LAST_SUCCESSFUL_DATE", + "Operator": ">=", + "Comparator": "<>", + "CommsRouting": "MAY_REQUIRE_ADDITIONAL_DOSE" + }, + { + "Type": "X", + "Name": "MayRequireAdditionalDose", + "Description": "Have had less than 2 vaccinations including previous campaigns", + "Priority": 3000, + "AttributeLevel": "TARGET", + "AttributeTarget": "FLU", + "AttributeName": "SUCCESSFUL_PROCEDURE_COUNT", + "Operator": "<", + "Comparator": "2", + "CommsRouting": "MAY_REQUIRE_ADDITIONAL_DOSE" + }, + { + "Type": "Y", + "Name": "TooCloseForAdditionalDoseAction", + "Description": "Vaccinated within the current campaign", + "Priority": 3100, + "AttributeLevel": "TARGET", + "AttributeTarget": "FLU", + "AttributeName": "LAST_SUCCESSFUL_DATE", + "Operator": ">=", + "Comparator": "<>", + "CommsRouting": "LAST_VACCINATION_DATE|EARLIEST_NEXT_VACCINATION_DATE|ADDITIONAL_DOSE_REQUIRED" + }, + { + "Type": "Y", + "Name": "TooCloseForAdditionalDoseAction", + "Description": "Less that 4 weeks since last vaccination", + "Priority": 3100, + "AttributeLevel": "TARGET", + "AttributeTarget": "FLU", + "AttributeName": "LAST_SUCCESSFUL_DATE", + "Operator": "D>=", + "Comparator": "-28", + "CommsRouting": "LAST_VACCINATION_DATE|EARLIEST_NEXT_VACCINATION_DATE|ADDITIONAL_DOSE_REQUIRED" + }, + { + "Type": "Y", + "Name": "TooCloseForAdditionalDoseAction", + "Description": "Under 9 years old", + "Priority": 3100, + "AttributeLevel": "PERSON", + "AttributeName": "DATE_OF_BIRTH", + "Operator": "Y>", + "Comparator": "-9", + "CommsRouting": "LAST_VACCINATION_DATE|EARLIEST_NEXT_VACCINATION_DATE|ADDITIONAL_DOSE_REQUIRED" + }, + { + "Type": "Y", + "Name": "TooCloseForAdditionalDoseAction", + "Description": "Member of the immunosuppressed eligible cohort", + "Priority": 3100, + "AttributeLevel": "COHORT", + "AttributeName": "COHORT_LABEL", + "Operator": "MemberOf", + "Comparator": "flu_immunosuppression", + "CommsRouting": "LAST_VACCINATION_DATE|EARLIEST_NEXT_VACCINATION_DATE|ADDITIONAL_DOSE_REQUIRED" + }, + { + "Type": "Y", + "Name": "TooCloseForAdditionalDoseAction", + "Description": "Under 9 years old", + "Priority": 3100, + "AttributeLevel": "TARGET", + "AttributeTarget": "FLU", + "AttributeName": "SUCCESSFUL_PROCEDURE_COUNT", + "Operator": "<", + "Comparator": "2", + "CommsRouting": "LAST_VACCINATION_DATE|EARLIEST_NEXT_VACCINATION_DATE|ADDITIONAL_DOSE_REQUIRED" + }, + { + "Type": "Y", + "Name": "Already vaccinated default text", + "Description": "Vaccinated within the current campaign", + "Priority": 3200, + "AttributeLevel": "TARGET", + "AttributeTarget": "FLU", + "AttributeName": "LAST_SUCCESSFUL_DATE", + "Operator": ">=", + "Comparator": "<>", + "CommsRouting": "LAST_VACCINATION_DATE" + }, + { + "Type": "Y", + "Name": "FutureBookingDate", + "Description": "Future booking date", + "Priority": 3300, + "AttributeLevel": "TARGET", + "AttributeTarget": "FLU", + "AttributeName": "BOOKED_APPOINTMENT_DATE", + "Operator": "D>=", + "Comparator": "0", + "CommsRouting": "FUTURE_APPOINTMENT_DATE" + } + ], + "ActionsMapper": { + "BOOK_NBS": { + "ExternalRoutingCode": "BookNBS", + "ActionDescription": "Eligible to book", + "ActionType": "InfoText", + "UrlLink": null, + "UrlLabel": "" + }, + "LAST_VACCINATION_DATE": { + "ExternalRoutingCode": "DateOfLastVaccination", + "ActionDescription": "[[TARGET.FLU.LAST_SUCCESSFUL_DATE:DATE(%Y-%m-%d)]]", + "ActionType": "DataValue", + "UrlLink": null, + "UrlLabel": "" + }, + "EARLIEST_NEXT_VACCINATION_DATE": { + "ExternalRoutingCode": "DateOfNextEarliestVaccination", + "ActionDescription": "[[TARGET.FLU.NEXT_DOSE_DUE:ADD_DAYS(29):DATE(%Y-%m-%d)]]", + "ActionType": "DataValue", + "UrlLink": null, + "UrlLabel": "" + }, + "ADDITIONAL_DOSE_REQUIRED": { + "ExternalRoutingCode": "AdditionalDoseRequired", + "ActionDescription": "Yes", + "ActionType": "DataValue", + "UrlLink": null, + "UrlLabel": "" + }, + "MAY_REQUIRE_ADDITIONAL_DOSE": { + "ExternalRoutingCode": "AdditionalDoseRequired", + "ActionDescription": "Maybe", + "ActionType": "DataValue", + "UrlLink": null, + "UrlLabel": "" + }, + "FUTURE_APPOINTMENT_DATE": { + "ExternalRoutingCode": "FutureBookingDate", + "ActionDescription": "[[TARGET.FLU.BOOKED_APPOINTMENT_DATE:DATE(%Y-%m-%d)]]", + "ActionType": "DataValue", + "UrlLink": null, + "UrlLabel": "" + } + } + } + ] + } +} diff --git a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_A01.json b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_A01.json new file mode 100644 index 00000000..39d7e4c6 --- /dev/null +++ b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_A01.json @@ -0,0 +1,34 @@ +{ + "scenario_name": "FLU - NBS Integration - A01 - Actionable - Eligible, within single eligible cohort", + "request_headers": { + "NHSE-Product-ID": "P.XWA-VFF", + "nhsd-End-User-Organisation-ods": "elid_automation" + }, + "queryParams": { + "conditions": "flu" + }, + "config_filenames": [ + "NBS_Flu_Config_AutumnWinter2026_v0.2WIP.json" + ], + "data": [ + { + "NHS_NUMBER": "9999971501", + "ATTRIBUTE_TYPE": "COHORTS", + "COHORT_MEMBERSHIPS": [ + { + "COHORT_LABEL": "flu_65+_autumnwinter2026", + "DATE_JOINED": "20231020" + } + ] + }, + { + "NHS_NUMBER": "9999971501", + "ATTRIBUTE_TYPE": "PERSON", + "DATE_OF_BIRTH": "<>" + }, + { + "NHS_NUMBER": "9999971501", + "ATTRIBUTE_TYPE": "FLU" + } + ] +} diff --git a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_A02.json b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_A02.json new file mode 100644 index 00000000..4b7e3807 --- /dev/null +++ b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_A02.json @@ -0,0 +1,42 @@ +{ + "scenario_name": "FLU - NBS Integration - A02 - Actionable - Eligible, within multiple eligible cohorts", + "request_headers": { + "NHSE-Product-ID": "P.XWA-VFF", + "nhsd-End-User-Organisation-ods": "elid_automation" + }, + "queryParams": { + "conditions": "flu" + }, + "config_filenames": [ + "NBS_Flu_Config_AutumnWinter2026_v0.2WIP.json" + ], + "data": [ + { + "NHS_NUMBER": "9999971502", + "ATTRIBUTE_TYPE": "COHORTS", + "COHORT_MEMBERSHIPS": [ + { + "COHORT_LABEL": "flu_65+_autumnwinter2026", + "DATE_JOINED": "20231020" + }, + { + "COHORT_LABEL": "flu_immunosuppression", + "DATE_JOINED": "20231020" + }, + { + "COHORT_LABEL": "flu_diabetes", + "DATE_JOINED": "20231020" + } + ] + }, + { + "NHS_NUMBER": "9999971502", + "ATTRIBUTE_TYPE": "PERSON", + "DATE_OF_BIRTH": "<>" + }, + { + "NHS_NUMBER": "9999971502", + "ATTRIBUTE_TYPE": "FLU" + } + ] +} diff --git a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_A03.json b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_A03.json new file mode 100644 index 00000000..e8f2dc85 --- /dev/null +++ b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_A03.json @@ -0,0 +1,35 @@ +{ + "scenario_name": "FLU - NBS Integration - A03 - Actionable - Eligible, within care home residents eligible cohort", + "request_headers": { + "NHSE-Product-ID": "P.XWA-VFF", + "nhsd-End-User-Organisation-ods": "elid_automation" + }, + "queryParams": { + "conditions": "flu" + }, + "config_filenames": [ + "NBS_Flu_Config_AutumnWinter2026_v0.2WIP.json" + ], + "data": [ + { + "NHS_NUMBER": "9999971503", + "ATTRIBUTE_TYPE": "COHORTS", + "COHORT_MEMBERSHIPS": [ + { + "COHORT_LABEL": "care_home_residents_older_adults", + "DATE_JOINED": "20231020" + } + ] + }, + { + "NHS_NUMBER": "9999971503", + "ATTRIBUTE_TYPE": "PERSON", + "DATE_OF_BIRTH": "<>", + "CARE_HOME_FLAG": "Y" + }, + { + "NHS_NUMBER": "9999971503", + "ATTRIBUTE_TYPE": "FLU" + } + ] +} diff --git a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_A04.json b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_A04.json new file mode 100644 index 00000000..91dd1839 --- /dev/null +++ b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_A04.json @@ -0,0 +1,36 @@ +{ + "scenario_name": "FLU - NBS Integration - A04 - Actionable - Additional Dose Required", + "request_headers": { + "NHSE-Product-ID": "P.XWA-VFF", + "nhsd-End-User-Organisation-ods": "elid_automation" + }, + "queryParams": { + "conditions": "flu" + }, + "config_filenames": [ + "NBS_Flu_Config_AutumnWinter2026_v0.2WIP.json" + ], + "data": [ + { + "NHS_NUMBER": "9999971504", + "ATTRIBUTE_TYPE": "PERSON", + "DATE_OF_BIRTH": "<>" + }, + { + "NHS_NUMBER": "9999971504", + "ATTRIBUTE_TYPE": "COHORTS", + "COHORT_MEMBERSHIPS": [ + { + "COHORT_LABEL": "flu_immunosuppression", + "DATE_JOINED": "20240101" + } + ] + }, + { + "NHS_NUMBER": "9999971504", + "ATTRIBUTE_TYPE": "FLU", + "LAST_SUCCESSFUL_DATE": "<>", + "SUCCESSFUL_PROCEDURE_COUNT": "1" + } + ] +} diff --git a/data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_A01.json b/data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_A01.json new file mode 100644 index 00000000..0466cb80 --- /dev/null +++ b/data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_A01.json @@ -0,0 +1,30 @@ +{ + "meta": { + "lastUpdated": "2026-04-08T15:04:33.406407+00:00" + }, + "processedSuggestions": [ + { + "actions": [ + { + "actionCode": "BookNBS", + "actionType": "InfoText", + "description": "Eligible to book", + "urlLabel": "", + "urlLink": "" + } + ], + "condition": "FLU", + "eligibilityCohorts": [ + { + "cohortCode": "flu_age_65+", + "cohortStatus": "Actionable", + "cohortText": "are aged 65 or over (including those who will be 65 by 31 March 2027)" + } + ], + "status": "Actionable", + "statusText": "You should have the Flu vaccine", + "suitabilityRules": [] + } + ], + "responseId": "46b91622-5d24-4993-b18f-a9580eed27a5" +} diff --git a/data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_A02.json b/data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_A02.json new file mode 100644 index 00000000..90cb3012 --- /dev/null +++ b/data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_A02.json @@ -0,0 +1,35 @@ +{ + "meta": { + "lastUpdated": "2026-04-08T15:07:38.774217+00:00" + }, + "processedSuggestions": [ + { + "actions": [ + { + "actionCode": "BookNBS", + "actionType": "InfoText", + "description": "Eligible to book", + "urlLabel": "", + "urlLink": "" + } + ], + "condition": "FLU", + "eligibilityCohorts": [ + { + "cohortCode": "flu_age_65+", + "cohortStatus": "Actionable", + "cohortText": "are aged 65 or over (including those who will be 65 by 31 March 2027)" + }, + { + "cohortCode": "flu_clinical_risk", + "cohortStatus": "Actionable", + "cohortText": "have a weakened immune system because of a health condition or treatment" + } + ], + "status": "Actionable", + "statusText": "You should have the Flu vaccine", + "suitabilityRules": [] + } + ], + "responseId": "6c8e3952-fa15-4f06-93bc-3024321d3b90" +} diff --git a/data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_A03.json b/data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_A03.json new file mode 100644 index 00000000..50adc0ac --- /dev/null +++ b/data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_A03.json @@ -0,0 +1,30 @@ +{ + "meta": { + "lastUpdated": "2026-04-08T15:08:26.396160+00:00" + }, + "processedSuggestions": [ + { + "actions": [ + { + "actionCode": "BookNBS", + "actionType": "InfoText", + "description": "Eligible to book", + "urlLabel": "", + "urlLink": "" + } + ], + "condition": "FLU", + "eligibilityCohorts": [ + { + "cohortCode": "care_home_residents", + "cohortStatus": "Actionable", + "cohortText": "live in a care home for older adults" + } + ], + "status": "Actionable", + "statusText": "You should have the Flu vaccine", + "suitabilityRules": [] + } + ], + "responseId": "1a4b267e-2a91-4874-8390-06e3f1e5dc1d" +} diff --git a/data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_A04.json b/data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_A04.json new file mode 100644 index 00000000..72a9a160 --- /dev/null +++ b/data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_A04.json @@ -0,0 +1,37 @@ +{ + "meta": { + "lastUpdated": "2026-04-08T15:28:30.494332+00:00" + }, + "processedSuggestions": [ + { + "actions": [ + { + "actionCode": "BookNBS", + "actionType": "InfoText", + "description": "Eligible to book", + "urlLabel": "", + "urlLink": "" + }, + { + "actionCode": "AdditionalDoseRequired", + "actionType": "DataValue", + "description": "Yes", + "urlLabel": "", + "urlLink": "" + } + ], + "condition": "FLU", + "eligibilityCohorts": [ + { + "cohortCode": "flu_clinical_risk", + "cohortStatus": "Actionable", + "cohortText": "have a weakened immune system because of a health condition or treatment" + } + ], + "status": "Actionable", + "statusText": "You should have the Flu vaccine", + "suitabilityRules": [] + } + ], + "responseId": "20d8ca03-5fc6-4d4d-ba22-88d4dfc9940b" +} From dc876486b3c50e8c122715052fe6b178fa72b784 Mon Sep 17 00:00:00 2001 From: Adam Waller <176666249+adam-wallernhs1@users.noreply.github.com> Date: Thu, 9 Apr 2026 15:55:51 +0100 Subject: [PATCH 02/10] 2 more scenarios --- .../AUTO_FLU_NBS_INT_NA01.json | 36 +++++++++++++ .../AUTO_FLU_NBS_INT_NA02.json | 36 +++++++++++++ .../AUTO_FLU_NBS_INT_NA01.json | 36 +++++++++++++ .../AUTO_FLU_NBS_INT_NA02.json | 50 +++++++++++++++++++ 4 files changed, 158 insertions(+) create mode 100644 data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA01.json create mode 100644 data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA02.json create mode 100644 data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_NA01.json create mode 100644 data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_NA02.json diff --git a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA01.json b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA01.json new file mode 100644 index 00000000..001077a0 --- /dev/null +++ b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA01.json @@ -0,0 +1,36 @@ +{ + "scenario_name": "FLU - NBS Integration - NA01 - Not Actionable - The individual has already been vaccinated within the current campaign", + "request_headers": { + "NHSE-Product-ID": "P.XWA-VFF", + "nhsd-End-User-Organisation-ods": "elid_automation" + }, + "queryParams": { + "conditions": "flu" + }, + "config_filenames": [ + "NBS_Flu_Config_AutumnWinter2026_v0.2WIP.json" + ], + "data": [ + { + "NHS_NUMBER": "9999971505", + "ATTRIBUTE_TYPE": "PERSON", + "DATE_OF_BIRTH": "<>" + }, + { + "NHS_NUMBER": "9999971505", + "ATTRIBUTE_TYPE": "COHORTS", + "COHORT_MEMBERSHIPS": [ + { + "COHORT_LABEL": "flu_immunosuppression", + "DATE_JOINED": "20240101" + } + ] + }, + { + "NHS_NUMBER": "9999971505", + "ATTRIBUTE_TYPE": "FLU", + "LAST_SUCCESSFUL_DATE": "<>", + "SUCCESSFUL_PROCEDURE_COUNT": "1" + } + ] +} diff --git a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA02.json b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA02.json new file mode 100644 index 00000000..65d4c3a4 --- /dev/null +++ b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA02.json @@ -0,0 +1,36 @@ +{ + "scenario_name": "FLU - NBS Integration - NA02 - Not Actionable - Too close to previous vaccination", + "request_headers": { + "NHSE-Product-ID": "P.XWA-VFF", + "nhsd-End-User-Organisation-ods": "elid_automation" + }, + "queryParams": { + "conditions": "flu" + }, + "config_filenames": [ + "NBS_Flu_Config_AutumnWinter2026_v0.2WIP.json" + ], + "data": [ + { + "NHS_NUMBER": "9999971506", + "ATTRIBUTE_TYPE": "PERSON", + "DATE_OF_BIRTH": "<>" + }, + { + "NHS_NUMBER": "9999971506", + "ATTRIBUTE_TYPE": "COHORTS", + "COHORT_MEMBERSHIPS": [ + { + "COHORT_LABEL": "flu_immunosuppression", + "DATE_JOINED": "20240101" + } + ] + }, + { + "NHS_NUMBER": "9999971506", + "ATTRIBUTE_TYPE": "FLU", + "LAST_SUCCESSFUL_DATE": "<>", + "SUCCESSFUL_PROCEDURE_COUNT": "1" + } + ] +} diff --git a/data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_NA01.json b/data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_NA01.json new file mode 100644 index 00000000..6fd958b1 --- /dev/null +++ b/data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_NA01.json @@ -0,0 +1,36 @@ +{ + "meta": { + "lastUpdated": "2026-04-09T14:34:32.617588+00:00" + }, + "processedSuggestions": [ + { + "actions": [ + { + "actionCode": "DateOfLastVaccination", + "actionType": "DataValue", + "description": "<>", + "urlLabel": "", + "urlLink": "" + } + ], + "condition": "FLU", + "eligibilityCohorts": [ + { + "cohortCode": "flu_clinical_risk", + "cohortStatus": "NotActionable", + "cohortText": "have a weakened immune system because of a health condition or treatment" + } + ], + "status": "NotActionable", + "statusText": "You should have the Flu vaccine", + "suitabilityRules": [ + { + "ruleCode": "AlreadyVaccinated", + "ruleText": "Vaccinated within the current campaign", + "ruleType": "S" + } + ] + } + ], + "responseId": "74bc758e-013e-4e4a-890c-08dfedeeead9" +} diff --git a/data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_NA02.json b/data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_NA02.json new file mode 100644 index 00000000..a2631ba3 --- /dev/null +++ b/data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_NA02.json @@ -0,0 +1,50 @@ +{ + "meta": { + "lastUpdated": "2026-04-09T14:45:16.739724+00:00" + }, + "processedSuggestions": [ + { + "actions": [ + { + "actionCode": "DateOfLastVaccination", + "actionType": "DataValue", + "description": "<>", + "urlLabel": "", + "urlLink": "" + }, + { + "actionCode": "DateOfNextEarliestVaccination", + "actionType": "DataValue", + "description": "<>", + "urlLabel": "", + "urlLink": "" + }, + { + "actionCode": "AdditionalDoseRequired", + "actionType": "DataValue", + "description": "Yes", + "urlLabel": "", + "urlLink": "" + } + ], + "condition": "FLU", + "eligibilityCohorts": [ + { + "cohortCode": "flu_clinical_risk", + "cohortStatus": "NotActionable", + "cohortText": "have a weakened immune system because of a health condition or treatment" + } + ], + "status": "NotActionable", + "statusText": "You should have the Flu vaccine", + "suitabilityRules": [ + { + "ruleCode": "TooClose", + "ruleText": "Vaccinated within the current campaign", + "ruleType": "S" + } + ] + } + ], + "responseId": "00b3b5b8-1b57-4e37-b497-27ff574f5928" +} From ab40ff001b1fa425cbd68bf9f088f16453dc34a3 Mon Sep 17 00:00:00 2001 From: Feyisayo Afolabi Date: Mon, 13 Apr 2026 09:07:20 +0100 Subject: [PATCH 03/10] Chore: [ELI-704] - Test data added --- .../AUTO_FLU_NBS_INT_NA03.json | 36 +++++++++++++ .../AUTO_FLU_NBS_INT_NA04.json | 36 +++++++++++++ .../AUTO_FLU_NBS_INT_NA05.json | 36 +++++++++++++ .../AUTO_FLU_NBS_INT_NA06.json | 34 +++++++++++++ .../AUTO_FLU_NBS_INT_NE01.json | 29 +++++++++++ .../AUTO_FLU_NBS_INT_NE02.json | 31 ++++++++++++ .../AUTO_FLU_NBS_INT_NA03.json | 36 +++++++++++++ .../AUTO_FLU_NBS_INT_NA04.json | 36 +++++++++++++ .../AUTO_FLU_NBS_INT_NA05.json | 36 +++++++++++++ .../AUTO_FLU_NBS_INT_NA06.json | 22 ++++++++ .../AUTO_FLU_NBS_INT_NE01.json | 42 ++++++++++++++++ .../AUTO_FLU_NBS_INT_NE02.json | 50 +++++++++++++++++++ 12 files changed, 424 insertions(+) create mode 100644 data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA03.json create mode 100644 data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA04.json create mode 100644 data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA05.json create mode 100644 data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA06.json create mode 100644 data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NE01.json create mode 100644 data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NE02.json create mode 100644 data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_NA03.json create mode 100644 data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_NA04.json create mode 100644 data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_NA05.json create mode 100644 data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_NA06.json create mode 100644 data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_NE01.json create mode 100644 data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_NE02.json diff --git a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA03.json b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA03.json new file mode 100644 index 00000000..b8e12a92 --- /dev/null +++ b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA03.json @@ -0,0 +1,36 @@ +{ + "scenario_name": "FLU - NBS Integration - NA03 - Already Vaccinated - Not in eligible cohort", + "request_headers": { + "NHSE-Product-ID": "P.XWA-VFF", + "nhsd-End-User-Organisation-ods": "elid_automation" + }, + "queryParams": { + "conditions": "flu" + }, + "config_filenames": [ + "NBS_Flu_Config_AutumnWinter2026_v0.2WIP.json" + ], + "data": [ + { + "NHS_NUMBER": "9999971507", + "ATTRIBUTE_TYPE": "COHORTS", + "COHORT_MEMBERSHIPS": [ + { + "COHORT_LABEL": "flu_65+_autumnwinter2026", + "DATE_JOINED": "20231020" + } + ] + }, + { + "NHS_NUMBER": "9999971507", + "ATTRIBUTE_TYPE": "PERSON", + "DATE_OF_BIRTH": "<>" + }, + { + "NHS_NUMBER": "9999971507", + "ATTRIBUTE_TYPE": "FLU", + "LAST_SUCCESSFUL_DATE": "<>", + "SUCCESSFUL_PROCEDURE_COUNT": "1" + } + ] +} diff --git a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA04.json b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA04.json new file mode 100644 index 00000000..6c2687e9 --- /dev/null +++ b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA04.json @@ -0,0 +1,36 @@ +{ + "scenario_name": "FLU - NBS Integration - NA04 - NotActionable - Future booking (NBS)", + "request_headers": { + "NHSE-Product-ID": "P.XWA-VFF", + "nhsd-End-User-Organisation-ods": "elid_automation" + }, + "queryParams": { + "conditions": "flu" + }, + "config_filenames": [ + "NBS_Flu_Config_AutumnWinter2026_v0.2WIP.json" + ], + "data": [ + { + "NHS_NUMBER": "9999971508", + "ATTRIBUTE_TYPE": "COHORTS", + "COHORT_MEMBERSHIPS": [ + { + "COHORT_LABEL": "flu_immunosuppression", + "DATE_JOINED": "20240101" + } + ] + }, + { + "NHS_NUMBER": "9999971508", + "ATTRIBUTE_TYPE": "PERSON", + "DATE_OF_BIRTH": "<>" + }, + { + "NHS_NUMBER": "9999971508", + "ATTRIBUTE_TYPE": "FLU", + "BOOKED_APPOINTMENT_DATE": "<>", + "BOOKED_APPOINTMENT_PROVIDER": "NBS" + } + ] +} diff --git a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA05.json b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA05.json new file mode 100644 index 00000000..81dce43a --- /dev/null +++ b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA05.json @@ -0,0 +1,36 @@ +{ + "scenario_name": "FLU - NBS Integration - NA05 - NotActionable - Future booking (local)", + "request_headers": { + "NHSE-Product-ID": "P.XWA-VFF", + "nhsd-End-User-Organisation-ods": "elid_automation" + }, + "queryParams": { + "conditions": "flu" + }, + "config_filenames": [ + "NBS_Flu_Config_AutumnWinter2026_v0.2WIP.json" + ], + "data": [ + { + "NHS_NUMBER": "9999971509", + "ATTRIBUTE_TYPE": "COHORTS", + "COHORT_MEMBERSHIPS": [ + { + "COHORT_LABEL": "flu_immunosuppression", + "DATE_JOINED": "20240101" + } + ] + }, + { + "NHS_NUMBER": "9999971509", + "ATTRIBUTE_TYPE": "PERSON", + "DATE_OF_BIRTH": "<>" + }, + { + "NHS_NUMBER": "9999971509", + "ATTRIBUTE_TYPE": "FLU", + "BOOKED_APPOINTMENT_DATE": "<>", + "BOOKED_APPOINTMENT_PROVIDER": "ACC" + } + ] +} diff --git a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA06.json b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA06.json new file mode 100644 index 00000000..8a1c6a6a --- /dev/null +++ b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA06.json @@ -0,0 +1,34 @@ +{ + "scenario_name": "FLU - NBS Integration - NA06 - NotActionable - School aged", + "request_headers": { + "NHSE-Product-ID": "P.XWA-VFF", + "nhsd-End-User-Organisation-ods": "elid_automation" + }, + "queryParams": { + "conditions": "flu" + }, + "config_filenames": [ + "NBS_Flu_Config_AutumnWinter2026_v0.2WIP.json" + ], + "data": [ + { + "NHS_NUMBER": "9999971510", + "ATTRIBUTE_TYPE": "COHORTS", + "COHORT_MEMBERSHIPS": [ + { + "COHORT_LABEL": "flu_4to16_autumnwinter2026", + "DATE_JOINED": "20240101" + } + ] + }, + { + "NHS_NUMBER": "9999971510", + "ATTRIBUTE_TYPE": "PERSON", + "DATE_OF_BIRTH": "<>" + }, + { + "NHS_NUMBER": "9999971510", + "ATTRIBUTE_TYPE": "FLU" + } + ] +} diff --git a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NE01.json b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NE01.json new file mode 100644 index 00000000..30f3dfe4 --- /dev/null +++ b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NE01.json @@ -0,0 +1,29 @@ +{ + "scenario_name": "FLU - NBS Integration - NE01 - Not Eligible - Not in an eligible cohort", + "request_headers": { + "NHSE-Product-ID": "P.XWA-VFF", + "nhsd-End-User-Organisation-ods": "elid_automation" + }, + "queryParams": { + "conditions": "flu" + }, + "config_filenames": [ + "NBS_Flu_Config_AutumnWinter2026_v0.2WIP.json" + ], + "data": [ + { + "NHS_NUMBER": "9999971512", + "ATTRIBUTE_TYPE": "COHORTS", + "COHORT_MEMBERSHIPS": [] + }, + { + "NHS_NUMBER": "9999971512", + "ATTRIBUTE_TYPE": "PERSON", + "DATE_OF_BIRTH": "<>" + }, + { + "NHS_NUMBER": "9999971512", + "ATTRIBUTE_TYPE": "FLU" + } + ] +} diff --git a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NE02.json b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NE02.json new file mode 100644 index 00000000..bc93cae8 --- /dev/null +++ b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NE02.json @@ -0,0 +1,31 @@ +{ + "scenario_name": "FLU - NBS Integration - NE02 - Not Eligible - May be eligible for an additional dose", + "request_headers": { + "NHSE-Product-ID": "P.XWA-VFF", + "nhsd-End-User-Organisation-ods": "elid_automation" + }, + "queryParams": { + "conditions": "flu" + }, + "config_filenames": [ + "NBS_Flu_Config_AutumnWinter2026_v0.2WIP.json" + ], + "data": [ + { + "NHS_NUMBER": "9999971513", + "ATTRIBUTE_TYPE": "COHORTS", + "COHORT_MEMBERSHIPS": [] + }, + { + "NHS_NUMBER": "9999971513", + "ATTRIBUTE_TYPE": "PERSON", + "DATE_OF_BIRTH": "<>" + }, + { + "NHS_NUMBER": "9999971513", + "ATTRIBUTE_TYPE": "FLU", + "LAST_SUCCESSFUL_DATE": "<>", + "SUCCESSFUL_PROCEDURE_COUNT": "1" + } + ] +} diff --git a/data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_NA03.json b/data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_NA03.json new file mode 100644 index 00000000..742b2162 --- /dev/null +++ b/data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_NA03.json @@ -0,0 +1,36 @@ +{ + "meta": { + "lastUpdated": "2026-04-10T14:40:32.374213+00:00" + }, + "processedSuggestions": [ + { + "actions": [ + { + "actionCode": "DateOfLastVaccination", + "actionType": "DataValue", + "description": "<>", + "urlLabel": "", + "urlLink": "" + } + ], + "condition": "FLU", + "eligibilityCohorts": [ + { + "cohortCode": "flu_age_65+", + "cohortStatus": "NotActionable", + "cohortText": "are aged 65 or over (including those who will be 65 by 31 March 2027)" + } + ], + "status": "NotActionable", + "statusText": "You should have the Flu vaccine", + "suitabilityRules": [ + { + "ruleCode": "AlreadyVaccinated", + "ruleText": "Vaccinated within the current campaign", + "ruleType": "S" + } + ] + } + ], + "responseId": "d34755dd-98f5-42ec-89ae-61a79f73e9c1" +} diff --git a/data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_NA04.json b/data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_NA04.json new file mode 100644 index 00000000..c57f09d1 --- /dev/null +++ b/data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_NA04.json @@ -0,0 +1,36 @@ +{ + "meta": { + "lastUpdated": "2026-04-12T20:29:05.109710+00:00" + }, + "processedSuggestions": [ + { + "actions": [ + { + "actionCode": "FutureBookingDate", + "actionType": "DataValue", + "description": "2026-04-26", + "urlLabel": "", + "urlLink": "" + } + ], + "condition": "FLU", + "eligibilityCohorts": [ + { + "cohortCode": "flu_clinical_risk", + "cohortStatus": "NotActionable", + "cohortText": "have a weakened immune system because of a health condition or treatment" + } + ], + "status": "NotActionable", + "statusText": "You should have the Flu vaccine", + "suitabilityRules": [ + { + "ruleCode": "FutureBookingNBS", + "ruleText": "Future booking", + "ruleType": "S" + } + ] + } + ], + "responseId": "7ace823d-5617-4b62-b894-653018fee568" +} diff --git a/data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_NA05.json b/data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_NA05.json new file mode 100644 index 00000000..1401ca81 --- /dev/null +++ b/data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_NA05.json @@ -0,0 +1,36 @@ +{ + "meta": { + "lastUpdated": "2026-04-12T20:39:20.855013+00:00" + }, + "processedSuggestions": [ + { + "actions": [ + { + "actionCode": "FutureBookingDate", + "actionType": "DataValue", + "description": "<>", + "urlLabel": "", + "urlLink": "" + } + ], + "condition": "FLU", + "eligibilityCohorts": [ + { + "cohortCode": "flu_clinical_risk", + "cohortStatus": "NotActionable", + "cohortText": "have a weakened immune system because of a health condition or treatment" + } + ], + "status": "NotActionable", + "statusText": "You should have the Flu vaccine", + "suitabilityRules": [ + { + "ruleCode": "FutureBookingLocal", + "ruleText": "Local future booking", + "ruleType": "S" + } + ] + } + ], + "responseId": "3c6b41c8-09c8-44b3-bb54-e8d1a8cedc75" +} diff --git a/data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_NA06.json b/data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_NA06.json new file mode 100644 index 00000000..4d48e1ba --- /dev/null +++ b/data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_NA06.json @@ -0,0 +1,22 @@ +{ + "meta": { + "lastUpdated": "2026-04-12T20:43:39.364882+00:00" + }, + "processedSuggestions": [ + { + "actions": [], + "condition": "FLU", + "eligibilityCohorts": [ + { + "cohortCode": "flu_school_age", + "cohortStatus": "NotActionable", + "cohortText": "are of school age (Reception to Year 11)" + } + ], + "status": "NotActionable", + "statusText": "You should have the Flu vaccine", + "suitabilityRules": [] + } + ], + "responseId": "e71fa8e5-19aa-47b1-89eb-4ca641a91fe6" +} diff --git a/data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_NE01.json b/data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_NE01.json new file mode 100644 index 00000000..c54dfc3c --- /dev/null +++ b/data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_NE01.json @@ -0,0 +1,42 @@ +{ + "meta": { + "lastUpdated": "2026-04-09T14:45:16.739724+00:00" + }, + "processedSuggestions": [ + { + "actions": [], + "condition": "FLU", + "eligibilityCohorts": [ + { + "cohortCode": "flu_age_65+", + "cohortStatus": "NotEligible", + "cohortText": "are not aged 65 or over (including those who will be 65 by 31 March 2027)" + }, + { + "cohortCode": "flu_age_2to3", + "cohortStatus": "NotEligible", + "cohortText": "are not aged 2 or 3 years (born between 1 September 2022 and 31 August 2024)" + }, + { + "cohortCode": "flu_school_age", + "cohortStatus": "NotEligible", + "cohortText": "are not of school age (Reception to Year 11)" + }, + { + "cohortCode": "flu_clinical_risk", + "cohortStatus": "NotEligible", + "cohortText": "do not have a weakened immune system because of a health condition or treatment" + }, + { + "cohortCode": "care_home_residents", + "cohortStatus": "NotEligible", + "cohortText": "do not live in a care home for older adults" + } + ], + "status": "NotEligible", + "statusText": "We do not believe you can have it", + "suitabilityRules": [] + } + ], + "responseId": "00b3b5b8-1b57-4e37-b497-27ff574f5933" +} diff --git a/data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_NE02.json b/data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_NE02.json new file mode 100644 index 00000000..71491539 --- /dev/null +++ b/data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_NE02.json @@ -0,0 +1,50 @@ +{ + "meta": { + "lastUpdated": "2026-04-09T14:45:16.739724+00:00" + }, + "processedSuggestions": [ + { + "actions": [ + { + "actionCode": "AdditionalDoseRequired", + "actionType": "DataValue", + "description": "Maybe", + "urlLabel": "", + "urlLink": "" + } + ], + "condition": "FLU", + "eligibilityCohorts": [ + { + "cohortCode": "flu_age_65+", + "cohortStatus": "NotEligible", + "cohortText": "are not aged 65 or over (including those who will be 65 by 31 March 2027)" + }, + { + "cohortCode": "flu_age_2to3", + "cohortStatus": "NotEligible", + "cohortText": "are not aged 2 or 3 years (born between 1 September 2022 and 31 August 2024)" + }, + { + "cohortCode": "flu_school_age", + "cohortStatus": "NotEligible", + "cohortText": "are not of school age (Reception to Year 11)" + }, + { + "cohortCode": "flu_clinical_risk", + "cohortStatus": "NotEligible", + "cohortText": "do not have a weakened immune system because of a health condition or treatment" + }, + { + "cohortCode": "care_home_residents", + "cohortStatus": "NotEligible", + "cohortText": "do not live in a care home for older adults" + } + ], + "status": "NotEligible", + "statusText": "We do not believe you can have it", + "suitabilityRules": [] + } + ], + "responseId": "00b3b5b8-1b57-4e37-b497-27ff574f5934" +} From 21c0f19c7a4bd49cc9aca686311b69a2f089a9cc Mon Sep 17 00:00:00 2001 From: Feyisayo Afolabi Date: Mon, 13 Apr 2026 09:49:35 +0100 Subject: [PATCH 04/10] Chore: [ELI-715] - Test data added for Flu --- .../inProgressTestData/AUTO_FLU_NBS_INT_NA03.json | 7 +------ .../inProgressTestData/AUTO_FLU_NBS_INT_NA04.json | 2 +- .../inProgressTestData/AUTO_FLU_NBS_INT_NE01.json | 8 +++++++- .../inProgressTestData/AUTO_FLU_NBS_INT_NE02.json | 2 +- .../inProgressTestResponses/AUTO_FLU_NBS_INT_NA03.json | 8 +------- .../inProgressTestResponses/AUTO_FLU_NBS_INT_NA04.json | 2 +- 6 files changed, 12 insertions(+), 17 deletions(-) diff --git a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA03.json b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA03.json index b8e12a92..b42f1ea6 100644 --- a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA03.json +++ b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA03.json @@ -14,12 +14,7 @@ { "NHS_NUMBER": "9999971507", "ATTRIBUTE_TYPE": "COHORTS", - "COHORT_MEMBERSHIPS": [ - { - "COHORT_LABEL": "flu_65+_autumnwinter2026", - "DATE_JOINED": "20231020" - } - ] + "COHORT_MEMBERSHIPS": [] }, { "NHS_NUMBER": "9999971507", diff --git a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA04.json b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA04.json index 6c2687e9..b2bbf2ae 100644 --- a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA04.json +++ b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA04.json @@ -30,7 +30,7 @@ "NHS_NUMBER": "9999971508", "ATTRIBUTE_TYPE": "FLU", "BOOKED_APPOINTMENT_DATE": "<>", - "BOOKED_APPOINTMENT_PROVIDER": "NBS" + "BOOKED_APPOINTMENT_PROVIDER": "MYA" } ] } diff --git a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NE01.json b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NE01.json index 30f3dfe4..75d93e32 100644 --- a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NE01.json +++ b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NE01.json @@ -14,7 +14,13 @@ { "NHS_NUMBER": "9999971512", "ATTRIBUTE_TYPE": "COHORTS", - "COHORT_MEMBERSHIPS": [] + "COHORT_MEMBERSHIPS": [ + { + "cohortCode": "flu_school_age_10to12", + "cohortStatus": "NotActionable", + "cohortText": "are of school age (Reception to Year 11)" + } + ] }, { "NHS_NUMBER": "9999971512", diff --git a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NE02.json b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NE02.json index bc93cae8..40e732c5 100644 --- a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NE02.json +++ b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NE02.json @@ -24,7 +24,7 @@ { "NHS_NUMBER": "9999971513", "ATTRIBUTE_TYPE": "FLU", - "LAST_SUCCESSFUL_DATE": "<>", + "LAST_SUCCESSFUL_DATE": "<>", "SUCCESSFUL_PROCEDURE_COUNT": "1" } ] diff --git a/data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_NA03.json b/data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_NA03.json index 742b2162..526f5aa6 100644 --- a/data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_NA03.json +++ b/data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_NA03.json @@ -14,13 +14,7 @@ } ], "condition": "FLU", - "eligibilityCohorts": [ - { - "cohortCode": "flu_age_65+", - "cohortStatus": "NotActionable", - "cohortText": "are aged 65 or over (including those who will be 65 by 31 March 2027)" - } - ], + "eligibilityCohorts": [], "status": "NotActionable", "statusText": "You should have the Flu vaccine", "suitabilityRules": [ diff --git a/data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_NA04.json b/data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_NA04.json index c57f09d1..f7ad0ecb 100644 --- a/data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_NA04.json +++ b/data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_NA04.json @@ -8,7 +8,7 @@ { "actionCode": "FutureBookingDate", "actionType": "DataValue", - "description": "2026-04-26", + "description": "<>", "urlLabel": "", "urlLink": "" } From f74ac363287823a8a6ed2507a027f9d115091787 Mon Sep 17 00:00:00 2001 From: Feyisayo Afolabi Date: Mon, 13 Apr 2026 15:22:42 +0100 Subject: [PATCH 05/10] Chore: [ELI-715] - Test data added for Flu campaign --- ...fig_AutumnWinter2026_v0.2WIP_InActive.json | 557 ++++++++++++++++++ .../AUTO_FLU_NBS_INT_NA07.json | 34 ++ .../AUTO_FLU_NBS_INT_NA07.json | 7 + 3 files changed, 598 insertions(+) create mode 100644 data/configs/inProgressTestConfigs/NBS_Flu_Config_AutumnWinter2026_v0.2WIP_InActive.json create mode 100644 data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA07.json create mode 100644 data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_NA07.json diff --git a/data/configs/inProgressTestConfigs/NBS_Flu_Config_AutumnWinter2026_v0.2WIP_InActive.json b/data/configs/inProgressTestConfigs/NBS_Flu_Config_AutumnWinter2026_v0.2WIP_InActive.json new file mode 100644 index 00000000..d3dbc6fa --- /dev/null +++ b/data/configs/inProgressTestConfigs/NBS_Flu_Config_AutumnWinter2026_v0.2WIP_InActive.json @@ -0,0 +1,557 @@ +{ + "CampaignConfig": { + "ID": "b21cff69-a2c7-4e78-a514-ce067c09df0c", + "Version": 1, + "Name": "EliD NBS Flu campaign config Release 1", + "Type": "V", + "Target": "FLU", + "Manager": [ + "example@nhs.net" + ], + "Approver": [ + "example@nhs.net" + ], + "Reviewer": [ + "example@nhs.net" + ], + "IterationFrequency": "X", + "IterationType": "O", + "IterationTime": "07:00:00", + "StartDate": "<>", + "EndDate": "20270331", + "ApprovalMinimum": 0, + "ApprovalMaximum": 0, + "DefaultCommsRouting": "BOOK_NBS", + "Iterations": [ + { + "ID": "2834b74a-4170-4594-9d2c-9e6d9af41d20", + "DefaultCommsRouting": "BOOK_NBS", + "DefaultNotActionableRouting": "", + "DefaultNotEligibleRouting": "", + "Version": 1, + "Name": "EliD NBS Flu campaign config Release 1", + "IterationDate": "<>", + "IterationNumber": 1, + "CommsType": "I", + "ApprovalMinimum": 0, + "ApprovalMaximum": 0, + "Type": "O", + "StatusText": { + "NotEligible": "We do not believe you can have it", + "NotActionable": "You should have the Flu vaccine", + "Actionable": "You should have the Flu vaccine" + }, + "IterationCohorts": [ + { + "CohortLabel": "flu_65+_autumnwinter2026", + "CohortGroup": "flu_age_65+", + "PositiveDescription": "are aged 65 or over (including those who will be 65 by 31 March 2027)", + "NegativeDescription": "are not aged 65 or over (including those who will be 65 by 31 March 2027)", + "Priority": 10, + "Virtual": "N" + }, + { + "CohortLabel": "flu_2to3_autumnwinter2026", + "CohortGroup": "flu_age_2to3", + "PositiveDescription": "are aged 2 or 3 years (born between 1 September 2022 and 31 August 2024)", + "NegativeDescription": "are not aged 2 or 3 years (born between 1 September 2022 and 31 August 2024)", + "Priority": 15, + "Virtual": "N" + }, + { + "CohortLabel": "flu_4to16_autumnwinter2026", + "CohortGroup": "flu_school_age", + "PositiveDescription": "are of school age (Reception to Year 11)", + "NegativeDescription": "are not of school age (Reception to Year 11)", + "Priority": 20, + "Virtual": "N" + }, + { + "CohortLabel": "flu_immunosuppression", + "CohortGroup": "flu_clinical_risk", + "PositiveDescription": "have a weakened immune system because of a health condition or treatment", + "NegativeDescription": "do not have a weakened immune system because of a health condition or treatment", + "Priority": 25, + "Virtual": "N" + }, + { + "CohortLabel": "flu_diabetes", + "CohortGroup": "flu_clinical_risk", + "PositiveDescription": "have a weakened immune system because of a health condition or treatment", + "NegativeDescription": "do not have a weakened immune system because of a health condition or treatment", + "Priority": 30, + "Virtual": "N" + }, + { + "CohortLabel": "flu_chronic_heart_disease", + "CohortGroup": "flu_clinical_risk", + "PositiveDescription": "have a weakened immune system because of a health condition or treatment", + "NegativeDescription": "do not have a weakened immune system because of a health condition or treatment", + "Priority": 35, + "Virtual": "N" + }, + { + "CohortLabel": "flu_chronic_kidney_disease", + "CohortGroup": "flu_clinical_risk", + "PositiveDescription": "have a weakened immune system because of a health condition or treatment", + "NegativeDescription": "do not have a weakened immune system because of a health condition or treatment", + "Priority": 40, + "Virtual": "N" + }, + { + "CohortLabel": "flu_chronic_liver_disease", + "CohortGroup": "flu_clinical_risk", + "PositiveDescription": "have a weakened immune system because of a health condition or treatment", + "NegativeDescription": "do not have a weakened immune system because of a health condition or treatment", + "Priority": 45, + "Virtual": "N" + }, + { + "CohortLabel": "flu_chronic_neurological_disease", + "CohortGroup": "flu_clinical_risk", + "PositiveDescription": "have a weakened immune system because of a health condition or treatment", + "NegativeDescription": "do not have a weakened immune system because of a health condition or treatment", + "Priority": 50, + "Virtual": "N" + }, + { + "CohortLabel": "flu_chronic_respiratory_disease", + "CohortGroup": "flu_clinical_risk", + "PositiveDescription": "have a weakened immune system because of a health condition or treatment", + "NegativeDescription": "do not have a weakened immune system because of a health condition or treatment", + "Priority": 55, + "Virtual": "N" + }, + { + "CohortLabel": "flu_coded_eligibility", + "CohortGroup": "flu_clinical_risk", + "PositiveDescription": "have a weakened immune system because of a health condition or treatment", + "NegativeDescription": "do not have a weakened immune system because of a health condition or treatment", + "Priority": 60, + "Virtual": "N" + }, + { + "CohortLabel": "flu_morbid_obesity", + "CohortGroup": "flu_clinical_risk", + "PositiveDescription": "have a weakened immune system because of a health condition or treatment", + "NegativeDescription": "do not have a weakened immune system because of a health condition or treatment", + "Priority": 65, + "Virtual": "N" + }, + { + "CohortLabel": "care_home_residents_older_adults", + "CohortGroup": "care_home_residents", + "PositiveDescription": "live in a care home for older adults", + "NegativeDescription": "do not live in a care home for older adults", + "Priority": 70, + "Virtual": "N" + }, + { + "CohortLabel": "elid_all_people", + "CohortGroup": "magic_cohort", + "PositiveDescription": "", + "NegativeDescription": "", + "Priority": 90, + "Virtual": "Y" + } + ], + "IterationRules": [ + { + "Type": "F", + "Name": "Remove from magic cohort unless already vaccinated or have future booking", + "Description": "Remove anyone NOT already vaccinated within the current campaign and do not have a future booking from the magic cohort", + "Operator": "<", + "Comparator": "<>[[NVL:18000101]]", + "AttributeTarget": "FLU", + "AttributeLevel": "TARGET", + "AttributeName": "LAST_SUCCESSFUL_DATE", + "CohortLabel": "elid_all_people", + "Priority": 100 + }, + { + "Type": "F", + "Name": "Remove from magic cohort unless already vaccinated or have future booking", + "Description": "Remove anyone without a future booking from magic cohort", + "Operator": "D<", + "Comparator": "0[[NVL:18000101]]", + "AttributeTarget": "FLU", + "AttributeLevel": "TARGET", + "AttributeName": "BOOKED_APPOINTMENT_DATE", + "CohortLabel": "elid_all_people", + "Priority": 100 + }, + { + "Type": "F", + "Name": "Remove under 65 Years at end of campaign", + "Description": "Ensure anyone who has a PDS date of birth which determines their age to be less than 65 years at the end of campaign is filtered out.", + "Priority": 120, + "AttributeLevel": "PERSON", + "AttributeName": "DATE_OF_BIRTH", + "Operator": ">=", + "Comparator": "19620401", + "CohortLabel": "flu_65+_autumnwinter2026" + }, + { + "Type": "S", + "Name": "AlreadyVaccinated", + "Description": "Vaccinated within the current campaign", + "Priority": 500, + "AttributeLevel": "TARGET", + "AttributeTarget": "FLU", + "AttributeName": "LAST_SUCCESSFUL_DATE", + "Operator": ">=", + "Comparator": "<>", + "RuleStop": "Y" + }, + { + "Type": "S", + "Name": "AlreadyVaccinated", + "Description": "Aged 9 years or over", + "Priority": 500, + "AttributeLevel": "PERSON", + "AttributeName": "DATE_OF_BIRTH", + "Operator": "Y<=", + "Comparator": "-9", + "RuleStop": "Y" + }, + { + "Type": "S", + "Name": "TooClose", + "Description": "Vaccinated within the current campaign", + "Priority": 520, + "AttributeLevel": "TARGET", + "AttributeTarget": "FLU", + "AttributeName": "LAST_SUCCESSFUL_DATE", + "Operator": ">=", + "Comparator": "<>", + "RuleStop": "Y" + }, + { + "Type": "S", + "Name": "TooClose", + "Description": "Less that 4 weeks since last vaccination", + "Priority": 520, + "AttributeLevel": "TARGET", + "AttributeTarget": "FLU", + "AttributeName": "LAST_SUCCESSFUL_DATE", + "Operator": "D>=", + "Comparator": "-28", + "RuleStop": "Y" + }, + { + "Type": "S", + "Name": "TooClose", + "Description": "Member of the immunosuppressed eligible cohort", + "Priority": 520, + "AttributeLevel": "COHORT", + "AttributeName": "COHORT_LABEL", + "Operator": "MemberOf", + "Comparator": "flu_immunosuppression", + "RuleStop": "Y" + }, + { + "Type": "S", + "Name": "TooClose", + "Description": "Have had only 1 previous vaccination including previous campaigns", + "Priority": 520, + "AttributeLevel": "TARGET", + "AttributeTarget": "FLU", + "AttributeName": "SUCCESSFUL_PROCEDURE_COUNT", + "Operator": "=", + "Comparator": "1", + "RuleStop": "Y" + }, + { + "Type": "S", + "Name": "AlreadyVaccinatedNoAdditionalDose", + "Description": "Vaccinated within the current campaign", + "Priority": 540, + "AttributeLevel": "TARGET", + "AttributeTarget": "FLU", + "AttributeName": "LAST_SUCCESSFUL_DATE", + "Operator": ">=", + "Comparator": "<>", + "RuleStop": "Y" + }, + { + "Type": "S", + "Name": "AlreadyVaccinatedNoAdditionalDose", + "Description": "Have had two or more vaccinations including previous campaigns", + "Priority": 540, + "AttributeLevel": "TARGET", + "AttributeTarget": "FLU", + "AttributeName": "SUCCESSFUL_PROCEDURE_COUNT", + "Operator": ">=", + "Comparator": "2", + "RuleStop": "Y" + }, + { + "Type": "S", + "Name": "AlreadyVaccinated", + "Description": "Under 9 years old", + "Priority": 540, + "AttributeLevel": "PERSON", + "AttributeName": "DATE_OF_BIRTH", + "Operator": "Y>", + "Comparator": "-9", + "RuleStop": "Y" + }, + { + "Type": "S", + "Name": "SchoolAge", + "Description": "", + "Priority": 560, + "AttributeLevel": "COHORT", + "AttributeName": "COHORT_LABEL", + "Operator": "MemberOf", + "Comparator": "flu_4to16_autumnwinter2026", + "RuleStop": "Y" + }, + { + "Type": "S", + "Name": "FutureBookingNBS", + "Description": "Future booking", + "Priority": 700, + "Operator": "D>=", + "Comparator": "0", + "AttributeTarget": "FLU", + "AttributeLevel": "TARGET", + "AttributeName": "BOOKED_APPOINTMENT_DATE", + "RuleStop": "Y" + }, + { + "Type": "S", + "Name": "FutureBookingNBS", + "Description": "Booking Provider is MYA or NBS", + "Priority": 700, + "Operator": "in", + "Comparator": "NBS,MYA", + "AttributeTarget": "FLU", + "AttributeLevel": "TARGET", + "AttributeName": "BOOKED_APPOINTMENT_PROVIDER", + "RuleStop": "Y" + }, + { + "Type": "S", + "Name": "FutureBookingLocal", + "Description": "Local future booking", + "Priority": 750, + "Operator": "D>=", + "Comparator": "0", + "AttributeTarget": "FLU", + "AttributeLevel": "TARGET", + "AttributeName": "BOOKED_APPOINTMENT_DATE", + "RuleStop": "Y" + }, + { + "Type": "R", + "Name": "AdditionalDoseRequired", + "Description": "Vaccinated within the current campaign", + "Priority": 1000, + "AttributeLevel": "TARGET", + "AttributeTarget": "FLU", + "AttributeName": "LAST_SUCCESSFUL_DATE", + "Operator": ">=", + "Comparator": "<>", + "CommsRouting": "BOOK_NBS|ADDITIONAL_DOSE_REQUIRED" + }, + { + "Type": "R", + "Name": "AdditionalDoseRequired", + "Description": "Under 9 years old", + "Priority": 1000, + "AttributeLevel": "PERSON", + "AttributeName": "DATE_OF_BIRTH", + "Operator": "Y>", + "Comparator": "-9", + "CommsRouting": "BOOK_NBS|ADDITIONAL_DOSE_REQUIRED" + }, + { + "Type": "R", + "Name": "AdditionalDoseRequired", + "Description": "Member of the immunosuppressed eligible cohort", + "Priority": 1000, + "AttributeLevel": "COHORT", + "AttributeName": "COHORT_LABEL", + "Operator": "MemberOf", + "Comparator": "flu_immunosuppression", + "CommsRouting": "BOOK_NBS|ADDITIONAL_DOSE_REQUIRED" + }, + { + "Type": "R", + "Name": "AdditionalDoseRequired", + "Description": "Have had only 1 previous vaccination including previous campaigns", + "Priority": 1000, + "AttributeLevel": "TARGET", + "AttributeTarget": "FLU", + "AttributeName": "SUCCESSFUL_PROCEDURE_COUNT", + "Operator": "=", + "Comparator": "1", + "CommsRouting": "BOOK_NBS|ADDITIONAL_DOSE_REQUIRED" + }, + { + "Type": "X", + "Name": "MayRequireAdditionalDose", + "Description": "Under 9 years old", + "Priority": 3000, + "AttributeLevel": "PERSON", + "AttributeName": "DATE_OF_BIRTH", + "Operator": "Y<", + "Comparator": "-9", + "CommsRouting": "MAY_REQUIRE_ADDITIONAL_DOSE" + }, + { + "Type": "X", + "Name": "MayRequireAdditionalDose", + "Description": "Vaccinated within the current campaign", + "Priority": 3000, + "AttributeLevel": "TARGET", + "AttributeTarget": "FLU", + "AttributeName": "LAST_SUCCESSFUL_DATE", + "Operator": ">=", + "Comparator": "<>", + "CommsRouting": "MAY_REQUIRE_ADDITIONAL_DOSE" + }, + { + "Type": "X", + "Name": "MayRequireAdditionalDose", + "Description": "Have had less than 2 vaccinations including previous campaigns", + "Priority": 3000, + "AttributeLevel": "TARGET", + "AttributeTarget": "FLU", + "AttributeName": "SUCCESSFUL_PROCEDURE_COUNT", + "Operator": "<", + "Comparator": "2", + "CommsRouting": "MAY_REQUIRE_ADDITIONAL_DOSE" + }, + { + "Type": "Y", + "Name": "TooCloseForAdditionalDoseAction", + "Description": "Vaccinated within the current campaign", + "Priority": 3100, + "AttributeLevel": "TARGET", + "AttributeTarget": "FLU", + "AttributeName": "LAST_SUCCESSFUL_DATE", + "Operator": ">=", + "Comparator": "<>", + "CommsRouting": "LAST_VACCINATION_DATE|EARLIEST_NEXT_VACCINATION_DATE|ADDITIONAL_DOSE_REQUIRED" + }, + { + "Type": "Y", + "Name": "TooCloseForAdditionalDoseAction", + "Description": "Less that 4 weeks since last vaccination", + "Priority": 3100, + "AttributeLevel": "TARGET", + "AttributeTarget": "FLU", + "AttributeName": "LAST_SUCCESSFUL_DATE", + "Operator": "D>=", + "Comparator": "-28", + "CommsRouting": "LAST_VACCINATION_DATE|EARLIEST_NEXT_VACCINATION_DATE|ADDITIONAL_DOSE_REQUIRED" + }, + { + "Type": "Y", + "Name": "TooCloseForAdditionalDoseAction", + "Description": "Under 9 years old", + "Priority": 3100, + "AttributeLevel": "PERSON", + "AttributeName": "DATE_OF_BIRTH", + "Operator": "Y>", + "Comparator": "-9", + "CommsRouting": "LAST_VACCINATION_DATE|EARLIEST_NEXT_VACCINATION_DATE|ADDITIONAL_DOSE_REQUIRED" + }, + { + "Type": "Y", + "Name": "TooCloseForAdditionalDoseAction", + "Description": "Member of the immunosuppressed eligible cohort", + "Priority": 3100, + "AttributeLevel": "COHORT", + "AttributeName": "COHORT_LABEL", + "Operator": "MemberOf", + "Comparator": "flu_immunosuppression", + "CommsRouting": "LAST_VACCINATION_DATE|EARLIEST_NEXT_VACCINATION_DATE|ADDITIONAL_DOSE_REQUIRED" + }, + { + "Type": "Y", + "Name": "TooCloseForAdditionalDoseAction", + "Description": "Under 9 years old", + "Priority": 3100, + "AttributeLevel": "TARGET", + "AttributeTarget": "FLU", + "AttributeName": "SUCCESSFUL_PROCEDURE_COUNT", + "Operator": "<", + "Comparator": "2", + "CommsRouting": "LAST_VACCINATION_DATE|EARLIEST_NEXT_VACCINATION_DATE|ADDITIONAL_DOSE_REQUIRED" + }, + { + "Type": "Y", + "Name": "Already vaccinated default text", + "Description": "Vaccinated within the current campaign", + "Priority": 3200, + "AttributeLevel": "TARGET", + "AttributeTarget": "FLU", + "AttributeName": "LAST_SUCCESSFUL_DATE", + "Operator": ">=", + "Comparator": "<>", + "CommsRouting": "LAST_VACCINATION_DATE" + }, + { + "Type": "Y", + "Name": "FutureBookingDate", + "Description": "Future booking date", + "Priority": 3300, + "AttributeLevel": "TARGET", + "AttributeTarget": "FLU", + "AttributeName": "BOOKED_APPOINTMENT_DATE", + "Operator": "D>=", + "Comparator": "0", + "CommsRouting": "FUTURE_APPOINTMENT_DATE" + } + ], + "ActionsMapper": { + "BOOK_NBS": { + "ExternalRoutingCode": "BookNBS", + "ActionDescription": "Eligible to book", + "ActionType": "InfoText", + "UrlLink": null, + "UrlLabel": "" + }, + "LAST_VACCINATION_DATE": { + "ExternalRoutingCode": "DateOfLastVaccination", + "ActionDescription": "[[TARGET.FLU.LAST_SUCCESSFUL_DATE:DATE(%Y-%m-%d)]]", + "ActionType": "DataValue", + "UrlLink": null, + "UrlLabel": "" + }, + "EARLIEST_NEXT_VACCINATION_DATE": { + "ExternalRoutingCode": "DateOfNextEarliestVaccination", + "ActionDescription": "[[TARGET.FLU.NEXT_DOSE_DUE:ADD_DAYS(29):DATE(%Y-%m-%d)]]", + "ActionType": "DataValue", + "UrlLink": null, + "UrlLabel": "" + }, + "ADDITIONAL_DOSE_REQUIRED": { + "ExternalRoutingCode": "AdditionalDoseRequired", + "ActionDescription": "Yes", + "ActionType": "DataValue", + "UrlLink": null, + "UrlLabel": "" + }, + "MAY_REQUIRE_ADDITIONAL_DOSE": { + "ExternalRoutingCode": "AdditionalDoseRequired", + "ActionDescription": "Maybe", + "ActionType": "DataValue", + "UrlLink": null, + "UrlLabel": "" + }, + "FUTURE_APPOINTMENT_DATE": { + "ExternalRoutingCode": "FutureBookingDate", + "ActionDescription": "[[TARGET.FLU.BOOKED_APPOINTMENT_DATE:DATE(%Y-%m-%d)]]", + "ActionType": "DataValue", + "UrlLink": null, + "UrlLabel": "" + } + } + } + ] + } +} diff --git a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA07.json b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA07.json new file mode 100644 index 00000000..e7062607 --- /dev/null +++ b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA07.json @@ -0,0 +1,34 @@ +{ + "scenario_name": "FLU - NBS Integration - NA07 - No current campaign", + "request_headers": { + "NHSE-Product-ID": "P.XWA-VFF", + "nhsd-End-User-Organisation-ods": "elid_automation" + }, + "queryParams": { + "conditions": "flu" + }, + "config_filenames": [ + "NBS_Flu_Config_AutumnWinter2026_v0.2WIP_InActive.json" + ], + "data": [ + { + "NHS_NUMBER": "9999971511", + "ATTRIBUTE_TYPE": "COHORTS", + "COHORT_MEMBERSHIPS": [ + { + "COHORT_LABEL": "flu_immunosuppression", + "DATE_JOINED": "20240101" + } + ] + }, + { + "NHS_NUMBER": "9999971511", + "ATTRIBUTE_TYPE": "PERSON", + "DATE_OF_BIRTH": "<>" + }, + { + "NHS_NUMBER": "9999971511", + "ATTRIBUTE_TYPE": "FLU" + } + ] +} diff --git a/data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_NA07.json b/data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_NA07.json new file mode 100644 index 00000000..a88954a6 --- /dev/null +++ b/data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_NA07.json @@ -0,0 +1,7 @@ +{ + "meta": { + "lastUpdated": "2026-04-09T14:45:16.739724+00:00" + }, + "processedSuggestions": [], + "responseId": "00b3b5b8-1b57-4e37-b497-27ff574f5932" +} From bc5fff641dbf984c83b2fe58b3b9e4c357702bf0 Mon Sep 17 00:00:00 2001 From: Adam Waller <176666249+adam-wallernhs1@users.noreply.github.com> Date: Wed, 15 Apr 2026 09:40:24 +0100 Subject: [PATCH 06/10] new config file changes --- ...S_Flu_Config_AutumnWinter2026_v0.4WIP.json | 557 ++++++++++++++++++ ...fig_AutumnWinter2026_v0.4WIP_Inactive.json | 557 ++++++++++++++++++ .../AUTO_FLU_NBS_INT_A01.json | 2 +- .../AUTO_FLU_NBS_INT_A02.json | 2 +- .../AUTO_FLU_NBS_INT_A03.json | 2 +- .../AUTO_FLU_NBS_INT_A04.json | 2 +- .../AUTO_FLU_NBS_INT_NA01.json | 2 +- .../AUTO_FLU_NBS_INT_NA02.json | 2 +- .../AUTO_FLU_NBS_INT_NA03.json | 2 +- .../AUTO_FLU_NBS_INT_NA04.json | 2 +- .../AUTO_FLU_NBS_INT_NA05.json | 2 +- .../AUTO_FLU_NBS_INT_NA06.json | 2 +- .../AUTO_FLU_NBS_INT_NA07.json | 2 +- ...T_NE02.json => AUTO_FLU_NBS_INT_NA08.json} | 12 +- .../AUTO_FLU_NBS_INT_NE01.json | 8 +- .../AUTO_FLU_NBS_INT_NA01.json | 2 +- .../AUTO_FLU_NBS_INT_NA02.json | 2 +- .../AUTO_FLU_NBS_INT_NA03.json | 2 +- .../AUTO_FLU_NBS_INT_NA04.json | 2 +- .../AUTO_FLU_NBS_INT_NA05.json | 2 +- .../AUTO_FLU_NBS_INT_NA06.json | 5 +- 21 files changed, 1143 insertions(+), 28 deletions(-) create mode 100644 data/configs/inProgressTestConfigs/NBS_Flu_Config_AutumnWinter2026_v0.4WIP.json create mode 100644 data/configs/inProgressTestConfigs/NBS_Flu_Config_AutumnWinter2026_v0.4WIP_Inactive.json rename data/dynamoDB/inProgressTestData/{AUTO_FLU_NBS_INT_NE02.json => AUTO_FLU_NBS_INT_NA08.json} (62%) diff --git a/data/configs/inProgressTestConfigs/NBS_Flu_Config_AutumnWinter2026_v0.4WIP.json b/data/configs/inProgressTestConfigs/NBS_Flu_Config_AutumnWinter2026_v0.4WIP.json new file mode 100644 index 00000000..02fbd2a3 --- /dev/null +++ b/data/configs/inProgressTestConfigs/NBS_Flu_Config_AutumnWinter2026_v0.4WIP.json @@ -0,0 +1,557 @@ +{ + "CampaignConfig": { + "ID": "b21cff69-a2c7-4e78-a514-ce067c09df0c", + "Version": 1, + "Name": "EliD NBS Flu campaign config Release 1", + "Type": "V", + "Target": "FLU", + "Manager": [ + "example@nhs.net" + ], + "Approver": [ + "example@nhs.net" + ], + "Reviewer": [ + "example@nhs.net" + ], + "IterationFrequency": "X", + "IterationType": "O", + "IterationTime": "07:00:00", + "StartDate": "<>", + "EndDate": "20270331", + "ApprovalMinimum": 0, + "ApprovalMaximum": 0, + "DefaultCommsRouting": "BOOK_NBS", + "Iterations": [ + { + "ID": "2834b74a-4170-4594-9d2c-9e6d9af41d20", + "DefaultCommsRouting": "BOOK_NBS", + "DefaultNotActionableRouting": "", + "DefaultNotEligibleRouting": "", + "Version": 1, + "Name": "EliD NBS Flu campaign config Release 1", + "IterationDate": "<>", + "IterationNumber": 1, + "CommsType": "I", + "ApprovalMinimum": 0, + "ApprovalMaximum": 0, + "Type": "O", + "StatusText": { + "NotEligible": "We do not believe you can have it", + "NotActionable": "You should have the Flu vaccine", + "Actionable": "You should have the Flu vaccine" + }, + "IterationCohorts": [ + { + "CohortLabel": "flu_65+_autumnwinter2026", + "CohortGroup": "flu_age_65+", + "PositiveDescription": "are aged 65 or over (including those who will be 65 by 31 March 2027)", + "NegativeDescription": "are not aged 65 or over (including those who will be 65 by 31 March 2027)", + "Priority": 10, + "Virtual": "N" + }, + { + "CohortLabel": "flu_2to3_autumnwinter2026", + "CohortGroup": "flu_age_2to3", + "PositiveDescription": "are aged 2 or 3 years (born between 1 September 2022 and 31 August 2024)", + "NegativeDescription": "are not aged 2 or 3 years (born between 1 September 2022 and 31 August 2024)", + "Priority": 15, + "Virtual": "N" + }, + { + "CohortLabel": "flu_4to16_autumnwinter2026", + "CohortGroup": "flu_school_age", + "PositiveDescription": "are of school age (Reception to Year 11)", + "NegativeDescription": "are not of school age (Reception to Year 11)", + "Priority": 20, + "Virtual": "N" + }, + { + "CohortLabel": "flu_immunosuppression", + "CohortGroup": "flu_clinical_risk", + "PositiveDescription": "have a weakened immune system because of a health condition or treatment", + "NegativeDescription": "do not have a weakened immune system because of a health condition or treatment", + "Priority": 25, + "Virtual": "N" + }, + { + "CohortLabel": "flu_diabetes", + "CohortGroup": "flu_clinical_risk", + "PositiveDescription": "have a weakened immune system because of a health condition or treatment", + "NegativeDescription": "do not have a weakened immune system because of a health condition or treatment", + "Priority": 30, + "Virtual": "N" + }, + { + "CohortLabel": "flu_chronic_heart_disease", + "CohortGroup": "flu_clinical_risk", + "PositiveDescription": "have a weakened immune system because of a health condition or treatment", + "NegativeDescription": "do not have a weakened immune system because of a health condition or treatment", + "Priority": 35, + "Virtual": "N" + }, + { + "CohortLabel": "flu_chronic_kidney_disease", + "CohortGroup": "flu_clinical_risk", + "PositiveDescription": "have a weakened immune system because of a health condition or treatment", + "NegativeDescription": "do not have a weakened immune system because of a health condition or treatment", + "Priority": 40, + "Virtual": "N" + }, + { + "CohortLabel": "flu_chronic_liver_disease", + "CohortGroup": "flu_clinical_risk", + "PositiveDescription": "have a weakened immune system because of a health condition or treatment", + "NegativeDescription": "do not have a weakened immune system because of a health condition or treatment", + "Priority": 45, + "Virtual": "N" + }, + { + "CohortLabel": "flu_chronic_neurological_disease", + "CohortGroup": "flu_clinical_risk", + "PositiveDescription": "have a weakened immune system because of a health condition or treatment", + "NegativeDescription": "do not have a weakened immune system because of a health condition or treatment", + "Priority": 50, + "Virtual": "N" + }, + { + "CohortLabel": "flu_chronic_respiratory_disease", + "CohortGroup": "flu_clinical_risk", + "PositiveDescription": "have a weakened immune system because of a health condition or treatment", + "NegativeDescription": "do not have a weakened immune system because of a health condition or treatment", + "Priority": 55, + "Virtual": "N" + }, + { + "CohortLabel": "flu_coded_eligibility", + "CohortGroup": "flu_clinical_risk", + "PositiveDescription": "have a weakened immune system because of a health condition or treatment", + "NegativeDescription": "do not have a weakened immune system because of a health condition or treatment", + "Priority": 60, + "Virtual": "N" + }, + { + "CohortLabel": "flu_morbid_obesity", + "CohortGroup": "flu_clinical_risk", + "PositiveDescription": "have a weakened immune system because of a health condition or treatment", + "NegativeDescription": "do not have a weakened immune system because of a health condition or treatment", + "Priority": 65, + "Virtual": "N" + }, + { + "CohortLabel": "care_home_residents_older_adults", + "CohortGroup": "care_home_residents", + "PositiveDescription": "live in a care home for older adults", + "NegativeDescription": "do not live in a care home for older adults", + "Priority": 70, + "Virtual": "N" + }, + { + "CohortLabel": "elid_all_people", + "CohortGroup": "magic_cohort", + "PositiveDescription": "", + "NegativeDescription": "", + "Priority": 90, + "Virtual": "Y" + } + ], + "IterationRules": [ + { + "Type": "F", + "Name": "Remove from magic cohort unless already vaccinated or have future booking", + "Description": "Remove anyone NOT already vaccinated within the current campaign and do not have a future booking from the magic cohort", + "Operator": "<", + "Comparator": "<>[[NVL:18000101]]", + "AttributeTarget": "FLU", + "AttributeLevel": "TARGET", + "AttributeName": "LAST_SUCCESSFUL_DATE", + "CohortLabel": "elid_all_people", + "Priority": 100 + }, + { + "Type": "F", + "Name": "Remove from magic cohort unless already vaccinated or have future booking", + "Description": "Remove anyone without a future booking from magic cohort", + "Operator": "D<", + "Comparator": "0[[NVL:18000101]]", + "AttributeTarget": "FLU", + "AttributeLevel": "TARGET", + "AttributeName": "BOOKED_APPOINTMENT_DATE", + "CohortLabel": "elid_all_people", + "Priority": 100 + }, + { + "Type": "F", + "Name": "Remove under 65 Years at end of campaign", + "Description": "Ensure anyone who has a PDS date of birth which determines their age to be less than 65 years at the end of campaign is filtered out.", + "Priority": 120, + "AttributeLevel": "PERSON", + "AttributeName": "DATE_OF_BIRTH", + "Operator": ">=", + "Comparator": "19620401", + "CohortLabel": "flu_65+_autumnwinter2026" + }, + { + "Type": "S", + "Name": "AlreadyVaccinated", + "Description": "Vaccinated within the current campaign and aged 9 or over", + "Priority": 500, + "AttributeLevel": "TARGET", + "AttributeTarget": "FLU", + "AttributeName": "LAST_SUCCESSFUL_DATE", + "Operator": ">=", + "Comparator": "<>", + "RuleStop": "Y" + }, + { + "Type": "S", + "Name": "AlreadyVaccinated", + "Description": "Vaccinated within the current campaign and aged 9 or over", + "Priority": 500, + "AttributeLevel": "PERSON", + "AttributeName": "DATE_OF_BIRTH", + "Operator": "Y<=", + "Comparator": "-9", + "RuleStop": "Y" + }, + { + "Type": "S", + "Name": "TooClose", + "Description": "Additional dose required but it is too closer to previous dose", + "Priority": 520, + "AttributeLevel": "TARGET", + "AttributeTarget": "FLU", + "AttributeName": "LAST_SUCCESSFUL_DATE", + "Operator": ">=", + "Comparator": "<>", + "RuleStop": "Y" + }, + { + "Type": "S", + "Name": "TooClose", + "Description": "Additional dose required but it is too closer to previous dose", + "Priority": 520, + "AttributeLevel": "TARGET", + "AttributeTarget": "FLU", + "AttributeName": "LAST_SUCCESSFUL_DATE", + "Operator": "D>=", + "Comparator": "-28", + "RuleStop": "Y" + }, + { + "Type": "S", + "Name": "TooClose", + "Description": "Additional dose required but it is too closer to previous dose", + "Priority": 520, + "AttributeLevel": "COHORT", + "AttributeName": "COHORT_LABEL", + "Operator": "MemberOf", + "Comparator": "flu_immunosuppression", + "RuleStop": "Y" + }, + { + "Type": "S", + "Name": "TooClose", + "Description": "Additional dose required but it is too closer to previous dose", + "Priority": 520, + "AttributeLevel": "TARGET", + "AttributeTarget": "FLU", + "AttributeName": "SUCCESSFUL_PROCEDURE_COUNT", + "Operator": "=", + "Comparator": "1", + "RuleStop": "Y" + }, + { + "Type": "S", + "Name": "AlreadyVaccinatedNoAdditionalDose", + "Description": "Already vaccinated in current campaign and no additional dose required", + "Priority": 540, + "AttributeLevel": "TARGET", + "AttributeTarget": "FLU", + "AttributeName": "LAST_SUCCESSFUL_DATE", + "Operator": ">=", + "Comparator": "<>", + "RuleStop": "Y" + }, + { + "Type": "S", + "Name": "AlreadyVaccinatedNoAdditionalDose", + "Description": "Already vaccinated in current campaign and no additional dose required", + "Priority": 540, + "AttributeLevel": "TARGET", + "AttributeTarget": "FLU", + "AttributeName": "SUCCESSFUL_PROCEDURE_COUNT", + "Operator": ">=", + "Comparator": "2", + "RuleStop": "Y" + }, + { + "Type": "S", + "Name": "AlreadyVaccinated", + "Description": "Already vaccinated in current campaign and no additional dose required", + "Priority": 540, + "AttributeLevel": "PERSON", + "AttributeName": "DATE_OF_BIRTH", + "Operator": "Y>", + "Comparator": "-9", + "RuleStop": "Y" + }, + { + "Type": "S", + "Name": "SchoolAge", + "Description": "Will be vaccinated at school through a School Age Immunisation Service", + "Priority": 560, + "AttributeLevel": "COHORT", + "AttributeName": "COHORT_LABEL", + "Operator": "MemberOf", + "Comparator": "flu_4to16_autumnwinter2026", + "RuleStop": "Y" + }, + { + "Type": "S", + "Name": "FutureBookingNBS", + "Description": "Has a future booking on NBS", + "Priority": 700, + "Operator": "D>=", + "Comparator": "0", + "AttributeTarget": "FLU", + "AttributeLevel": "TARGET", + "AttributeName": "BOOKED_APPOINTMENT_DATE", + "RuleStop": "Y" + }, + { + "Type": "S", + "Name": "FutureBookingNBS", + "Description": "Has a future booking on NBS", + "Priority": 700, + "Operator": "in", + "Comparator": "NBS,MYA", + "AttributeTarget": "FLU", + "AttributeLevel": "TARGET", + "AttributeName": "BOOKED_APPOINTMENT_PROVIDER", + "RuleStop": "Y" + }, + { + "Type": "S", + "Name": "FutureBookingLocal", + "Description": "Has a future local booking", + "Priority": 750, + "Operator": "D>=", + "Comparator": "0", + "AttributeTarget": "FLU", + "AttributeLevel": "TARGET", + "AttributeName": "BOOKED_APPOINTMENT_DATE", + "RuleStop": "Y" + }, + { + "Type": "R", + "Name": "AdditionalDoseRequired", + "Description": "Requires an additional vacination dose", + "Priority": 1000, + "AttributeLevel": "TARGET", + "AttributeTarget": "FLU", + "AttributeName": "LAST_SUCCESSFUL_DATE", + "Operator": ">=", + "Comparator": "<>", + "CommsRouting": "BOOK_NBS|ADDITIONAL_DOSE_REQUIRED" + }, + { + "Type": "R", + "Name": "AdditionalDoseRequired", + "Description": "Requires an additional vaccination dose", + "Priority": 1000, + "AttributeLevel": "PERSON", + "AttributeName": "DATE_OF_BIRTH", + "Operator": "Y>", + "Comparator": "-9", + "CommsRouting": "BOOK_NBS|ADDITIONAL_DOSE_REQUIRED" + }, + { + "Type": "R", + "Name": "AdditionalDoseRequired", + "Description": "Requires an additional vaccination dose", + "Priority": 1000, + "AttributeLevel": "COHORT", + "AttributeName": "COHORT_LABEL", + "Operator": "MemberOf", + "Comparator": "flu_immunosuppression", + "CommsRouting": "BOOK_NBS|ADDITIONAL_DOSE_REQUIRED" + }, + { + "Type": "R", + "Name": "AdditionalDoseRequired", + "Description": "Requires an additional vaccination dose", + "Priority": 1000, + "AttributeLevel": "TARGET", + "AttributeTarget": "FLU", + "AttributeName": "SUCCESSFUL_PROCEDURE_COUNT", + "Operator": "=", + "Comparator": "1", + "CommsRouting": "BOOK_NBS|ADDITIONAL_DOSE_REQUIRED" + }, + { + "Type": "Y", + "Name": "TooCloseForAdditionalDoseAction", + "Description": "Requires an additional dose but is within 4 weeks of previous vaccination", + "Priority": 3000, + "AttributeLevel": "TARGET", + "AttributeTarget": "FLU", + "AttributeName": "LAST_SUCCESSFUL_DATE", + "Operator": ">=", + "Comparator": "<>", + "CommsRouting": "LAST_VACCINATION_DATE|EARLIEST_NEXT_VACCINATION_DATE|ADDITIONAL_DOSE_REQUIRED" + }, + { + "Type": "Y", + "Name": "TooCloseForAdditionalDoseAction", + "Description": "Requires an additional dose but is within 4 weeks of previous vaccination", + "Priority": 3000, + "AttributeLevel": "TARGET", + "AttributeTarget": "FLU", + "AttributeName": "LAST_SUCCESSFUL_DATE", + "Operator": "D>=", + "Comparator": "-28", + "CommsRouting": "LAST_VACCINATION_DATE|EARLIEST_NEXT_VACCINATION_DATE|ADDITIONAL_DOSE_REQUIRED" + }, + { + "Type": "Y", + "Name": "TooCloseForAdditionalDoseAction", + "Description": "Requires an additional dose but is within 4 weeks of previous vaccination", + "Priority": 3000, + "AttributeLevel": "PERSON", + "AttributeName": "DATE_OF_BIRTH", + "Operator": "Y>", + "Comparator": "-9", + "CommsRouting": "LAST_VACCINATION_DATE|EARLIEST_NEXT_VACCINATION_DATE|ADDITIONAL_DOSE_REQUIRED" + }, + { + "Type": "Y", + "Name": "TooCloseForAdditionalDoseAction", + "Description": "Requires an additional dose but is within 4 weeks of previous vaccination", + "Priority": 3000, + "AttributeLevel": "COHORT", + "AttributeName": "COHORT_LABEL", + "Operator": "MemberOf", + "Comparator": "flu_immunosuppression", + "CommsRouting": "LAST_VACCINATION_DATE|EARLIEST_NEXT_VACCINATION_DATE|ADDITIONAL_DOSE_REQUIRED" + }, + { + "Type": "Y", + "Name": "TooCloseForAdditionalDoseAction", + "Description": "Requires an additional dose but is within 4 weeks of previous vaccination", + "Priority": 3000, + "AttributeLevel": "TARGET", + "AttributeTarget": "FLU", + "AttributeName": "SUCCESSFUL_PROCEDURE_COUNT", + "Operator": "<", + "Comparator": "2", + "CommsRouting": "LAST_VACCINATION_DATE|EARLIEST_NEXT_VACCINATION_DATE|ADDITIONAL_DOSE_REQUIRED" + }, + { + "Type": "Y", + "Name": "MayRequireAdditionalDoseAction", + "Description": "Already vaccinated but may require an additional dose if a carer or live with someone who is immunosuppressed", + "Priority": 3100, + "AttributeLevel": "PERSON", + "AttributeName": "DATE_OF_BIRTH", + "Operator": "Y>", + "Comparator": "-9", + "CommsRouting": "MAY_REQUIRE_ADDITIONAL_DOSE" + }, + { + "Type": "Y", + "Name": "MayRequireAdditionalDoseAction", + "Description": "Already vaccinated but may require an additional dose if a carer or live with someone who is immunosuppressed", + "Priority": 3100, + "AttributeLevel": "TARGET", + "AttributeTarget": "FLU", + "AttributeName": "LAST_SUCCESSFUL_DATE", + "Operator": ">=", + "Comparator": "<>", + "CommsRouting": "MAY_REQUIRE_ADDITIONAL_DOSE" + }, + { + "Type": "Y", + "Name": "MayRequireAdditionalDoseAction", + "Description": "Already vaccinated but may require an additional dose if a carer or live with someone who is immunosuppressed", + "Priority": 3100, + "AttributeLevel": "TARGET", + "AttributeTarget": "FLU", + "AttributeName": "SUCCESSFUL_PROCEDURE_COUNT", + "Operator": "<", + "Comparator": "2", + "CommsRouting": "MAY_REQUIRE_ADDITIONAL_DOSE" + }, + { + "Type": "Y", + "Name": "Already vaccinated default text", + "Description": "Already vaccinated within the current campaign", + "Priority": 3200, + "AttributeLevel": "TARGET", + "AttributeTarget": "FLU", + "AttributeName": "LAST_SUCCESSFUL_DATE", + "Operator": ">=", + "Comparator": "<>", + "CommsRouting": "LAST_VACCINATION_DATE" + }, + { + "Type": "Y", + "Name": "FutureBookingDate", + "Description": "Future booking date", + "Priority": 3300, + "AttributeLevel": "TARGET", + "AttributeTarget": "FLU", + "AttributeName": "BOOKED_APPOINTMENT_DATE", + "Operator": "D>=", + "Comparator": "0", + "CommsRouting": "FUTURE_APPOINTMENT_DATE" + } + ], + "ActionsMapper": { + "BOOK_NBS": { + "ExternalRoutingCode": "BookNBS", + "ActionDescription": "Eligible to book", + "ActionType": "InfoText", + "UrlLink": null, + "UrlLabel": "" + }, + "LAST_VACCINATION_DATE": { + "ExternalRoutingCode": "DateOfLastVaccination", + "ActionDescription": "[[TARGET.FLU.LAST_SUCCESSFUL_DATE:DATE(%Y-%m-%d)]]", + "ActionType": "DataValue", + "UrlLink": null, + "UrlLabel": "" + }, + "EARLIEST_NEXT_VACCINATION_DATE": { + "ExternalRoutingCode": "DateOfNextEarliestVaccination", + "ActionDescription": "[[TARGET.FLU.NEXT_DOSE_DUE:ADD_DAYS(29):DATE(%Y-%m-%d)]]", + "ActionType": "DataValue", + "UrlLink": null, + "UrlLabel": "" + }, + "ADDITIONAL_DOSE_REQUIRED": { + "ExternalRoutingCode": "AdditionalDoseRequired", + "ActionDescription": "Yes", + "ActionType": "DataValue", + "UrlLink": null, + "UrlLabel": "" + }, + "MAY_REQUIRE_ADDITIONAL_DOSE": { + "ExternalRoutingCode": "AdditionalDoseRequired", + "ActionDescription": "Maybe", + "ActionType": "DataValue", + "UrlLink": null, + "UrlLabel": "" + }, + "FUTURE_APPOINTMENT_DATE": { + "ExternalRoutingCode": "FutureBookingDate", + "ActionDescription": "[[TARGET.FLU.BOOKED_APPOINTMENT_DATE:DATE(%Y-%m-%d)]]", + "ActionType": "DataValue", + "UrlLink": null, + "UrlLabel": "" + } + } + } + ] + } +} diff --git a/data/configs/inProgressTestConfigs/NBS_Flu_Config_AutumnWinter2026_v0.4WIP_Inactive.json b/data/configs/inProgressTestConfigs/NBS_Flu_Config_AutumnWinter2026_v0.4WIP_Inactive.json new file mode 100644 index 00000000..9a51da35 --- /dev/null +++ b/data/configs/inProgressTestConfigs/NBS_Flu_Config_AutumnWinter2026_v0.4WIP_Inactive.json @@ -0,0 +1,557 @@ +{ + "CampaignConfig": { + "ID": "b21cff69-a2c7-4e78-a514-ce067c09df0c", + "Version": 1, + "Name": "EliD NBS Flu campaign config Release 1", + "Type": "V", + "Target": "FLU", + "Manager": [ + "example@nhs.net" + ], + "Approver": [ + "example@nhs.net" + ], + "Reviewer": [ + "example@nhs.net" + ], + "IterationFrequency": "X", + "IterationType": "O", + "IterationTime": "07:00:00", + "StartDate": "<>", + "EndDate": "20270331", + "ApprovalMinimum": 0, + "ApprovalMaximum": 0, + "DefaultCommsRouting": "BOOK_NBS", + "Iterations": [ + { + "ID": "2834b74a-4170-4594-9d2c-9e6d9af41d20", + "DefaultCommsRouting": "BOOK_NBS", + "DefaultNotActionableRouting": "", + "DefaultNotEligibleRouting": "", + "Version": 1, + "Name": "EliD NBS Flu campaign config Release 1", + "IterationDate": "<>", + "IterationNumber": 1, + "CommsType": "I", + "ApprovalMinimum": 0, + "ApprovalMaximum": 0, + "Type": "O", + "StatusText": { + "NotEligible": "We do not believe you can have it", + "NotActionable": "You should have the Flu vaccine", + "Actionable": "You should have the Flu vaccine" + }, + "IterationCohorts": [ + { + "CohortLabel": "flu_65+_autumnwinter2026", + "CohortGroup": "flu_age_65+", + "PositiveDescription": "are aged 65 or over (including those who will be 65 by 31 March 2027)", + "NegativeDescription": "are not aged 65 or over (including those who will be 65 by 31 March 2027)", + "Priority": 10, + "Virtual": "N" + }, + { + "CohortLabel": "flu_2to3_autumnwinter2026", + "CohortGroup": "flu_age_2to3", + "PositiveDescription": "are aged 2 or 3 years (born between 1 September 2022 and 31 August 2024)", + "NegativeDescription": "are not aged 2 or 3 years (born between 1 September 2022 and 31 August 2024)", + "Priority": 15, + "Virtual": "N" + }, + { + "CohortLabel": "flu_4to16_autumnwinter2026", + "CohortGroup": "flu_school_age", + "PositiveDescription": "are of school age (Reception to Year 11)", + "NegativeDescription": "are not of school age (Reception to Year 11)", + "Priority": 20, + "Virtual": "N" + }, + { + "CohortLabel": "flu_immunosuppression", + "CohortGroup": "flu_clinical_risk", + "PositiveDescription": "have a weakened immune system because of a health condition or treatment", + "NegativeDescription": "do not have a weakened immune system because of a health condition or treatment", + "Priority": 25, + "Virtual": "N" + }, + { + "CohortLabel": "flu_diabetes", + "CohortGroup": "flu_clinical_risk", + "PositiveDescription": "have a weakened immune system because of a health condition or treatment", + "NegativeDescription": "do not have a weakened immune system because of a health condition or treatment", + "Priority": 30, + "Virtual": "N" + }, + { + "CohortLabel": "flu_chronic_heart_disease", + "CohortGroup": "flu_clinical_risk", + "PositiveDescription": "have a weakened immune system because of a health condition or treatment", + "NegativeDescription": "do not have a weakened immune system because of a health condition or treatment", + "Priority": 35, + "Virtual": "N" + }, + { + "CohortLabel": "flu_chronic_kidney_disease", + "CohortGroup": "flu_clinical_risk", + "PositiveDescription": "have a weakened immune system because of a health condition or treatment", + "NegativeDescription": "do not have a weakened immune system because of a health condition or treatment", + "Priority": 40, + "Virtual": "N" + }, + { + "CohortLabel": "flu_chronic_liver_disease", + "CohortGroup": "flu_clinical_risk", + "PositiveDescription": "have a weakened immune system because of a health condition or treatment", + "NegativeDescription": "do not have a weakened immune system because of a health condition or treatment", + "Priority": 45, + "Virtual": "N" + }, + { + "CohortLabel": "flu_chronic_neurological_disease", + "CohortGroup": "flu_clinical_risk", + "PositiveDescription": "have a weakened immune system because of a health condition or treatment", + "NegativeDescription": "do not have a weakened immune system because of a health condition or treatment", + "Priority": 50, + "Virtual": "N" + }, + { + "CohortLabel": "flu_chronic_respiratory_disease", + "CohortGroup": "flu_clinical_risk", + "PositiveDescription": "have a weakened immune system because of a health condition or treatment", + "NegativeDescription": "do not have a weakened immune system because of a health condition or treatment", + "Priority": 55, + "Virtual": "N" + }, + { + "CohortLabel": "flu_coded_eligibility", + "CohortGroup": "flu_clinical_risk", + "PositiveDescription": "have a weakened immune system because of a health condition or treatment", + "NegativeDescription": "do not have a weakened immune system because of a health condition or treatment", + "Priority": 60, + "Virtual": "N" + }, + { + "CohortLabel": "flu_morbid_obesity", + "CohortGroup": "flu_clinical_risk", + "PositiveDescription": "have a weakened immune system because of a health condition or treatment", + "NegativeDescription": "do not have a weakened immune system because of a health condition or treatment", + "Priority": 65, + "Virtual": "N" + }, + { + "CohortLabel": "care_home_residents_older_adults", + "CohortGroup": "care_home_residents", + "PositiveDescription": "live in a care home for older adults", + "NegativeDescription": "do not live in a care home for older adults", + "Priority": 70, + "Virtual": "N" + }, + { + "CohortLabel": "elid_all_people", + "CohortGroup": "magic_cohort", + "PositiveDescription": "", + "NegativeDescription": "", + "Priority": 90, + "Virtual": "Y" + } + ], + "IterationRules": [ + { + "Type": "F", + "Name": "Remove from magic cohort unless already vaccinated or have future booking", + "Description": "Remove anyone NOT already vaccinated within the current campaign and do not have a future booking from the magic cohort", + "Operator": "<", + "Comparator": "<>[[NVL:18000101]]", + "AttributeTarget": "FLU", + "AttributeLevel": "TARGET", + "AttributeName": "LAST_SUCCESSFUL_DATE", + "CohortLabel": "elid_all_people", + "Priority": 100 + }, + { + "Type": "F", + "Name": "Remove from magic cohort unless already vaccinated or have future booking", + "Description": "Remove anyone without a future booking from magic cohort", + "Operator": "D<", + "Comparator": "0[[NVL:18000101]]", + "AttributeTarget": "FLU", + "AttributeLevel": "TARGET", + "AttributeName": "BOOKED_APPOINTMENT_DATE", + "CohortLabel": "elid_all_people", + "Priority": 100 + }, + { + "Type": "F", + "Name": "Remove under 65 Years at end of campaign", + "Description": "Ensure anyone who has a PDS date of birth which determines their age to be less than 65 years at the end of campaign is filtered out.", + "Priority": 120, + "AttributeLevel": "PERSON", + "AttributeName": "DATE_OF_BIRTH", + "Operator": ">=", + "Comparator": "19620401", + "CohortLabel": "flu_65+_autumnwinter2026" + }, + { + "Type": "S", + "Name": "AlreadyVaccinated", + "Description": "Vaccinated within the current campaign and aged 9 or over", + "Priority": 500, + "AttributeLevel": "TARGET", + "AttributeTarget": "FLU", + "AttributeName": "LAST_SUCCESSFUL_DATE", + "Operator": ">=", + "Comparator": "<>", + "RuleStop": "Y" + }, + { + "Type": "S", + "Name": "AlreadyVaccinated", + "Description": "Vaccinated within the current campaign and aged 9 or over", + "Priority": 500, + "AttributeLevel": "PERSON", + "AttributeName": "DATE_OF_BIRTH", + "Operator": "Y<=", + "Comparator": "-9", + "RuleStop": "Y" + }, + { + "Type": "S", + "Name": "TooClose", + "Description": "Additional dose required but it is too closer to previous dose", + "Priority": 520, + "AttributeLevel": "TARGET", + "AttributeTarget": "FLU", + "AttributeName": "LAST_SUCCESSFUL_DATE", + "Operator": ">=", + "Comparator": "<>", + "RuleStop": "Y" + }, + { + "Type": "S", + "Name": "TooClose", + "Description": "Additional dose required but it is too closer to previous dose", + "Priority": 520, + "AttributeLevel": "TARGET", + "AttributeTarget": "FLU", + "AttributeName": "LAST_SUCCESSFUL_DATE", + "Operator": "D>=", + "Comparator": "-28", + "RuleStop": "Y" + }, + { + "Type": "S", + "Name": "TooClose", + "Description": "Additional dose required but it is too closer to previous dose", + "Priority": 520, + "AttributeLevel": "COHORT", + "AttributeName": "COHORT_LABEL", + "Operator": "MemberOf", + "Comparator": "flu_immunosuppression", + "RuleStop": "Y" + }, + { + "Type": "S", + "Name": "TooClose", + "Description": "Additional dose required but it is too closer to previous dose", + "Priority": 520, + "AttributeLevel": "TARGET", + "AttributeTarget": "FLU", + "AttributeName": "SUCCESSFUL_PROCEDURE_COUNT", + "Operator": "=", + "Comparator": "1", + "RuleStop": "Y" + }, + { + "Type": "S", + "Name": "AlreadyVaccinatedNoAdditionalDose", + "Description": "Already vaccinated in current campaign and no additional dose required", + "Priority": 540, + "AttributeLevel": "TARGET", + "AttributeTarget": "FLU", + "AttributeName": "LAST_SUCCESSFUL_DATE", + "Operator": ">=", + "Comparator": "<>", + "RuleStop": "Y" + }, + { + "Type": "S", + "Name": "AlreadyVaccinatedNoAdditionalDose", + "Description": "Already vaccinated in current campaign and no additional dose required", + "Priority": 540, + "AttributeLevel": "TARGET", + "AttributeTarget": "FLU", + "AttributeName": "SUCCESSFUL_PROCEDURE_COUNT", + "Operator": ">=", + "Comparator": "2", + "RuleStop": "Y" + }, + { + "Type": "S", + "Name": "AlreadyVaccinated", + "Description": "Already vaccinated in current campaign and no additional dose required", + "Priority": 540, + "AttributeLevel": "PERSON", + "AttributeName": "DATE_OF_BIRTH", + "Operator": "Y>", + "Comparator": "-9", + "RuleStop": "Y" + }, + { + "Type": "S", + "Name": "SchoolAge", + "Description": "Will be vaccinated at school through a School Age Immunisation Service", + "Priority": 560, + "AttributeLevel": "COHORT", + "AttributeName": "COHORT_LABEL", + "Operator": "MemberOf", + "Comparator": "flu_4to16_autumnwinter2026", + "RuleStop": "Y" + }, + { + "Type": "S", + "Name": "FutureBookingNBS", + "Description": "Has a future booking on NBS", + "Priority": 700, + "Operator": "D>=", + "Comparator": "0", + "AttributeTarget": "FLU", + "AttributeLevel": "TARGET", + "AttributeName": "BOOKED_APPOINTMENT_DATE", + "RuleStop": "Y" + }, + { + "Type": "S", + "Name": "FutureBookingNBS", + "Description": "Has a future booking on NBS", + "Priority": 700, + "Operator": "in", + "Comparator": "NBS,MYA", + "AttributeTarget": "FLU", + "AttributeLevel": "TARGET", + "AttributeName": "BOOKED_APPOINTMENT_PROVIDER", + "RuleStop": "Y" + }, + { + "Type": "S", + "Name": "FutureBookingLocal", + "Description": "Has a future local booking", + "Priority": 750, + "Operator": "D>=", + "Comparator": "0", + "AttributeTarget": "FLU", + "AttributeLevel": "TARGET", + "AttributeName": "BOOKED_APPOINTMENT_DATE", + "RuleStop": "Y" + }, + { + "Type": "R", + "Name": "AdditionalDoseRequired", + "Description": "Requires an additional vacination dose", + "Priority": 1000, + "AttributeLevel": "TARGET", + "AttributeTarget": "FLU", + "AttributeName": "LAST_SUCCESSFUL_DATE", + "Operator": ">=", + "Comparator": "<>", + "CommsRouting": "BOOK_NBS|ADDITIONAL_DOSE_REQUIRED" + }, + { + "Type": "R", + "Name": "AdditionalDoseRequired", + "Description": "Requires an additional vacination dose", + "Priority": 1000, + "AttributeLevel": "PERSON", + "AttributeName": "DATE_OF_BIRTH", + "Operator": "Y>", + "Comparator": "-9", + "CommsRouting": "BOOK_NBS|ADDITIONAL_DOSE_REQUIRED" + }, + { + "Type": "R", + "Name": "AdditionalDoseRequired", + "Description": "Requires an additional vacination dose", + "Priority": 1000, + "AttributeLevel": "COHORT", + "AttributeName": "COHORT_LABEL", + "Operator": "MemberOf", + "Comparator": "flu_immunosuppression", + "CommsRouting": "BOOK_NBS|ADDITIONAL_DOSE_REQUIRED" + }, + { + "Type": "R", + "Name": "AdditionalDoseRequired", + "Description": "Requires an additional vacination dose", + "Priority": 1000, + "AttributeLevel": "TARGET", + "AttributeTarget": "FLU", + "AttributeName": "SUCCESSFUL_PROCEDURE_COUNT", + "Operator": "=", + "Comparator": "1", + "CommsRouting": "BOOK_NBS|ADDITIONAL_DOSE_REQUIRED" + }, + { + "Type": "Y", + "Name": "TooCloseForAdditionalDoseAction", + "Description": "Requires an additional dose but is within 4 weeks of previous vaccination", + "Priority": 3000, + "AttributeLevel": "TARGET", + "AttributeTarget": "FLU", + "AttributeName": "LAST_SUCCESSFUL_DATE", + "Operator": ">=", + "Comparator": "<>", + "CommsRouting": "LAST_VACCINATION_DATE|EARLIEST_NEXT_VACCINATION_DATE|ADDITIONAL_DOSE_REQUIRED" + }, + { + "Type": "Y", + "Name": "TooCloseForAdditionalDoseAction", + "Description": "Requires an additional dose but is within 4 weeks of previous vaccination", + "Priority": 3000, + "AttributeLevel": "TARGET", + "AttributeTarget": "FLU", + "AttributeName": "LAST_SUCCESSFUL_DATE", + "Operator": "D>=", + "Comparator": "-28", + "CommsRouting": "LAST_VACCINATION_DATE|EARLIEST_NEXT_VACCINATION_DATE|ADDITIONAL_DOSE_REQUIRED" + }, + { + "Type": "Y", + "Name": "TooCloseForAdditionalDoseAction", + "Description": "Requires an additional dose but is within 4 weeks of previous vaccination", + "Priority": 3000, + "AttributeLevel": "PERSON", + "AttributeName": "DATE_OF_BIRTH", + "Operator": "Y>", + "Comparator": "-9", + "CommsRouting": "LAST_VACCINATION_DATE|EARLIEST_NEXT_VACCINATION_DATE|ADDITIONAL_DOSE_REQUIRED" + }, + { + "Type": "Y", + "Name": "TooCloseForAdditionalDoseAction", + "Description": "Requires an additional dose but is within 4 weeks of previous vaccination", + "Priority": 3000, + "AttributeLevel": "COHORT", + "AttributeName": "COHORT_LABEL", + "Operator": "MemberOf", + "Comparator": "flu_immunosuppression", + "CommsRouting": "LAST_VACCINATION_DATE|EARLIEST_NEXT_VACCINATION_DATE|ADDITIONAL_DOSE_REQUIRED" + }, + { + "Type": "Y", + "Name": "TooCloseForAdditionalDoseAction", + "Description": "Requires an additional dose but is within 4 weeks of previous vaccination", + "Priority": 3000, + "AttributeLevel": "TARGET", + "AttributeTarget": "FLU", + "AttributeName": "SUCCESSFUL_PROCEDURE_COUNT", + "Operator": "<", + "Comparator": "2", + "CommsRouting": "LAST_VACCINATION_DATE|EARLIEST_NEXT_VACCINATION_DATE|ADDITIONAL_DOSE_REQUIRED" + }, + { + "Type": "Y", + "Name": "MayRequireAdditionalDoseAction", + "Description": "Already vaccinated but may require an additional dose if a carer or live with someone who is immunosuppressed", + "Priority": 3100, + "AttributeLevel": "PERSON", + "AttributeName": "DATE_OF_BIRTH", + "Operator": "Y<", + "Comparator": "-9", + "CommsRouting": "MAY_REQUIRE_ADDITIONAL_DOSE" + }, + { + "Type": "Y", + "Name": "MayRequireAdditionalDoseAction", + "Description": "Already vaccinated but may require an additional dose if a carer or live with someone who is immunosuppressed", + "Priority": 3100, + "AttributeLevel": "TARGET", + "AttributeTarget": "FLU", + "AttributeName": "LAST_SUCCESSFUL_DATE", + "Operator": ">=", + "Comparator": "<>", + "CommsRouting": "MAY_REQUIRE_ADDITIONAL_DOSE" + }, + { + "Type": "Y", + "Name": "MayRequireAdditionalDoseAction", + "Description": "Already vaccinated but may require an additional dose if a carer or live with someone who is immunosuppressed", + "Priority": 3100, + "AttributeLevel": "TARGET", + "AttributeTarget": "FLU", + "AttributeName": "SUCCESSFUL_PROCEDURE_COUNT", + "Operator": "<", + "Comparator": "2", + "CommsRouting": "MAY_REQUIRE_ADDITIONAL_DOSE" + }, + { + "Type": "Y", + "Name": "Already vaccinated default text", + "Description": "Already vaccinated within the current campaign", + "Priority": 3200, + "AttributeLevel": "TARGET", + "AttributeTarget": "FLU", + "AttributeName": "LAST_SUCCESSFUL_DATE", + "Operator": ">=", + "Comparator": "<>", + "CommsRouting": "LAST_VACCINATION_DATE" + }, + { + "Type": "Y", + "Name": "FutureBookingDate", + "Description": "Future booking date", + "Priority": 3300, + "AttributeLevel": "TARGET", + "AttributeTarget": "FLU", + "AttributeName": "BOOKED_APPOINTMENT_DATE", + "Operator": "D>=", + "Comparator": "0", + "CommsRouting": "FUTURE_APPOINTMENT_DATE" + } + ], + "ActionsMapper": { + "BOOK_NBS": { + "ExternalRoutingCode": "BookNBS", + "ActionDescription": "Eligible to book", + "ActionType": "InfoText", + "UrlLink": null, + "UrlLabel": "" + }, + "LAST_VACCINATION_DATE": { + "ExternalRoutingCode": "DateOfLastVaccination", + "ActionDescription": "[[TARGET.FLU.LAST_SUCCESSFUL_DATE:DATE(%Y-%m-%d)]]", + "ActionType": "DataValue", + "UrlLink": null, + "UrlLabel": "" + }, + "EARLIEST_NEXT_VACCINATION_DATE": { + "ExternalRoutingCode": "DateOfNextEarliestVaccination", + "ActionDescription": "[[TARGET.FLU.NEXT_DOSE_DUE:ADD_DAYS(29):DATE(%Y-%m-%d)]]", + "ActionType": "DataValue", + "UrlLink": null, + "UrlLabel": "" + }, + "ADDITIONAL_DOSE_REQUIRED": { + "ExternalRoutingCode": "AdditionalDoseRequired", + "ActionDescription": "Yes", + "ActionType": "DataValue", + "UrlLink": null, + "UrlLabel": "" + }, + "MAY_REQUIRE_ADDITIONAL_DOSE": { + "ExternalRoutingCode": "AdditionalDoseRequired", + "ActionDescription": "Maybe", + "ActionType": "DataValue", + "UrlLink": null, + "UrlLabel": "" + }, + "FUTURE_APPOINTMENT_DATE": { + "ExternalRoutingCode": "FutureBookingDate", + "ActionDescription": "[[TARGET.FLU.BOOKED_APPOINTMENT_DATE:DATE(%Y-%m-%d)]]", + "ActionType": "DataValue", + "UrlLink": null, + "UrlLabel": "" + } + } + } + ] + } +} diff --git a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_A01.json b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_A01.json index 39d7e4c6..a478d201 100644 --- a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_A01.json +++ b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_A01.json @@ -8,7 +8,7 @@ "conditions": "flu" }, "config_filenames": [ - "NBS_Flu_Config_AutumnWinter2026_v0.2WIP.json" + "NBS_Flu_Config_AutumnWinter2026_v0.4WIP.json" ], "data": [ { diff --git a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_A02.json b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_A02.json index 4b7e3807..0b086907 100644 --- a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_A02.json +++ b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_A02.json @@ -8,7 +8,7 @@ "conditions": "flu" }, "config_filenames": [ - "NBS_Flu_Config_AutumnWinter2026_v0.2WIP.json" + "NBS_Flu_Config_AutumnWinter2026_v0.4WIP.json" ], "data": [ { diff --git a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_A03.json b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_A03.json index e8f2dc85..d01ffdb5 100644 --- a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_A03.json +++ b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_A03.json @@ -8,7 +8,7 @@ "conditions": "flu" }, "config_filenames": [ - "NBS_Flu_Config_AutumnWinter2026_v0.2WIP.json" + "NBS_Flu_Config_AutumnWinter2026_v0.4WIP.json" ], "data": [ { diff --git a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_A04.json b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_A04.json index 91dd1839..f0db5ead 100644 --- a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_A04.json +++ b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_A04.json @@ -8,7 +8,7 @@ "conditions": "flu" }, "config_filenames": [ - "NBS_Flu_Config_AutumnWinter2026_v0.2WIP.json" + "NBS_Flu_Config_AutumnWinter2026_v0.4WIP.json" ], "data": [ { diff --git a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA01.json b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA01.json index 001077a0..7fa13db8 100644 --- a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA01.json +++ b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA01.json @@ -8,7 +8,7 @@ "conditions": "flu" }, "config_filenames": [ - "NBS_Flu_Config_AutumnWinter2026_v0.2WIP.json" + "NBS_Flu_Config_AutumnWinter2026_v0.4WIP.json" ], "data": [ { diff --git a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA02.json b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA02.json index 65d4c3a4..c276fb9c 100644 --- a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA02.json +++ b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA02.json @@ -8,7 +8,7 @@ "conditions": "flu" }, "config_filenames": [ - "NBS_Flu_Config_AutumnWinter2026_v0.2WIP.json" + "NBS_Flu_Config_AutumnWinter2026_v0.4WIP.json" ], "data": [ { diff --git a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA03.json b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA03.json index b42f1ea6..941103b0 100644 --- a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA03.json +++ b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA03.json @@ -8,7 +8,7 @@ "conditions": "flu" }, "config_filenames": [ - "NBS_Flu_Config_AutumnWinter2026_v0.2WIP.json" + "NBS_Flu_Config_AutumnWinter2026_v0.4WIP.json" ], "data": [ { diff --git a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA04.json b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA04.json index b2bbf2ae..07926d03 100644 --- a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA04.json +++ b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA04.json @@ -8,7 +8,7 @@ "conditions": "flu" }, "config_filenames": [ - "NBS_Flu_Config_AutumnWinter2026_v0.2WIP.json" + "NBS_Flu_Config_AutumnWinter2026_v0.4WIP.json" ], "data": [ { diff --git a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA05.json b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA05.json index 81dce43a..d84a4749 100644 --- a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA05.json +++ b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA05.json @@ -8,7 +8,7 @@ "conditions": "flu" }, "config_filenames": [ - "NBS_Flu_Config_AutumnWinter2026_v0.2WIP.json" + "NBS_Flu_Config_AutumnWinter2026_v0.4WIP.json" ], "data": [ { diff --git a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA06.json b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA06.json index 8a1c6a6a..48a9865d 100644 --- a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA06.json +++ b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA06.json @@ -8,7 +8,7 @@ "conditions": "flu" }, "config_filenames": [ - "NBS_Flu_Config_AutumnWinter2026_v0.2WIP.json" + "NBS_Flu_Config_AutumnWinter2026_v0.4WIP.json" ], "data": [ { diff --git a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA07.json b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA07.json index e7062607..f80aa5ea 100644 --- a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA07.json +++ b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA07.json @@ -8,7 +8,7 @@ "conditions": "flu" }, "config_filenames": [ - "NBS_Flu_Config_AutumnWinter2026_v0.2WIP_InActive.json" + "NBS_Flu_Config_AutumnWinter2026_v0.4WIP_Inactive.json" ], "data": [ { diff --git a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NE02.json b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA08.json similarity index 62% rename from data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NE02.json rename to data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA08.json index 40e732c5..61aa3ce6 100644 --- a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NE02.json +++ b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA08.json @@ -1,5 +1,5 @@ { - "scenario_name": "FLU - NBS Integration - NE02 - Not Eligible - May be eligible for an additional dose", + "scenario_name": "FLU - NBS Integration - NA08 - Not Actionable - May be eligible for an additional dose", "request_headers": { "NHSE-Product-ID": "P.XWA-VFF", "nhsd-End-User-Organisation-ods": "elid_automation" @@ -8,21 +8,21 @@ "conditions": "flu" }, "config_filenames": [ - "NBS_Flu_Config_AutumnWinter2026_v0.2WIP.json" + "NBS_Flu_Config_AutumnWinter2026_v0.4WIP.json" ], "data": [ { - "NHS_NUMBER": "9999971513", + "NHS_NUMBER": "9999971512", "ATTRIBUTE_TYPE": "COHORTS", "COHORT_MEMBERSHIPS": [] }, { - "NHS_NUMBER": "9999971513", + "NHS_NUMBER": "9999971512", "ATTRIBUTE_TYPE": "PERSON", - "DATE_OF_BIRTH": "<>" + "DATE_OF_BIRTH": "<>" }, { - "NHS_NUMBER": "9999971513", + "NHS_NUMBER": "9999971512", "ATTRIBUTE_TYPE": "FLU", "LAST_SUCCESSFUL_DATE": "<>", "SUCCESSFUL_PROCEDURE_COUNT": "1" diff --git a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NE01.json b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NE01.json index 75d93e32..d2769318 100644 --- a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NE01.json +++ b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NE01.json @@ -8,11 +8,11 @@ "conditions": "flu" }, "config_filenames": [ - "NBS_Flu_Config_AutumnWinter2026_v0.2WIP.json" + "NBS_Flu_Config_AutumnWinter2026_v0.4WIP.json" ], "data": [ { - "NHS_NUMBER": "9999971512", + "NHS_NUMBER": "9999971513", "ATTRIBUTE_TYPE": "COHORTS", "COHORT_MEMBERSHIPS": [ { @@ -23,12 +23,12 @@ ] }, { - "NHS_NUMBER": "9999971512", + "NHS_NUMBER": "9999971513", "ATTRIBUTE_TYPE": "PERSON", "DATE_OF_BIRTH": "<>" }, { - "NHS_NUMBER": "9999971512", + "NHS_NUMBER": "9999971513", "ATTRIBUTE_TYPE": "FLU" } ] diff --git a/data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_NA01.json b/data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_NA01.json index 6fd958b1..acb7ccfc 100644 --- a/data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_NA01.json +++ b/data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_NA01.json @@ -26,7 +26,7 @@ "suitabilityRules": [ { "ruleCode": "AlreadyVaccinated", - "ruleText": "Vaccinated within the current campaign", + "ruleText": "Vaccinated within the current campaign and aged 9 or over", "ruleType": "S" } ] diff --git a/data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_NA02.json b/data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_NA02.json index a2631ba3..e5b22735 100644 --- a/data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_NA02.json +++ b/data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_NA02.json @@ -40,7 +40,7 @@ "suitabilityRules": [ { "ruleCode": "TooClose", - "ruleText": "Vaccinated within the current campaign", + "ruleText": "Additional dose required but it is too closer to previous dose", "ruleType": "S" } ] diff --git a/data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_NA03.json b/data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_NA03.json index 526f5aa6..5bfceab1 100644 --- a/data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_NA03.json +++ b/data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_NA03.json @@ -20,7 +20,7 @@ "suitabilityRules": [ { "ruleCode": "AlreadyVaccinated", - "ruleText": "Vaccinated within the current campaign", + "ruleText": "Vaccinated within the current campaign and aged 9 or over", "ruleType": "S" } ] diff --git a/data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_NA04.json b/data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_NA04.json index f7ad0ecb..b038dc50 100644 --- a/data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_NA04.json +++ b/data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_NA04.json @@ -26,7 +26,7 @@ "suitabilityRules": [ { "ruleCode": "FutureBookingNBS", - "ruleText": "Future booking", + "ruleText": "Has a future booking on NBS", "ruleType": "S" } ] diff --git a/data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_NA05.json b/data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_NA05.json index 1401ca81..37315c57 100644 --- a/data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_NA05.json +++ b/data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_NA05.json @@ -26,7 +26,7 @@ "suitabilityRules": [ { "ruleCode": "FutureBookingLocal", - "ruleText": "Local future booking", + "ruleText": "Has a future local booking", "ruleType": "S" } ] diff --git a/data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_NA06.json b/data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_NA06.json index 4d48e1ba..e62a9939 100644 --- a/data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_NA06.json +++ b/data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_NA06.json @@ -15,8 +15,9 @@ ], "status": "NotActionable", "statusText": "You should have the Flu vaccine", - "suitabilityRules": [] - } + "suitabilityRules": [{"ruleCode": "SchoolAge", + "ruleText": "Will be vaccinated at school through a School Age Immunisation Service", + "ruleType": "S"}]} ], "responseId": "e71fa8e5-19aa-47b1-89eb-4ca641a91fe6" } From f6ab26b28f41281806d7d62ba8ccc995d9dad7a3 Mon Sep 17 00:00:00 2001 From: Feyisayo Afolabi Date: Wed, 15 Apr 2026 13:32:55 +0100 Subject: [PATCH 07/10] Chore: [ELI-715] - Added current changes from version 0.5 --- ...S_Flu_Config_AutumnWinter2026_v0.2WIP.json | 557 ------------------ ...fig_AutumnWinter2026_v0.2WIP_InActive.json | 557 ------------------ ..._Flu_Config_AutumnWinter2026_v0.5WIP.json} | 37 +- ...ig_AutumnWinter2026_v0.5WIP_Inactive.json} | 45 +- .../AUTO_FLU_NBS_INT_A01.json | 2 +- .../AUTO_FLU_NBS_INT_A02.json | 2 +- .../AUTO_FLU_NBS_INT_A03.json | 2 +- .../AUTO_FLU_NBS_INT_A04.json | 2 +- .../AUTO_FLU_NBS_INT_NA01.json | 2 +- .../AUTO_FLU_NBS_INT_NA02.json | 2 +- .../AUTO_FLU_NBS_INT_NA03.json | 2 +- .../AUTO_FLU_NBS_INT_NA04.json | 2 +- .../AUTO_FLU_NBS_INT_NA05.json | 2 +- .../AUTO_FLU_NBS_INT_NA06.json | 2 +- .../AUTO_FLU_NBS_INT_NA07.json | 2 +- .../AUTO_FLU_NBS_INT_NA08.json | 2 +- .../AUTO_FLU_NBS_INT_NE01.json | 2 +- 17 files changed, 89 insertions(+), 1133 deletions(-) delete mode 100644 data/configs/inProgressTestConfigs/NBS_Flu_Config_AutumnWinter2026_v0.2WIP.json delete mode 100644 data/configs/inProgressTestConfigs/NBS_Flu_Config_AutumnWinter2026_v0.2WIP_InActive.json rename data/configs/inProgressTestConfigs/{NBS_Flu_Config_AutumnWinter2026_v0.4WIP.json => NBS_Flu_Config_AutumnWinter2026_v0.5WIP.json} (93%) rename data/configs/inProgressTestConfigs/{NBS_Flu_Config_AutumnWinter2026_v0.4WIP_Inactive.json => NBS_Flu_Config_AutumnWinter2026_v0.5WIP_Inactive.json} (93%) diff --git a/data/configs/inProgressTestConfigs/NBS_Flu_Config_AutumnWinter2026_v0.2WIP.json b/data/configs/inProgressTestConfigs/NBS_Flu_Config_AutumnWinter2026_v0.2WIP.json deleted file mode 100644 index 1883412c..00000000 --- a/data/configs/inProgressTestConfigs/NBS_Flu_Config_AutumnWinter2026_v0.2WIP.json +++ /dev/null @@ -1,557 +0,0 @@ -{ - "CampaignConfig": { - "ID": "b21cff69-a2c7-4e78-a514-ce067c09df0c", - "Version": 1, - "Name": "EliD NBS Flu campaign config Release 1", - "Type": "V", - "Target": "FLU", - "Manager": [ - "example@nhs.net" - ], - "Approver": [ - "example@nhs.net" - ], - "Reviewer": [ - "example@nhs.net" - ], - "IterationFrequency": "X", - "IterationType": "O", - "IterationTime": "07:00:00", - "StartDate": "<>", - "EndDate": "20270331", - "ApprovalMinimum": 0, - "ApprovalMaximum": 0, - "DefaultCommsRouting": "BOOK_NBS", - "Iterations": [ - { - "ID": "2834b74a-4170-4594-9d2c-9e6d9af41d20", - "DefaultCommsRouting": "BOOK_NBS", - "DefaultNotActionableRouting": "", - "DefaultNotEligibleRouting": "", - "Version": 1, - "Name": "EliD NBS Flu campaign config Release 1", - "IterationDate": "<>", - "IterationNumber": 1, - "CommsType": "I", - "ApprovalMinimum": 0, - "ApprovalMaximum": 0, - "Type": "O", - "StatusText": { - "NotEligible": "We do not believe you can have it", - "NotActionable": "You should have the Flu vaccine", - "Actionable": "You should have the Flu vaccine" - }, - "IterationCohorts": [ - { - "CohortLabel": "flu_65+_autumnwinter2026", - "CohortGroup": "flu_age_65+", - "PositiveDescription": "are aged 65 or over (including those who will be 65 by 31 March 2027)", - "NegativeDescription": "are not aged 65 or over (including those who will be 65 by 31 March 2027)", - "Priority": 10, - "Virtual": "N" - }, - { - "CohortLabel": "flu_2to3_autumnwinter2026", - "CohortGroup": "flu_age_2to3", - "PositiveDescription": "are aged 2 or 3 years (born between 1 September 2022 and 31 August 2024)", - "NegativeDescription": "are not aged 2 or 3 years (born between 1 September 2022 and 31 August 2024)", - "Priority": 15, - "Virtual": "N" - }, - { - "CohortLabel": "flu_4to16_autumnwinter2026", - "CohortGroup": "flu_school_age", - "PositiveDescription": "are of school age (Reception to Year 11)", - "NegativeDescription": "are not of school age (Reception to Year 11)", - "Priority": 20, - "Virtual": "N" - }, - { - "CohortLabel": "flu_immunosuppression", - "CohortGroup": "flu_clinical_risk", - "PositiveDescription": "have a weakened immune system because of a health condition or treatment", - "NegativeDescription": "do not have a weakened immune system because of a health condition or treatment", - "Priority": 25, - "Virtual": "N" - }, - { - "CohortLabel": "flu_diabetes", - "CohortGroup": "flu_clinical_risk", - "PositiveDescription": "have a weakened immune system because of a health condition or treatment", - "NegativeDescription": "do not have a weakened immune system because of a health condition or treatment", - "Priority": 30, - "Virtual": "N" - }, - { - "CohortLabel": "flu_chronic_heart_disease", - "CohortGroup": "flu_clinical_risk", - "PositiveDescription": "have a weakened immune system because of a health condition or treatment", - "NegativeDescription": "do not have a weakened immune system because of a health condition or treatment", - "Priority": 35, - "Virtual": "N" - }, - { - "CohortLabel": "flu_chronic_kidney_disease", - "CohortGroup": "flu_clinical_risk", - "PositiveDescription": "have a weakened immune system because of a health condition or treatment", - "NegativeDescription": "do not have a weakened immune system because of a health condition or treatment", - "Priority": 40, - "Virtual": "N" - }, - { - "CohortLabel": "flu_chronic_liver_disease", - "CohortGroup": "flu_clinical_risk", - "PositiveDescription": "have a weakened immune system because of a health condition or treatment", - "NegativeDescription": "do not have a weakened immune system because of a health condition or treatment", - "Priority": 45, - "Virtual": "N" - }, - { - "CohortLabel": "flu_chronic_neurological_disease", - "CohortGroup": "flu_clinical_risk", - "PositiveDescription": "have a weakened immune system because of a health condition or treatment", - "NegativeDescription": "do not have a weakened immune system because of a health condition or treatment", - "Priority": 50, - "Virtual": "N" - }, - { - "CohortLabel": "flu_chronic_respiratory_disease", - "CohortGroup": "flu_clinical_risk", - "PositiveDescription": "have a weakened immune system because of a health condition or treatment", - "NegativeDescription": "do not have a weakened immune system because of a health condition or treatment", - "Priority": 55, - "Virtual": "N" - }, - { - "CohortLabel": "flu_coded_eligibility", - "CohortGroup": "flu_clinical_risk", - "PositiveDescription": "have a weakened immune system because of a health condition or treatment", - "NegativeDescription": "do not have a weakened immune system because of a health condition or treatment", - "Priority": 60, - "Virtual": "N" - }, - { - "CohortLabel": "flu_morbid_obesity", - "CohortGroup": "flu_clinical_risk", - "PositiveDescription": "have a weakened immune system because of a health condition or treatment", - "NegativeDescription": "do not have a weakened immune system because of a health condition or treatment", - "Priority": 65, - "Virtual": "N" - }, - { - "CohortLabel": "care_home_residents_older_adults", - "CohortGroup": "care_home_residents", - "PositiveDescription": "live in a care home for older adults", - "NegativeDescription": "do not live in a care home for older adults", - "Priority": 70, - "Virtual": "N" - }, - { - "CohortLabel": "elid_all_people", - "CohortGroup": "magic_cohort", - "PositiveDescription": "", - "NegativeDescription": "", - "Priority": 90, - "Virtual": "Y" - } - ], - "IterationRules": [ - { - "Type": "F", - "Name": "Remove from magic cohort unless already vaccinated or have future booking", - "Description": "Remove anyone NOT already vaccinated within the current campaign and do not have a future booking from the magic cohort", - "Operator": "<", - "Comparator": "<>[[NVL:18000101]]", - "AttributeTarget": "FLU", - "AttributeLevel": "TARGET", - "AttributeName": "LAST_SUCCESSFUL_DATE", - "CohortLabel": "elid_all_people", - "Priority": 100 - }, - { - "Type": "F", - "Name": "Remove from magic cohort unless already vaccinated or have future booking", - "Description": "Remove anyone without a future booking from magic cohort", - "Operator": "D<", - "Comparator": "0[[NVL:18000101]]", - "AttributeTarget": "FLU", - "AttributeLevel": "TARGET", - "AttributeName": "BOOKED_APPOINTMENT_DATE", - "CohortLabel": "elid_all_people", - "Priority": 100 - }, - { - "Type": "F", - "Name": "Remove under 65 Years at end of campaign", - "Description": "Ensure anyone who has a PDS date of birth which determines their age to be less than 65 years at the end of campaign is filtered out.", - "Priority": 120, - "AttributeLevel": "PERSON", - "AttributeName": "DATE_OF_BIRTH", - "Operator": ">=", - "Comparator": "19620401", - "CohortLabel": "flu_65+_autumnwinter2026" - }, - { - "Type": "S", - "Name": "AlreadyVaccinated", - "Description": "Vaccinated within the current campaign", - "Priority": 500, - "AttributeLevel": "TARGET", - "AttributeTarget": "FLU", - "AttributeName": "LAST_SUCCESSFUL_DATE", - "Operator": ">=", - "Comparator": "<>", - "RuleStop": "Y" - }, - { - "Type": "S", - "Name": "AlreadyVaccinated", - "Description": "Aged 9 years or over", - "Priority": 500, - "AttributeLevel": "PERSON", - "AttributeName": "DATE_OF_BIRTH", - "Operator": "Y<=", - "Comparator": "-9", - "RuleStop": "Y" - }, - { - "Type": "S", - "Name": "TooClose", - "Description": "Vaccinated within the current campaign", - "Priority": 520, - "AttributeLevel": "TARGET", - "AttributeTarget": "FLU", - "AttributeName": "LAST_SUCCESSFUL_DATE", - "Operator": ">=", - "Comparator": "<>", - "RuleStop": "Y" - }, - { - "Type": "S", - "Name": "TooClose", - "Description": "Less that 4 weeks since last vaccination", - "Priority": 520, - "AttributeLevel": "TARGET", - "AttributeTarget": "FLU", - "AttributeName": "LAST_SUCCESSFUL_DATE", - "Operator": "D>=", - "Comparator": "-28", - "RuleStop": "Y" - }, - { - "Type": "S", - "Name": "TooClose", - "Description": "Member of the immunosuppressed eligible cohort", - "Priority": 520, - "AttributeLevel": "COHORT", - "AttributeName": "COHORT_LABEL", - "Operator": "MemberOf", - "Comparator": "flu_immunosuppression", - "RuleStop": "Y" - }, - { - "Type": "S", - "Name": "TooClose", - "Description": "Have had only 1 previous vaccination including previous campaigns", - "Priority": 520, - "AttributeLevel": "TARGET", - "AttributeTarget": "FLU", - "AttributeName": "SUCCESSFUL_PROCEDURE_COUNT", - "Operator": "=", - "Comparator": "1", - "RuleStop": "Y" - }, - { - "Type": "S", - "Name": "AlreadyVaccinatedNoAdditionalDose", - "Description": "Vaccinated within the current campaign", - "Priority": 540, - "AttributeLevel": "TARGET", - "AttributeTarget": "FLU", - "AttributeName": "LAST_SUCCESSFUL_DATE", - "Operator": ">=", - "Comparator": "<>", - "RuleStop": "Y" - }, - { - "Type": "S", - "Name": "AlreadyVaccinatedNoAdditionalDose", - "Description": "Have had two or more vaccinations including previous campaigns", - "Priority": 540, - "AttributeLevel": "TARGET", - "AttributeTarget": "FLU", - "AttributeName": "SUCCESSFUL_PROCEDURE_COUNT", - "Operator": ">=", - "Comparator": "2", - "RuleStop": "Y" - }, - { - "Type": "S", - "Name": "AlreadyVaccinated", - "Description": "Under 9 years old", - "Priority": 540, - "AttributeLevel": "PERSON", - "AttributeName": "DATE_OF_BIRTH", - "Operator": "Y>", - "Comparator": "-9", - "RuleStop": "Y" - }, - { - "Type": "S", - "Name": "SchoolAge", - "Description": "", - "Priority": 560, - "AttributeLevel": "COHORT", - "AttributeName": "COHORT_LABEL", - "Operator": "MemberOf", - "Comparator": "flu_4to16_autumnwinter2026", - "RuleStop": "Y" - }, - { - "Type": "S", - "Name": "FutureBookingNBS", - "Description": "Future booking", - "Priority": 700, - "Operator": "D>=", - "Comparator": "0", - "AttributeTarget": "FLU", - "AttributeLevel": "TARGET", - "AttributeName": "BOOKED_APPOINTMENT_DATE", - "RuleStop": "Y" - }, - { - "Type": "S", - "Name": "FutureBookingNBS", - "Description": "Booking Provider is MYA or NBS", - "Priority": 700, - "Operator": "in", - "Comparator": "NBS,MYA", - "AttributeTarget": "FLU", - "AttributeLevel": "TARGET", - "AttributeName": "BOOKED_APPOINTMENT_PROVIDER", - "RuleStop": "Y" - }, - { - "Type": "S", - "Name": "FutureBookingLocal", - "Description": "Local future booking", - "Priority": 750, - "Operator": "D>=", - "Comparator": "0", - "AttributeTarget": "FLU", - "AttributeLevel": "TARGET", - "AttributeName": "BOOKED_APPOINTMENT_DATE", - "RuleStop": "Y" - }, - { - "Type": "R", - "Name": "AdditionalDoseRequired", - "Description": "Vaccinated within the current campaign", - "Priority": 1000, - "AttributeLevel": "TARGET", - "AttributeTarget": "FLU", - "AttributeName": "LAST_SUCCESSFUL_DATE", - "Operator": ">=", - "Comparator": "<>", - "CommsRouting": "BOOK_NBS|ADDITIONAL_DOSE_REQUIRED" - }, - { - "Type": "R", - "Name": "AdditionalDoseRequired", - "Description": "Under 9 years old", - "Priority": 1000, - "AttributeLevel": "PERSON", - "AttributeName": "DATE_OF_BIRTH", - "Operator": "Y>", - "Comparator": "-9", - "CommsRouting": "BOOK_NBS|ADDITIONAL_DOSE_REQUIRED" - }, - { - "Type": "R", - "Name": "AdditionalDoseRequired", - "Description": "Member of the immunosuppressed eligible cohort", - "Priority": 1000, - "AttributeLevel": "COHORT", - "AttributeName": "COHORT_LABEL", - "Operator": "MemberOf", - "Comparator": "flu_immunosuppression", - "CommsRouting": "BOOK_NBS|ADDITIONAL_DOSE_REQUIRED" - }, - { - "Type": "R", - "Name": "AdditionalDoseRequired", - "Description": "Have had only 1 previous vaccination including previous campaigns", - "Priority": 1000, - "AttributeLevel": "TARGET", - "AttributeTarget": "FLU", - "AttributeName": "SUCCESSFUL_PROCEDURE_COUNT", - "Operator": "=", - "Comparator": "1", - "CommsRouting": "BOOK_NBS|ADDITIONAL_DOSE_REQUIRED" - }, - { - "Type": "X", - "Name": "MayRequireAdditionalDose", - "Description": "Under 9 years old", - "Priority": 3000, - "AttributeLevel": "PERSON", - "AttributeName": "DATE_OF_BIRTH", - "Operator": "Y<", - "Comparator": "-9", - "CommsRouting": "MAY_REQUIRE_ADDITIONAL_DOSE" - }, - { - "Type": "X", - "Name": "MayRequireAdditionalDose", - "Description": "Vaccinated within the current campaign", - "Priority": 3000, - "AttributeLevel": "TARGET", - "AttributeTarget": "FLU", - "AttributeName": "LAST_SUCCESSFUL_DATE", - "Operator": ">=", - "Comparator": "<>", - "CommsRouting": "MAY_REQUIRE_ADDITIONAL_DOSE" - }, - { - "Type": "X", - "Name": "MayRequireAdditionalDose", - "Description": "Have had less than 2 vaccinations including previous campaigns", - "Priority": 3000, - "AttributeLevel": "TARGET", - "AttributeTarget": "FLU", - "AttributeName": "SUCCESSFUL_PROCEDURE_COUNT", - "Operator": "<", - "Comparator": "2", - "CommsRouting": "MAY_REQUIRE_ADDITIONAL_DOSE" - }, - { - "Type": "Y", - "Name": "TooCloseForAdditionalDoseAction", - "Description": "Vaccinated within the current campaign", - "Priority": 3100, - "AttributeLevel": "TARGET", - "AttributeTarget": "FLU", - "AttributeName": "LAST_SUCCESSFUL_DATE", - "Operator": ">=", - "Comparator": "<>", - "CommsRouting": "LAST_VACCINATION_DATE|EARLIEST_NEXT_VACCINATION_DATE|ADDITIONAL_DOSE_REQUIRED" - }, - { - "Type": "Y", - "Name": "TooCloseForAdditionalDoseAction", - "Description": "Less that 4 weeks since last vaccination", - "Priority": 3100, - "AttributeLevel": "TARGET", - "AttributeTarget": "FLU", - "AttributeName": "LAST_SUCCESSFUL_DATE", - "Operator": "D>=", - "Comparator": "-28", - "CommsRouting": "LAST_VACCINATION_DATE|EARLIEST_NEXT_VACCINATION_DATE|ADDITIONAL_DOSE_REQUIRED" - }, - { - "Type": "Y", - "Name": "TooCloseForAdditionalDoseAction", - "Description": "Under 9 years old", - "Priority": 3100, - "AttributeLevel": "PERSON", - "AttributeName": "DATE_OF_BIRTH", - "Operator": "Y>", - "Comparator": "-9", - "CommsRouting": "LAST_VACCINATION_DATE|EARLIEST_NEXT_VACCINATION_DATE|ADDITIONAL_DOSE_REQUIRED" - }, - { - "Type": "Y", - "Name": "TooCloseForAdditionalDoseAction", - "Description": "Member of the immunosuppressed eligible cohort", - "Priority": 3100, - "AttributeLevel": "COHORT", - "AttributeName": "COHORT_LABEL", - "Operator": "MemberOf", - "Comparator": "flu_immunosuppression", - "CommsRouting": "LAST_VACCINATION_DATE|EARLIEST_NEXT_VACCINATION_DATE|ADDITIONAL_DOSE_REQUIRED" - }, - { - "Type": "Y", - "Name": "TooCloseForAdditionalDoseAction", - "Description": "Under 9 years old", - "Priority": 3100, - "AttributeLevel": "TARGET", - "AttributeTarget": "FLU", - "AttributeName": "SUCCESSFUL_PROCEDURE_COUNT", - "Operator": "<", - "Comparator": "2", - "CommsRouting": "LAST_VACCINATION_DATE|EARLIEST_NEXT_VACCINATION_DATE|ADDITIONAL_DOSE_REQUIRED" - }, - { - "Type": "Y", - "Name": "Already vaccinated default text", - "Description": "Vaccinated within the current campaign", - "Priority": 3200, - "AttributeLevel": "TARGET", - "AttributeTarget": "FLU", - "AttributeName": "LAST_SUCCESSFUL_DATE", - "Operator": ">=", - "Comparator": "<>", - "CommsRouting": "LAST_VACCINATION_DATE" - }, - { - "Type": "Y", - "Name": "FutureBookingDate", - "Description": "Future booking date", - "Priority": 3300, - "AttributeLevel": "TARGET", - "AttributeTarget": "FLU", - "AttributeName": "BOOKED_APPOINTMENT_DATE", - "Operator": "D>=", - "Comparator": "0", - "CommsRouting": "FUTURE_APPOINTMENT_DATE" - } - ], - "ActionsMapper": { - "BOOK_NBS": { - "ExternalRoutingCode": "BookNBS", - "ActionDescription": "Eligible to book", - "ActionType": "InfoText", - "UrlLink": null, - "UrlLabel": "" - }, - "LAST_VACCINATION_DATE": { - "ExternalRoutingCode": "DateOfLastVaccination", - "ActionDescription": "[[TARGET.FLU.LAST_SUCCESSFUL_DATE:DATE(%Y-%m-%d)]]", - "ActionType": "DataValue", - "UrlLink": null, - "UrlLabel": "" - }, - "EARLIEST_NEXT_VACCINATION_DATE": { - "ExternalRoutingCode": "DateOfNextEarliestVaccination", - "ActionDescription": "[[TARGET.FLU.NEXT_DOSE_DUE:ADD_DAYS(29):DATE(%Y-%m-%d)]]", - "ActionType": "DataValue", - "UrlLink": null, - "UrlLabel": "" - }, - "ADDITIONAL_DOSE_REQUIRED": { - "ExternalRoutingCode": "AdditionalDoseRequired", - "ActionDescription": "Yes", - "ActionType": "DataValue", - "UrlLink": null, - "UrlLabel": "" - }, - "MAY_REQUIRE_ADDITIONAL_DOSE": { - "ExternalRoutingCode": "AdditionalDoseRequired", - "ActionDescription": "Maybe", - "ActionType": "DataValue", - "UrlLink": null, - "UrlLabel": "" - }, - "FUTURE_APPOINTMENT_DATE": { - "ExternalRoutingCode": "FutureBookingDate", - "ActionDescription": "[[TARGET.FLU.BOOKED_APPOINTMENT_DATE:DATE(%Y-%m-%d)]]", - "ActionType": "DataValue", - "UrlLink": null, - "UrlLabel": "" - } - } - } - ] - } -} diff --git a/data/configs/inProgressTestConfigs/NBS_Flu_Config_AutumnWinter2026_v0.2WIP_InActive.json b/data/configs/inProgressTestConfigs/NBS_Flu_Config_AutumnWinter2026_v0.2WIP_InActive.json deleted file mode 100644 index d3dbc6fa..00000000 --- a/data/configs/inProgressTestConfigs/NBS_Flu_Config_AutumnWinter2026_v0.2WIP_InActive.json +++ /dev/null @@ -1,557 +0,0 @@ -{ - "CampaignConfig": { - "ID": "b21cff69-a2c7-4e78-a514-ce067c09df0c", - "Version": 1, - "Name": "EliD NBS Flu campaign config Release 1", - "Type": "V", - "Target": "FLU", - "Manager": [ - "example@nhs.net" - ], - "Approver": [ - "example@nhs.net" - ], - "Reviewer": [ - "example@nhs.net" - ], - "IterationFrequency": "X", - "IterationType": "O", - "IterationTime": "07:00:00", - "StartDate": "<>", - "EndDate": "20270331", - "ApprovalMinimum": 0, - "ApprovalMaximum": 0, - "DefaultCommsRouting": "BOOK_NBS", - "Iterations": [ - { - "ID": "2834b74a-4170-4594-9d2c-9e6d9af41d20", - "DefaultCommsRouting": "BOOK_NBS", - "DefaultNotActionableRouting": "", - "DefaultNotEligibleRouting": "", - "Version": 1, - "Name": "EliD NBS Flu campaign config Release 1", - "IterationDate": "<>", - "IterationNumber": 1, - "CommsType": "I", - "ApprovalMinimum": 0, - "ApprovalMaximum": 0, - "Type": "O", - "StatusText": { - "NotEligible": "We do not believe you can have it", - "NotActionable": "You should have the Flu vaccine", - "Actionable": "You should have the Flu vaccine" - }, - "IterationCohorts": [ - { - "CohortLabel": "flu_65+_autumnwinter2026", - "CohortGroup": "flu_age_65+", - "PositiveDescription": "are aged 65 or over (including those who will be 65 by 31 March 2027)", - "NegativeDescription": "are not aged 65 or over (including those who will be 65 by 31 March 2027)", - "Priority": 10, - "Virtual": "N" - }, - { - "CohortLabel": "flu_2to3_autumnwinter2026", - "CohortGroup": "flu_age_2to3", - "PositiveDescription": "are aged 2 or 3 years (born between 1 September 2022 and 31 August 2024)", - "NegativeDescription": "are not aged 2 or 3 years (born between 1 September 2022 and 31 August 2024)", - "Priority": 15, - "Virtual": "N" - }, - { - "CohortLabel": "flu_4to16_autumnwinter2026", - "CohortGroup": "flu_school_age", - "PositiveDescription": "are of school age (Reception to Year 11)", - "NegativeDescription": "are not of school age (Reception to Year 11)", - "Priority": 20, - "Virtual": "N" - }, - { - "CohortLabel": "flu_immunosuppression", - "CohortGroup": "flu_clinical_risk", - "PositiveDescription": "have a weakened immune system because of a health condition or treatment", - "NegativeDescription": "do not have a weakened immune system because of a health condition or treatment", - "Priority": 25, - "Virtual": "N" - }, - { - "CohortLabel": "flu_diabetes", - "CohortGroup": "flu_clinical_risk", - "PositiveDescription": "have a weakened immune system because of a health condition or treatment", - "NegativeDescription": "do not have a weakened immune system because of a health condition or treatment", - "Priority": 30, - "Virtual": "N" - }, - { - "CohortLabel": "flu_chronic_heart_disease", - "CohortGroup": "flu_clinical_risk", - "PositiveDescription": "have a weakened immune system because of a health condition or treatment", - "NegativeDescription": "do not have a weakened immune system because of a health condition or treatment", - "Priority": 35, - "Virtual": "N" - }, - { - "CohortLabel": "flu_chronic_kidney_disease", - "CohortGroup": "flu_clinical_risk", - "PositiveDescription": "have a weakened immune system because of a health condition or treatment", - "NegativeDescription": "do not have a weakened immune system because of a health condition or treatment", - "Priority": 40, - "Virtual": "N" - }, - { - "CohortLabel": "flu_chronic_liver_disease", - "CohortGroup": "flu_clinical_risk", - "PositiveDescription": "have a weakened immune system because of a health condition or treatment", - "NegativeDescription": "do not have a weakened immune system because of a health condition or treatment", - "Priority": 45, - "Virtual": "N" - }, - { - "CohortLabel": "flu_chronic_neurological_disease", - "CohortGroup": "flu_clinical_risk", - "PositiveDescription": "have a weakened immune system because of a health condition or treatment", - "NegativeDescription": "do not have a weakened immune system because of a health condition or treatment", - "Priority": 50, - "Virtual": "N" - }, - { - "CohortLabel": "flu_chronic_respiratory_disease", - "CohortGroup": "flu_clinical_risk", - "PositiveDescription": "have a weakened immune system because of a health condition or treatment", - "NegativeDescription": "do not have a weakened immune system because of a health condition or treatment", - "Priority": 55, - "Virtual": "N" - }, - { - "CohortLabel": "flu_coded_eligibility", - "CohortGroup": "flu_clinical_risk", - "PositiveDescription": "have a weakened immune system because of a health condition or treatment", - "NegativeDescription": "do not have a weakened immune system because of a health condition or treatment", - "Priority": 60, - "Virtual": "N" - }, - { - "CohortLabel": "flu_morbid_obesity", - "CohortGroup": "flu_clinical_risk", - "PositiveDescription": "have a weakened immune system because of a health condition or treatment", - "NegativeDescription": "do not have a weakened immune system because of a health condition or treatment", - "Priority": 65, - "Virtual": "N" - }, - { - "CohortLabel": "care_home_residents_older_adults", - "CohortGroup": "care_home_residents", - "PositiveDescription": "live in a care home for older adults", - "NegativeDescription": "do not live in a care home for older adults", - "Priority": 70, - "Virtual": "N" - }, - { - "CohortLabel": "elid_all_people", - "CohortGroup": "magic_cohort", - "PositiveDescription": "", - "NegativeDescription": "", - "Priority": 90, - "Virtual": "Y" - } - ], - "IterationRules": [ - { - "Type": "F", - "Name": "Remove from magic cohort unless already vaccinated or have future booking", - "Description": "Remove anyone NOT already vaccinated within the current campaign and do not have a future booking from the magic cohort", - "Operator": "<", - "Comparator": "<>[[NVL:18000101]]", - "AttributeTarget": "FLU", - "AttributeLevel": "TARGET", - "AttributeName": "LAST_SUCCESSFUL_DATE", - "CohortLabel": "elid_all_people", - "Priority": 100 - }, - { - "Type": "F", - "Name": "Remove from magic cohort unless already vaccinated or have future booking", - "Description": "Remove anyone without a future booking from magic cohort", - "Operator": "D<", - "Comparator": "0[[NVL:18000101]]", - "AttributeTarget": "FLU", - "AttributeLevel": "TARGET", - "AttributeName": "BOOKED_APPOINTMENT_DATE", - "CohortLabel": "elid_all_people", - "Priority": 100 - }, - { - "Type": "F", - "Name": "Remove under 65 Years at end of campaign", - "Description": "Ensure anyone who has a PDS date of birth which determines their age to be less than 65 years at the end of campaign is filtered out.", - "Priority": 120, - "AttributeLevel": "PERSON", - "AttributeName": "DATE_OF_BIRTH", - "Operator": ">=", - "Comparator": "19620401", - "CohortLabel": "flu_65+_autumnwinter2026" - }, - { - "Type": "S", - "Name": "AlreadyVaccinated", - "Description": "Vaccinated within the current campaign", - "Priority": 500, - "AttributeLevel": "TARGET", - "AttributeTarget": "FLU", - "AttributeName": "LAST_SUCCESSFUL_DATE", - "Operator": ">=", - "Comparator": "<>", - "RuleStop": "Y" - }, - { - "Type": "S", - "Name": "AlreadyVaccinated", - "Description": "Aged 9 years or over", - "Priority": 500, - "AttributeLevel": "PERSON", - "AttributeName": "DATE_OF_BIRTH", - "Operator": "Y<=", - "Comparator": "-9", - "RuleStop": "Y" - }, - { - "Type": "S", - "Name": "TooClose", - "Description": "Vaccinated within the current campaign", - "Priority": 520, - "AttributeLevel": "TARGET", - "AttributeTarget": "FLU", - "AttributeName": "LAST_SUCCESSFUL_DATE", - "Operator": ">=", - "Comparator": "<>", - "RuleStop": "Y" - }, - { - "Type": "S", - "Name": "TooClose", - "Description": "Less that 4 weeks since last vaccination", - "Priority": 520, - "AttributeLevel": "TARGET", - "AttributeTarget": "FLU", - "AttributeName": "LAST_SUCCESSFUL_DATE", - "Operator": "D>=", - "Comparator": "-28", - "RuleStop": "Y" - }, - { - "Type": "S", - "Name": "TooClose", - "Description": "Member of the immunosuppressed eligible cohort", - "Priority": 520, - "AttributeLevel": "COHORT", - "AttributeName": "COHORT_LABEL", - "Operator": "MemberOf", - "Comparator": "flu_immunosuppression", - "RuleStop": "Y" - }, - { - "Type": "S", - "Name": "TooClose", - "Description": "Have had only 1 previous vaccination including previous campaigns", - "Priority": 520, - "AttributeLevel": "TARGET", - "AttributeTarget": "FLU", - "AttributeName": "SUCCESSFUL_PROCEDURE_COUNT", - "Operator": "=", - "Comparator": "1", - "RuleStop": "Y" - }, - { - "Type": "S", - "Name": "AlreadyVaccinatedNoAdditionalDose", - "Description": "Vaccinated within the current campaign", - "Priority": 540, - "AttributeLevel": "TARGET", - "AttributeTarget": "FLU", - "AttributeName": "LAST_SUCCESSFUL_DATE", - "Operator": ">=", - "Comparator": "<>", - "RuleStop": "Y" - }, - { - "Type": "S", - "Name": "AlreadyVaccinatedNoAdditionalDose", - "Description": "Have had two or more vaccinations including previous campaigns", - "Priority": 540, - "AttributeLevel": "TARGET", - "AttributeTarget": "FLU", - "AttributeName": "SUCCESSFUL_PROCEDURE_COUNT", - "Operator": ">=", - "Comparator": "2", - "RuleStop": "Y" - }, - { - "Type": "S", - "Name": "AlreadyVaccinated", - "Description": "Under 9 years old", - "Priority": 540, - "AttributeLevel": "PERSON", - "AttributeName": "DATE_OF_BIRTH", - "Operator": "Y>", - "Comparator": "-9", - "RuleStop": "Y" - }, - { - "Type": "S", - "Name": "SchoolAge", - "Description": "", - "Priority": 560, - "AttributeLevel": "COHORT", - "AttributeName": "COHORT_LABEL", - "Operator": "MemberOf", - "Comparator": "flu_4to16_autumnwinter2026", - "RuleStop": "Y" - }, - { - "Type": "S", - "Name": "FutureBookingNBS", - "Description": "Future booking", - "Priority": 700, - "Operator": "D>=", - "Comparator": "0", - "AttributeTarget": "FLU", - "AttributeLevel": "TARGET", - "AttributeName": "BOOKED_APPOINTMENT_DATE", - "RuleStop": "Y" - }, - { - "Type": "S", - "Name": "FutureBookingNBS", - "Description": "Booking Provider is MYA or NBS", - "Priority": 700, - "Operator": "in", - "Comparator": "NBS,MYA", - "AttributeTarget": "FLU", - "AttributeLevel": "TARGET", - "AttributeName": "BOOKED_APPOINTMENT_PROVIDER", - "RuleStop": "Y" - }, - { - "Type": "S", - "Name": "FutureBookingLocal", - "Description": "Local future booking", - "Priority": 750, - "Operator": "D>=", - "Comparator": "0", - "AttributeTarget": "FLU", - "AttributeLevel": "TARGET", - "AttributeName": "BOOKED_APPOINTMENT_DATE", - "RuleStop": "Y" - }, - { - "Type": "R", - "Name": "AdditionalDoseRequired", - "Description": "Vaccinated within the current campaign", - "Priority": 1000, - "AttributeLevel": "TARGET", - "AttributeTarget": "FLU", - "AttributeName": "LAST_SUCCESSFUL_DATE", - "Operator": ">=", - "Comparator": "<>", - "CommsRouting": "BOOK_NBS|ADDITIONAL_DOSE_REQUIRED" - }, - { - "Type": "R", - "Name": "AdditionalDoseRequired", - "Description": "Under 9 years old", - "Priority": 1000, - "AttributeLevel": "PERSON", - "AttributeName": "DATE_OF_BIRTH", - "Operator": "Y>", - "Comparator": "-9", - "CommsRouting": "BOOK_NBS|ADDITIONAL_DOSE_REQUIRED" - }, - { - "Type": "R", - "Name": "AdditionalDoseRequired", - "Description": "Member of the immunosuppressed eligible cohort", - "Priority": 1000, - "AttributeLevel": "COHORT", - "AttributeName": "COHORT_LABEL", - "Operator": "MemberOf", - "Comparator": "flu_immunosuppression", - "CommsRouting": "BOOK_NBS|ADDITIONAL_DOSE_REQUIRED" - }, - { - "Type": "R", - "Name": "AdditionalDoseRequired", - "Description": "Have had only 1 previous vaccination including previous campaigns", - "Priority": 1000, - "AttributeLevel": "TARGET", - "AttributeTarget": "FLU", - "AttributeName": "SUCCESSFUL_PROCEDURE_COUNT", - "Operator": "=", - "Comparator": "1", - "CommsRouting": "BOOK_NBS|ADDITIONAL_DOSE_REQUIRED" - }, - { - "Type": "X", - "Name": "MayRequireAdditionalDose", - "Description": "Under 9 years old", - "Priority": 3000, - "AttributeLevel": "PERSON", - "AttributeName": "DATE_OF_BIRTH", - "Operator": "Y<", - "Comparator": "-9", - "CommsRouting": "MAY_REQUIRE_ADDITIONAL_DOSE" - }, - { - "Type": "X", - "Name": "MayRequireAdditionalDose", - "Description": "Vaccinated within the current campaign", - "Priority": 3000, - "AttributeLevel": "TARGET", - "AttributeTarget": "FLU", - "AttributeName": "LAST_SUCCESSFUL_DATE", - "Operator": ">=", - "Comparator": "<>", - "CommsRouting": "MAY_REQUIRE_ADDITIONAL_DOSE" - }, - { - "Type": "X", - "Name": "MayRequireAdditionalDose", - "Description": "Have had less than 2 vaccinations including previous campaigns", - "Priority": 3000, - "AttributeLevel": "TARGET", - "AttributeTarget": "FLU", - "AttributeName": "SUCCESSFUL_PROCEDURE_COUNT", - "Operator": "<", - "Comparator": "2", - "CommsRouting": "MAY_REQUIRE_ADDITIONAL_DOSE" - }, - { - "Type": "Y", - "Name": "TooCloseForAdditionalDoseAction", - "Description": "Vaccinated within the current campaign", - "Priority": 3100, - "AttributeLevel": "TARGET", - "AttributeTarget": "FLU", - "AttributeName": "LAST_SUCCESSFUL_DATE", - "Operator": ">=", - "Comparator": "<>", - "CommsRouting": "LAST_VACCINATION_DATE|EARLIEST_NEXT_VACCINATION_DATE|ADDITIONAL_DOSE_REQUIRED" - }, - { - "Type": "Y", - "Name": "TooCloseForAdditionalDoseAction", - "Description": "Less that 4 weeks since last vaccination", - "Priority": 3100, - "AttributeLevel": "TARGET", - "AttributeTarget": "FLU", - "AttributeName": "LAST_SUCCESSFUL_DATE", - "Operator": "D>=", - "Comparator": "-28", - "CommsRouting": "LAST_VACCINATION_DATE|EARLIEST_NEXT_VACCINATION_DATE|ADDITIONAL_DOSE_REQUIRED" - }, - { - "Type": "Y", - "Name": "TooCloseForAdditionalDoseAction", - "Description": "Under 9 years old", - "Priority": 3100, - "AttributeLevel": "PERSON", - "AttributeName": "DATE_OF_BIRTH", - "Operator": "Y>", - "Comparator": "-9", - "CommsRouting": "LAST_VACCINATION_DATE|EARLIEST_NEXT_VACCINATION_DATE|ADDITIONAL_DOSE_REQUIRED" - }, - { - "Type": "Y", - "Name": "TooCloseForAdditionalDoseAction", - "Description": "Member of the immunosuppressed eligible cohort", - "Priority": 3100, - "AttributeLevel": "COHORT", - "AttributeName": "COHORT_LABEL", - "Operator": "MemberOf", - "Comparator": "flu_immunosuppression", - "CommsRouting": "LAST_VACCINATION_DATE|EARLIEST_NEXT_VACCINATION_DATE|ADDITIONAL_DOSE_REQUIRED" - }, - { - "Type": "Y", - "Name": "TooCloseForAdditionalDoseAction", - "Description": "Under 9 years old", - "Priority": 3100, - "AttributeLevel": "TARGET", - "AttributeTarget": "FLU", - "AttributeName": "SUCCESSFUL_PROCEDURE_COUNT", - "Operator": "<", - "Comparator": "2", - "CommsRouting": "LAST_VACCINATION_DATE|EARLIEST_NEXT_VACCINATION_DATE|ADDITIONAL_DOSE_REQUIRED" - }, - { - "Type": "Y", - "Name": "Already vaccinated default text", - "Description": "Vaccinated within the current campaign", - "Priority": 3200, - "AttributeLevel": "TARGET", - "AttributeTarget": "FLU", - "AttributeName": "LAST_SUCCESSFUL_DATE", - "Operator": ">=", - "Comparator": "<>", - "CommsRouting": "LAST_VACCINATION_DATE" - }, - { - "Type": "Y", - "Name": "FutureBookingDate", - "Description": "Future booking date", - "Priority": 3300, - "AttributeLevel": "TARGET", - "AttributeTarget": "FLU", - "AttributeName": "BOOKED_APPOINTMENT_DATE", - "Operator": "D>=", - "Comparator": "0", - "CommsRouting": "FUTURE_APPOINTMENT_DATE" - } - ], - "ActionsMapper": { - "BOOK_NBS": { - "ExternalRoutingCode": "BookNBS", - "ActionDescription": "Eligible to book", - "ActionType": "InfoText", - "UrlLink": null, - "UrlLabel": "" - }, - "LAST_VACCINATION_DATE": { - "ExternalRoutingCode": "DateOfLastVaccination", - "ActionDescription": "[[TARGET.FLU.LAST_SUCCESSFUL_DATE:DATE(%Y-%m-%d)]]", - "ActionType": "DataValue", - "UrlLink": null, - "UrlLabel": "" - }, - "EARLIEST_NEXT_VACCINATION_DATE": { - "ExternalRoutingCode": "DateOfNextEarliestVaccination", - "ActionDescription": "[[TARGET.FLU.NEXT_DOSE_DUE:ADD_DAYS(29):DATE(%Y-%m-%d)]]", - "ActionType": "DataValue", - "UrlLink": null, - "UrlLabel": "" - }, - "ADDITIONAL_DOSE_REQUIRED": { - "ExternalRoutingCode": "AdditionalDoseRequired", - "ActionDescription": "Yes", - "ActionType": "DataValue", - "UrlLink": null, - "UrlLabel": "" - }, - "MAY_REQUIRE_ADDITIONAL_DOSE": { - "ExternalRoutingCode": "AdditionalDoseRequired", - "ActionDescription": "Maybe", - "ActionType": "DataValue", - "UrlLink": null, - "UrlLabel": "" - }, - "FUTURE_APPOINTMENT_DATE": { - "ExternalRoutingCode": "FutureBookingDate", - "ActionDescription": "[[TARGET.FLU.BOOKED_APPOINTMENT_DATE:DATE(%Y-%m-%d)]]", - "ActionType": "DataValue", - "UrlLink": null, - "UrlLabel": "" - } - } - } - ] - } -} diff --git a/data/configs/inProgressTestConfigs/NBS_Flu_Config_AutumnWinter2026_v0.4WIP.json b/data/configs/inProgressTestConfigs/NBS_Flu_Config_AutumnWinter2026_v0.5WIP.json similarity index 93% rename from data/configs/inProgressTestConfigs/NBS_Flu_Config_AutumnWinter2026_v0.4WIP.json rename to data/configs/inProgressTestConfigs/NBS_Flu_Config_AutumnWinter2026_v0.5WIP.json index 02fbd2a3..79279ab6 100644 --- a/data/configs/inProgressTestConfigs/NBS_Flu_Config_AutumnWinter2026_v0.4WIP.json +++ b/data/configs/inProgressTestConfigs/NBS_Flu_Config_AutumnWinter2026_v0.5WIP.json @@ -296,6 +296,41 @@ "Comparator": "-9", "RuleStop": "Y" }, + { + "Type": "S", + "Name": "MayRequireAdditionalDose", + "Description": "Already vaccinated but may require an additional dose if a carer or live with someone who is immunosuppressed", + "Priority": 550, + "AttributeLevel": "PERSON", + "AttributeName": "DATE_OF_BIRTH", + "Operator": "Y>", + "Comparator": "-9", + "RuleStop": "Y" + }, + { + "Type": "S", + "Name": "MayRequireAdditionalDose", + "Description": "Already vaccinated but may require an additional dose if a carer or live with someone who is immunosuppressed", + "Priority": 550, + "AttributeLevel": "TARGET", + "AttributeTarget": "FLU", + "AttributeName": "LAST_SUCCESSFUL_DATE", + "Operator": ">=", + "Comparator": "<>", + "RuleStop": "Y" + }, + { + "Type": "S", + "Name": "MayRequireAdditionalDose", + "Description": "Already vaccinated but may require an additional dose if a carer or live with someone who is immunosuppressed", + "Priority": 550, + "AttributeLevel": "TARGET", + "AttributeTarget": "FLU", + "AttributeName": "SUCCESSFUL_PROCEDURE_COUNT", + "Operator": "<", + "Comparator": "2", + "RuleStop": "Y" + }, { "Type": "S", "Name": "SchoolAge", @@ -346,7 +381,7 @@ { "Type": "R", "Name": "AdditionalDoseRequired", - "Description": "Requires an additional vacination dose", + "Description": "Requires an additional vaccination dose", "Priority": 1000, "AttributeLevel": "TARGET", "AttributeTarget": "FLU", diff --git a/data/configs/inProgressTestConfigs/NBS_Flu_Config_AutumnWinter2026_v0.4WIP_Inactive.json b/data/configs/inProgressTestConfigs/NBS_Flu_Config_AutumnWinter2026_v0.5WIP_Inactive.json similarity index 93% rename from data/configs/inProgressTestConfigs/NBS_Flu_Config_AutumnWinter2026_v0.4WIP_Inactive.json rename to data/configs/inProgressTestConfigs/NBS_Flu_Config_AutumnWinter2026_v0.5WIP_Inactive.json index 9a51da35..75b0484d 100644 --- a/data/configs/inProgressTestConfigs/NBS_Flu_Config_AutumnWinter2026_v0.4WIP_Inactive.json +++ b/data/configs/inProgressTestConfigs/NBS_Flu_Config_AutumnWinter2026_v0.5WIP_Inactive.json @@ -296,6 +296,41 @@ "Comparator": "-9", "RuleStop": "Y" }, + { + "Type": "S", + "Name": "MayRequireAdditionalDose", + "Description": "Already vaccinated but may require an additional dose if a carer or live with someone who is immunosuppressed", + "Priority": 550, + "AttributeLevel": "PERSON", + "AttributeName": "DATE_OF_BIRTH", + "Operator": "Y>", + "Comparator": "-9", + "RuleStop": "Y" + }, + { + "Type": "S", + "Name": "MayRequireAdditionalDose", + "Description": "Already vaccinated but may require an additional dose if a carer or live with someone who is immunosuppressed", + "Priority": 550, + "AttributeLevel": "TARGET", + "AttributeTarget": "FLU", + "AttributeName": "LAST_SUCCESSFUL_DATE", + "Operator": ">=", + "Comparator": "<>", + "RuleStop": "Y" + }, + { + "Type": "S", + "Name": "MayRequireAdditionalDose", + "Description": "Already vaccinated but may require an additional dose if a carer or live with someone who is immunosuppressed", + "Priority": 550, + "AttributeLevel": "TARGET", + "AttributeTarget": "FLU", + "AttributeName": "SUCCESSFUL_PROCEDURE_COUNT", + "Operator": "<", + "Comparator": "2", + "RuleStop": "Y" + }, { "Type": "S", "Name": "SchoolAge", @@ -346,7 +381,7 @@ { "Type": "R", "Name": "AdditionalDoseRequired", - "Description": "Requires an additional vacination dose", + "Description": "Requires an additional vaccination dose", "Priority": 1000, "AttributeLevel": "TARGET", "AttributeTarget": "FLU", @@ -358,7 +393,7 @@ { "Type": "R", "Name": "AdditionalDoseRequired", - "Description": "Requires an additional vacination dose", + "Description": "Requires an additional vaccination dose", "Priority": 1000, "AttributeLevel": "PERSON", "AttributeName": "DATE_OF_BIRTH", @@ -369,7 +404,7 @@ { "Type": "R", "Name": "AdditionalDoseRequired", - "Description": "Requires an additional vacination dose", + "Description": "Requires an additional vaccination dose", "Priority": 1000, "AttributeLevel": "COHORT", "AttributeName": "COHORT_LABEL", @@ -380,7 +415,7 @@ { "Type": "R", "Name": "AdditionalDoseRequired", - "Description": "Requires an additional vacination dose", + "Description": "Requires an additional vaccination dose", "Priority": 1000, "AttributeLevel": "TARGET", "AttributeTarget": "FLU", @@ -454,7 +489,7 @@ "Priority": 3100, "AttributeLevel": "PERSON", "AttributeName": "DATE_OF_BIRTH", - "Operator": "Y<", + "Operator": "Y>", "Comparator": "-9", "CommsRouting": "MAY_REQUIRE_ADDITIONAL_DOSE" }, diff --git a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_A01.json b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_A01.json index a478d201..81ec8b96 100644 --- a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_A01.json +++ b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_A01.json @@ -8,7 +8,7 @@ "conditions": "flu" }, "config_filenames": [ - "NBS_Flu_Config_AutumnWinter2026_v0.4WIP.json" + "NBS_Flu_Config_AutumnWinter2026_v0.5WIP.json" ], "data": [ { diff --git a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_A02.json b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_A02.json index 0b086907..6f9702e7 100644 --- a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_A02.json +++ b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_A02.json @@ -8,7 +8,7 @@ "conditions": "flu" }, "config_filenames": [ - "NBS_Flu_Config_AutumnWinter2026_v0.4WIP.json" + "NBS_Flu_Config_AutumnWinter2026_v0.5WIP.json" ], "data": [ { diff --git a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_A03.json b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_A03.json index d01ffdb5..5ee74d70 100644 --- a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_A03.json +++ b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_A03.json @@ -8,7 +8,7 @@ "conditions": "flu" }, "config_filenames": [ - "NBS_Flu_Config_AutumnWinter2026_v0.4WIP.json" + "NBS_Flu_Config_AutumnWinter2026_v0.5WIP.json" ], "data": [ { diff --git a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_A04.json b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_A04.json index f0db5ead..4ad9b55a 100644 --- a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_A04.json +++ b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_A04.json @@ -8,7 +8,7 @@ "conditions": "flu" }, "config_filenames": [ - "NBS_Flu_Config_AutumnWinter2026_v0.4WIP.json" + "NBS_Flu_Config_AutumnWinter2026_v0.5WIP.json" ], "data": [ { diff --git a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA01.json b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA01.json index 7fa13db8..068b86e0 100644 --- a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA01.json +++ b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA01.json @@ -8,7 +8,7 @@ "conditions": "flu" }, "config_filenames": [ - "NBS_Flu_Config_AutumnWinter2026_v0.4WIP.json" + "NBS_Flu_Config_AutumnWinter2026_v0.5WIP.json" ], "data": [ { diff --git a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA02.json b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA02.json index c276fb9c..4254daba 100644 --- a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA02.json +++ b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA02.json @@ -8,7 +8,7 @@ "conditions": "flu" }, "config_filenames": [ - "NBS_Flu_Config_AutumnWinter2026_v0.4WIP.json" + "NBS_Flu_Config_AutumnWinter2026_v0.5WIP.json" ], "data": [ { diff --git a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA03.json b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA03.json index 941103b0..57b3bd9a 100644 --- a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA03.json +++ b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA03.json @@ -8,7 +8,7 @@ "conditions": "flu" }, "config_filenames": [ - "NBS_Flu_Config_AutumnWinter2026_v0.4WIP.json" + "NBS_Flu_Config_AutumnWinter2026_v0.5WIP.json" ], "data": [ { diff --git a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA04.json b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA04.json index 07926d03..e58f7353 100644 --- a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA04.json +++ b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA04.json @@ -8,7 +8,7 @@ "conditions": "flu" }, "config_filenames": [ - "NBS_Flu_Config_AutumnWinter2026_v0.4WIP.json" + "NBS_Flu_Config_AutumnWinter2026_v0.5WIP.json" ], "data": [ { diff --git a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA05.json b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA05.json index d84a4749..fc58c841 100644 --- a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA05.json +++ b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA05.json @@ -8,7 +8,7 @@ "conditions": "flu" }, "config_filenames": [ - "NBS_Flu_Config_AutumnWinter2026_v0.4WIP.json" + "NBS_Flu_Config_AutumnWinter2026_v0.5WIP.json" ], "data": [ { diff --git a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA06.json b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA06.json index 48a9865d..6110d4ef 100644 --- a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA06.json +++ b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA06.json @@ -8,7 +8,7 @@ "conditions": "flu" }, "config_filenames": [ - "NBS_Flu_Config_AutumnWinter2026_v0.4WIP.json" + "NBS_Flu_Config_AutumnWinter2026_v0.5WIP.json" ], "data": [ { diff --git a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA07.json b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA07.json index f80aa5ea..61ed36a9 100644 --- a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA07.json +++ b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA07.json @@ -8,7 +8,7 @@ "conditions": "flu" }, "config_filenames": [ - "NBS_Flu_Config_AutumnWinter2026_v0.4WIP_Inactive.json" + "NBS_Flu_Config_AutumnWinter2026_v0.5WIP_Inactive.json" ], "data": [ { diff --git a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA08.json b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA08.json index 61aa3ce6..7470e3f3 100644 --- a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA08.json +++ b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA08.json @@ -8,7 +8,7 @@ "conditions": "flu" }, "config_filenames": [ - "NBS_Flu_Config_AutumnWinter2026_v0.4WIP.json" + "NBS_Flu_Config_AutumnWinter2026_v0.5WIP.json" ], "data": [ { diff --git a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NE01.json b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NE01.json index d2769318..d1eb99fb 100644 --- a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NE01.json +++ b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NE01.json @@ -8,7 +8,7 @@ "conditions": "flu" }, "config_filenames": [ - "NBS_Flu_Config_AutumnWinter2026_v0.4WIP.json" + "NBS_Flu_Config_AutumnWinter2026_v0.5WIP.json" ], "data": [ { From 8d7c1c21ade01e0ad6f6fe225c6b6e4fa6c9704c Mon Sep 17 00:00:00 2001 From: Adam Waller <176666249+adam-wallernhs1@users.noreply.github.com> Date: Wed, 15 Apr 2026 15:17:24 +0100 Subject: [PATCH 08/10] new config file updates and new tests --- ..._Flu_Config_AutumnWinter2026_v0.6WIP.json} | 13 ++++++- ...ig_AutumnWinter2026_v0.6WIP_Inactive.json} | 13 ++++++- .../AUTO_FLU_NBS_INT_A01.json | 4 +-- .../AUTO_FLU_NBS_INT_A02.json | 4 +-- .../AUTO_FLU_NBS_INT_A03.json | 4 +-- .../AUTO_FLU_NBS_INT_A04.json | 4 +-- .../AUTO_FLU_NBS_INT_NA01.json | 4 +-- .../AUTO_FLU_NBS_INT_NA02.json | 4 +-- .../AUTO_FLU_NBS_INT_NA03.json | 4 +-- .../AUTO_FLU_NBS_INT_NA04.json | 4 +-- .../AUTO_FLU_NBS_INT_NA05.json | 4 +-- .../AUTO_FLU_NBS_INT_NA06.json | 4 +-- .../AUTO_FLU_NBS_INT_NA07.json | 4 +-- .../AUTO_FLU_NBS_INT_NA08.json | 4 +-- .../AUTO_FLU_NBS_INT_NE01.json | 11 +++--- .../AUTO_FLU_NBS_INT_XX01.json | 35 +++++++++++++++++++ .../AUTO_FLU_NBS_INT_NA08.json | 30 ++++++++++++++++ ...T_NE02.json => AUTO_FLU_NBS_INT_XX01.json} | 12 ++----- 18 files changed, 120 insertions(+), 42 deletions(-) rename data/configs/inProgressTestConfigs/{NBS_Flu_Config_AutumnWinter2026_v0.5WIP.json => NBS_Flu_Config_AutumnWinter2026_v0.6WIP.json} (97%) rename data/configs/inProgressTestConfigs/{NBS_Flu_Config_AutumnWinter2026_v0.5WIP_Inactive.json => NBS_Flu_Config_AutumnWinter2026_v0.6WIP_Inactive.json} (97%) create mode 100644 data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_XX01.json create mode 100644 data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_NA08.json rename data/responses/inProgressTestResponses/{AUTO_FLU_NBS_INT_NE02.json => AUTO_FLU_NBS_INT_XX01.json} (81%) diff --git a/data/configs/inProgressTestConfigs/NBS_Flu_Config_AutumnWinter2026_v0.5WIP.json b/data/configs/inProgressTestConfigs/NBS_Flu_Config_AutumnWinter2026_v0.6WIP.json similarity index 97% rename from data/configs/inProgressTestConfigs/NBS_Flu_Config_AutumnWinter2026_v0.5WIP.json rename to data/configs/inProgressTestConfigs/NBS_Flu_Config_AutumnWinter2026_v0.6WIP.json index 79279ab6..6b4fc6a0 100644 --- a/data/configs/inProgressTestConfigs/NBS_Flu_Config_AutumnWinter2026_v0.5WIP.json +++ b/data/configs/inProgressTestConfigs/NBS_Flu_Config_AutumnWinter2026_v0.6WIP.json @@ -287,7 +287,7 @@ }, { "Type": "S", - "Name": "AlreadyVaccinated", + "Name": "AlreadyVaccinatedNoAdditionalDose", "Description": "Already vaccinated in current campaign and no additional dose required", "Priority": 540, "AttributeLevel": "PERSON", @@ -331,6 +331,17 @@ "Comparator": "2", "RuleStop": "Y" }, + { + "Type": "S", + "Name": "MayRequireAdditionalDose", + "Description": "Already vaccinated but may require an additional dose if a carer or live with someone who is immunosuppressed", + "Priority": 550, + "AttributeLevel": "COHORT", + "AttributeName": "COHORT_LABEL", + "Operator": "NotMemberOf", + "Comparator": "flu_immunosuppression", + "RuleStop": "Y" + }, { "Type": "S", "Name": "SchoolAge", diff --git a/data/configs/inProgressTestConfigs/NBS_Flu_Config_AutumnWinter2026_v0.5WIP_Inactive.json b/data/configs/inProgressTestConfigs/NBS_Flu_Config_AutumnWinter2026_v0.6WIP_Inactive.json similarity index 97% rename from data/configs/inProgressTestConfigs/NBS_Flu_Config_AutumnWinter2026_v0.5WIP_Inactive.json rename to data/configs/inProgressTestConfigs/NBS_Flu_Config_AutumnWinter2026_v0.6WIP_Inactive.json index 75b0484d..c1b73246 100644 --- a/data/configs/inProgressTestConfigs/NBS_Flu_Config_AutumnWinter2026_v0.5WIP_Inactive.json +++ b/data/configs/inProgressTestConfigs/NBS_Flu_Config_AutumnWinter2026_v0.6WIP_Inactive.json @@ -287,7 +287,7 @@ }, { "Type": "S", - "Name": "AlreadyVaccinated", + "Name": "AlreadyVaccinatedNoAdditionalDose", "Description": "Already vaccinated in current campaign and no additional dose required", "Priority": 540, "AttributeLevel": "PERSON", @@ -331,6 +331,17 @@ "Comparator": "2", "RuleStop": "Y" }, + { + "Type": "S", + "Name": "MayRequireAdditionalDose", + "Description": "Already vaccinated but may require an additional dose if a carer or live with someone who is immunosuppressed", + "Priority": 550, + "AttributeLevel": "COHORT", + "AttributeName": "COHORT_LABEL", + "Operator": "NotMemberOf", + "Comparator": "flu_immunosuppression", + "RuleStop": "Y" + }, { "Type": "S", "Name": "SchoolAge", diff --git a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_A01.json b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_A01.json index 81ec8b96..39e7dbc3 100644 --- a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_A01.json +++ b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_A01.json @@ -2,13 +2,13 @@ "scenario_name": "FLU - NBS Integration - A01 - Actionable - Eligible, within single eligible cohort", "request_headers": { "NHSE-Product-ID": "P.XWA-VFF", - "nhsd-End-User-Organisation-ods": "elid_automation" + "nhsd-End-User-Organisation-ods": "elid_automation_20260415_2" }, "queryParams": { "conditions": "flu" }, "config_filenames": [ - "NBS_Flu_Config_AutumnWinter2026_v0.5WIP.json" + "NBS_Flu_Config_AutumnWinter2026_v0.6WIP.json" ], "data": [ { diff --git a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_A02.json b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_A02.json index 6f9702e7..997418dd 100644 --- a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_A02.json +++ b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_A02.json @@ -2,13 +2,13 @@ "scenario_name": "FLU - NBS Integration - A02 - Actionable - Eligible, within multiple eligible cohorts", "request_headers": { "NHSE-Product-ID": "P.XWA-VFF", - "nhsd-End-User-Organisation-ods": "elid_automation" + "nhsd-End-User-Organisation-ods": "elid_automation_20260415_2" }, "queryParams": { "conditions": "flu" }, "config_filenames": [ - "NBS_Flu_Config_AutumnWinter2026_v0.5WIP.json" + "NBS_Flu_Config_AutumnWinter2026_v0.6WIP.json" ], "data": [ { diff --git a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_A03.json b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_A03.json index 5ee74d70..4fccf1fd 100644 --- a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_A03.json +++ b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_A03.json @@ -2,13 +2,13 @@ "scenario_name": "FLU - NBS Integration - A03 - Actionable - Eligible, within care home residents eligible cohort", "request_headers": { "NHSE-Product-ID": "P.XWA-VFF", - "nhsd-End-User-Organisation-ods": "elid_automation" + "nhsd-End-User-Organisation-ods": "elid_automation_20260415_2" }, "queryParams": { "conditions": "flu" }, "config_filenames": [ - "NBS_Flu_Config_AutumnWinter2026_v0.5WIP.json" + "NBS_Flu_Config_AutumnWinter2026_v0.6WIP.json" ], "data": [ { diff --git a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_A04.json b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_A04.json index 4ad9b55a..e1b8834a 100644 --- a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_A04.json +++ b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_A04.json @@ -2,13 +2,13 @@ "scenario_name": "FLU - NBS Integration - A04 - Actionable - Additional Dose Required", "request_headers": { "NHSE-Product-ID": "P.XWA-VFF", - "nhsd-End-User-Organisation-ods": "elid_automation" + "nhsd-End-User-Organisation-ods": "elid_automation_20260415_2" }, "queryParams": { "conditions": "flu" }, "config_filenames": [ - "NBS_Flu_Config_AutumnWinter2026_v0.5WIP.json" + "NBS_Flu_Config_AutumnWinter2026_v0.6WIP.json" ], "data": [ { diff --git a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA01.json b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA01.json index 068b86e0..dc362032 100644 --- a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA01.json +++ b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA01.json @@ -2,13 +2,13 @@ "scenario_name": "FLU - NBS Integration - NA01 - Not Actionable - The individual has already been vaccinated within the current campaign", "request_headers": { "NHSE-Product-ID": "P.XWA-VFF", - "nhsd-End-User-Organisation-ods": "elid_automation" + "nhsd-End-User-Organisation-ods": "elid_automation_20260415_2" }, "queryParams": { "conditions": "flu" }, "config_filenames": [ - "NBS_Flu_Config_AutumnWinter2026_v0.5WIP.json" + "NBS_Flu_Config_AutumnWinter2026_v0.6WIP.json" ], "data": [ { diff --git a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA02.json b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA02.json index 4254daba..c12934d9 100644 --- a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA02.json +++ b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA02.json @@ -2,13 +2,13 @@ "scenario_name": "FLU - NBS Integration - NA02 - Not Actionable - Too close to previous vaccination", "request_headers": { "NHSE-Product-ID": "P.XWA-VFF", - "nhsd-End-User-Organisation-ods": "elid_automation" + "nhsd-End-User-Organisation-ods": "elid_automation_20260415_2" }, "queryParams": { "conditions": "flu" }, "config_filenames": [ - "NBS_Flu_Config_AutumnWinter2026_v0.5WIP.json" + "NBS_Flu_Config_AutumnWinter2026_v0.6WIP.json" ], "data": [ { diff --git a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA03.json b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA03.json index 57b3bd9a..8f890372 100644 --- a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA03.json +++ b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA03.json @@ -2,13 +2,13 @@ "scenario_name": "FLU - NBS Integration - NA03 - Already Vaccinated - Not in eligible cohort", "request_headers": { "NHSE-Product-ID": "P.XWA-VFF", - "nhsd-End-User-Organisation-ods": "elid_automation" + "nhsd-End-User-Organisation-ods": "elid_automation_20260415_2" }, "queryParams": { "conditions": "flu" }, "config_filenames": [ - "NBS_Flu_Config_AutumnWinter2026_v0.5WIP.json" + "NBS_Flu_Config_AutumnWinter2026_v0.6WIP.json" ], "data": [ { diff --git a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA04.json b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA04.json index e58f7353..f59cface 100644 --- a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA04.json +++ b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA04.json @@ -2,13 +2,13 @@ "scenario_name": "FLU - NBS Integration - NA04 - NotActionable - Future booking (NBS)", "request_headers": { "NHSE-Product-ID": "P.XWA-VFF", - "nhsd-End-User-Organisation-ods": "elid_automation" + "nhsd-End-User-Organisation-ods": "elid_automation_20260415_2" }, "queryParams": { "conditions": "flu" }, "config_filenames": [ - "NBS_Flu_Config_AutumnWinter2026_v0.5WIP.json" + "NBS_Flu_Config_AutumnWinter2026_v0.6WIP.json" ], "data": [ { diff --git a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA05.json b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA05.json index fc58c841..5a531ab0 100644 --- a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA05.json +++ b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA05.json @@ -2,13 +2,13 @@ "scenario_name": "FLU - NBS Integration - NA05 - NotActionable - Future booking (local)", "request_headers": { "NHSE-Product-ID": "P.XWA-VFF", - "nhsd-End-User-Organisation-ods": "elid_automation" + "nhsd-End-User-Organisation-ods": "elid_automation_20260415_2" }, "queryParams": { "conditions": "flu" }, "config_filenames": [ - "NBS_Flu_Config_AutumnWinter2026_v0.5WIP.json" + "NBS_Flu_Config_AutumnWinter2026_v0.6WIP.json" ], "data": [ { diff --git a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA06.json b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA06.json index 6110d4ef..b570b6b2 100644 --- a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA06.json +++ b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA06.json @@ -2,13 +2,13 @@ "scenario_name": "FLU - NBS Integration - NA06 - NotActionable - School aged", "request_headers": { "NHSE-Product-ID": "P.XWA-VFF", - "nhsd-End-User-Organisation-ods": "elid_automation" + "nhsd-End-User-Organisation-ods": "elid_automation_20260415_2" }, "queryParams": { "conditions": "flu" }, "config_filenames": [ - "NBS_Flu_Config_AutumnWinter2026_v0.5WIP.json" + "NBS_Flu_Config_AutumnWinter2026_v0.6WIP.json" ], "data": [ { diff --git a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA07.json b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA07.json index 61ed36a9..4ffeae51 100644 --- a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA07.json +++ b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA07.json @@ -2,13 +2,13 @@ "scenario_name": "FLU - NBS Integration - NA07 - No current campaign", "request_headers": { "NHSE-Product-ID": "P.XWA-VFF", - "nhsd-End-User-Organisation-ods": "elid_automation" + "nhsd-End-User-Organisation-ods": "elid_automation_20260415_2" }, "queryParams": { "conditions": "flu" }, "config_filenames": [ - "NBS_Flu_Config_AutumnWinter2026_v0.5WIP_Inactive.json" + "NBS_Flu_Config_AutumnWinter2026_v0.6WIP_Inactive.json" ], "data": [ { diff --git a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA08.json b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA08.json index 7470e3f3..269f328c 100644 --- a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA08.json +++ b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA08.json @@ -2,13 +2,13 @@ "scenario_name": "FLU - NBS Integration - NA08 - Not Actionable - May be eligible for an additional dose", "request_headers": { "NHSE-Product-ID": "P.XWA-VFF", - "nhsd-End-User-Organisation-ods": "elid_automation" + "nhsd-End-User-Organisation-ods": "elid_automation_20260415_2" }, "queryParams": { "conditions": "flu" }, "config_filenames": [ - "NBS_Flu_Config_AutumnWinter2026_v0.5WIP.json" + "NBS_Flu_Config_AutumnWinter2026_v0.6WIP.json" ], "data": [ { diff --git a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NE01.json b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NE01.json index d1eb99fb..0a165d6a 100644 --- a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NE01.json +++ b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NE01.json @@ -2,23 +2,22 @@ "scenario_name": "FLU - NBS Integration - NE01 - Not Eligible - Not in an eligible cohort", "request_headers": { "NHSE-Product-ID": "P.XWA-VFF", - "nhsd-End-User-Organisation-ods": "elid_automation" + "nhsd-End-User-Organisation-ods": "elid_automation_20260415_2" }, "queryParams": { "conditions": "flu" }, "config_filenames": [ - "NBS_Flu_Config_AutumnWinter2026_v0.5WIP.json" + "NBS_Flu_Config_AutumnWinter2026_v0.6WIP.json" ], "data": [ { "NHS_NUMBER": "9999971513", "ATTRIBUTE_TYPE": "COHORTS", "COHORT_MEMBERSHIPS": [ - { - "cohortCode": "flu_school_age_10to12", - "cohortStatus": "NotActionable", - "cohortText": "are of school age (Reception to Year 11)" + { + "COHORT_LABEL": "not_a_valid_cohort", + "DATE_JOINED": "20231020" } ] }, diff --git a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_XX01.json b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_XX01.json new file mode 100644 index 00000000..9ce56eed --- /dev/null +++ b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_XX01.json @@ -0,0 +1,35 @@ +{ + "scenario_name": "FLU - NBS Integration - XX01 - Not Eligible - Remove under 65 Years at end of campaign", + "request_headers": { + "NHSE-Product-ID": "P.XWA-VFF", + "nhsd-End-User-Organisation-ods": "elid_automation_20260415_2" + }, + "queryParams": { + "conditions": "flu" + }, + "config_filenames": [ + "NBS_Flu_Config_AutumnWinter2026_v0.6WIP.json" + ], + "data": [ + { + "NHS_NUMBER": "9999971590", + "ATTRIBUTE_TYPE": "COHORTS", + "COHORT_MEMBERSHIPS": [ + { + "cohortCode": "flu_school_age_10to12", + "cohortStatus": "NotActionable", + "cohortText": "are of school age (Reception to Year 11)" + } + ] + }, + { + "NHS_NUMBER": "9999971590", + "ATTRIBUTE_TYPE": "PERSON", + "DATE_OF_BIRTH": "19620401" + }, + { + "NHS_NUMBER": "9999971590", + "ATTRIBUTE_TYPE": "FLU" + } + ] +} diff --git a/data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_NA08.json b/data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_NA08.json new file mode 100644 index 00000000..f6f84fcc --- /dev/null +++ b/data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_NA08.json @@ -0,0 +1,30 @@ +{ + "meta": { + "lastUpdated": "" + }, + "processedSuggestions": [ + { + "actions": [ + { + "actionCode": "AdditionalDoseRequired", + "actionType": "DataValue", + "description": "Maybe", + "urlLabel": "", + "urlLink": "" + } + ], + "condition": "FLU", + "eligibilityCohorts": [], + "status": "NotActionable", + "statusText": "You should have the Flu vaccine", + "suitabilityRules": [ + { + "ruleCode": "MayRequireAdditionalDose", + "ruleText": "Already vaccinated but may require an additional dose if a carer or live with someone who is immunosuppressed", + "ruleType": "S" + } + ] + } + ], + "responseId": "" +} diff --git a/data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_NE02.json b/data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_XX01.json similarity index 81% rename from data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_NE02.json rename to data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_XX01.json index 71491539..c54dfc3c 100644 --- a/data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_NE02.json +++ b/data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_XX01.json @@ -4,15 +4,7 @@ }, "processedSuggestions": [ { - "actions": [ - { - "actionCode": "AdditionalDoseRequired", - "actionType": "DataValue", - "description": "Maybe", - "urlLabel": "", - "urlLink": "" - } - ], + "actions": [], "condition": "FLU", "eligibilityCohorts": [ { @@ -46,5 +38,5 @@ "suitabilityRules": [] } ], - "responseId": "00b3b5b8-1b57-4e37-b497-27ff574f5934" + "responseId": "00b3b5b8-1b57-4e37-b497-27ff574f5933" } From f7649709ead8c612dba386205a0037c2f1afd945 Mon Sep 17 00:00:00 2001 From: Adam Waller <176666249+adam-wallernhs1@users.noreply.github.com> Date: Thu, 16 Apr 2026 09:48:47 +0100 Subject: [PATCH 09/10] final push for NBS Flu integration tests and updated preprod configs --- ...S_Flu_Config_AutumnWinter2026_v0.6WIP.json | 0 ...fig_AutumnWinter2026_v0.6WIP_Inactive.json | 0 .../AUTO_FLU_NBS_INT_XX01.json | 35 ---------------- .../AUTO_FLU_NBS_INT_A01.json | 2 +- .../AUTO_FLU_NBS_INT_A02.json | 2 +- .../AUTO_FLU_NBS_INT_A03.json | 2 +- .../AUTO_FLU_NBS_INT_A04.json | 2 +- .../AUTO_FLU_NBS_INT_NA01.json | 2 +- .../AUTO_FLU_NBS_INT_NA02.json | 2 +- .../AUTO_FLU_NBS_INT_NA03.json | 2 +- .../AUTO_FLU_NBS_INT_NA04.json | 2 +- .../AUTO_FLU_NBS_INT_NA05.json | 2 +- .../AUTO_FLU_NBS_INT_NA06.json | 2 +- .../AUTO_FLU_NBS_INT_NA07.json | 2 +- .../AUTO_FLU_NBS_INT_NA08.json | 2 +- .../AUTO_FLU_NBS_INT_NE01.json | 2 +- .../AUTO_FLU_NBS_INT_XX01.json | 42 ------------------- .../AUTO_FLU_NBS_INT_A01.json | 0 .../AUTO_FLU_NBS_INT_A02.json | 0 .../AUTO_FLU_NBS_INT_A03.json | 0 .../AUTO_FLU_NBS_INT_A04.json | 0 .../AUTO_FLU_NBS_INT_NA01.json | 0 .../AUTO_FLU_NBS_INT_NA02.json | 0 .../AUTO_FLU_NBS_INT_NA03.json | 0 .../AUTO_FLU_NBS_INT_NA04.json | 0 .../AUTO_FLU_NBS_INT_NA05.json | 0 .../AUTO_FLU_NBS_INT_NA06.json | 0 .../AUTO_FLU_NBS_INT_NA07.json | 0 .../AUTO_FLU_NBS_INT_NA08.json | 0 .../AUTO_FLU_NBS_INT_NE01.json | 0 tests/test_config.py | 1 + 31 files changed, 14 insertions(+), 90 deletions(-) rename data/configs/{inProgressTestConfigs => nbsIntegrationTestConfigs}/NBS_Flu_Config_AutumnWinter2026_v0.6WIP.json (100%) rename data/configs/{inProgressTestConfigs => nbsIntegrationTestConfigs}/NBS_Flu_Config_AutumnWinter2026_v0.6WIP_Inactive.json (100%) delete mode 100644 data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_XX01.json rename data/dynamoDB/{inProgressTestData => nbsIntegrationTestData}/AUTO_FLU_NBS_INT_A01.json (92%) rename data/dynamoDB/{inProgressTestData => nbsIntegrationTestData}/AUTO_FLU_NBS_INT_A02.json (94%) rename data/dynamoDB/{inProgressTestData => nbsIntegrationTestData}/AUTO_FLU_NBS_INT_A03.json (93%) rename data/dynamoDB/{inProgressTestData => nbsIntegrationTestData}/AUTO_FLU_NBS_INT_A04.json (93%) rename data/dynamoDB/{inProgressTestData => nbsIntegrationTestData}/AUTO_FLU_NBS_INT_NA01.json (93%) rename data/dynamoDB/{inProgressTestData => nbsIntegrationTestData}/AUTO_FLU_NBS_INT_NA02.json (93%) rename data/dynamoDB/{inProgressTestData => nbsIntegrationTestData}/AUTO_FLU_NBS_INT_NA03.json (92%) rename data/dynamoDB/{inProgressTestData => nbsIntegrationTestData}/AUTO_FLU_NBS_INT_NA04.json (93%) rename data/dynamoDB/{inProgressTestData => nbsIntegrationTestData}/AUTO_FLU_NBS_INT_NA05.json (93%) rename data/dynamoDB/{inProgressTestData => nbsIntegrationTestData}/AUTO_FLU_NBS_INT_NA06.json (92%) rename data/dynamoDB/{inProgressTestData => nbsIntegrationTestData}/AUTO_FLU_NBS_INT_NA07.json (92%) rename data/dynamoDB/{inProgressTestData => nbsIntegrationTestData}/AUTO_FLU_NBS_INT_NA08.json (92%) rename data/dynamoDB/{inProgressTestData => nbsIntegrationTestData}/AUTO_FLU_NBS_INT_NE01.json (92%) delete mode 100644 data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_XX01.json rename data/responses/{inProgressTestResponses => nbsIntegrationTestResponses}/AUTO_FLU_NBS_INT_A01.json (100%) rename data/responses/{inProgressTestResponses => nbsIntegrationTestResponses}/AUTO_FLU_NBS_INT_A02.json (100%) rename data/responses/{inProgressTestResponses => nbsIntegrationTestResponses}/AUTO_FLU_NBS_INT_A03.json (100%) rename data/responses/{inProgressTestResponses => nbsIntegrationTestResponses}/AUTO_FLU_NBS_INT_A04.json (100%) rename data/responses/{inProgressTestResponses => nbsIntegrationTestResponses}/AUTO_FLU_NBS_INT_NA01.json (100%) rename data/responses/{inProgressTestResponses => nbsIntegrationTestResponses}/AUTO_FLU_NBS_INT_NA02.json (100%) rename data/responses/{inProgressTestResponses => nbsIntegrationTestResponses}/AUTO_FLU_NBS_INT_NA03.json (100%) rename data/responses/{inProgressTestResponses => nbsIntegrationTestResponses}/AUTO_FLU_NBS_INT_NA04.json (100%) rename data/responses/{inProgressTestResponses => nbsIntegrationTestResponses}/AUTO_FLU_NBS_INT_NA05.json (100%) rename data/responses/{inProgressTestResponses => nbsIntegrationTestResponses}/AUTO_FLU_NBS_INT_NA06.json (100%) rename data/responses/{inProgressTestResponses => nbsIntegrationTestResponses}/AUTO_FLU_NBS_INT_NA07.json (100%) rename data/responses/{inProgressTestResponses => nbsIntegrationTestResponses}/AUTO_FLU_NBS_INT_NA08.json (100%) rename data/responses/{inProgressTestResponses => nbsIntegrationTestResponses}/AUTO_FLU_NBS_INT_NE01.json (100%) diff --git a/data/configs/inProgressTestConfigs/NBS_Flu_Config_AutumnWinter2026_v0.6WIP.json b/data/configs/nbsIntegrationTestConfigs/NBS_Flu_Config_AutumnWinter2026_v0.6WIP.json similarity index 100% rename from data/configs/inProgressTestConfigs/NBS_Flu_Config_AutumnWinter2026_v0.6WIP.json rename to data/configs/nbsIntegrationTestConfigs/NBS_Flu_Config_AutumnWinter2026_v0.6WIP.json diff --git a/data/configs/inProgressTestConfigs/NBS_Flu_Config_AutumnWinter2026_v0.6WIP_Inactive.json b/data/configs/nbsIntegrationTestConfigs/NBS_Flu_Config_AutumnWinter2026_v0.6WIP_Inactive.json similarity index 100% rename from data/configs/inProgressTestConfigs/NBS_Flu_Config_AutumnWinter2026_v0.6WIP_Inactive.json rename to data/configs/nbsIntegrationTestConfigs/NBS_Flu_Config_AutumnWinter2026_v0.6WIP_Inactive.json diff --git a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_XX01.json b/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_XX01.json deleted file mode 100644 index 9ce56eed..00000000 --- a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_XX01.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "scenario_name": "FLU - NBS Integration - XX01 - Not Eligible - Remove under 65 Years at end of campaign", - "request_headers": { - "NHSE-Product-ID": "P.XWA-VFF", - "nhsd-End-User-Organisation-ods": "elid_automation_20260415_2" - }, - "queryParams": { - "conditions": "flu" - }, - "config_filenames": [ - "NBS_Flu_Config_AutumnWinter2026_v0.6WIP.json" - ], - "data": [ - { - "NHS_NUMBER": "9999971590", - "ATTRIBUTE_TYPE": "COHORTS", - "COHORT_MEMBERSHIPS": [ - { - "cohortCode": "flu_school_age_10to12", - "cohortStatus": "NotActionable", - "cohortText": "are of school age (Reception to Year 11)" - } - ] - }, - { - "NHS_NUMBER": "9999971590", - "ATTRIBUTE_TYPE": "PERSON", - "DATE_OF_BIRTH": "19620401" - }, - { - "NHS_NUMBER": "9999971590", - "ATTRIBUTE_TYPE": "FLU" - } - ] -} diff --git a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_A01.json b/data/dynamoDB/nbsIntegrationTestData/AUTO_FLU_NBS_INT_A01.json similarity index 92% rename from data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_A01.json rename to data/dynamoDB/nbsIntegrationTestData/AUTO_FLU_NBS_INT_A01.json index 39e7dbc3..efbfb6fe 100644 --- a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_A01.json +++ b/data/dynamoDB/nbsIntegrationTestData/AUTO_FLU_NBS_INT_A01.json @@ -2,7 +2,7 @@ "scenario_name": "FLU - NBS Integration - A01 - Actionable - Eligible, within single eligible cohort", "request_headers": { "NHSE-Product-ID": "P.XWA-VFF", - "nhsd-End-User-Organisation-ods": "elid_automation_20260415_2" + "nhsd-End-User-Organisation-ods": "elid_automation" }, "queryParams": { "conditions": "flu" diff --git a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_A02.json b/data/dynamoDB/nbsIntegrationTestData/AUTO_FLU_NBS_INT_A02.json similarity index 94% rename from data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_A02.json rename to data/dynamoDB/nbsIntegrationTestData/AUTO_FLU_NBS_INT_A02.json index 997418dd..4e5848a3 100644 --- a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_A02.json +++ b/data/dynamoDB/nbsIntegrationTestData/AUTO_FLU_NBS_INT_A02.json @@ -2,7 +2,7 @@ "scenario_name": "FLU - NBS Integration - A02 - Actionable - Eligible, within multiple eligible cohorts", "request_headers": { "NHSE-Product-ID": "P.XWA-VFF", - "nhsd-End-User-Organisation-ods": "elid_automation_20260415_2" + "nhsd-End-User-Organisation-ods": "elid_automation" }, "queryParams": { "conditions": "flu" diff --git a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_A03.json b/data/dynamoDB/nbsIntegrationTestData/AUTO_FLU_NBS_INT_A03.json similarity index 93% rename from data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_A03.json rename to data/dynamoDB/nbsIntegrationTestData/AUTO_FLU_NBS_INT_A03.json index 4fccf1fd..f4382689 100644 --- a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_A03.json +++ b/data/dynamoDB/nbsIntegrationTestData/AUTO_FLU_NBS_INT_A03.json @@ -2,7 +2,7 @@ "scenario_name": "FLU - NBS Integration - A03 - Actionable - Eligible, within care home residents eligible cohort", "request_headers": { "NHSE-Product-ID": "P.XWA-VFF", - "nhsd-End-User-Organisation-ods": "elid_automation_20260415_2" + "nhsd-End-User-Organisation-ods": "elid_automation" }, "queryParams": { "conditions": "flu" diff --git a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_A04.json b/data/dynamoDB/nbsIntegrationTestData/AUTO_FLU_NBS_INT_A04.json similarity index 93% rename from data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_A04.json rename to data/dynamoDB/nbsIntegrationTestData/AUTO_FLU_NBS_INT_A04.json index e1b8834a..da414c0d 100644 --- a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_A04.json +++ b/data/dynamoDB/nbsIntegrationTestData/AUTO_FLU_NBS_INT_A04.json @@ -2,7 +2,7 @@ "scenario_name": "FLU - NBS Integration - A04 - Actionable - Additional Dose Required", "request_headers": { "NHSE-Product-ID": "P.XWA-VFF", - "nhsd-End-User-Organisation-ods": "elid_automation_20260415_2" + "nhsd-End-User-Organisation-ods": "elid_automation" }, "queryParams": { "conditions": "flu" diff --git a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA01.json b/data/dynamoDB/nbsIntegrationTestData/AUTO_FLU_NBS_INT_NA01.json similarity index 93% rename from data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA01.json rename to data/dynamoDB/nbsIntegrationTestData/AUTO_FLU_NBS_INT_NA01.json index dc362032..7e534a3e 100644 --- a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA01.json +++ b/data/dynamoDB/nbsIntegrationTestData/AUTO_FLU_NBS_INT_NA01.json @@ -2,7 +2,7 @@ "scenario_name": "FLU - NBS Integration - NA01 - Not Actionable - The individual has already been vaccinated within the current campaign", "request_headers": { "NHSE-Product-ID": "P.XWA-VFF", - "nhsd-End-User-Organisation-ods": "elid_automation_20260415_2" + "nhsd-End-User-Organisation-ods": "elid_automation" }, "queryParams": { "conditions": "flu" diff --git a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA02.json b/data/dynamoDB/nbsIntegrationTestData/AUTO_FLU_NBS_INT_NA02.json similarity index 93% rename from data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA02.json rename to data/dynamoDB/nbsIntegrationTestData/AUTO_FLU_NBS_INT_NA02.json index c12934d9..48653409 100644 --- a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA02.json +++ b/data/dynamoDB/nbsIntegrationTestData/AUTO_FLU_NBS_INT_NA02.json @@ -2,7 +2,7 @@ "scenario_name": "FLU - NBS Integration - NA02 - Not Actionable - Too close to previous vaccination", "request_headers": { "NHSE-Product-ID": "P.XWA-VFF", - "nhsd-End-User-Organisation-ods": "elid_automation_20260415_2" + "nhsd-End-User-Organisation-ods": "elid_automation" }, "queryParams": { "conditions": "flu" diff --git a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA03.json b/data/dynamoDB/nbsIntegrationTestData/AUTO_FLU_NBS_INT_NA03.json similarity index 92% rename from data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA03.json rename to data/dynamoDB/nbsIntegrationTestData/AUTO_FLU_NBS_INT_NA03.json index 8f890372..23b0744d 100644 --- a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA03.json +++ b/data/dynamoDB/nbsIntegrationTestData/AUTO_FLU_NBS_INT_NA03.json @@ -2,7 +2,7 @@ "scenario_name": "FLU - NBS Integration - NA03 - Already Vaccinated - Not in eligible cohort", "request_headers": { "NHSE-Product-ID": "P.XWA-VFF", - "nhsd-End-User-Organisation-ods": "elid_automation_20260415_2" + "nhsd-End-User-Organisation-ods": "elid_automation" }, "queryParams": { "conditions": "flu" diff --git a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA04.json b/data/dynamoDB/nbsIntegrationTestData/AUTO_FLU_NBS_INT_NA04.json similarity index 93% rename from data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA04.json rename to data/dynamoDB/nbsIntegrationTestData/AUTO_FLU_NBS_INT_NA04.json index f59cface..be85da8a 100644 --- a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA04.json +++ b/data/dynamoDB/nbsIntegrationTestData/AUTO_FLU_NBS_INT_NA04.json @@ -2,7 +2,7 @@ "scenario_name": "FLU - NBS Integration - NA04 - NotActionable - Future booking (NBS)", "request_headers": { "NHSE-Product-ID": "P.XWA-VFF", - "nhsd-End-User-Organisation-ods": "elid_automation_20260415_2" + "nhsd-End-User-Organisation-ods": "elid_automation" }, "queryParams": { "conditions": "flu" diff --git a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA05.json b/data/dynamoDB/nbsIntegrationTestData/AUTO_FLU_NBS_INT_NA05.json similarity index 93% rename from data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA05.json rename to data/dynamoDB/nbsIntegrationTestData/AUTO_FLU_NBS_INT_NA05.json index 5a531ab0..5273ffbf 100644 --- a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA05.json +++ b/data/dynamoDB/nbsIntegrationTestData/AUTO_FLU_NBS_INT_NA05.json @@ -2,7 +2,7 @@ "scenario_name": "FLU - NBS Integration - NA05 - NotActionable - Future booking (local)", "request_headers": { "NHSE-Product-ID": "P.XWA-VFF", - "nhsd-End-User-Organisation-ods": "elid_automation_20260415_2" + "nhsd-End-User-Organisation-ods": "elid_automation" }, "queryParams": { "conditions": "flu" diff --git a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA06.json b/data/dynamoDB/nbsIntegrationTestData/AUTO_FLU_NBS_INT_NA06.json similarity index 92% rename from data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA06.json rename to data/dynamoDB/nbsIntegrationTestData/AUTO_FLU_NBS_INT_NA06.json index b570b6b2..df179cfc 100644 --- a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA06.json +++ b/data/dynamoDB/nbsIntegrationTestData/AUTO_FLU_NBS_INT_NA06.json @@ -2,7 +2,7 @@ "scenario_name": "FLU - NBS Integration - NA06 - NotActionable - School aged", "request_headers": { "NHSE-Product-ID": "P.XWA-VFF", - "nhsd-End-User-Organisation-ods": "elid_automation_20260415_2" + "nhsd-End-User-Organisation-ods": "elid_automation" }, "queryParams": { "conditions": "flu" diff --git a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA07.json b/data/dynamoDB/nbsIntegrationTestData/AUTO_FLU_NBS_INT_NA07.json similarity index 92% rename from data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA07.json rename to data/dynamoDB/nbsIntegrationTestData/AUTO_FLU_NBS_INT_NA07.json index 4ffeae51..0b965c31 100644 --- a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA07.json +++ b/data/dynamoDB/nbsIntegrationTestData/AUTO_FLU_NBS_INT_NA07.json @@ -2,7 +2,7 @@ "scenario_name": "FLU - NBS Integration - NA07 - No current campaign", "request_headers": { "NHSE-Product-ID": "P.XWA-VFF", - "nhsd-End-User-Organisation-ods": "elid_automation_20260415_2" + "nhsd-End-User-Organisation-ods": "elid_automation" }, "queryParams": { "conditions": "flu" diff --git a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA08.json b/data/dynamoDB/nbsIntegrationTestData/AUTO_FLU_NBS_INT_NA08.json similarity index 92% rename from data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA08.json rename to data/dynamoDB/nbsIntegrationTestData/AUTO_FLU_NBS_INT_NA08.json index 269f328c..6a037f59 100644 --- a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NA08.json +++ b/data/dynamoDB/nbsIntegrationTestData/AUTO_FLU_NBS_INT_NA08.json @@ -2,7 +2,7 @@ "scenario_name": "FLU - NBS Integration - NA08 - Not Actionable - May be eligible for an additional dose", "request_headers": { "NHSE-Product-ID": "P.XWA-VFF", - "nhsd-End-User-Organisation-ods": "elid_automation_20260415_2" + "nhsd-End-User-Organisation-ods": "elid_automation" }, "queryParams": { "conditions": "flu" diff --git a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NE01.json b/data/dynamoDB/nbsIntegrationTestData/AUTO_FLU_NBS_INT_NE01.json similarity index 92% rename from data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NE01.json rename to data/dynamoDB/nbsIntegrationTestData/AUTO_FLU_NBS_INT_NE01.json index 0a165d6a..f7e0b497 100644 --- a/data/dynamoDB/inProgressTestData/AUTO_FLU_NBS_INT_NE01.json +++ b/data/dynamoDB/nbsIntegrationTestData/AUTO_FLU_NBS_INT_NE01.json @@ -2,7 +2,7 @@ "scenario_name": "FLU - NBS Integration - NE01 - Not Eligible - Not in an eligible cohort", "request_headers": { "NHSE-Product-ID": "P.XWA-VFF", - "nhsd-End-User-Organisation-ods": "elid_automation_20260415_2" + "nhsd-End-User-Organisation-ods": "elid_automation" }, "queryParams": { "conditions": "flu" diff --git a/data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_XX01.json b/data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_XX01.json deleted file mode 100644 index c54dfc3c..00000000 --- a/data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_XX01.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "meta": { - "lastUpdated": "2026-04-09T14:45:16.739724+00:00" - }, - "processedSuggestions": [ - { - "actions": [], - "condition": "FLU", - "eligibilityCohorts": [ - { - "cohortCode": "flu_age_65+", - "cohortStatus": "NotEligible", - "cohortText": "are not aged 65 or over (including those who will be 65 by 31 March 2027)" - }, - { - "cohortCode": "flu_age_2to3", - "cohortStatus": "NotEligible", - "cohortText": "are not aged 2 or 3 years (born between 1 September 2022 and 31 August 2024)" - }, - { - "cohortCode": "flu_school_age", - "cohortStatus": "NotEligible", - "cohortText": "are not of school age (Reception to Year 11)" - }, - { - "cohortCode": "flu_clinical_risk", - "cohortStatus": "NotEligible", - "cohortText": "do not have a weakened immune system because of a health condition or treatment" - }, - { - "cohortCode": "care_home_residents", - "cohortStatus": "NotEligible", - "cohortText": "do not live in a care home for older adults" - } - ], - "status": "NotEligible", - "statusText": "We do not believe you can have it", - "suitabilityRules": [] - } - ], - "responseId": "00b3b5b8-1b57-4e37-b497-27ff574f5933" -} diff --git a/data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_A01.json b/data/responses/nbsIntegrationTestResponses/AUTO_FLU_NBS_INT_A01.json similarity index 100% rename from data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_A01.json rename to data/responses/nbsIntegrationTestResponses/AUTO_FLU_NBS_INT_A01.json diff --git a/data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_A02.json b/data/responses/nbsIntegrationTestResponses/AUTO_FLU_NBS_INT_A02.json similarity index 100% rename from data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_A02.json rename to data/responses/nbsIntegrationTestResponses/AUTO_FLU_NBS_INT_A02.json diff --git a/data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_A03.json b/data/responses/nbsIntegrationTestResponses/AUTO_FLU_NBS_INT_A03.json similarity index 100% rename from data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_A03.json rename to data/responses/nbsIntegrationTestResponses/AUTO_FLU_NBS_INT_A03.json diff --git a/data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_A04.json b/data/responses/nbsIntegrationTestResponses/AUTO_FLU_NBS_INT_A04.json similarity index 100% rename from data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_A04.json rename to data/responses/nbsIntegrationTestResponses/AUTO_FLU_NBS_INT_A04.json diff --git a/data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_NA01.json b/data/responses/nbsIntegrationTestResponses/AUTO_FLU_NBS_INT_NA01.json similarity index 100% rename from data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_NA01.json rename to data/responses/nbsIntegrationTestResponses/AUTO_FLU_NBS_INT_NA01.json diff --git a/data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_NA02.json b/data/responses/nbsIntegrationTestResponses/AUTO_FLU_NBS_INT_NA02.json similarity index 100% rename from data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_NA02.json rename to data/responses/nbsIntegrationTestResponses/AUTO_FLU_NBS_INT_NA02.json diff --git a/data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_NA03.json b/data/responses/nbsIntegrationTestResponses/AUTO_FLU_NBS_INT_NA03.json similarity index 100% rename from data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_NA03.json rename to data/responses/nbsIntegrationTestResponses/AUTO_FLU_NBS_INT_NA03.json diff --git a/data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_NA04.json b/data/responses/nbsIntegrationTestResponses/AUTO_FLU_NBS_INT_NA04.json similarity index 100% rename from data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_NA04.json rename to data/responses/nbsIntegrationTestResponses/AUTO_FLU_NBS_INT_NA04.json diff --git a/data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_NA05.json b/data/responses/nbsIntegrationTestResponses/AUTO_FLU_NBS_INT_NA05.json similarity index 100% rename from data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_NA05.json rename to data/responses/nbsIntegrationTestResponses/AUTO_FLU_NBS_INT_NA05.json diff --git a/data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_NA06.json b/data/responses/nbsIntegrationTestResponses/AUTO_FLU_NBS_INT_NA06.json similarity index 100% rename from data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_NA06.json rename to data/responses/nbsIntegrationTestResponses/AUTO_FLU_NBS_INT_NA06.json diff --git a/data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_NA07.json b/data/responses/nbsIntegrationTestResponses/AUTO_FLU_NBS_INT_NA07.json similarity index 100% rename from data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_NA07.json rename to data/responses/nbsIntegrationTestResponses/AUTO_FLU_NBS_INT_NA07.json diff --git a/data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_NA08.json b/data/responses/nbsIntegrationTestResponses/AUTO_FLU_NBS_INT_NA08.json similarity index 100% rename from data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_NA08.json rename to data/responses/nbsIntegrationTestResponses/AUTO_FLU_NBS_INT_NA08.json diff --git a/data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_NE01.json b/data/responses/nbsIntegrationTestResponses/AUTO_FLU_NBS_INT_NE01.json similarity index 100% rename from data/responses/inProgressTestResponses/AUTO_FLU_NBS_INT_NE01.json rename to data/responses/nbsIntegrationTestResponses/AUTO_FLU_NBS_INT_NE01.json diff --git a/tests/test_config.py b/tests/test_config.py index f65f23c8..25326681 100644 --- a/tests/test_config.py +++ b/tests/test_config.py @@ -43,5 +43,6 @@ INT_TEST_CONFIG_PATHS: list[str] = [ "data/configs/nbsIntegrationTestConfigs/NBS_RSV_Config_April2026_v0.8WIP.json", "data/configs/nbsIntegrationTestConfigs/NBS_COVID_Config_Spring2026_v0.5WIP.json", + "data/configs/nbsIntegrationTestConfigs/NBS_Flu_Config_AutumnWinter2026_v0.6WIP.json", "data/configs/vitaIntegrationTestConfigs/RSV_Config_v2.0WIP_v0.2.json", ] From 59d757400688b940c718afcb90f010a9837961d5 Mon Sep 17 00:00:00 2001 From: Adam Waller <176666249+adam-wallernhs1@users.noreply.github.com> Date: Thu, 16 Apr 2026 10:45:26 +0100 Subject: [PATCH 10/10] fix to the mapping file as I removed NBS_Campaign_Config_ID_FLU in favour of the active campaign id --- data/configs/consumerMappings/consumer_mapping_config.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/data/configs/consumerMappings/consumer_mapping_config.json b/data/configs/consumerMappings/consumer_mapping_config.json index 34267bf1..32266f55 100644 --- a/data/configs/consumerMappings/consumer_mapping_config.json +++ b/data/configs/consumerMappings/consumer_mapping_config.json @@ -38,6 +38,10 @@ "CampaignConfigID": "NBS_Campaign_Config_ID_COVID_ACTIVE", "Description": "COVID Ongoing for NBS" }, + { + "CampaignConfigID": "NBS_Campaign_Config_ID_FLU", + "Description": "Flu for NBS Story Tests" + }, { "CampaignConfigID": "VITA_NBS_Campaign_Config_ID_COVID", "Description": "Shared Config for My Vaccines and NBS"