From e0cc9a8160e75b0273b1fded5db157f4fdea3e67 Mon Sep 17 00:00:00 2001 From: emilyjevans <30391244+emilyjevans@users.noreply.github.com> Date: Thu, 5 Dec 2024 14:36:14 +0000 Subject: [PATCH 001/403] CAR-151 initial prototype form --- runner/src/server/forms/ReportAnOutbreak.json | 1799 +++++++++++++++++ 1 file changed, 1799 insertions(+) create mode 100644 runner/src/server/forms/ReportAnOutbreak.json diff --git a/runner/src/server/forms/ReportAnOutbreak.json b/runner/src/server/forms/ReportAnOutbreak.json new file mode 100644 index 0000000000..8c1a055a4c --- /dev/null +++ b/runner/src/server/forms/ReportAnOutbreak.json @@ -0,0 +1,1799 @@ +{ + "metadata": {}, + "startPage": "/start", + "pages": [ + { + "path": "/start", + "title": "Report an outbreak of acute respiratory infection in an adult social care setting", + "components": [ + { + "name": "nMOTrx", + "options": {}, + "type": "Para", + "content": "
Applies to England
\n", + "schema": {} + }, + { + "name": "nMOTry", + "options": {}, + "type": "Para", + "content": "\n You can use this service if you provide adult social care, such as a care home, retirement home, supported living or extra care.\n
Use this service to report:
\n
ARIs include COVID-19, flu, respiratory syncytial virus (RSV), or unknown respiratory infection including chest infections.
\nIt should take about 10 minutes to complete.
\n\n\n If possible, test all service users with symptoms who are eligible for COVID-19 treatments using a COVID-19 rapid lateral flow test. Staff with symptoms who are eligible for COVID-19 treatments should test themselves at home. \n
\n\n If you cannot test people, do not wait. Report as soon as possible. \n
\n\n You'll need to know the:\n
\n\n Do not use this online service to give an update on an outbreak or cluster of ARI that you've already reported. If you need to give an update, contact your local UKHSA health protection team or your community infection control team.\n
You only need to report 2 or more ARI cases if they could be linked by spread in your setting. If the infection could not have been spread in your setting, you should not report it as an outbreak. If in doubt, report as an outbreak.
\nDo not use this service to report:
\nRead more on:
\nYour local UKHSA health protection team, or the community infection control team, will use your information to assess your outbreak. They will help you manage the outbreak and prevent further spread.
\nIf you need help using the service or have any other questions, contact your local UKHSA health protection team during working hours.
\nIf your enquiry is urgent outside of working hours, telephone your health protection team's out-of-hours service.
\nIf you need urgent medical advice, you should call NHS 111 or visit 111.nhs.uk. For life-threatening emergencies, call 999.
\n", + "schema": {} + } + ], + "next": [ + { + "path": "/setting" + } + ], + "controller": "./pages/start.js" + }, + { + "path": "/setting", + "title": "What type of adult social care do you provide?", + "components": [ + { + "name": "S4Q9", + "options": {}, + "type": "RadiosField", + "nameHasError": false, + "title": "What type of adult social care do you provide?", + "list": "MpSRIP", + "schema": {}, + "values": { + "type": "listRef" + } + } + ], + "next": [ + { + "path": "/positive-ari" + } + ] + }, + { + "path": "/positive-ari", + "title": "Do you have any positive test results for an acute respiratory infection?", + "components": [ + { + "name": "PositiveARI", + "options": {}, + "type": "YesNoField", + "nameHasError": false, + "title": "Do you have any positive test results for an acute respiratory infection?", + "hint": "Acute respiratory infections include COVID-19, flu, respiratory syncytial virus (RSV), adenovirus, human metapneumovirus (hMPV), parainfluenza and rhinovirus", + "schema": {}, + "values": { + "type": "listRef" + } + } + ], + "next": [ + { + "path": "/2-or-more-ari", + "condition": "sUrRwU" + }, + { + "path": "/which-ari" + } + ] + }, + { + "path": "/which-ari", + "title": "Which acute respiratory infections do you have a positive test result for? ", + "components": [ + { + "name": "WhichARI", + "options": {}, + "type": "CheckboxesField", + "nameHasError": false, + "title": "Which acute respiratory infections do you have a positive test result for? ", + "list": "InfectionTypes", + "hint": "You can select more than one option", + "values": { + "type": "listRef" + } + } + ], + "next": [ + { + "path": "/check-answers", + "condition": "einiQH" + }, + { + "path": "/2-or-more-cases-not-covid-or-flu", + "condition": "fknfQQQ" + }, + { + "path": "/2-or-more-covid" + } + ] + }, + { + "path": "/2-or-more-covid", + "title": "Are you reporting 2 or more cases of COVID-19?", + "components": [ + { + "name": "TwoOrMoreCovid", + "options": {}, + "type": "YesNoField", + "nameHasError": false, + "title": "Are you reporting 2 or more cases of COVID-19?", + "values": { + "type": "listRef" + } + } + ], + "next": [ + { + "path": "/do-not-need-to-report", + "condition": "fninfWW" + }, + { + "path": "/2-or-more-covid-details" + } + ] + }, + { + "path": "/2-or-more-covid-details", + "title": "COVID-19 in your setting", + "components": [ + { + "name": "TwoOrMoreCovid5days", + "options": {}, + "type": "RadiosField", + "nameHasError": false, + "title": "Did symptoms in 2 or more cases of COVID-19 start within 5 days of each other?", + "list": "YesNoSure", + "values": { + "type": "listRef" + } + }, + { + "name": "TwoOrMoreCovidSpread", + "options": {}, + "type": "RadiosField", + "nameHasError": false, + "title": "Is it possible that at least 2 of the cases of COVID-19 are linked by spread in your setting?", + "list": "YesNoSure", + "values": { + "type": "listRef" + } + } + ], + "next": [ + { + "path": "/do-not-need-to-report", + "condition": "dmdojqQH" + }, + { + "path": "/check-answers" + } + ] + }, + { + "path": "/2-or-more-ari", + "title": "Are you reporting 2 or more cases of an acute respiratory infection?", + "components": [ + { + "name": "TwoOrMoreARI", + "options": {}, + "type": "YesNoField", + "nameHasError": false, + "title": "Are you reporting 2 or more cases of an acute respiratory infection?", + "values": { + "type": "listRef" + } + } + ], + "next": [ + { + "path": "/do-not-need-to-report", + "condition": "yowninW" + }, + { + "path": "/check-answers" + } + ] + }, + { + "path": "/do-not-need-to-report", + "title": "You do not need to report", + "components": [] + }, + { + "path": "/check-answers", + "title": "Check your answers before continuing", + "next": [ + { + "path": "/cases-of-flu" + } + ] + }, + { + "path": "/2-or-more-cases-not-covid-or-flu", + "title": "Are you reporting 2 or more cases of an acute respiratory infection that is not COVID-19 or flu?", + "components": [ + { + "name": "TwoOrMoreCasesNotCovidFlu", + "options": {}, + "type": "YesNoField", + "nameHasError": false, + "title": "Are you reporting 2 or more cases of an acute respiratory infection that is not COVID-19 or flu?", + "values": { + "type": "listRef" + } + } + ], + "next": [ + { + "path": "/do-not-need-to-report", + "condition": "yowninW" + }, + { + "path": "/ari-infection-type" + } + ] + }, + { + "path": "/ari-infection-type", + "title": "What infection are you reporting?", + "components": [ + { + "name": "ARIinfectionType", + "options": {}, + "type": "CheckboxesField", + "nameHasError": false, + "title": "What infection are you reporting?", + "list": "ARIinfectionType", + "values": { + "type": "listRef" + } + } + ], + "next": [ + { + "path": "/do-not-need-to-report", + "condition": "yowninW" + }, + { + "path": "/check-answers" + } + ] + }, + { + "path": "/cases-of-flu", + "title": "How many cases of flu are you reporting?", + "components": [ + { + "name": "NumberOfCasesOfFlu", + "options": {}, + "type": "RadiosField", + "nameHasError": false, + "title": "How many cases of flu are you reporting?", + "list": "OneOrMore", + "values": { + "type": "listRef" + } + } + ], + "next": [ + { + "path": "/single-case-of-flu", + "condition": "NumberOfCasesOfFlu:One" + }, + { + "path": "/multiple-cases-of-flu" + } + ] + }, + { + "path": "/single-case-of-flu", + "title": "Who has the case of flu?", + "components": [ + { + "name": "SingleCaseOfFluServiceOrStaff", + "options": {}, + "type": "RadiosField", + "nameHasError": false, + "title": "Who has the case of flu?", + "list": "ServiceOrStaff", + "values": { + "type": "listRef" + } + } + ], + "next": [ + { + "path": "/symptom-onset-flu", + "condition": "SingleCaseOfFluServiceUserOrStaff:ServiceUser" + }, + { + "path": "/vaccination" + } + ] + }, + { + "path": "/multiple-cases-of-flu", + "title": "Who are you reporting cases or symptoms of flu in?", + "components": [ + { + "name": "MultipleCasesOfFluServiceOrStaff", + "options": {}, + "type": "CheckboxesField", + "nameHasError": false, + "title": "Who are you reporting cases or symptoms of flu in?", + "list": "ServiceOrStaffMultiple", + "values": { + "type": "listRef" + } + } + ], + "next": [ + { + "path": "/multiple-cases-flu-service-users", + "condition": "MultipleCasesOfFluServiceOrStaff:ServiceUsers" + }, + { + "path": "/multiple-cases-flu-staff" + } + ] + }, + { + "path": "/multiple-cases-flu-service-users", + "title": "Service users: number of flu or chest infection cases", + "components": [ + { + "name": "ServiceUsersFluSwabTest", + "options": {}, + "type": "NumberField", + "schema": { + "min": 0, + "max": 200 + }, + "nameHasError": false, + "title": "How many service users have flu confirmed by a swab test?", + "hint": "Include those who are currently in hospital. If none, enter 0" + }, + { + "name": "ServiceUsersSuspectedFlu", + "options": {}, + "type": "NumberField", + "schema": { + "min": 0, + "max": 200 + }, + "nameHasError": false, + "title": "How many service users have suspected (not confirmed) flu?", + "hint": "Among elderly people this may include people who have a sudden onset of acute respiratory symptoms, fever, or sudden mental or physical deterioration without any other known cause. Include those who are currently in hospital. If none, enter 0" + }, + { + "name": "ServiceUsersChestInfection", + "options": { + "required": false + }, + "type": "NumberField", + "schema": { + "min": 0, + "max": 200 + }, + "nameHasError": false, + "title": "How many service users have been diagnosed with a chest infection by a GP?", + "hint": "Do not include cases you have already reported in this section as having confirmed or suspected flu Include those who are currently in hospital. If none, enter 0" + }, + { + "name": "ServiceUsersChestInfectionCovid19", + "options": { + "required": false + }, + "type": "NumberField", + "schema": { + "min": 0, + "max": 200 + }, + "nameHasError": false, + "title": "How many of these service users with confirmed or suspected flu or a chest infection have been tested for COVID-19?", + "hint": "If none, enter 0" + }, + { + "name": "ServiceUsersChestInfectionCovid19Positive", + "options": { + "required": false + }, + "type": "NumberField", + "schema": { + "min": 0, + "max": 200 + }, + "nameHasError": false, + "title": "How many of these service users tested for COVID-19 had a positive result?", + "hint": "If none, enter 0" + } + ], + "next": [ + { + "path": "/multiple-cases-flu-staff", + "condition": "MultipleCasesOfFluServiceOrStaff:ServiceUsersAndStaff" + }, + { + "path": "/symptom-onset-flu-multiple-cases" + } + ] + }, + { + "path": "/multiple-cases-flu-staff", + "title": "Staff: number of flu or chest infection cases", + "components": [ + { + "name": "ServiceUsersFluSwabTest", + "options": {}, + "type": "NumberField", + "schema": { + "min": 0, + "max": 200 + }, + "nameHasError": false, + "title": "How many staff have flu confirmed by a swab test?", + "hint": "Include those who are currently in hospital. If none, enter 0" + }, + { + "name": "StaffSuspectedFlu", + "options": {}, + "type": "NumberField", + "schema": { + "min": 0, + "max": 200 + }, + "nameHasError": false, + "title": "How many staff have suspected (not confirmed) flu?", + "hint": "Among elderly people this may include people who have a sudden onset of acute respiratory symptoms, fever, or sudden mental or physical deterioration without any other known cause. Include those who are currently in hospital. If none, enter 0" + }, + { + "name": "StaffChestInfection", + "options": { + "required": false + }, + "type": "NumberField", + "schema": { + "min": 0, + "max": 200 + }, + "nameHasError": false, + "title": "How many staff have been diagnosed with a chest infection by a GP?", + "hint": "Do not include cases you have already reported in this section as having confirmed or suspected flu Include those who are currently in hospital. If none, enter 0" + }, + { + "name": "StaffChestInfectionCovid19", + "options": { + "required": false + }, + "type": "NumberField", + "schema": { + "min": 0, + "max": 200 + }, + "nameHasError": false, + "title": "How many of these staff members with confirmed or suspected flu or a chest infection have been tested for COVID-19?", + "hint": "If none, enter 0" + }, + { + "name": "StaffChestInfectionCovid19Positive", + "options": { + "required": false + }, + "type": "NumberField", + "schema": { + "min": 0, + "max": 200 + }, + "nameHasError": false, + "title": "How many of these staff members tested for COVID-19 had a positive result?", + "hint": "If none, enter 0" + } + ], + "next": [ + { + "path": "/symptom-onset-flu-multiple-cases" + } + ] + }, + { + "path": "/symptom-onset-flu", + "title": "Symptom onset for the case of flu", + "components": [ + { + "name": "FluSymptomOnsetDate", + "options": {}, + "type": "DatePartsField", + "nameHasError": false, + "title": "When did symptoms start?", + "hint": "For example, 31 03 2024", + "values": { + "type": "listRef" + } + } + ], + "next": [ + { + "path": "/flu-severity" + } + ] + }, + { + "path": "/flu-severity", + "title": "Severity of the case of flu", + "components": [ + { + "name": "FluSeverityCalledGP", + "options": {}, + "type": "YesNoField", + "nameHasError": false, + "title": "Have you called the GP because of the severity of illness in this case?", + "values": { + "type": "listRef" + } + }, + { + "name": "FluSeverityHospitalised", + "options": {}, + "type": "YesNoField", + "nameHasError": false, + "title": "Has the person been hospitalised with the flu?", + "values": { + "type": "listRef" + } + }, + { + "name": "FluSeverityDeath", + "options": {}, + "type": "YesNoField", + "nameHasError": false, + "title": "Has the person died with flu in this case?", + "values": { + "type": "listRef" + } + } + ], + "next": [ + { + "path": "/vaccination" + } + ] + }, + { + "path": "/vaccination", + "title": "Vaccination among your staff and service users", + "components": [ + { + "name": "ServiceUsersCovid19Vaccination", + "options": { + "required": false + }, + "type": "NumberField", + "nameHasError": false, + "schema": { + "min": 0, + "max": 200 + }, + "title": "How many service users are up to date with the current COVID-19 vaccination schedule?", + "values": { + "type": "listRef" + } + }, + { + "name": "StaffCovid19Vaccination", + "options": { + "required": false + }, + "type": "NumberField", + "nameHasError": false, + "schema": { + "min": 0, + "max": 200 + }, + "title": "How many staff are up to date with the current COVID-19 vaccination schedule?", + "values": { + "type": "listRef" + } + }, + { + "name": "ServiceUsersFluVaccination", + "options": { + "required": false + }, + "type": "NumberField", + "nameHasError": false, + "schema": { + "min": 0, + "max": 200 + }, + "title": "How many service users have had the flu vaccine for this current winter season?", + "values": { + "type": "listRef" + } + }, + { + "name": "StaffFluVaccination", + "options": { + "required": false + }, + "type": "NumberField", + "nameHasError": false, + "schema": { + "min": 0, + "max": 200 + }, + "title": "How many staff have had the flu vaccine for this current winter season?", + "values": { + "type": "listRef" + } + }, + { + "name": "ServiceUsersRSVVaccination", + "options": { + "required": false + }, + "type": "NumberField", + "nameHasError": false, + "schema": { + "min": 0, + "max": 200 + }, + "title": "How many service users have had the respiratory syncytial virus (RSV) vaccine?", + "values": { + "type": "listRef" + } + } + ], + "next": [ + { + "path": "/ipc" + } + ] + }, + { + "path": "/ipc", + "title": "Infection prevention and control (IPC) and outbreak management in your setting", + "components": [ + { + "name": "IPCPractices", + "options": {}, + "type": "RadiosField", + "nameHasError": false, + "title": "How often do you monitor staff IPC practices?", + "hint": "For example, hand hygiene, use of personal protective equipment (PPE) and cleaning", + "list": "IPCPractices", + "values": { + "type": "listRef" + } + }, + { + "name": "Issues", + "options": {}, + "type": "CheckboxesField", + "nameHasError": false, + "title": "What issues are you currently experiencing and need support with?", + "hint": "You can select more than one option", + "list": "Issues", + "values": { + "type": "listRef" + } + }, + { + "name": "AGPs", + "options": {}, + "type": "YesNoField", + "nameHasError": false, + "title": "Does your setting undertake aerosol generating procedures (AGPs)?", + "hint": "For example, inserting or removing a tracheotomy or ostomy, non-invasive ventilation (NIV), bi-level positive airway pressure (BPAP), continuous positive airway pressure (CPA P), sputum induction, respiratory tract suctioning (mouth suctioning is not an AGP).", + "values": { + "type": "listRef" + } + } + ], + "next": [ + { + "path": "/agps", + "condition": "AGPs:yes" + }, + { + "path": "/agency-staff" + } + ] + }, + { + "path": "/symptom-onset-flu-multiple-cases", + "title": "Symptom onset of flu or chest infection cases in this outbreak", + "components": [ + { + "name": "FluSymptomOnsetDateFirstCase", + "options": {}, + "type": "DatePartsField", + "nameHasError": false, + "title": "When did symptoms start in the first case of confirmed or suspected flu, or chest infection?", + "hint": "For example, 31 03 2024", + "values": { + "type": "listRef" + } + }, + { + "name": "FluSymptomOnsetDateSecondCase", + "options": {}, + "type": "DatePartsField", + "nameHasError": false, + "title": "When did symptoms start in the second case of confirmed or suspected flu, or chest infection?", + "hint": "For example, 31 03 2024", + "values": { + "type": "listRef" + } + }, + { + "name": "FluSymptomOnsetDateMostRecentCase", + "options": { + "required": false + }, + "type": "DatePartsField", + "nameHasError": false, + "title": "When did symptoms start in the most recent case of confirmed or suspected flu or chest infection?", + "hint": "For example, 31 03 2024", + "values": { + "type": "listRef" + } + } + ], + "next": [ + { + "path": "/flu-severity-multiple-cases" + } + ] + }, + { + "path": "/flu-severity-multiple-cases", + "title": "Severity of flu or chest infection cases in this outbreak", + "components": [ + { + "name": "FluSeverityCalledGPMultipleCases", + "options": {}, + "type": "RadiosField", + "nameHasError": false, + "title": "How many cases of suspected or confirmed flu or chest infection have you called the GP about because of the severity of illness in this outbreak?", + "list": "CaseNumbers", + "values": { + "type": "listRef" + } + }, + { + "name": "FluSeverityHospitalisedMultipleCases", + "options": {}, + "type": "RadiosField", + "nameHasError": false, + "title": "How many service users or staff have been hospitalised because of confirmed or suspected flu or chest infection in this outbreak?", + "list": "CaseNumbers", + "values": { + "type": "listRef" + } + }, + { + "name": "FluSeverityDeathMultipleCases", + "options": {}, + "type": "RadiosField", + "nameHasError": false, + "title": "How many service users or staff have died because of confirmed or suspected flu or chest infection in this outbreak?", + "list": "CaseNumbers", + "values": { + "type": "listRef" + } + } + ], + "next": [ + { + "path": "/vaccination" + } + ] + }, + { + "path": "/agps", + "title": "Do staff carrying out aerosol generating procedures (AGPs) wear fit-tested FFP3 masks?", + "components": [ + { + "name": "FFP3Masks", + "options": {}, + "type": "RadiosField", + "nameHasError": false, + "title": "Do staff carrying out aerosol generating procedures (AGPs) wear fit-tested FFP3 masks?", + "list": "FFP3Masks", + "values": { + "type": "listRef" + } + } + ], + "next": [ + { + "path": "/agency-staff" + } + ] + }, + { + "path": "/agency-staff", + "title": "Do you use agency staff or share staff with other care settings?", + "components": [ + { + "name": "AgencyStaff", + "options": {}, + "type": "YesNoField", + "nameHasError": false, + "title": "Do you use agency staff or share staff with other care settings?", + "values": { + "type": "listRef" + } + } + ], + "next": [ + { + "path": "/setting-details", + "condition": "AgencyStaff:No" + }, + { + "path": "/additional-staff" + } + ] + }, + { + "path": "/additional-staff", + "title": "How many additional agency staff or staff from other care settings have you used during this outbreak?", + "components": [ + { + "name": "AdditionalStaff", + "options": {}, + "type": "RadiosField", + "nameHasError": false, + "title": "How many additional agency staff or staff from other care settings have you used during this outbreak?", + "list": "AdditionalStaff", + "values": { + "type": "listRef" + } + } + ], + "next": [ + { + "path": "/setting-details" + } + ] + }, + { + "path": "/setting-details", + "title": "Setting details", + "components": [ + { + "name": "SettingName", + "options": {}, + "type": "TextField", + "nameHasError": false, + "title": "Your setting name", + "hint": "The name of the setting where the cases are located, not the management company", + "values": { + "type": "listRef" + } + }, + { + "name": "SettingPostcode", + "options": {}, + "type": "TextField", + "nameHasError": false, + "title": "Your setting postcode", + "hint": "The postcode of the setting where the cases are located, not the management company", + "values": { + "type": "listRef" + } + }, + { + "name": "S0Q3", + "options": { + "required": true, + "customValidationMessages": { + "string.empty": "Your local UKHSA health protection team is required", + "string.base": "Your local UKHSA health protection team is required" + } + }, + "type": "SelectField", + "title": "Your local UKHSA health protection team", + "list": "sjgMDe", + "nameHasError": false, + "schema": {}, + "values": { + "type": "listRef" + } + }, + { + "name": "CQCRegistered", + "options": {}, + "type": "YesNoField", + "nameHasError": false, + "title": "Is your care setting registered with the Care Quality Commission (CQC)?", + "values": { + "type": "listRef" + } + } + ], + "next": [ + { + "path": "/contact-details" + } + ] + }, + { + "path": "/contact-details", + "title": "Contact details", + "components": [ + { + "name": "MainContactName", + "options": {}, + "type": "TextField", + "nameHasError": false, + "title": "Full name", + "values": { + "type": "listRef" + } + }, + { + "name": "MainContactJobTitle", + "options": { + "required": false + }, + "type": "TextField", + "nameHasError": false, + "title": "Job title", + "hint": "For example, manager, senior carer", + "values": { + "type": "listRef" + } + }, + { + "name": "MainContactPhoneNumber", + "options": {}, + "type": "TextField", + "nameHasError": false, + "title": "Phone number", + "values": { + "type": "listRef" + } + }, + { + "name": "MainContactEmailAddress", + "options": {}, + "type": "TextField", + "nameHasError": false, + "title": "Email address", + "values": { + "type": "listRef" + } + }, + { + "name": "AltContactName", + "options": { + "required": false + }, + "type": "TextField", + "nameHasError": false, + "title": "Full name", + "values": { + "type": "listRef" + } + }, + { + "name": "AltContactJobTitle", + "options": { + "required": false + }, + "type": "TextField", + "nameHasError": false, + "title": "Job title", + "hint": "For example, manager, senior carer", + "values": { + "type": "listRef" + } + }, + { + "name": "AltContactPhoneNumber", + "options": { + "required": false + }, + "type": "TextField", + "nameHasError": false, + "title": "Phone number", + "values": { + "type": "listRef" + } + }, + { + "name": "AltContactEmailAddress", + "options": { + "required": false + }, + "type": "TextField", + "nameHasError": false, + "title": "Email address", + "values": { + "type": "listRef" + } + } + ], + "next": [ + { + "path": "/service-users" + } + ] + }, + { + "path": "/service-users", + "title": "Service users and staff", + "components": [ + { + "name": "ServiceUsersTypes", + "options": {}, + "type": "CheckboxesField", + "nameHasError": false, + "title": "Select the options that best describe the majority of your service users", + "list": "ServiceUsersTypes", + "values": { + "type": "listRef" + } + }, + { + "name": "ServiceUsersCurrentlyLive", + "options": {}, + "type": "NumberField", + "nameHasError": false, + "schema": { + "min": 0, + "max": 200 + }, + "title": "How many service users currently live in your care setting or use your service?", + "list": "ServiceUsersTypes" + }, + { + "name": "ServiceUsersNumber", + "options": {}, + "type": "NumberField", + "schema": { + "min": 0, + "max": 200 + }, + "nameHasError": false, + "title": "How many service users currently live in your care setting or use your service?" + } + ], + "next": [ + { + "path": "/summaryPage" + } + ] + }, + { + "path": "/summaryPage", + "title": "Check your answers before submitting your report", + "components": [ + { + "name": "nMOTrx", + "options": {}, + "type": "Para", + "content": "Check your answers before sending your report
\n", + "schema": {} + } + ], + "next": [ + { + "path": "/reportSent" + } + ] + }, + { + "path": "/reportSent", + "title": "Service users and staff", + "components": [ + { + "name": "nMOTrx", + "options": {}, + "type": "Para", + "content": "Report Sent
\n", + "schema": {} + } + ] + } + ], + "lists": [ + { + "title": "yes-no-sure", + "name": "YesNoSure", + "type": "string", + "items": [ + { + "text": "Yes", + "value": "Yes" + }, + { + "text": "No", + "value": "No" + }, + { + "text": "Not sure", + "value": "Not sure" + } + ] + }, + { + "title": "infection-types", + "name": "InfectionTypes", + "type": "string", + "items": [ + { + "text": "COVID-19", + "value": "COVID-19" + }, + { + "text": "Flu", + "value": "Flu" + }, + { + "text": "Any other acute respiratory infections", + "value": "Any other acute respiratory infections", + "description": "including viruses such as respiratory syncytial virus (RSV), adenovirus, human metapneumovirus (hMPV), parainfluenza and rhinovirus" + } + ] + }, + { + "title": "ari-infection-types", + "name": "ARIinfectionType", + "type": "string", + "items": [ + { + "text": "Adenovirus", + "value": "Adenovirus" + }, + { + "text": "Human Metapneumovirus (hMPV)", + "value": "Human Metapneumovirus (hMPV)" + }, + { + "text": "Parainfluenza", + "value": "Parainfluenza" + }, + { + "text": "Respiratory Syncytial Virus (RSV)", + "value": "Respiratory Syncytial Virus (RSV)" + }, + { + "text": "Rhinovirus", + "value": "Rhinovirus" + }, + { + "text": "Other acute respiratory infection", + "value": "Other acute respiratory infection" + } + ] + }, + { + "title": "social-care-provider-type", + "name": "MpSRIP", + "type": "string", + "items": [ + { + "text": "Residential care home", + "value": "Residential care home" + }, + { + "text": "Nursing care home", + "value": "Nursing care home" + }, + { + "text": "Residential and nursing care home", + "value": "Residential and nursing care home" + }, + { + "text": "Supported living", + "value": "Supported living or extra care (not high risk)" + }, + { + "text": "Extra care", + "value": "Extra care" + }, + { + "text": "Domiciliary or home care", + "value": "Domiciliary or home care" + }, + { + "text": "Rehabilitation, reablement or respite", + "value": "Rehabilitation, reablement or respite" + }, + { + "text": "Other adult social care", + "value": "Other" + } + ] + }, + { + "title": "one-or-more", + "name": "OneOrMore", + "type": "string", + "items": [ + { + "text": "1", + "value": "One" + }, + { + "text": "2 or more", + "value": "2 or more" + } + ] + }, + { + "title": "service-or-staff", + "name": "ServiceOrStaff", + "type": "string", + "items": [ + { + "text": "Service user", + "value": "Service user" + }, + { + "text": "Staff", + "value": "Staff" + } + ] + }, + { + "title": "service-or-staff-multiple", + "name": "ServiceOrStaffMultiple", + "type": "string", + "items": [ + { + "text": "Service users", + "value": "Service users" + }, + { + "text": "Staff", + "value": "Staff" + } + ] + }, + { + "title": "ipc-practices", + "name": "IPCPractices", + "type": "string", + "items": [ + { + "text": "We do not monitor infection prevention and control practices", + "value": "We do not monitor infection prevention and control practices" + }, + { + "text": "Within the last month", + "value": "Within the last month" + }, + { + "text": "Between 1 and 6 months ago", + "value": "Between 1 and 6 months ago" + }, + { + "text": "7 to 12 months ago", + "value": "7 to 12 months ago" + }, + { + "text": "more than 12 months ago", + "value": "more than 12 months ago" + } + ] + }, + { + "title": "case-numbers", + "name": "CaseNumbers", + "type": "string", + "items": [ + { + "text": "0", + "value": "None" + }, + { + "text": "1", + "value": "One" + }, + { + "text": "2 to 3", + "value": "2 to 3" + }, + { + "text": "4 to 5", + "value": "4 to 5" + }, + { + "text": "More than 5", + "value": "More than 5" + }, + { + "text": "I do not know", + "value": "I do not know" + } + ] + }, + { + "title": "issues", + "name": "Issues", + "type": "string", + "items": [ + { + "text": "COVID-19: access to treatments", + "value": "COVID-19: access to treatments" + }, + { + "text": "COVID-19: LFD test kit supply", + "value": "COVID-19: LFD test kit supply" + }, + { + "text": "Hand hygiene", + "value": "Hand hygiene" + }, + { + "text": "Isolation", + "value": "Isolation" + }, + { + "text": "New admissions or transfer of service users", + "value": "New admissions or transfer of service users" + }, + { + "text": "Staffing", + "value": "Staffing" + }, + { + "text": "Supply of PPE", + "value": "Supply of PPE" + }, + { + "text": "Use of PPE", + "value": "Use of PPE" + }, + { + "text": "Visits", + "value": "Visits" + }, + { + "text": "Waste, cleaning or laundry", + "value": "Waste, cleaning or laundry" + }, + { + "text": "No issues", + "value": "No issues" + } + ] + }, + { + "title": "ffp3-masks", + "name": "FFP3Masks", + "type": "string", + "items": [ + { + "text": "All", + "value": "All" + }, + { + "text": "Some", + "value": "Some" + }, + { + "text": "None", + "value": "None" + }, + { + "text": "I do not know", + "value": "I do not know" + } + ] + }, + { + "title": "additional-staff", + "name": "AdditionalStaff", + "type": "string", + "items": [ + { + "text": "Fewer than 5", + "value": "Fewer than 5" + }, + { + "text": "5 or more", + "value": "5 or more" + } + ] + }, + { + "title": "service-users-types", + "name": "ServiceUsersTypes", + "type": "string", + "items": [ + { + "text": "People with learning difficulties or learning disabilities", + "value": "People with learning difficulties or learning disabilities" + }, + { + "text": "People with physical disabilities or severe medical conditions", + "value": "People with physical disabilities or severe medical conditions" + }, + { + "text": "People with mental health needs", + "value": "People with mental health needs" + }, + { + "text": "People with substance misuse issues", + "value": "People with substance misuse issues" + }, + { + "text": "People living with dementia", + "value": "People living with dementia" + }, + { + "text": "Under 65 years", + "value": "Under 65 years" + }, + { + "text": "65 years or over", + "value": "65 years or over" + } + ] + }, + { + "title": "HPTs", + "name": "sjgMDe", + "type": "string", + "items": [ + { + "text": "East of England HPT", + "value": "East of England HPT" + }, + { + "text": "West Midlands HPT", + "value": "West Midlands HPT" + }, + { + "text": "South West HPT", + "value": "South West HPT" + } + ] + } + ], + "sections": [], + "conditions": [ + { + "displayName": "PositiveARI:No", + "name": "sUrRwU", + "value": { + "name": "PositiveARI:No", + "conditions": [ + { + "field": { + "name": "PositiveARI", + "type": "YesNoField", + "display": "Do you have any positive test results for an acute respiratory infection?" + }, + "operator": "is", + "value": { + "type": "Value", + "value": "false", + "display": "false" + } + } + ] + } + }, + { + "displayName": "TwoOrMoreARI:No", + "name": "yowninW", + "value": { + "name": "TwoOrMoreARI:No", + "conditions": [ + { + "field": { + "name": "TwoOrMoreARI", + "type": "YesNoField", + "display": "Are you reporting 2 or more cases of an acute respiratory infection?" + }, + "operator": "is", + "value": { + "type": "Value", + "value": "false", + "display": "false" + } + } + ] + } + }, + { + "displayName": "TwoOrMoreCovid:No", + "name": "fninfWW", + "value": { + "name": "TwoOrMoreCovid:No", + "conditions": [ + { + "field": { + "name": "TwoOrMoreCovid", + "type": "YesNoField", + "display": "Are you reporting 2 or more cases of COVID-19?" + }, + "operator": "is", + "value": { + "type": "Value", + "value": "false", + "display": "false" + } + } + ] + } + }, + { + "displayName": "WhichARI:FLU", + "name": "einiQH", + "value": { + "name": "WhichARI:FLU", + "conditions": [ + { + "field": { + "name": "WhichARI", + "type": "CheckboxesField", + "display": "Which acute respiratory infections do you have a positive test result for?" + }, + "operator": "contains", + "value": { + "type": "Value", + "value": "Flu", + "display": "Flu" + } + } + ] + } + }, + { + "displayName": "WhichARI:OTHER", + "name": "fknfQQQ", + "value": { + "name": "WhichARI:OTHER", + "conditions": [ + { + "field": { + "name": "WhichARI", + "type": "CheckboxesField", + "display": "Which acute respiratory infections do you have a positive test result for?" + }, + "operator": "contains", + "value": { + "type": "Value", + "value": "Any other acute respiratory infections", + "display": "Any other acute respiratory infections" + } + } + ] + } + }, + { + "displayName": "ReportCovid:No", + "name": "dmdojqQH", + "value": { + "name": "ReportCovid:No", + "conditions": [ + { + "field": { + "name": "TwoOrMoreCovid5days", + "type": "RadiosField", + "display": "Did symptoms in 2 or more cases of COVID-19 start within 5 days of each other?" + }, + "operator": "is", + "value": { + "type": "Value", + "value": "No", + "display": "No" + } + }, + { + "coordinator": "or", + "field": { + "name": "TwoOrMoreCovidSpread", + "type": "RadiosField", + "display": "Is it possible that at least 2 of the cases of COVID-19 are linked by spread in your setting?" + }, + "operator": "is", + "value": { + "type": "Value", + "value": "No", + "display": "No" + } + } + ] + } + }, + { + "displayName": "TwoOrMoreCasesNotCovidFlu:NO", + "name": "fwnsinQ", + "value": { + "name": "TwoOrMoreCasesNotCovidFlu:NO", + "conditions": [ + { + "field": { + "name": "WhichARI", + "type": "YesNoField", + "display": "Are you reporting 2 or more cases of an acute respiratory infection that is not COVID-19 or flu?" + }, + "operator": "is", + "value": { + "type": "Value", + "value": "true", + "display": "true" + } + } + ] + } + }, + { + "displayName": "SingleCaseOfFluServiceUserOrStaff:ServiceUser", + "name": "SingleCaseOfFluServiceUserOrStaff:ServiceUser", + "value": { + "name": "SingleCaseOfFluServiceUserOrStaff:ServiceUser", + "conditions": [ + { + "field": { + "name": "SingleCaseOfFluServiceOrStaff", + "type": "RadiosField", + "display": "Who has the case of flu?" + }, + "operator": "is", + "value": { + "type": "Value", + "value": "Service user", + "display": "Service user" + } + } + ] + } + }, + { + "displayName": "NumberOfCasesOfFlu:One", + "name": "NumberOfCasesOfFlu:One", + "value": { + "name": "NumberOfCasesOfFlu:One", + "conditions": [ + { + "field": { + "name": "NumberOfCasesOfFlu", + "type": "RadiosField", + "display": "How many cases of flu are you reporting?" + }, + "operator": "is", + "value": { + "type": "Value", + "value": "One", + "display": "1" + } + } + ] + } + }, + { + "displayName": "MultipleCasesOfFluServiceOrStaff:ServiceUsers", + "name": "MultipleCasesOfFluServiceOrStaff:ServiceUsers", + "value": { + "name": "MultipleCasesOfFluServiceOrStaff:ServiceUsers", + "conditions": [ + { + "field": { + "name": "MultipleCasesOfFluServiceOrStaff", + "type": "CheckboxesField", + "display": "Who are you reporting cases or symptoms of flu in?" + }, + "operator": "contains", + "value": { + "type": "Value", + "value": "Service users", + "display": "Service users" + } + } + ] + } + }, + { + "displayName": "MultipleCasesOfFluServiceOrStaff:ServiceUsersAndStaff", + "name": "MultipleCasesOfFluServiceOrStaff:ServiceUsersAndStaff", + "value": { + "name": "MultipleCasesOfFluServiceOrStaff:ServiceUsersAndStaff", + "conditions": [ + { + "field": { + "name": "MultipleCasesOfFluServiceOrStaff", + "type": "CheckboxesField", + "display": "Who are you reporting cases or symptoms of flu in?" + }, + "operator": "contains", + "value": { + "type": "Value", + "value": "Service users", + "display": "Service users" + } + }, + { + "coordinator": "and", + "field": { + "name": "MultipleCasesOfFluServiceOrStaff", + "type": "CheckboxesField", + "display": "Who are you reporting cases or symptoms of flu in?" + }, + "operator": "contains", + "value": { + "type": "Value", + "value": "Staff", + "display": "Staff" + } + } + ] + } + }, + { + "displayName": "AGPs:yes", + "name": "AGPs:yes", + "value": { + "name": "AGPs:yes", + "conditions": [ + { + "field": { + "name": "AGPs", + "type": "YesNoField", + "display": "Does your setting undertake aerosol generating procedures (AGPs)?" + }, + "operator": "is", + "value": { + "type": "Value", + "value": "true", + "display": "true" + } + } + ] + } + }, + { + "displayName": "AgencyStaff:No", + "name": "AgencyStaff:No", + "value": { + "name": "AgencyStaff:No", + "conditions": [ + { + "field": { + "name": "AgencyStaff", + "type": "YesNoField", + "display": "Do you use agency staff or share staff with other care settings?" + }, + "operator": "is", + "value": { + "type": "Value", + "value": "false", + "display": "false" + } + } + ] + } + } + ], + "fees": [], + "outputs": [], + "version": 2, + "skipSummary": false, + "declaration": "Your responses may be shared with your local UKHSA health protection team, your local authority community infection control team, and the NHS. They will use your information to help you to manage your situation.\n
By submitting this report you confirm that the details you are providing are correct to the best of your knowledge. You confirm that you have not included any personally identifiable information, for example names or dates of birth
\n\n", + "name": "Report an outbreak", + "feedback": { + "feedbackForm": true, + "url": "" + }, + "phaseBanner": { + "phase": "beta" + }, + "specialPages": { + "confirmationPage": { + "customText": { + "nextSteps": "We will send 2 automated emails to {{ S1Q8 }}", + "title": "Report sent" + } + } + } +} From 1603560861bfad8b4cfc06b9fa0edb15638da788 Mon Sep 17 00:00:00 2001 From: emilyjevans <30391244+emilyjevans@users.noreply.github.com> Date: Sun, 8 Dec 2024 09:38:55 +0000 Subject: [PATCH 002/403] add html to summary pages and report sent page --- runner/src/server/forms/ReportAnOutbreak.json | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/runner/src/server/forms/ReportAnOutbreak.json b/runner/src/server/forms/ReportAnOutbreak.json index 8c1a055a4c..2df952c5f9 100644 --- a/runner/src/server/forms/ReportAnOutbreak.json +++ b/runner/src/server/forms/ReportAnOutbreak.json @@ -204,6 +204,14 @@ { "path": "/check-answers", "title": "Check your answers before continuing", + "components": [ + { + "name": "rofomf", + "options": {}, + "type": "Para", + "content": "Setting type | Residential care home | Change |
Positive test result | Yes | Change |
Infection | Flu | Change |
Check your answers before sending your report
\n", + "content": "Your setting name | Belmont Care Home | Change |
Your setting postcode | TQ5 0AH | Change |
Your local UKHSA health protection team | South West Health Protection Team | Change |
Your Care Quality Commission (CQC) location ID | 000001888 | Change |
Type of adult social care you provide | Residential care home | Change |
Full name of contact person | Pat Deerfield | Change |
Job title of contact person | Manager | Change |
Telephone number | 07451300300 | Change |
Email address | Pat@cov.com | Change |
Acute respiratory infections you are reporting | Flu | Change |
Number of cases of Flu you are reporting | 2 or more | Change |
Symptoms in 2 or more cases of Flu started within 5 days of each other | Yes | Change |
You think the cases of Flu could be linked by spread in your setting | Yes | Change |
At least one case of Flu has been confirmed by a positive test | Yes | Change |
How would you describe the majority of your service users | Service users, staff | Change |
Number of people that currently live in your setting or use your service | 27 | Change |
Number of staff that work in your care setting or service | 7 | Change |
Number of empty beds (optional) | 3 | Change |
You are reporting cases or symptoms of Flu in service users or staff | 2 | Change |
Number of service users who have Flu confirmed by a test | 5 | Change |
Number of service users who have symptoms of an acute respiratory infection, but have not been tested for Flu | 5 | Change |
Number of staff members who have Flu confirmed by a test | 1 | Change |
Number of staff who have symptoms of an acute respiratory infection, but have not been tested for Flu | 2 | Change |
Date symptoms started in the first case of Flu | 02 August 2024 | Change |
Date symptoms started in the second case of Flu (optional) | N/A | Change |
Date symptoms started in the most recent case of Flu | 10 August 2024 | Change |
Number of service users who have had the flu vaccine for this current winter season (optional) | 20 | Change |
Number of staff who have had the flu vaccine for this current winter season (optional) | 6 | Change |
How often are you monitoring staff IPC practices | Within the last month | Change |
Issues you are currently experiencing and need support with | Test kit supply | Change |
Your setting undertakes aerosol generating procedures (AGPs) | Yes | Change |
Staff carrying out aerosol generating procedures, wear fit-tested and FFP3 masks | All | Change |
Report Sent
\n", + "content": "Your reference number is: OS-5371. Use this number if you need to contact the UKHSA health protection team about your outbreak.
We will send 2 automated emails to Pel@coy.com.
An acknowledgement email will give you your reference number and a copy of the information you've provided. The email will tell you if you have a low-risk outbreak, a medium-risk outbreak, a high-priority outbreak, or a single case of flu.
An advice email will give you information specific to your situation to help you prevent the spread of infection. It explains what to expect from your local UKHSA health protection team or the community infection control team.
If these emails do not arrive within one hour, or you need urgent advice, telephone your local UKHSA health protection team or community infection control team.
If your acknowledgement or advice email tells you that your outbreak is assessed as high priority on a weekend or a bank holiday, you also need to telephone your local UKHSA health protection team. Call during the daytime if possible. If you do not call the health protection team, a member of the health protection team will only call you on the next working day.
If you need urgent medical advice, you can call NHS 111 or visit 111.nhs.uk. For life-threatening emergencies, call 999.
This is a new service. Help us improve it and give your feedback.
Provide a contact who will be available to receive:
If possible, provide a work phone number and email address instead of personal contact details.
Enter details for an alternative contact if you want the emails to also be sent to a second contact person. We will use this phone number for a follow up call if the main contact is not available.
", + "schema": {} + }, { "name": "AltContactName", "options": { @@ -1079,13 +1105,13 @@ }, { "path": "/summaryPage", - "title": "Check your answers before submitting your report", + "title": "Check your answers before sending your report", "components": [ { "name": "nMOTrx", "options": {}, "type": "Para", - "content": "Your setting name | Belmont Care Home | Change |
Your setting postcode | TQ5 0AH | Change |
Your local UKHSA health protection team | South West Health Protection Team | Change |
Your Care Quality Commission (CQC) location ID | 000001888 | Change |
Type of adult social care you provide | Residential care home | Change |
Full name of contact person | Pat Deerfield | Change |
Job title of contact person | Manager | Change |
Telephone number | 07451300300 | Change |
Email address | Pat@cov.com | Change |
Acute respiratory infections you are reporting | Flu | Change |
Number of cases of Flu you are reporting | 2 or more | Change |
Symptoms in 2 or more cases of Flu started within 5 days of each other | Yes | Change |
You think the cases of Flu could be linked by spread in your setting | Yes | Change |
At least one case of Flu has been confirmed by a positive test | Yes | Change |
How would you describe the majority of your service users | Service users, staff | Change |
Number of people that currently live in your setting or use your service | 27 | Change |
Number of staff that work in your care setting or service | 7 | Change |
Number of empty beds (optional) | 3 | Change |
You are reporting cases or symptoms of Flu in service users or staff | 2 | Change |
Number of service users who have Flu confirmed by a test | 5 | Change |
Number of service users who have symptoms of an acute respiratory infection, but have not been tested for Flu | 5 | Change |
Number of staff members who have Flu confirmed by a test | 1 | Change |
Number of staff who have symptoms of an acute respiratory infection, but have not been tested for Flu | 2 | Change |
Date symptoms started in the first case of Flu | 02 August 2024 | Change |
Date symptoms started in the second case of Flu (optional) | N/A | Change |
Date symptoms started in the most recent case of Flu | 10 August 2024 | Change |
Number of service users who have had the flu vaccine for this current winter season (optional) | 20 | Change |
Number of staff who have had the flu vaccine for this current winter season (optional) | 6 | Change |
How often are you monitoring staff IPC practices | Within the last month | Change |
Issues you are currently experiencing and need support with | Test kit supply | Change |
Your setting undertakes aerosol generating procedures (AGPs) | Yes | Change |
Staff carrying out aerosol generating procedures, wear fit-tested and FFP3 masks | All | Change |
Your setting name | Belmont Care Home | Change |
Your setting postcode | TQ5 0AH | Change |
Your local UKHSA health protection team | South West Health Protection Team | Change |
Your Care Quality Commission (CQC) location ID | 000001888 | Change |
Type of adult social care you provide | Residential care home | Change |
Full name of contact person | Pat Deerfield | Change |
Job title of contact person | Manager | Change |
Telephone number | 07451300300 | Change |
Email address | Pat@cov.com | Change |
Acute respiratory infections you are reporting | Flu | Change |
Number of cases of Flu you are reporting | 2 or more | Change |
Symptoms in 2 or more cases of Flu started within 5 days of each other | Yes | Change |
You think the cases of Flu could be linked by spread in your setting | Yes | Change |
At least one case of Flu has been confirmed by a positive test | Yes | Change |
How would you describe the majority of your service users | Service users, staff | Change |
Number of people that currently live in your setting or use your service | 27 | Change |
Number of staff that work in your care setting or service | 7 | Change |
Number of empty beds (optional) | 3 | Change |
You are reporting cases or symptoms of Flu in service users or staff | 2 | Change |
Number of service users who have Flu confirmed by a test | 5 | Change |
Number of service users who have symptoms of an acute respiratory infection, but have not been tested for Flu | 5 | Change |
Number of staff members who have Flu confirmed by a test | 1 | Change |
Number of staff who have symptoms of an acute respiratory infection, but have not been tested for Flu | 2 | Change |
Date symptoms started in the first case of Flu | 02 August 2024 | Change |
Date symptoms started in the second case of Flu (optional) | N/A | Change |
Date symptoms started in the most recent case of Flu | 10 August 2024 | Change |
Number of service users who have had the flu vaccine for this current winter season (optional) | 20 | Change |
Number of staff who have had the flu vaccine for this current winter season (optional) | 6 | Change |
How often are you monitoring staff IPC practices | Within the last month | Change |
Issues you are currently experiencing and need support with | Test kit supply | Change |
Your setting undertakes aerosol generating procedures (AGPs) | Yes | Change |
Staff carrying out aerosol generating procedures, wear fit-tested and FFP3 masks | All | Change |
You use agency staff or share staff with other care settings | Yes | Change |
Number of additional agency staff or staff shared with settings you have used during this outbreak | Fewer than 5 | Change |
Your responses may be shared with your local UKHSA health protection team, your local authority community infection control team, and the NHS. They will use your information to help you to manage your situation.
By submitting this report you confirm that the details you are providing are correct to the best of your knowledge. You confirm that you have not included any personally identifiable information, for example names or dates of birth.
Applies to England
\n", - "schema": {} + "content": "Applies to England
\n" }, { "name": "nMOTry", "options": {}, "type": "Para", - "content": "\n You can use this service if you provide adult social care, such as a care home, retirement home, supported living or extra care.\n
Use this service to report:
\n
ARIs include COVID-19, flu, respiratory syncytial virus (RSV), or unknown respiratory infection including chest infections.
\nIt should take about 10 minutes to complete.
\n\n\n If possible, test all service users with symptoms who are eligible for COVID-19 treatments using a COVID-19 rapid lateral flow test. Staff with symptoms who are eligible for COVID-19 treatments should test themselves at home. \n
\n\n If you cannot test people, do not wait. Report as soon as possible. \n
\n\n You'll need to know the:\n
\n\n Do not use this online service to give an update on an outbreak or cluster of ARI that you've already reported. If you need to give an update, contact your local UKHSA health protection team or your community infection control team.\n
You only need to report 2 or more ARI cases if they could be linked by spread in your setting. If the infection could not have been spread in your setting, you should not report it as an outbreak. If in doubt, report as an outbreak.
\nDo not use this service to report:
\nRead more on:
\nYour local UKHSA health protection team, or the community infection control team, will use your information to assess your outbreak. They will help you manage the outbreak and prevent further spread.
\nIf you need help using the service or have any other questions, contact your local UKHSA health protection team during working hours.
\nIf your enquiry is urgent outside of working hours, telephone your health protection team's out-of-hours service.
\nIf you need urgent medical advice, you should call NHS 111 or visit 111.nhs.uk. For life-threatening emergencies, call 999.
\n", - "schema": {} + "content": "\n You can use this service if you provide adult social care, such as a care home, retirement home, supported living or extra care.\n
Use this service to report:
\n
ARIs include COVID-19, flu, respiratory syncytial virus (RSV), or unknown respiratory infection including chest infections.
\nIt should take about 10 minutes to complete.
\n\n\n If possible, test all service users with symptoms who are eligible for COVID-19 treatments using a COVID-19 rapid lateral flow test. Staff with symptoms who are eligible for COVID-19 treatments should test themselves at home. \n
\n\n If you cannot test people, do not wait. Report as soon as possible. \n
\n\n You'll need to know the:\n
\n\n Do not use this online service to give an update on an outbreak or cluster of ARI that you've already reported. If you need to give an update, contact your local UKHSA health protection team or your community infection control team.\n
You only need to report 2 or more ARI cases if they could be linked by spread in your setting. If the infection could not have been spread in your setting, you should not report it as an outbreak. If in doubt, report as an outbreak.
\nDo not use this service to report:
\nRead more on:
\nYour local UKHSA health protection team, or the community infection control team, will use your information to assess your outbreak. They will help you manage the outbreak and prevent further spread.
\nIf you need help using the service or have any other questions, contact your local UKHSA health protection team during working hours.
\nIf your enquiry is urgent outside of working hours, telephone your health protection team's out-of-hours service.
\nIf you need urgent medical advice, you should call NHS 111 or visit 111.nhs.uk. For life-threatening emergencies, call 999.
\n" } ], "next": [ @@ -72,7 +70,7 @@ "next": [ { "path": "/2-or-more-ari", - "condition": "sUrRwU" + "condition": "PositiveARI:No" }, { "path": "/which-ari" @@ -99,11 +97,11 @@ "next": [ { "path": "/check-answers", - "condition": "einiQH" + "condition": "WhichARI:FLU" }, { "path": "/2-or-more-cases-not-covid-or-flu", - "condition": "fknfQQQ" + "condition": "WhichARI:OTHER" }, { "path": "/2-or-more-covid" @@ -128,7 +126,7 @@ "next": [ { "path": "/do-not-need-to-report", - "condition": "fninfWW" + "condition": "TwoOrMoreCovid:No" }, { "path": "/2-or-more-covid-details" @@ -165,7 +163,7 @@ "next": [ { "path": "/do-not-need-to-report", - "condition": "dmdojqQH" + "condition": "ReportCovid:No" }, { "path": "/check-answers" @@ -190,7 +188,7 @@ "next": [ { "path": "/do-not-need-to-report", - "condition": "yowninW" + "condition": "TwoOrMoreARI:No" }, { "path": "/check-answers" @@ -237,7 +235,7 @@ "next": [ { "path": "/do-not-need-to-report", - "condition": "yowninW" + "condition": "TwoOrMoreARI:No" }, { "path": "/ari-infection-type" @@ -263,7 +261,7 @@ "next": [ { "path": "/do-not-need-to-report", - "condition": "yowninW" + "condition": "TwoOrMoreARI:No" }, { "path": "/check-answers" @@ -1503,7 +1501,7 @@ "conditions": [ { "displayName": "PositiveARI:No", - "name": "sUrRwU", + "name": "PositiveARI:No", "value": { "name": "PositiveARI:No", "conditions": [ @@ -1525,7 +1523,7 @@ }, { "displayName": "TwoOrMoreARI:No", - "name": "yowninW", + "name": "TwoOrMoreARI:No", "value": { "name": "TwoOrMoreARI:No", "conditions": [ @@ -1547,7 +1545,7 @@ }, { "displayName": "TwoOrMoreCovid:No", - "name": "fninfWW", + "name": "TwoOrMoreCovid:No", "value": { "name": "TwoOrMoreCovid:No", "conditions": [ @@ -1569,7 +1567,7 @@ }, { "displayName": "WhichARI:FLU", - "name": "einiQH", + "name": "WhichARI:FLU", "value": { "name": "WhichARI:FLU", "conditions": [ @@ -1591,7 +1589,7 @@ }, { "displayName": "WhichARI:OTHER", - "name": "fknfQQQ", + "name": "WhichARI:OTHER", "value": { "name": "WhichARI:OTHER", "conditions": [ @@ -1613,7 +1611,7 @@ }, { "displayName": "ReportCovid:No", - "name": "dmdojqQH", + "name": "ReportCovid:No", "value": { "name": "ReportCovid:No", "conditions": [ @@ -1649,7 +1647,7 @@ }, { "displayName": "TwoOrMoreCasesNotCovidFlu:NO", - "name": "fwnsinQ", + "name": "TwoOrMoreCasesNotCovidFlu:NO", "value": { "name": "TwoOrMoreCasesNotCovidFlu:NO", "conditions": [ diff --git a/runner/src/server/views/500.html b/runner/src/server/views/500.html index d57926c5c2..7ce1c50906 100755 --- a/runner/src/server/views/500.html +++ b/runner/src/server/views/500.html @@ -5,8 +5,8 @@Contact your closest consulate.
+You need to report the outbreak by telephone to your local UKHSA health protection team.
Your responses may be shared with your local UKHSA health protection team, your local authority community infection control team, and the NHS. They will use your information to help you to manage your situation.\n
By submitting this report you confirm that the details you are providing are correct to the best of your knowledge. You confirm that you have not included any personally identifiable information, for example names or dates of birth
\n\n", From 9505f9102daad494647b115d4a15ae86cf54517b Mon Sep 17 00:00:00 2001 From: emilyjevans <30391244+emilyjevans@users.noreply.github.com> Date: Mon, 16 Dec 2024 10:16:25 +0000 Subject: [PATCH 008/403] add sections and covid pathway --- runner/src/server/forms/ReportAnOutbreak.json | 376 +++++++++++++++++- 1 file changed, 375 insertions(+), 1 deletion(-) diff --git a/runner/src/server/forms/ReportAnOutbreak.json b/runner/src/server/forms/ReportAnOutbreak.json index 65006e3d75..8893c04274 100644 --- a/runner/src/server/forms/ReportAnOutbreak.json +++ b/runner/src/server/forms/ReportAnOutbreak.json @@ -30,6 +30,7 @@ { "path": "/setting", "title": "What type of adult social care do you provide?", + "section": "YourSetting", "components": [ { "name": "CareSettingType", @@ -53,6 +54,7 @@ { "path": "/positive-ari", "title": "Do you have any positive test results for an acute respiratory infection?", + "section": "InfectionsYouAreReporting", "components": [ { "name": "PositiveARI", @@ -80,6 +82,7 @@ { "path": "/which-ari", "title": "Which acute respiratory infections do you have a positive test result for? ", + "section": "InfectionsYouAreReporting", "components": [ { "name": "WhichARI", @@ -111,6 +114,7 @@ { "path": "/2-or-more-covid", "title": "Are you reporting 2 or more cases of COVID-19?", + "section": "InfectionsYouAreReporting", "components": [ { "name": "TwoOrMoreCovid", @@ -136,6 +140,7 @@ { "path": "/2-or-more-covid-details", "title": "COVID-19 in your setting", + "section": "InfectionsYouAreReporting", "components": [ { "name": "TwoOrMoreCovid5days", @@ -158,6 +163,10 @@ "values": { "type": "listRef" } + }, + { + "type": "Para", + "content": "Read guidance on when cases may be linked by spread in the care setting (opens in a new tab).
" } ], "next": [ @@ -195,14 +204,17 @@ } ] }, + { "path": "/do-not-need-to-report", "title": "You do not need to report", + "section": "InfectionsYouAreReporting", "components": [] }, { "path": "/check-answers", "title": "Check your answers before continuing", + "section": "InfectionsYouAreReporting", "components": [ { "name": "rofomf", @@ -212,6 +224,10 @@ } ], "next": [ + { + "condition": "WhichARI:COVID-19", + "path": "/covid-cases-setting" + }, { "path": "/cases-of-flu" } @@ -220,6 +236,7 @@ { "path": "/2-or-more-cases-not-covid-or-flu", "title": "Are you reporting 2 or more cases of an acute respiratory infection that is not COVID-19 or flu?", + "section": "InfectionYouAreReporting", "components": [ { "name": "TwoOrMoreCasesNotCovidFlu", @@ -227,6 +244,7 @@ "type": "YesNoField", "nameHasError": false, "title": "Are you reporting 2 or more cases of an acute respiratory infection that is not COVID-19 or flu?", + "hint": "This includes viruses such as respiratory syncytial virus, rhinovirus, parainfluenza and chest infections", "values": { "type": "listRef" } @@ -245,6 +263,7 @@ { "path": "/ari-infection-type", "title": "What infection are you reporting?", + "section": "InfectionYouAreReporting", "components": [ { "name": "ARIinfectionType", @@ -252,6 +271,7 @@ "type": "CheckboxesField", "nameHasError": false, "title": "What infection are you reporting?", + "hint": "You can select more than one option", "list": "ARIinfectionType", "values": { "type": "listRef" @@ -271,6 +291,7 @@ { "path": "/cases-of-flu", "title": "How many cases of flu are you reporting?", + "section": "InfectionsYouAreReporting", "components": [ { "name": "NumberOfCasesOfFlu", @@ -297,6 +318,7 @@ { "path": "/single-case-of-flu", "title": "Who has the case of flu?", + "section": "FluInYourSetting", "components": [ { "name": "SingleCaseOfFluServiceOrStaff", @@ -323,6 +345,7 @@ { "path": "/multiple-cases-of-flu", "title": "Who are you reporting cases or symptoms of flu in?", + "section": "FluInYourSetting", "components": [ { "name": "MultipleCasesOfFluServiceOrStaff", @@ -349,6 +372,7 @@ { "path": "/multiple-cases-flu-service-users", "title": "Service users: number of flu or chest infection cases", + "section": "FluInYourSetting", "components": [ { "name": "ServiceUsersFluSwabTest", @@ -430,6 +454,7 @@ { "path": "/multiple-cases-flu-staff", "title": "Staff: number of flu or chest infection cases", + "section": "FluAndChestInfectionInYourSetting", "components": [ { "name": "StaffFluSwabTest", @@ -507,6 +532,7 @@ { "path": "/symptom-onset-flu", "title": "Symptom onset for the case of flu", + "section": "FluInYourSetting", "components": [ { "name": "FluSymptomOnsetDate", @@ -529,6 +555,7 @@ { "path": "/flu-severity", "title": "Severity of the case of flu", + "section": "FluInYourSetting", "components": [ { "name": "SingleCaseOfFluSeverityCalledGP", @@ -570,6 +597,7 @@ { "path": "/vaccination", "title": "Vaccination among your staff and service users", + "section": "Vaccination", "components": [ { "name": "ServiceUsersCovid19Vaccination", @@ -661,6 +689,7 @@ { "path": "/ipc", "title": "Infection prevention and control (IPC) and outbreak management in your setting", + "section": "InfectionPreventionAndControl", "components": [ { "name": "IPCPractices", @@ -798,9 +827,226 @@ } ] }, + { + "path": "/covid-cases-setting", + "title": "Who are you reporting cases or symptoms of COVID-19 in?", + "section": "COVID19InYourSetting", + "components": [ + { + "type": "CheckboxesField", + "name": "CovidServiceOrStaff", + "options": {}, + "title": "Who are you reporting cases or symptoms of COVID-19 in?", + "hint": "You can select more than one option", + "list": "ServiceOrStaff", + "values": { + "type": "listRef" + } + } + ], + "next": [ + { + "condition": "CovidServiceOrStaff:ServiceUsers", + "path": "/service-users-covid-cases" + }, + { + "condition": "CovidServiceOrStaff:Staff", + "path": "/staff-covid-cases" + } + ] + }, + { + "path": "/service-users-covid-cases", + "title": "Service users: number of cases", + "section": "COVID19InYourSetting", + "components": [ + { + "type": "NumberField", + "name": "ServiceUsersCovidTestPositive", + "title": "How many service users have COVID-19 confirmed by a positive test?", + "hint": "Include those who are currently in hospital or on visits out\nIf none, enter 0", + "options": { + "required": true + }, + "schema": { + "min": 0 + } + }, + { + "type": "NumberField", + "name": "ServiceUsersSymptomsNotTested", + "title": "How many service users have symptoms of an acute respiratory infection, but have not been tested for COVID-19?", + "hint": "Include those who are currently in hospital or on visits out\nIf none, enter 0", + "options": { + "required": true + }, + "schema": { + "min": 0 + } + } + ], + "next": [ + { + "condition": "CovidServiceOrStaff:Staff", + "path": "/staff-covid-cases" + }, + { + "path": "/severity-of-illness" + } + ] + }, + { + "path": "/severity-of-illness", + "title": "Severity of illness in this outbreak", + "section": "SeverityOfIllness", + "components": [ + { + "name": "severityIntro", + "type": "Para", + "content": "Include confirmed cases and people with symptoms of acute respiratory infections.", + "options": {} + }, + { + "name": "SeverityGPCalls", + "type": "RadiosField", + "title": "How many people have you called the GP about because of the severity of illness in this outbreak?", + "list": "CaseNumbers", + "options": { + "required": true + } + }, + { + "name": "SeverityHospitalisations", + "type": "RadiosField", + "title": "How many people have been hospitalised because of an acute respiratory infection in this outbreak?", + "list": "CaseNumbers", + "options": { + "required": true + } + }, + { + "name": "SeverityDeaths", + "type": "RadiosField", + "title": "How many people have died because of an acute respiratory infection in this outbreak?", + "list": "CaseNumbers", + "options": { + "required": true + } + }, + { + "name": "MediaInterest", + "type": "YesNoField", + "title": "Are you aware of any media interest in this outbreak?", + "options": { + "required": false + } + } + ], + "next": [ + { + "path": "/symptom-onset" + } + ] + }, + { + "path": "/symptom-onset", + "title": "Symptom onset in this outbreak", + "section": "SymptomStartDates", + "components": [ + { + "name": "introText1", + "type": "Para", + "content": "Include confirmed cases and people with symptoms of acute respiratory infections.", + "options": {} + }, + { + "name": "introText2", + "type": "Para", + "content": "If you do not know the exact date, give an estimate.", + "options": {} + }, + { + "name": "FirstCaseOnset", + "type": "DatePartsField", + "title": "When did symptoms start in the first case in this outbreak?", + "hint": "For example, 31 03 2024", + "options": { + "required": true + } + }, + { + "name": "SecondCaseOnset", + "type": "DatePartsField", + "title": "When did symptoms start in the second case in this outbreak?", + "hint": "For example, 31 03 2024", + "options": { + "required": true + } + }, + { + "name": "MostRecentCaseOnset", + "type": "DatePartsField", + "title": "When did symptoms start in the most recent case in this outbreak? (if you have 3 or more cases)", + "hint": "For example, 31 03 2024", + "options": { + "required": false + } + } + ], + "next": [ + { + "path": "/vaccination" + } + ] + }, + { + "path": "/staff-covid-cases", + "title": "Staff: number of cases", + "section": "COVID19InYourSetting", + "components": [ + { + "type": "Para", + "content": "Staff includes anyone who is patient facing." + }, + { + "type": "Para", + "content": "You do not have to test staff for COVID-19. Staff that are eligible for COVID-19 treatments should test themselves at home, if they have symptoms." + }, + { + "type": "NumberField", + "name": "StaffCovidTestPositive", + "title": "How many staff have COVID-19 confirmed by a positive test?", + "hint": "Include those who are currently in hospitalApplies to England
\n" + } + ], + "next": [ + { + "path": "/positive-ari" + } + ] + }, + { + "path": "/positive-ari", + "title": "Do you have any positive test results for an acute respiratory infection?", + "section": "InfectionsYouAreReporting", + "components": [ + { + "name": "PositiveARI", + "options": {}, + "type": "YesNoField", + "nameHasError": false, + "title": "Do you have any positive test results for an acute respiratory infection?", + "hint": "Acute respiratory infections include COVID-19, flu, respiratory syncytial virus (RSV), adenovirus, human metapneumovirus (hMPV), parainfluenza and rhinovirus", + "schema": {}, + "values": { + "type": "listRef" + } + } + ], + "next": [ + { + "path": "/which-ari", + "condition": "PositiveARI:true" + }, + { + "path": "/2-or-more-ari" + } + ] + }, + { + "path": "/2-or-more-ari", + "title": "2 or more ARI", + "components": [] + }, + { + "path": "/which-ari", + "title": "Which ARI", + "components": [] + } + ], + "conditions": [ + { + "displayName": "PositiveARI:true", + "name": "PositiveARI:true", + "value": { + "name": "PositiveARI:true", + "conditions": [ + { + "field": { + "name": "InfectionsYouAreReporting.PositiveARI", + "type": "YesNoField", + "display": "Do you have any positive test results for an acute respiratory infection?" + }, + "operator": "is", + "value": { + "type": "Value", + "value": "true", + "display": "true" + } + } + ] + } + } + ], + "lists": [], + "sections": [ + { + "name": "InfectionsYouAreReporting", + "title": "Infections you are reporting" + } + ], + "fees": [], + "name": "Report an outbreak", + "declaration": "", + "skipSummary": false, + "version": 2 +} From cba20564fe379de0ad97e35ebbb2c6d89a138eac Mon Sep 17 00:00:00 2001 From: emilyjevans <30391244+emilyjevans@users.noreply.github.com> Date: Tue, 17 Dec 2024 13:59:57 +0000 Subject: [PATCH 012/403] remove test form --- .../src/server/forms/ReportAnOutbreak2.json | 97 ------------------- 1 file changed, 97 deletions(-) delete mode 100644 runner/src/server/forms/ReportAnOutbreak2.json diff --git a/runner/src/server/forms/ReportAnOutbreak2.json b/runner/src/server/forms/ReportAnOutbreak2.json deleted file mode 100644 index 03946a99e6..0000000000 --- a/runner/src/server/forms/ReportAnOutbreak2.json +++ /dev/null @@ -1,97 +0,0 @@ -{ - "metadata": {}, - "startPage": "/start", - "pages": [ - { - "path": "/start", - "title": "Report an outbreak of acute respiratory infection in an adult social care setting", - "components": [ - { - "name": "nMOTrx", - "options": {}, - "type": "Para", - "content": "Applies to England
\n" - } - ], - "next": [ - { - "path": "/positive-ari" - } - ] - }, - { - "path": "/positive-ari", - "title": "Do you have any positive test results for an acute respiratory infection?", - "section": "InfectionsYouAreReporting", - "components": [ - { - "name": "PositiveARI", - "options": {}, - "type": "YesNoField", - "nameHasError": false, - "title": "Do you have any positive test results for an acute respiratory infection?", - "hint": "Acute respiratory infections include COVID-19, flu, respiratory syncytial virus (RSV), adenovirus, human metapneumovirus (hMPV), parainfluenza and rhinovirus", - "schema": {}, - "values": { - "type": "listRef" - } - } - ], - "next": [ - { - "path": "/which-ari", - "condition": "PositiveARI:true" - }, - { - "path": "/2-or-more-ari" - } - ] - }, - { - "path": "/2-or-more-ari", - "title": "2 or more ARI", - "components": [] - }, - { - "path": "/which-ari", - "title": "Which ARI", - "components": [] - } - ], - "conditions": [ - { - "displayName": "PositiveARI:true", - "name": "PositiveARI:true", - "value": { - "name": "PositiveARI:true", - "conditions": [ - { - "field": { - "name": "InfectionsYouAreReporting.PositiveARI", - "type": "YesNoField", - "display": "Do you have any positive test results for an acute respiratory infection?" - }, - "operator": "is", - "value": { - "type": "Value", - "value": "true", - "display": "true" - } - } - ] - } - } - ], - "lists": [], - "sections": [ - { - "name": "InfectionsYouAreReporting", - "title": "Infections you are reporting" - } - ], - "fees": [], - "name": "Report an outbreak", - "declaration": "", - "skipSummary": false, - "version": 2 -} From 70fde0dfeaab9641cc6e015b7e96c1f6d5d72296 Mon Sep 17 00:00:00 2001 From: emilyjevans <30391244+emilyjevans@users.noreply.github.com> Date: Thu, 19 Dec 2024 11:44:01 +0000 Subject: [PATCH 013/403] routing progress --- runner/src/server/forms/ReportAnOutbreak.json | 173 +++++++++++++++--- 1 file changed, 146 insertions(+), 27 deletions(-) diff --git a/runner/src/server/forms/ReportAnOutbreak.json b/runner/src/server/forms/ReportAnOutbreak.json index 3b51d33975..ee78a3202b 100644 --- a/runner/src/server/forms/ReportAnOutbreak.json +++ b/runner/src/server/forms/ReportAnOutbreak.json @@ -216,6 +216,10 @@ } ], "next": [ + { + "path": "/covid-cases-setting", + "condition": "WhichARI:COVID19" + }, { "path": "/cases-of-flu" } @@ -551,7 +555,7 @@ "next": [ { "path": "/symptom-onset-flu", - "condition": "SingleCaseOfFluServiceUserOrStaff:ServiceUser" + "condition": "SingleCaseOfFluServiceOrStaff:ServiceUser" }, { "path": "/vaccination" @@ -1160,6 +1164,10 @@ } ], "next": [ + { + "path": "/ari-cases-setting", + "condition": "WhichARI:Other" + }, { "path": "/vaccination" } @@ -1176,13 +1184,17 @@ "options": {}, "title": "Who are you reporting cases or symptoms of COVID-19 in?", "hint": "You can select more than one option", - "list": "ServiceOrStaff", + "list": "ServiceOrStaffMultiple", "values": { "type": "listRef" } } ], "next": [ + { + "condition": "CovidServiceOrStaff:Both", + "path": "/service-users-covid-cases" + }, { "condition": "CovidServiceOrStaff:ServiceUsers", "path": "/service-users-covid-cases" @@ -1190,10 +1202,6 @@ { "condition": "CovidServiceOrStaff:Staff", "path": "/staff-covid-cases" - }, - { - "condition": "CovidServiceOrStaff:Both", - "path": "/service-users-covid-cases" } ] }, @@ -1232,6 +1240,14 @@ "condition": "CovidServiceOrStaff:Staff", "path": "/staff-covid-cases" }, + { + "condition": "WhichARI:FLU", + "path": "/cases-of-flu" + }, + { + "condition": "WhichARI:Other", + "path": "/ari-cases-setting" + }, { "path": "/severity-of-illness" } @@ -1380,6 +1396,14 @@ } ], "next": [ + { + "path": "/cases-of-flu", + "condition": "WhichARI:CovidAndFlu" + }, + { + "path": "/ari-cases-setting-adenovirus", + "condition": "WhichARI:Other" + }, { "path": "/severity-of-illness" } @@ -2244,7 +2268,7 @@ "conditions": [ { "field": { - "name": "WhichARI", + "name": "InfectionsYouAreReporting.WhichARI", "type": "CheckboxesField", "display": "Which acute respiratory infections do you have a positive test result for?" }, @@ -2266,7 +2290,7 @@ "conditions": [ { "field": { - "name": "WhichARI", + "name": "InfectionsYouAreReporting.WhichARI", "type": "CheckboxesField", "display": "Which acute respiratory infections do you have a positive test result for?" }, @@ -2280,6 +2304,101 @@ ] } }, + { + "displayName": "WhichARI:Other", + "name": "WhichARI:Other", + "value": { + "name": "WhichARI:Other", + "conditions": [ + { + "field": { + "name": "InfectionsYouAreReporting.WhichARI", + "type": "CheckboxesField", + "display": "Which acute respiratory infections do you have a positive test result for?" + }, + "operator": "contains", + "value": { + "type": "Value", + "value": "Any other acute respiratory infections", + "display": "Any other acute respiratory infections" + } + } + ] + } + }, + { + "displayName": "WhichARI:CovidAndFlu", + "name": "WhichARI:CovidAndFlu", + "value": { + "name": "WhichARI:CovidAndFlu", + "conditions": [ + { + "field": { + "name": "InfectionsYouAreReporting.WhichARI", + "type": "CheckboxesField", + "display": "Which acute respiratory infections do you have a positive test result for?" + }, + "operator": "contains", + "value": { + "type": "Value", + "value": "COVID-19", + "display": "COVID-19" + } + }, + { + "coordinator": "and", + "field": { + "name": "InfectionsYouAreReporting.WhichARI", + "type": "CheckboxesField", + "display": "Which acute respiratory infections do you have a positive test result for?" + }, + "operator": "contains", + "value": { + "type": "Value", + "value": "Flu", + "display": "Flu" + } + } + ] + } + }, + + { + "displayName": "WhichARI:CovidAndOther", + "name": "WhichARI:CovidAndOther", + "value": { + "name": "WhichARI:CovidAndOther", + "conditions": [ + { + "field": { + "name": "InfectionsYouAreReporting.WhichARI", + "type": "CheckboxesField", + "display": "Which acute respiratory infections do you have a positive test result for?" + }, + "operator": "contains", + "value": { + "type": "Value", + "value": "COVID-19", + "display": "COVID-19" + } + }, + { + "coordinator": "and", + "field": { + "name": "InfectionsYouAreReporting.WhichARI", + "type": "CheckboxesField", + "display": "Which acute respiratory infections do you have a positive test result for?" + }, + "operator": "contains", + "value": { + "type": "Value", + "value": "Any other acute respiratory infections", + "display": "Any other acute respiratory infections" + } + } + ] + } + }, { "displayName": "ReportCovid:No", "name": "ReportCovid:No", @@ -2339,14 +2458,14 @@ } }, { - "displayName": "SingleCaseOfFluServiceUserOrStaff:ServiceUser", - "name": "SingleCaseOfFluServiceUserOrStaff:ServiceUser", + "displayName": "SingleCaseOfFluServiceOrStaff:ServiceUser", + "name": "SingleCaseOfFluServiceOrStaff:ServiceUser", "value": { - "name": "SingleCaseOfFluServiceUserOrStaff:ServiceUser", + "name": "SingleCaseOfFluServiceOrStaff:ServiceUser", "conditions": [ { "field": { - "name": "SingleCaseOfFluServiceOrStaff", + "name": "FluInYourSetting.SingleCaseOfFluServiceOrStaff", "type": "RadiosField", "display": "Who has the case of flu?" }, @@ -2368,7 +2487,7 @@ "conditions": [ { "field": { - "name": "NumberOfCasesOfFlu", + "name": "InfectionsYouAreReporting.NumberOfCasesOfFlu", "type": "RadiosField", "display": "How many cases of flu are you reporting?" }, @@ -2390,7 +2509,7 @@ "conditions": [ { "field": { - "name": "MultipleCasesOfFluServiceOrStaff", + "name": "FluInYourSetting.MultipleCasesOfFluServiceOrStaff", "type": "CheckboxesField", "display": "Who are you reporting cases or symptoms of flu in?" }, @@ -2412,7 +2531,7 @@ "conditions": [ { "field": { - "name": "MultipleCasesOfFluServiceOrStaff", + "name": "FluInYourSetting.MultipleCasesOfFluServiceOrStaff", "type": "CheckboxesField", "display": "Who are you reporting cases or symptoms of flu in?" }, @@ -2426,7 +2545,7 @@ { "coordinator": "and", "field": { - "name": "MultipleCasesOfFluServiceOrStaff", + "name": "FluInYourSetting.MultipleCasesOfFluServiceOrStaff", "type": "CheckboxesField", "display": "Who are you reporting cases or symptoms of flu in?" }, @@ -2448,7 +2567,7 @@ "conditions": [ { "field": { - "name": "CovidServiceOrStaff", + "name": "COVID19InYourSetting.CovidServiceOrStaff", "type": "CheckboxesField", "display": "Who are you reporting cases or symptoms of COVID-19 in?" }, @@ -2470,7 +2589,7 @@ "conditions": [ { "field": { - "name": "CovidServiceOrStaff", + "name": "COVID19InYourSetting.CovidServiceOrStaff", "type": "CheckboxesField", "display": "Who are you reporting cases or symptoms of COVID-19 in?" }, @@ -2492,7 +2611,7 @@ "conditions": [ { "field": { - "name": "CovidServiceOrStaff", + "name": "COVID19InYourSetting.CovidServiceOrStaff", "type": "CheckboxesField", "display": "Who are you reporting cases or symptoms of COVID-19 in?" }, @@ -2506,7 +2625,7 @@ { "coordinator": "and", "field": { - "name": "CovidServiceOrStaff", + "name": "COVID19InYourSetting.CovidServiceOrStaff", "type": "CheckboxesField", "display": "Who are you reporting cases or symptoms of COVID-19 in?" }, @@ -2528,7 +2647,7 @@ "conditions": [ { "field": { - "name": "ARIInfectionType", + "name": "InfectionYouAreReporting.ARIInfectionType", "type": "CheckboxesField", "display": "What infection are you reporting?" }, @@ -2572,7 +2691,7 @@ "conditions": [ { "field": { - "name": "ARIServiceOrStaff", + "name": "InfectionYouAreReporting.ARIServiceOrStaff", "type": "CheckboxesField", "display": "Who are you reporting cases or symptoms of an acute respiratory infection in?" }, @@ -2594,7 +2713,7 @@ "conditions": [ { "field": { - "name": "ARIServiceOrStaff", + "name": "InfectionYouAreReporting.ARIServiceOrStaff", "type": "CheckboxesField", "display": "Who are you reporting cases or symptoms of an acute respiratory infection in?" }, @@ -2616,7 +2735,7 @@ "conditions": [ { "field": { - "name": "ARIServiceOrStaff", + "name": "InfectionYouAreReporting.ARIServiceOrStaff", "type": "CheckboxesField", "display": "Who are you reporting cases or symptoms of an acute respiratory infection in?" }, @@ -2630,7 +2749,7 @@ { "coordinator": "and", "field": { - "name": "ARIServiceOrStaff", + "name": "InfectionYouAreReporting.ARIServiceOrStaff", "type": "CheckboxesField", "display": "Who are you reporting cases or symptoms of an acute respiratory infection in?" }, @@ -2732,7 +2851,7 @@ "conditions": [ { "field": { - "name": "AGPs", + "name": "InfectionPreventionAndControl.AGPs", "type": "YesNoField", "display": "Does your setting undertake aerosol generating procedures (AGPs)?" }, @@ -2754,7 +2873,7 @@ "conditions": [ { "field": { - "name": "AgencyStaff", + "name": "Staff.AgencyStaff", "type": "YesNoField", "display": "Do you use agency staff or share staff with other care settings?" }, From 22df69dc2800030cd4f75175e0e61ec21d0cfa15 Mon Sep 17 00:00:00 2001 From: emilyjevans <30391244+emilyjevans@users.noreply.github.com> Date: Mon, 23 Dec 2024 16:58:37 +0000 Subject: [PATCH 014/403] Updated designs progress --- runner/src/server/forms/ReportAnOutbreak.json | 441 +++++++++--------- 1 file changed, 226 insertions(+), 215 deletions(-) diff --git a/runner/src/server/forms/ReportAnOutbreak.json b/runner/src/server/forms/ReportAnOutbreak.json index ee78a3202b..8ae614f02a 100644 --- a/runner/src/server/forms/ReportAnOutbreak.json +++ b/runner/src/server/forms/ReportAnOutbreak.json @@ -62,7 +62,7 @@ "type": "YesNoField", "nameHasError": false, "title": "Do you have any positive test results for an acute respiratory infection?", - "hint": "Acute respiratory infections include COVID-19, flu, respiratory syncytial virus (RSV), adenovirus, human metapneumovirus (hMPV), parainfluenza and rhinovirus", + "hint": "The infection must have been confirmed by a test, for example a lateral flow test, flu swab test or a laboratory test.", "schema": {}, "values": { "type": "listRef" @@ -81,7 +81,7 @@ }, { "path": "/which-ari", - "title": "Which acute respiratory infections do you have a positive test result for? ", + "title": "Which acute respiratory infections do you have a positive test result for?", "section": "InfectionsYouAreReporting", "components": [ { @@ -99,21 +99,25 @@ ], "next": [ { "path": "/2-or-more-covid", "condition": "WhichARI:COVID19" }, - { "path": "/check-answers", "condition": "WhichARI:FLU" }, + { "path": "/cases-of-flu", "condition": "WhichARI:FLU" }, { "path": "/2-or-more-cases-not-covid-or-flu" } ] }, { "path": "/2-or-more-covid", - "title": "Are you reporting 2 or more cases of COVID-19?", + "title": "Are you reporting 2 or more cases?", "section": "InfectionsYouAreReporting", "components": [ + { + "type": "Para", + "content": "Include cases confirmed by a test and people with symptoms of acute respiratory infections." + }, { "name": "TwoOrMoreCovid", "options": {}, "type": "YesNoField", "nameHasError": false, - "title": "Are you reporting 2 or more cases of COVID-19?", + "title": " ", "values": { "type": "listRef" } @@ -131,7 +135,7 @@ }, { "path": "/2-or-more-covid-details", - "title": "COVID-19 in your setting", + "title": "Acute respiratory infections in your setting", "section": "InfectionsYouAreReporting", "components": [ { @@ -139,7 +143,7 @@ "options": {}, "type": "RadiosField", "nameHasError": false, - "title": "Did symptoms in 2 or more cases of COVID-19 start within 5 days of each other?", + "title": "Did symptoms in 2 or more cases start within 5 days of each other?", "list": "YesNoSure", "values": { "type": "listRef" @@ -150,7 +154,7 @@ "options": {}, "type": "RadiosField", "nameHasError": false, - "title": "Is it possible that at least 2 of the cases of COVID-19 are linked by spread in your setting?", + "title": "Is it possible that at least 2 of the cases are linked by spread in your setting?", "list": "YesNoSure", "values": { "type": "listRef" @@ -167,13 +171,14 @@ "condition": "ReportCovid:No" }, { - "path": "/check-answers" + "path": "/covid-cases-setting" } ] }, { "path": "/2-or-more-ari", "title": "Are you reporting 2 or more cases of an acute respiratory infection?", + "section": "InfectionYouAreReporting", "components": [ { "name": "TwoOrMoreARI", @@ -192,7 +197,7 @@ "condition": "TwoOrMoreARI:No" }, { - "path": "/check-answers" + "path": "/ari-cases-setting" } ] }, @@ -203,28 +208,6 @@ "section": "InfectionsYouAreReporting", "components": [] }, - { - "path": "/check-answers", - "title": "Check your answers before continuing", - "section": "InfectionsYouAreReporting", - "components": [ - { - "name": "rofomf", - "options": {}, - "type": "Para", - "content": "Setting type | Residential care home | Change |
Positive test result | Yes | Change |
Infection | Flu | Change |
+ {{ customText.details | safe }} +
+ {% endif %} + + + + +Your responses may be shared with your local UKHSA health protection team, your local authority community infection control team, and the NHS. They will use your information to help you to manage your situation.\n
By submitting this report you confirm that the details you are providing are correct to the best of your knowledge. You confirm that you have not included any personally identifiable information, for example names or dates of birth
\n\n", From e1ccfad921b65d4cb543fa315418b0101fc4b72d Mon Sep 17 00:00:00 2001 From: emilyjevans <30391244+emilyjevans@users.noreply.github.com> Date: Thu, 16 Jan 2025 11:41:54 +0000 Subject: [PATCH 028/403] add in sessionCookiePassword and redis config --- runner/config/default.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/runner/config/default.js b/runner/config/default.js index 4ace77fc8a..08dfa9e00a 100644 --- a/runner/config/default.js +++ b/runner/config/default.js @@ -68,11 +68,11 @@ module.exports = { sessionTimeout: 20 * minute, confirmationSessionTimeout: 20 * minute, paymentSessionTimeout: 90 * minute, // GOV.UK Pay sessions are 90 minutes. It is possible a user takes longer than 20 minutes to complete a payment. - // sessionCookiePassword: "${SessionCookies.Password}", - // redisHost: "${Redis.Host}", - // redisPort: 6379, - // redisPassword: "${Redis.Password}", // This should be set if you are deploying replicas - SET AS SECRET - // redisTls: true, //run in TLS mode + sessionCookiePassword: "${SessionCookies.Password}", + redisHost: "${Redis.Host}", + redisPort: 6379, + redisPassword: "${Redis.Password}", // This should be set if you are deploying replicas - SET AS SECRET + redisTls: true, //run in TLS mode /** * SSL From 50f0282339103f0ec289f3ef3d4d9a8e28be89d1 Mon Sep 17 00:00:00 2001 From: emilyjevans <30391244+emilyjevans@users.noreply.github.com> Date: Thu, 16 Jan 2025 12:04:58 +0000 Subject: [PATCH 029/403] Fix sending report --- runner/config/default.js | 10 +++++----- runner/src/server/forms/ReportAnOutbreak.json | 6 +----- 2 files changed, 6 insertions(+), 10 deletions(-) diff --git a/runner/config/default.js b/runner/config/default.js index 08dfa9e00a..4ace77fc8a 100644 --- a/runner/config/default.js +++ b/runner/config/default.js @@ -68,11 +68,11 @@ module.exports = { sessionTimeout: 20 * minute, confirmationSessionTimeout: 20 * minute, paymentSessionTimeout: 90 * minute, // GOV.UK Pay sessions are 90 minutes. It is possible a user takes longer than 20 minutes to complete a payment. - sessionCookiePassword: "${SessionCookies.Password}", - redisHost: "${Redis.Host}", - redisPort: 6379, - redisPassword: "${Redis.Password}", // This should be set if you are deploying replicas - SET AS SECRET - redisTls: true, //run in TLS mode + // sessionCookiePassword: "${SessionCookies.Password}", + // redisHost: "${Redis.Host}", + // redisPort: 6379, + // redisPassword: "${Redis.Password}", // This should be set if you are deploying replicas - SET AS SECRET + // redisTls: true, //run in TLS mode /** * SSL diff --git a/runner/src/server/forms/ReportAnOutbreak.json b/runner/src/server/forms/ReportAnOutbreak.json index b90e3153a9..be13f9de56 100644 --- a/runner/src/server/forms/ReportAnOutbreak.json +++ b/runner/src/server/forms/ReportAnOutbreak.json @@ -2198,11 +2198,7 @@ "schema": {} } ], - "next": [ - { - "path": "/reportSent" - } - ] + "next": [] }, { "path": "/reportSent", From bfaa37883219e78950e127946f36324bc412ce0d Mon Sep 17 00:00:00 2001 From: emilyjevans <30391244+emilyjevans@users.noreply.github.com> Date: Thu, 16 Jan 2025 12:25:47 +0000 Subject: [PATCH 030/403] Fix duplicate question in service-users-master --- runner/src/server/forms/ReportAnOutbreak.json | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/runner/src/server/forms/ReportAnOutbreak.json b/runner/src/server/forms/ReportAnOutbreak.json index be13f9de56..ac7774f13b 100644 --- a/runner/src/server/forms/ReportAnOutbreak.json +++ b/runner/src/server/forms/ReportAnOutbreak.json @@ -1177,18 +1177,6 @@ "min": 0 } }, - { - "type": "NumberField", - "name": "ServiceUsersSymptomsNotTested", - "title": "How many service users have symptoms of an acute respiratory infection, but have not been tested for any infection?", - "hint": "Include those who are currently in hospital or on visits out{{ customText.details | safe }}
{% endif %} + {% if page.hasNext %} +You only need to report:
Read guidance on infection prevention and control in adult social care settings.
" + } + }, + "components": [] + }, + { + "path": "/do-not-need-to-report-multiple", + "title": "You do not need to report", + "section": "InfectionsYouAreReporting", + "controller": "NonSubmittingSummaryPageController", + "options": { + "multiSummary": true, + "customText": { + "insetText": "Based on your answers, you do not need to report these acute respiratory infections.", + "details": "You only need to report:
Read guidance on infection prevention and control in adult social care settings.
" + } + }, "components": [] }, { "path": "/2-or-more-cases-not-covid-or-flu", "title": "Are you reporting 2 or more cases of an acute respiratory infection that is not COVID-19 or flu?", "section": "InfectionYouAreReporting", + "sectionForSummaryPages": "AcuteInfections", + "sectionForMultiSummaryPages": "OtherInYourSetting", "components": [ { "name": "TwoOrMoreCasesNotCovidFlu", - "options": {}, + "options": { + "summaryTitle": "2 or more cases" + }, "type": "YesNoField", "nameHasError": false, "title": "Are you reporting 2 or more cases of an acute respiratory infection that is not COVID-19 or flu?", @@ -271,33 +326,78 @@ } ], "next": [ + { + "condition": "WhichARI:COVID19ANDOTHER_BOTH_NOT_REPORTABLE", + "path": "/do-not-need-to-report-multiple" + }, + { + "condition": "WhichARI:COVID19ANDOTHER_BOTH_NOT_REPORTABLE2", + "path": "/do-not-need-to-report-multiple" + }, { "condition": "WhichARI:COVID19ANDOTHER_COVID_NOT_REPORTABLE", - "path": "/mid-way-summary" + "path": "/mid-way-summary-covid-no-other-yes" }, { - "condition": "TwoOrMoreCasesNotCovidFlu:NO", - "path": "/do-not-need-to-report" + "condition": "WhichARI:COVID19ANDOTHER_OTHER_NOT_REPORTABLE", + "path": "/mid-way-summary-covid-yes-other-no" }, { + "condition": "TwoOrMoreCasesNotCovidFlu:YES", "path": "/ari-infection-type" + }, + { + "path": "/do-not-need-to-report" } ] }, { "path": "/mid-way-summary", - "title": "Mid-way summary", + "title": "Check your answers before continuing", + "section": "InfectionsYouAreReporting", + "controller": "NonSubmittingSummaryPageController", + "options": { + "multiSummary": true + }, + "components": [] + }, + { + "path": "/mid-way-summary-covid-yes-other-no", + "title": "Check your answers before continuing", + "section": "InfectionsYouAreReporting", + "controller": "NonSubmittingSummaryPageController", + "options": { + "multiSummary": true, + "customText": { + "insetText": "Based on your answers:
Based on your answers:
You need to report the outbreak by telephone to your local UKHSA health protection team.
+Contact your closest consulate.
Contact your closest consulate.
Applies to England
\n" + }, + { + "name": "nMOTry", + "options": {}, + "type": "Para", + "content": "\n You can use this service if you provide adult social care, such as a care home, retirement home, supported living or extra care.\n
Use this service to report:
\n
ARIs include COVID-19, flu, respiratory syncytial virus (RSV), or unknown respiratory infection including chest infections.
\nIt should take about 10 minutes to complete.
\n\n\n If possible, test all service users with symptoms who are eligible for COVID-19 treatments using a COVID-19 rapid lateral flow test. Staff with symptoms who are eligible for COVID-19 treatments should test themselves at home. \n
\n\n If you cannot test people, do not wait. Report as soon as possible. \n
\n\n You'll need to know the:\n
\n\n Do not use this online service to give an update on an outbreak or cluster of ARI that you've already reported. If you need to give an update, contact your local UKHSA health protection team or your community infection control team.\n
You only need to report 2 or more ARI cases if they could be linked by spread in your setting. If the infection could not have been spread in your setting, you should not report it as an outbreak. If in doubt, report as an outbreak.
\nDo not use this service to report:
\nRead more on:
\nYour local UKHSA health protection team, or the community infection control team, will use your information to assess your outbreak. They will help you manage the outbreak and prevent further spread.
\nIf you need help using the service or have any other questions, contact your local UKHSA health protection team during working hours.
\nIf your enquiry is urgent outside of working hours, telephone your health protection team's out-of-hours service.
\nIf you need urgent medical advice, you should call NHS 111 or visit 111.nhs.uk. For life-threatening emergencies, call 999.
\n" + } + ], + "next": [ + { + "path": "/setting" + } + ], + "controller": "MultiStartPageController", + "showContinueButton": false + }, + { + "path": "/setting", + "title": "What type of adult social care do you provide?", + "section": "YourSetting", + "sectionForExitJourneySummaryPages": "AcuteInfections", + "sectionForMultiSummaryPages": "InfectionsInYourSetting", + "components": [ + { + "name": "CareSettingType", + "options": { + "summaryTitle": "Your setting" + }, + "type": "RadiosField", + "nameHasError": false, + "title": "What type of adult social care do you provide?", + "list": "MpSRIP", + "schema": {}, + "values": { + "type": "listRef" + } + } + ], + "next": [ + { + "path": "/positive-ari" + } + ] + }, + { + "path": "/positive-ari", + "title": "Do you have any positive test results for an acute respiratory infection?", + "section": "InfectionsYouAreReporting", + "sectionForExitJourneySummaryPages": "AcuteInfections", + "sectionForMultiSummaryPages": "InfectionsInYourSetting", + "components": [ + { + "name": "PositiveARI", + "options": { + "summaryTitle": "Positive test result" + }, + "type": "YesNoField", + "nameHasError": false, + "title": "Do you have any positive test results for an acute respiratory infection?", + "hint": "The infection must have been confirmed by a test, for example a lateral flow test, flu swab test or a laboratory test.", + "schema": {}, + "values": { + "type": "listRef" + } + } + ], + "next": [ + { + "path": "/2-or-more-ari", + "condition": "PositiveARI:No" + }, + + { + "path": "/which-ari" + } + ] + }, + { + "path": "/which-ari", + "title": "Which acute respiratory infections do you have a positive test result for?", + "section": "InfectionsYouAreReporting", + "sectionForExitJourneySummaryPages": "AcuteInfections", + "sectionForMultiSummaryPages": "InfectionsInYourSetting", + "components": [ + { + "name": "WhichARI", + "options": { + "summaryTitle": "Infection" + }, + "type": "CheckboxesField", + "nameHasError": false, + "title": "Which acute respiratory infections do you have a positive test result for? ", + "list": "InfectionTypes", + "hint": "You can select more than one option", + "values": { + "type": "listRef" + } + } + ], + "next": [ + { + "path": "/2-or-more-covid-descriptive", + "condition": "WhichARI:COVID19ANDOTHER" + }, + { + "path": "/2-or-more-covid-descriptive", + "condition": "WhichARI:COVID19ANDFLU" + }, + { "path": "/2-or-more-covid", "condition": "WhichARI:COVID19" }, + { "path": "/cases-of-flu", "condition": "WhichARI:FLU" }, + { "path": "/2-or-more-cases-not-covid-or-flu" } + ] + }, + { + "path": "/2-or-more-covid", + "title": "Are you reporting 2 or more cases?", + "section": "InfectionsYouAreReporting", + "sectionForExitJourneySummaryPages": "AcuteInfections", + "sectionForMultiSummaryPages": "Covid19InYourSetting", + "components": [ + { + "type": "Para", + "content": "Include cases confirmed by a test and people with symptoms of acute respiratory infections." + }, + { + "name": "TwoOrMoreCovid", + "type": "YesNoField", + "nameHasError": false, + "options": { + "summaryTitle": "2 or more cases" + }, + "title": " ", + "values": { + "type": "listRef" + } + } + ], + "next": [ + { + "path": "/do-not-need-to-report", + "condition": "TwoOrMoreCovid:No" + }, + { + "path": "/2-or-more-covid-details" + } + ] + }, + { + "path": "/2-or-more-covid-descriptive", + "title": "Are you reporting 2 or more cases of COVID-19?", + "section": "InfectionsYouAreReporting", + "sectionForMultiSummaryPages": "Covid19InYourSetting", + "components": [ + { + "type": "Para", + "content": "Include cases confirmed by a test and people with symptoms of acute respiratory infections." + }, + { + "name": "TwoOrMoreCovid", + "options": { + "summaryTitle": "2 or more cases" + }, + "type": "YesNoField", + "nameHasError": false, + "title": " ", + "values": { + "type": "listRef" + } + } + ], + "next": [ + { + "path": "/2-or-more-cases-not-covid-or-flu", + "condition": "TwoOrMoreCovid:No" + }, + { + "path": "/2-or-more-covid-details" + } + ] + }, + { + "path": "/2-or-more-covid-details", + "title": "Acute respiratory infections in your setting", + "section": "InfectionsYouAreReporting", + "sectionForExitJourneySummaryPages": "AcuteInfections", + "sectionForMultiSummaryPages": "Covid19InYourSetting", + "components": [ + { + "type": "Para", + "content": "Include cases confirmed by a test and people with symptoms of acute respiratory infections." + }, + { + "name": "TwoOrMoreCovid5days", + "options": { + "summaryTitle": "Symptoms started within 5 days of each other" + }, + "type": "RadiosField", + "nameHasError": false, + "title": "Did symptoms in 2 or more cases start within 5 days of each other?", + "list": "YesNoSure", + "values": { + "type": "listRef" + } + }, + { + "name": "TwoOrMoreCovidSpread", + "options": { + "summaryTitle": "The cases are linked by spread" + }, + "type": "RadiosField", + "nameHasError": false, + "title": "Is it possible that at least 2 of the cases are linked by spread in your setting?", + "list": "YesNoSure", + "values": { + "type": "listRef" + } + }, + { + "type": "Para", + "content": "Read guidance on when cases may be linked by spread in the care setting (opens in a new tab).
" + } + ], + "next": [ + { + "path": "/2-or-more-cases-not-covid-or-flu", + "condition": "WhichARI:COVID19ANDOTHER" + }, + { + "path": "/do-not-need-to-report", + "condition": "ReportCovid:No" + }, + { + "path": "/ari-confirmed-cases-setting" + } + ] + }, + { + "path": "/2-or-more-ari", + "title": "Are you reporting 2 or more cases of an acute respiratory infection?", + "section": "InfectionYouAreReporting", + "sectionForExitJourneySummaryPages": "AcuteInfections", + "sectionForMultiSummaryPages": "Covid19InYourSetting", + "components": [ + { + "name": "TwoOrMoreARI", + "options": { + "summaryTitle": "2 or more cases" + }, + "type": "YesNoField", + "nameHasError": false, + "title": "Are you reporting 2 or more cases of an acute respiratory infection?", + "values": { + "type": "listRef" + } + } + ], + "next": [ + { + "path": "/do-not-need-to-report", + "condition": "TwoOrMoreARI:No" + }, + { + "path": "/ari-unknown-cases-setting" + } + ] + }, + { + "path": "/do-not-need-to-report", + "title": "You do not need to report", + "section": "InfectionsYouAreReporting", + "controller": "CheckpointSummaryPageController", + "options": { + "customText": { + "insetText": "Based on your answers, you do not need to report this acute respiratory infection.", + "details": "You only need to report:
Read guidance on infection prevention and control in adult social care settings.
" + } + }, + "components": [] + }, + { + "path": "/do-not-need-to-report-multiple", + "title": "You do not need to report", + "section": "InfectionsYouAreReporting", + "controller": "CheckpointSummaryPageController", + "options": { + "multiSummary": true, + "customText": { + "insetText": "Based on your answers, you do not need to report these acute respiratory infections.", + "details": "You only need to report:
Read guidance on infection prevention and control in adult social care settings.
" + } + }, + "components": [] + }, + { + "path": "/2-or-more-cases-not-covid-or-flu", + "title": "Are you reporting 2 or more cases of an acute respiratory infection that is not COVID-19 or flu?", + "section": "InfectionYouAreReporting", + "sectionForExitJourneySummaryPages": "AcuteInfections", + "sectionForMultiSummaryPages": "OtherInYourSetting", + "components": [ + { + "name": "TwoOrMoreCasesNotCovidFlu", + "options": { + "summaryTitle": "2 or more cases" + }, + "type": "YesNoField", + "nameHasError": false, + "title": "Are you reporting 2 or more cases of an acute respiratory infection that is not COVID-19 or flu?", + "hint": "This includes viruses such as respiratory syncytial virus, rhinovirus, parainfluenza and chest infections", + "values": { + "type": "listRef" + } + } + ], + "next": [ + { + "condition": "WhichARI:COVID19ANDOTHER_BOTH_NOT_REPORTABLE", + "path": "/do-not-need-to-report-multiple" + }, + { + "condition": "WhichARI:COVID19ANDOTHER_BOTH_NOT_REPORTABLE2", + "path": "/do-not-need-to-report-multiple" + }, + { + "condition": "WhichARI:COVID19ANDOTHER_COVID_NOT_REPORTABLE", + "path": "/mid-way-summary-covid-no-other-yes" + }, + { + "condition": "WhichARI:COVID19ANDOTHER_OTHER_NOT_REPORTABLE", + "path": "/mid-way-summary-covid-yes-other-no" + }, + { + "condition": "TwoOrMoreCasesNotCovidFlu:YES", + "path": "/ari-infection-type" + }, + { + "path": "/do-not-need-to-report" + } + ] + }, + { + "path": "/mid-way-summary", + "title": "Check your answers before continuing", + "section": "InfectionsYouAreReporting", + "controller": "CheckpointSummaryPageController", + "options": { + "multiSummary": true + }, + "components": [] + }, + { + "path": "/mid-way-summary-covid-yes-other-no", + "title": "Check your answers before continuing", + "section": "InfectionsYouAreReporting", + "controller": "CheckpointSummaryPageController", + "options": { + "multiSummary": true, + "customText": { + "insetText": "Based on your answers:
Based on your answers:
Provide a contact who will be available to receive:
If possible, provide a work phone number and email address instead of personal contact details.
Enter details for an alternative contact if you want the emails to also be sent to a second contact person. We will use this phone number for a follow up call if the main contact is not available.
", + "schema": {} + }, + { + "name": "AltContactName", + "options": { + "required": false + }, + "type": "TextField", + "nameHasError": false, + "title": "Full name", + "values": { + "type": "listRef" + } + }, + { + "name": "AltContactJobTitle", + "options": { + "required": false + }, + "type": "TextField", + "nameHasError": false, + "title": "Job title", + "hint": "For example, manager, senior carer", + "values": { + "type": "listRef" + } + }, + { + "name": "AltContactPhoneNumber", + "options": { + "required": false + }, + "type": "TextField", + "nameHasError": false, + "title": "Phone number", + "values": { + "type": "listRef" + } + }, + { + "name": "AltContactEmailAddress", + "options": { + "required": false + }, + "type": "TextField", + "nameHasError": false, + "title": "Email address", + "values": { + "type": "listRef" + } + } + ], + "next": [ + { + "path": "/service-users" + } + ] + }, + { + "path": "/service-users", + "title": "Service users and staff", + "section": "PeopleInYourSetting", + "components": [ + { + "name": "ServiceUsersTypes", + "options": {}, + "type": "CheckboxesField", + "nameHasError": false, + "title": "Select the options that best describe the majority of your service users", + "hint": "You can select more than one option", + "list": "ServiceUsersTypes", + "values": { + "type": "listRef" + } + }, + { + "name": "ServiceUsersCurrentlyLive", + "options": {}, + "type": "NumberField", + "nameHasError": false, + "schema": { + "min": 0, + "max": 200 + }, + "title": "How many service users currently live in your care setting or use your service?", + "hint": "Include those who are currently in hospital or on visits out", + "list": "ServiceUsersTypes" + }, + { + "name": "StaffNumber", + "options": {}, + "type": "NumberField", + "schema": { + "min": 0, + "max": 200 + }, + "nameHasError": false, + "title": "How many staff currently work in your care setting or service?" + }, + { + "name": "EmptyBeds", + "options": { "required": false }, + "type": "NumberField", + "schema": { + "min": 0, + "max": 200 + }, + "nameHasError": false, + "title": "How many empty beds do you have in your care setting?", + "hint": "If you do not know, leave this blank" + } + ], + "next": [ + { + "path": "/summary" + } + ] + }, + { + "path": "/summary", + "controller": "./pages/summary.js", + "title": "Check your answers before sending your report", + "components": [ + { + "name": "nMOTrx", + "options": {}, + "type": "Para", + "content": "Your setting name | Belmont Care Home | Change |
Your setting postcode | TQ5 0AH | Change |
Your local UKHSA health protection team | South West Health Protection Team | Change |
Your Care Quality Commission (CQC) location ID | 000001888 | Change |
Type of adult social care you provide | Residential care home | Change |
Full name of contact person | Pat Deerfield | Change |
Job title of contact person | Manager | Change |
Telephone number | 07451300300 | Change |
Email address | Pat@cov.com | Change |
Acute respiratory infections you are reporting | Flu | Change |
Number of cases of Flu you are reporting | 2 or more | Change |
Symptoms in 2 or more cases of Flu started within 5 days of each other | Yes | Change |
You think the cases of Flu could be linked by spread in your setting | Yes | Change |
At least one case of Flu has been confirmed by a positive test | Yes | Change |
How would you describe the majority of your service users | Service users, staff | Change |
Number of people that currently live in your setting or use your service | 27 | Change |
Number of staff that work in your care setting or service | 7 | Change |
Number of empty beds (optional) | 3 | Change |
You are reporting cases or symptoms of Flu in service users or staff | 2 | Change |
Number of service users who have Flu confirmed by a test | 5 | Change |
Number of service users who have symptoms of an acute respiratory infection, but have not been tested for Flu | 5 | Change |
Number of staff members who have Flu confirmed by a test | 1 | Change |
Number of staff who have symptoms of an acute respiratory infection, but have not been tested for Flu | 2 | Change |
Date symptoms started in the first case of Flu | 02 August 2024 | Change |
Date symptoms started in the second case of Flu (optional) | N/A | Change |
Date symptoms started in the most recent case of Flu | 10 August 2024 | Change |
Number of service users who have had the flu vaccine for this current winter season (optional) | 20 | Change |
Number of staff who have had the flu vaccine for this current winter season (optional) | 6 | Change |
How often are you monitoring staff IPC practices | Within the last month | Change |
Issues you are currently experiencing and need support with | Test kit supply | Change |
Your setting undertakes aerosol generating procedures (AGPs) | Yes | Change |
Staff carrying out aerosol generating procedures, wear fit-tested and FFP3 masks | All | Change |
You use agency staff or share staff with other care settings | Yes | Change |
Number of additional agency staff or staff shared with settings you have used during this outbreak | Fewer than 5 | Change |
Your responses may be shared with your local UKHSA health protection team, your local authority community infection control team, and the NHS. They will use your information to help you to manage your situation.
By submitting this report you confirm that the details you are providing are correct to the best of your knowledge. You confirm that you have not included any personally identifiable information, for example names or dates of birth.
Your reference number is: OS-5371. Use this number if you need to contact the UKHSA health protection team about your outbreak.
We will send 2 automated emails to Pel@coy.com.
An acknowledgement email will give you your reference number and a copy of the information you've provided. The email will tell you if you have a low-risk outbreak, a medium-risk outbreak, a high-priority outbreak, or a single case of flu.
An advice email will give you information specific to your situation to help you prevent the spread of infection. It explains what to expect from your local UKHSA health protection team or the community infection control team.
If these emails do not arrive within one hour, or you need urgent advice, telephone your local UKHSA health protection team or community infection control team.
If your acknowledgement or advice email tells you that your outbreak is assessed as high priority on a weekend or a bank holiday, you also need to telephone your local UKHSA health protection team. Call during the daytime if possible. If you do not call the health protection team, a member of the health protection team will only call you on the next working day.
If you need urgent medical advice, you can call NHS 111 or visit 111.nhs.uk. For life-threatening emergencies, call 999.
This is a new service. Help us improve it and give your feedback.
Your responses may be shared with your local UKHSA health protection team, your local authority community infection control team, and the NHS. They will use your information to help you to manage your situation.\n
By submitting this report you confirm that the details you are providing are correct to the best of your knowledge. You confirm that you have not included any personally identifiable information, for example names or dates of birth
\nApplies to England
\n" - }, - { - "name": "nMOTry", - "options": {}, - "type": "Para", - "content": "\n You can use this service if you provide adult social care, such as a care home, retirement home, supported living or extra care.\n
Use this service to report:
\n
ARIs include COVID-19, flu, respiratory syncytial virus (RSV), or unknown respiratory infection including chest infections.
\nIt should take about 10 minutes to complete.
\n\n\n If possible, test all service users with symptoms who are eligible for COVID-19 treatments using a COVID-19 rapid lateral flow test. Staff with symptoms who are eligible for COVID-19 treatments should test themselves at home. \n
\n\n If you cannot test people, do not wait. Report as soon as possible. \n
\n\n You'll need to know the:\n
\n\n Do not use this online service to give an update on an outbreak or cluster of ARI that you've already reported. If you need to give an update, contact your local UKHSA health protection team or your community infection control team.\n
You only need to report 2 or more ARI cases if they could be linked by spread in your setting. If the infection could not have been spread in your setting, you should not report it as an outbreak. If in doubt, report as an outbreak.
\nDo not use this service to report:
\nRead more on:
\nYour local UKHSA health protection team, or the community infection control team, will use your information to assess your outbreak. They will help you manage the outbreak and prevent further spread.
\nIf you need help using the service or have any other questions, contact your local UKHSA health protection team during working hours.
\nIf your enquiry is urgent outside of working hours, telephone your health protection team's out-of-hours service.
\nIf you need urgent medical advice, you should call NHS 111 or visit 111.nhs.uk. For life-threatening emergencies, call 999.
\n" - } - ], - "next": [ - { - "path": "/setting" - } - ], - "controller": "MultiStartPageController", - "showContinueButton": false - }, - { - "path": "/setting", - "title": "What type of adult social care do you provide?", - "section": "YourSetting", - "sectionForExitJourneySummaryPages": "AcuteInfections", - "sectionForMultiSummaryPages": "InfectionsInYourSetting", - "components": [ - { - "name": "CareSettingType", - "options": { - "summaryTitle": "Your setting" - }, - "type": "RadiosField", - "nameHasError": false, - "title": "What type of adult social care do you provide?", - "list": "MpSRIP", - "schema": {}, - "values": { - "type": "listRef" - } - } - ], - "next": [ - { - "path": "/positive-ari" - } - ] - }, - { - "path": "/positive-ari", - "title": "Do you have any positive test results for an acute respiratory infection?", - "section": "InfectionsYouAreReporting", - "sectionForExitJourneySummaryPages": "AcuteInfections", - "sectionForMultiSummaryPages": "InfectionsInYourSetting", - "components": [ - { - "name": "PositiveARI", - "options": { - "summaryTitle": "Positive test result" - }, - "type": "YesNoField", - "nameHasError": false, - "title": "Do you have any positive test results for an acute respiratory infection?", - "hint": "The infection must have been confirmed by a test, for example a lateral flow test, flu swab test or a laboratory test.", - "schema": {}, - "values": { - "type": "listRef" - } - } - ], - "next": [ - { - "path": "/2-or-more-ari", - "condition": "PositiveARI:No" - }, - - { - "path": "/which-ari" - } - ] - }, - { - "path": "/which-ari", - "title": "Which acute respiratory infections do you have a positive test result for?", - "section": "InfectionsYouAreReporting", - "sectionForExitJourneySummaryPages": "AcuteInfections", - "sectionForMultiSummaryPages": "InfectionsInYourSetting", - "components": [ - { - "name": "WhichARI", - "options": { - "summaryTitle": "Infection" - }, - "type": "CheckboxesField", - "nameHasError": false, - "title": "Which acute respiratory infections do you have a positive test result for? ", - "list": "InfectionTypes", - "hint": "You can select more than one option", - "values": { - "type": "listRef" - } - } - ], - "next": [ - { - "path": "/2-or-more-covid-descriptive", - "condition": "WhichARI:COVID19ANDOTHER" - }, - { - "path": "/2-or-more-covid-descriptive", - "condition": "WhichARI:COVID19ANDFLU" - }, - { "path": "/2-or-more-covid", "condition": "WhichARI:COVID19" }, - { "path": "/cases-of-flu", "condition": "WhichARI:FLU" }, - { "path": "/2-or-more-cases-not-covid-or-flu" } - ] - }, - { - "path": "/2-or-more-covid", - "title": "Are you reporting 2 or more cases?", - "section": "InfectionsYouAreReporting", - "sectionForExitJourneySummaryPages": "AcuteInfections", - "sectionForMultiSummaryPages": "Covid19InYourSetting", - "components": [ - { - "type": "Para", - "content": "Include cases confirmed by a test and people with symptoms of acute respiratory infections." - }, - { - "name": "TwoOrMoreCovid", - "type": "YesNoField", - "nameHasError": false, - "options": { - "summaryTitle": "2 or more cases" - }, - "title": " ", - "values": { - "type": "listRef" - } - } - ], - "next": [ - { - "path": "/do-not-need-to-report", - "condition": "TwoOrMoreCovid:No" - }, - { - "path": "/2-or-more-covid-details" - } - ] - }, - { - "path": "/2-or-more-covid-descriptive", - "title": "Are you reporting 2 or more cases of COVID-19?", - "section": "InfectionsYouAreReporting", - "sectionForMultiSummaryPages": "Covid19InYourSetting", - "components": [ - { - "type": "Para", - "content": "Include cases confirmed by a test and people with symptoms of acute respiratory infections." - }, - { - "name": "TwoOrMoreCovid", - "options": { - "summaryTitle": "2 or more cases" - }, - "type": "YesNoField", - "nameHasError": false, - "title": " ", - "values": { - "type": "listRef" - } - } - ], - "next": [ - { - "path": "/2-or-more-cases-not-covid-or-flu", - "condition": "TwoOrMoreCovid:No" - }, - { - "path": "/2-or-more-covid-details" - } - ] - }, - { - "path": "/2-or-more-covid-details", - "title": "Acute respiratory infections in your setting", - "section": "InfectionsYouAreReporting", - "sectionForExitJourneySummaryPages": "AcuteInfections", - "sectionForMultiSummaryPages": "Covid19InYourSetting", - "components": [ - { - "type": "Para", - "content": "Include cases confirmed by a test and people with symptoms of acute respiratory infections." - }, - { - "name": "TwoOrMoreCovid5days", - "options": { - "summaryTitle": "Symptoms started within 5 days of each other" - }, - "type": "RadiosField", - "nameHasError": false, - "title": "Did symptoms in 2 or more cases start within 5 days of each other?", - "list": "YesNoSure", - "values": { - "type": "listRef" - } - }, - { - "name": "TwoOrMoreCovidSpread", - "options": { - "summaryTitle": "The cases are linked by spread" - }, - "type": "RadiosField", - "nameHasError": false, - "title": "Is it possible that at least 2 of the cases are linked by spread in your setting?", - "list": "YesNoSure", - "values": { - "type": "listRef" - } - }, - { - "type": "Para", - "content": "Read guidance on when cases may be linked by spread in the care setting (opens in a new tab).
" - } - ], - "next": [ - { - "path": "/2-or-more-cases-not-covid-or-flu", - "condition": "WhichARI:COVID19ANDOTHER" - }, - { - "path": "/do-not-need-to-report", - "condition": "ReportCovid:No" - }, - { - "path": "/ari-confirmed-cases-setting" - } - ] - }, - { - "path": "/2-or-more-ari", - "title": "Are you reporting 2 or more cases of an acute respiratory infection?", - "section": "InfectionYouAreReporting", - "sectionForExitJourneySummaryPages": "AcuteInfections", - "sectionForMultiSummaryPages": "Covid19InYourSetting", - "components": [ - { - "name": "TwoOrMoreARI", - "options": { - "summaryTitle": "2 or more cases" - }, - "type": "YesNoField", - "nameHasError": false, - "title": "Are you reporting 2 or more cases of an acute respiratory infection?", - "values": { - "type": "listRef" - } - } - ], - "next": [ - { - "path": "/do-not-need-to-report", - "condition": "TwoOrMoreARI:No" - }, - { - "path": "/ari-unknown-cases-setting" - } - ] - }, - { - "path": "/do-not-need-to-report", - "title": "You do not need to report", - "section": "InfectionsYouAreReporting", - "controller": "CheckpointSummaryPageController", - "options": { - "customText": { - "insetText": "Based on your answers, you do not need to report this acute respiratory infection.", - "details": "You only need to report:
Read guidance on infection prevention and control in adult social care settings.
" - } - }, - "components": [] - }, - { - "path": "/do-not-need-to-report-multiple", - "title": "You do not need to report", - "section": "InfectionsYouAreReporting", - "controller": "CheckpointSummaryPageController", - "options": { - "multiSummary": true, - "customText": { - "insetText": "Based on your answers, you do not need to report these acute respiratory infections.", - "details": "You only need to report:
Read guidance on infection prevention and control in adult social care settings.
" - } - }, - "components": [] - }, - { - "path": "/2-or-more-cases-not-covid-or-flu", - "title": "Are you reporting 2 or more cases of an acute respiratory infection that is not COVID-19 or flu?", - "section": "InfectionYouAreReporting", - "sectionForExitJourneySummaryPages": "AcuteInfections", - "sectionForMultiSummaryPages": "OtherInYourSetting", - "components": [ - { - "name": "TwoOrMoreCasesNotCovidFlu", - "options": { - "summaryTitle": "2 or more cases" - }, - "type": "YesNoField", - "nameHasError": false, - "title": "Are you reporting 2 or more cases of an acute respiratory infection that is not COVID-19 or flu?", - "hint": "This includes viruses such as respiratory syncytial virus, rhinovirus, parainfluenza and chest infections", - "values": { - "type": "listRef" - } - } - ], - "next": [ - { - "condition": "WhichARI:COVID19ANDOTHER_BOTH_NOT_REPORTABLE", - "path": "/do-not-need-to-report-multiple" - }, - { - "condition": "WhichARI:COVID19ANDOTHER_BOTH_NOT_REPORTABLE2", - "path": "/do-not-need-to-report-multiple" - }, - { - "condition": "WhichARI:COVID19ANDOTHER_COVID_NOT_REPORTABLE", - "path": "/mid-way-summary-covid-no-other-yes" - }, - { - "condition": "WhichARI:COVID19ANDOTHER_OTHER_NOT_REPORTABLE", - "path": "/mid-way-summary-covid-yes-other-no" - }, - { - "condition": "TwoOrMoreCasesNotCovidFlu:YES", - "path": "/ari-infection-type" - }, - { - "path": "/do-not-need-to-report" - } - ] - }, - { - "path": "/mid-way-summary", - "title": "Check your answers before continuing", - "section": "InfectionsYouAreReporting", - "controller": "CheckpointSummaryPageController", - "options": { - "multiSummary": true - }, - "components": [] - }, - { - "path": "/mid-way-summary-covid-yes-other-no", - "title": "Check your answers before continuing", - "section": "InfectionsYouAreReporting", - "controller": "CheckpointSummaryPageController", - "options": { - "multiSummary": true, - "customText": { - "insetText": "Based on your answers:
Based on your answers:
Provide a contact who will be available to receive:
If possible, provide a work phone number and email address instead of personal contact details.
Enter details for an alternative contact if you want the emails to also be sent to a second contact person. We will use this phone number for a follow up call if the main contact is not available.
", - "schema": {} - }, - { - "name": "AltContactName", - "options": { - "required": false - }, - "type": "TextField", - "nameHasError": false, - "title": "Full name", - "values": { - "type": "listRef" - } - }, - { - "name": "AltContactJobTitle", - "options": { - "required": false - }, - "type": "TextField", - "nameHasError": false, - "title": "Job title", - "hint": "For example, manager, senior carer", - "values": { - "type": "listRef" - } - }, - { - "name": "AltContactPhoneNumber", - "options": { - "required": false - }, - "type": "TextField", - "nameHasError": false, - "title": "Phone number", - "values": { - "type": "listRef" - } - }, - { - "name": "AltContactEmailAddress", - "options": { - "required": false - }, - "type": "TextField", - "nameHasError": false, - "title": "Email address", - "values": { - "type": "listRef" - } - } - ], - "next": [ - { - "path": "/service-users" - } - ] - }, - { - "path": "/service-users", - "title": "Service users and staff", - "section": "PeopleInYourSetting", - "components": [ - { - "name": "ServiceUsersTypes", - "options": {}, - "type": "CheckboxesField", - "nameHasError": false, - "title": "Select the options that best describe the majority of your service users", - "hint": "You can select more than one option", - "list": "ServiceUsersTypes", - "values": { - "type": "listRef" - } - }, - { - "name": "ServiceUsersCurrentlyLive", - "options": {}, - "type": "NumberField", - "nameHasError": false, - "schema": { - "min": 0, - "max": 200 - }, - "title": "How many service users currently live in your care setting or use your service?", - "hint": "Include those who are currently in hospital or on visits out", - "list": "ServiceUsersTypes" - }, - { - "name": "StaffNumber", - "options": {}, - "type": "NumberField", - "schema": { - "min": 0, - "max": 200 - }, - "nameHasError": false, - "title": "How many staff currently work in your care setting or service?" - }, - { - "name": "EmptyBeds", - "options": { "required": false }, - "type": "NumberField", - "schema": { - "min": 0, - "max": 200 - }, - "nameHasError": false, - "title": "How many empty beds do you have in your care setting?", - "hint": "If you do not know, leave this blank" - } - ], - "next": [ - { - "path": "/summary" - } - ] - }, - { - "path": "/summary", - "controller": "./pages/summary.js", - "title": "Check your answers before sending your report", - "components": [ - { - "name": "nMOTrx", - "options": {}, - "type": "Para", - "content": "Your setting name | Belmont Care Home | Change |
Your setting postcode | TQ5 0AH | Change |
Your local UKHSA health protection team | South West Health Protection Team | Change |
Your Care Quality Commission (CQC) location ID | 000001888 | Change |
Type of adult social care you provide | Residential care home | Change |
Full name of contact person | Pat Deerfield | Change |
Job title of contact person | Manager | Change |
Telephone number | 07451300300 | Change |
Email address | Pat@cov.com | Change |
Acute respiratory infections you are reporting | Flu | Change |
Number of cases of Flu you are reporting | 2 or more | Change |
Symptoms in 2 or more cases of Flu started within 5 days of each other | Yes | Change |
You think the cases of Flu could be linked by spread in your setting | Yes | Change |
At least one case of Flu has been confirmed by a positive test | Yes | Change |
How would you describe the majority of your service users | Service users, staff | Change |
Number of people that currently live in your setting or use your service | 27 | Change |
Number of staff that work in your care setting or service | 7 | Change |
Number of empty beds (optional) | 3 | Change |
You are reporting cases or symptoms of Flu in service users or staff | 2 | Change |
Number of service users who have Flu confirmed by a test | 5 | Change |
Number of service users who have symptoms of an acute respiratory infection, but have not been tested for Flu | 5 | Change |
Number of staff members who have Flu confirmed by a test | 1 | Change |
Number of staff who have symptoms of an acute respiratory infection, but have not been tested for Flu | 2 | Change |
Date symptoms started in the first case of Flu | 02 August 2024 | Change |
Date symptoms started in the second case of Flu (optional) | N/A | Change |
Date symptoms started in the most recent case of Flu | 10 August 2024 | Change |
Number of service users who have had the flu vaccine for this current winter season (optional) | 20 | Change |
Number of staff who have had the flu vaccine for this current winter season (optional) | 6 | Change |
How often are you monitoring staff IPC practices | Within the last month | Change |
Issues you are currently experiencing and need support with | Test kit supply | Change |
Your setting undertakes aerosol generating procedures (AGPs) | Yes | Change |
Staff carrying out aerosol generating procedures, wear fit-tested and FFP3 masks | All | Change |
You use agency staff or share staff with other care settings | Yes | Change |
Number of additional agency staff or staff shared with settings you have used during this outbreak | Fewer than 5 | Change |
Your responses may be shared with your local UKHSA health protection team, your local authority community infection control team, and the NHS. They will use your information to help you to manage your situation.
By submitting this report you confirm that the details you are providing are correct to the best of your knowledge. You confirm that you have not included any personally identifiable information, for example names or dates of birth.
Your reference number is: OS-5371. Use this number if you need to contact the UKHSA health protection team about your outbreak.
We will send 2 automated emails to Pel@coy.com.
An acknowledgement email will give you your reference number and a copy of the information you've provided. The email will tell you if you have a low-risk outbreak, a medium-risk outbreak, a high-priority outbreak, or a single case of flu.
An advice email will give you information specific to your situation to help you prevent the spread of infection. It explains what to expect from your local UKHSA health protection team or the community infection control team.
If these emails do not arrive within one hour, or you need urgent advice, telephone your local UKHSA health protection team or community infection control team.
If your acknowledgement or advice email tells you that your outbreak is assessed as high priority on a weekend or a bank holiday, you also need to telephone your local UKHSA health protection team. Call during the daytime if possible. If you do not call the health protection team, a member of the health protection team will only call you on the next working day.
If you need urgent medical advice, you can call NHS 111 or visit 111.nhs.uk. For life-threatening emergencies, call 999.
This is a new service. Help us improve it and give your feedback.
Your responses may be shared with your local UKHSA health protection team, your local authority community infection control team, and the NHS. They will use your information to help you to manage your situation.\n
By submitting this report you confirm that the details you are providing are correct to the best of your knowledge. You confirm that you have not included any personally identifiable information, for example names or dates of birth
\nYour reference number is: OS-5371. Use this number if you need to contact the UKHSA health protection team about your outbreak.
We will send 2 automated emails to Pel@coy.com.
An acknowledgement email will give you your reference number and a copy of the information you've provided. The email will tell you if you have a low-risk outbreak, a medium-risk outbreak, a high-priority outbreak, or a single case of flu.
An advice email will give you information specific to your situation to help you prevent the spread of infection. It explains what to expect from your local UKHSA health protection team or the community infection control team.
If these emails do not arrive within one hour, or you need urgent advice, telephone your local UKHSA health protection team or community infection control team.
If your acknowledgement or advice email tells you that your outbreak is assessed as high priority on a weekend or a bank holiday, you also need to telephone your local UKHSA health protection team. Call during the daytime if possible. If you do not call the health protection team, a member of the health protection team will only call you on the next working day.
If you need urgent medical advice, you can call NHS 111 or visit 111.nhs.uk. For life-threatening emergencies, call 999.
This is a new service. Help us improve it and give your feedback.
Your reference number is: TEST. Use this number if you need to contact the UKHSA health protection team about your outbreak.
We will send 2 automated emails to {{ MainContactEmailAddress }}. An acknowledgement email will give you your reference number and a copy of the information you've provided. The email will tell you if you have a low-risk COVID-19 outbreak, a medium-risk COVID-19 outbreak, a high-priority outbreak, or a single case of flu. An advice email will give you information specific to your situation to help you prevent the spread of infection. It explains what to expect from your local UKHSA health protection team or the community infection control team. If these emails do not arrive within one hour, or you need urgent advice, telephone your local UKHSA health protection team (opens in a new tab) or community infection control team.
If your acknowledgement or advice email tells you that your outbreak is assessed as high priority on a weekend or a bank holiday, you also need to telephone your local UKHSA health protection team (opens in a new tab). Call during the daytime if possible. If you do not call the health protection team, a member of the health protection team will only call you on the next working day.
If you need urgent medical advice, you can call NHS 111 or visit 111.nhs.uk (opens in a new tab). For life-threatening emergencies, call 999.
This is a new service. Help us improve it and give your feedback (opens in new tab).
", "title": "Report sent" } } From 29b84057f0938af5828f5dd1ece2a75c9fde8093 Mon Sep 17 00:00:00 2001 From: emilyjevans <30391244+emilyjevans@users.noreply.github.com> Date: Wed, 29 Jan 2025 11:15:19 +0000 Subject: [PATCH 052/403] CAR-272 bug fix - make yes/no radio fields vertical instead of horizontal --- runner/src/server/forms/ReportAnOutbreak.json | 77 +++++++++++++------ 1 file changed, 52 insertions(+), 25 deletions(-) diff --git a/runner/src/server/forms/ReportAnOutbreak.json b/runner/src/server/forms/ReportAnOutbreak.json index 8cc217bf22..8e7533283e 100644 --- a/runner/src/server/forms/ReportAnOutbreak.json +++ b/runner/src/server/forms/ReportAnOutbreak.json @@ -67,7 +67,8 @@ "options": { "summaryTitle": "Positive test result" }, - "type": "YesNoField", + "type": "RadiosField", + "list": "YesNo", "nameHasError": false, "title": "Do you have any positive test results for an acute respiratory infection?", "hint": "The infection must have been confirmed by a test, for example a lateral flow test, flu swab test or a laboratory test.", @@ -136,7 +137,8 @@ }, { "name": "TwoOrMoreCovid", - "type": "YesNoField", + "type": "RadiosField", + "list": "YesNo", "nameHasError": false, "options": { "summaryTitle": "2 or more cases" @@ -172,7 +174,8 @@ "options": { "summaryTitle": "2 or more cases" }, - "type": "YesNoField", + "type": "RadiosField", + "list": "YesNo", "nameHasError": false, "title": " ", "values": { @@ -258,7 +261,8 @@ "options": { "summaryTitle": "2 or more cases" }, - "type": "YesNoField", + "type": "RadiosField", + "list": "YesNo", "nameHasError": false, "title": "Are you reporting 2 or more cases of an acute respiratory infection?", "values": { @@ -315,7 +319,8 @@ "options": { "summaryTitle": "2 or more cases" }, - "type": "YesNoField", + "type": "RadiosField", + "list": "YesNo", "nameHasError": false, "title": "Are you reporting 2 or more cases of an acute respiratory infection that is not COVID-19 or flu?", "hint": "This includes viruses such as respiratory syncytial virus, rhinovirus, parainfluenza and chest infections", @@ -1272,7 +1277,8 @@ { "name": "SingleCaseOfFluSeverityCalledGP", "options": {}, - "type": "YesNoField", + "type": "RadiosField", + "list": "YesNo", "nameHasError": false, "title": "Have you called the GP because of the severity of illness in this case?", "values": { @@ -1282,7 +1288,8 @@ { "name": "SingleCaseOfFluSeverityHospitalised", "options": {}, - "type": "YesNoField", + "type": "RadiosField", + "list": "YesNo", "nameHasError": false, "title": "Has the person been hospitalised with the flu?", "values": { @@ -1292,7 +1299,8 @@ { "name": "SingleCaseOfFluSeverityDeath", "options": {}, - "type": "YesNoField", + "type": "RadiosField", + "list": "YesNo", "nameHasError": false, "title": "Has the person died with flu in this case?", "values": { @@ -1945,7 +1953,8 @@ { "name": "AGPs", "options": {}, - "type": "YesNoField", + "type": "RadiosField", + "list": "YesNo", "nameHasError": false, "title": "Does your setting undertake aerosol generating procedures (AGPs)?", "hint": "For example, inserting or removing a tracheotomy or ostomy, sputum induction, respiratory tract suctioning below the oro-pharynx (mouth suctioning is not an AGP)", @@ -1958,7 +1967,8 @@ "options": { "required": false }, - "type": "YesNoField", + "type": "RadiosField", + "list": "YesNo", "nameHasError": false, "title": "Are you aware of any media interest in this outbreak?", "values": { @@ -2499,7 +2509,8 @@ { "name": "AgencyStaff", "options": {}, - "type": "YesNoField", + "type": "RadiosField", + "list": "YesNo", "nameHasError": false, "title": "Do you use agency staff or share staff with other care settings?", "values": { @@ -2595,7 +2606,8 @@ { "name": "CQCRegistered", "options": {}, - "type": "YesNoField", + "type": "RadiosField", + "list": "YesNo", "nameHasError": false, "title": "Is your care setting registered with the Care Quality Commission (CQC)?", "values": { @@ -2815,6 +2827,21 @@ } ], "lists": [ + { + "title": "yes-no", + "name": "YesNo", + "type": "string", + "items": [ + { + "text": "Yes", + "value": "true" + }, + { + "text": "No", + "value": "false" + } + ] + }, { "title": "yes-no-sure", "name": "YesNoSure", @@ -3755,7 +3782,7 @@ { "field": { "name": "InfectionsYouAreReporting.PositiveARI", - "type": "YesNoField", + "type": "RadiosField", "display": "Do you have any positive test results for an acute respiratory infection?" }, "operator": "is", @@ -3777,7 +3804,7 @@ { "field": { "name": "InfectionYouAreReporting.TwoOrMoreARI", - "type": "YesNoField", + "type": "RadiosField", "display": "Are you reporting 2 or more cases of an acute respiratory infection?" }, "operator": "is", @@ -3799,7 +3826,7 @@ { "field": { "name": "InfectionsYouAreReporting.TwoOrMoreCovid", - "type": "YesNoField", + "type": "RadiosField", "display": "Are you reporting 2 or more cases?" }, "operator": "is", @@ -3993,7 +4020,7 @@ "coordinator": "and", "field": { "name": "InfectionYouAreReporting.TwoOrMoreCasesNotCovidFlu", - "type": "YesNoField", + "type": "RadiosField", "display": "Which acute respiratory infections do you have a positive test result for?" }, "operator": "is", @@ -4007,7 +4034,7 @@ "coordinator": "and", "field": { "name": "InfectionYouAreReporting.TwoOrMoreCasesNotCovidFlu", - "type": "YesNoField", + "type": "RadiosField", "display": "Are you reporting 2 or more cases of an acute respiratory infection that is not COVID-19 or flu?" }, "operator": "is", @@ -4057,7 +4084,7 @@ "coordinator": "and", "field": { "name": "InfectionsYouAreReporting.TwoOrMoreCovid", - "type": "YesNoField", + "type": "RadiosField", "display": "Are you reporting 2 or more cases of COVID-19?" }, "operator": "is", @@ -4071,7 +4098,7 @@ "coordinator": "and", "field": { "name": "InfectionYouAreReporting.TwoOrMoreARI", - "type": "YesNoField", + "type": "RadiosField", "display": "Are you reporting 2 or more cases of an acute respiratory infection?" }, "operator": "is", @@ -4121,7 +4148,7 @@ "coordinator": "and", "field": { "name": "InfectionsYouAreReporting.TwoOrMoreCovid", - "type": "YesNoField", + "type": "RadiosField", "display": "Are you reporting 2 or more cases of COVID-19?" }, "operator": "is", @@ -4135,7 +4162,7 @@ "coordinator": "and", "field": { "name": "InfectionYouAreReporting.TwoOrMoreCasesNotCovidFlu", - "type": "YesNoField", + "type": "RadiosField", "display": "Are you reporting 2 or more cases of an acute respiratory infection that is not COVID-19 or flu?" }, "operator": "is", @@ -4213,7 +4240,7 @@ "coordinator": "and", "field": { "name": "InfectionYouAreReporting.TwoOrMoreCasesNotCovidFlu", - "type": "YesNoField", + "type": "RadiosField", "display": "Are you reporting 2 or more cases of an acute respiratory infection that is not COVID-19 or flu?" }, "operator": "is", @@ -5032,7 +5059,7 @@ { "field": { "name": "InfectionYouAreReporting.TwoOrMoreCasesNotCovidFlu", - "type": "YesNoField", + "type": "RadiosField", "display": "Are you reporting 2 or more cases of an acute respiratory infection that is not COVID-19 or flu?" }, "operator": "is", @@ -5316,7 +5343,7 @@ { "field": { "name": "InfectionPreventionAndControl.AGPs", - "type": "YesNoField", + "type": "RadiosField", "display": "Does your setting undertake aerosol generating procedures (AGPs)?" }, "operator": "is", @@ -5338,7 +5365,7 @@ { "field": { "name": "Staff.AgencyStaff", - "type": "YesNoField", + "type": "RadiosField", "display": "Do you use agency staff or share staff with other care settings?" }, "operator": "is", From 594cd3901520017d25da9ed351c4771d2e5fea65 Mon Sep 17 00:00:00 2001 From: emilyjevans <30391244+emilyjevans@users.noreply.github.com> Date: Wed, 29 Jan 2025 11:58:01 +0000 Subject: [PATCH 053/403] CAR-315 fix routing and content of staff covid cases page --- runner/src/server/forms/ReportAnOutbreak.json | 98 ++++++++----------- 1 file changed, 41 insertions(+), 57 deletions(-) diff --git a/runner/src/server/forms/ReportAnOutbreak.json b/runner/src/server/forms/ReportAnOutbreak.json index 8e7533283e..bf08301141 100644 --- a/runner/src/server/forms/ReportAnOutbreak.json +++ b/runner/src/server/forms/ReportAnOutbreak.json @@ -2092,7 +2092,7 @@ "next": [ { "condition": "WhichARI:Covid&ARIServiceOrStaff:Staff", - "path": "/staff-covid-cases" + "path": "/staff-covid" }, { "path": "/severity-of-illness" @@ -2157,6 +2157,46 @@ } ] }, + { + "path": "/staff-covid", + "title": "Staff: number of cases", + "section": "InfectionsInYourSetting", + "components": [ + { + "type": "Para", + "content": "You do not have to test staff for COVID-19. Staff that are eligible for COVID-19 treatments should test themselves at home, if they have symptoms." + }, + { + "type": "NumberField", + "name": "StaffCovidTestPositive", + "title": "How many service users have COVID-19 confirmed by a positive test?", + "hint": "Include those who are currently in hospital or on visits out\n You can use this service if you provide adult social care, such as a care home, retirement home, supported living or extra care.\n
Use this service to report:
\n
ARIs include COVID-19, flu, respiratory syncytial virus (RSV), and other respiratory infections.
\nIt should take about 10 minutes to complete.
\n\n\n If possible, test all service users with symptoms who are eligible for COVID-19 treatments using a COVID-19 rapid lateral flow test. Staff with symptoms who are eligible for COVID-19 treatments should test themselves at home. \n
\n\n If you cannot test people, do not wait. Report as soon as possible. \n
\n\n You'll need to know the:\n
\nYou’ll need to give your email address to access this service.
\n\n Do not use this online service to give an update on an outbreak that you have already reported. If you need to give an update, contact your local UKHSA health protection team or your community infection control team.\n
You only need to report 2 or more ARI cases if they could be linked by spread in your setting. If the infection could not have been spread in your setting, you should not report it as an outbreak. If in doubt, report as an outbreak.
\nYour local UKHSA health protection team, or the community infection control team, will use your information to assess your outbreak. They will help you manage the outbreak and prevent further spread.
\nIf you need help using the service or have any other questions, contact your local UKHSA health protection team.
\nIf your enquiry is urgent outside of working hours, telephone your health protection team's out-of-hours service.
\nIf you need urgent medical advice, you should call NHS 111 or visit 111.nhs.uk. For life-threatening emergencies, call 999.
\n" } ], - "options": { - "relatedContent": true - }, + "relatedContent": [ + { + "title": "Infection prevention and control in adult social care: acute respiratory infection", + "link": "https://www.gov.uk/government/publications/infection-prevention-and-control-in-adult-social-care-acute-respiratory-infection" + }, + { + "title": "Identifying and treating respiratory tract infections on the NHS website", + "link": "https://www.nhs.uk/conditions/respiratory-tract-infection/" + } + ], "next": [ { "path": "/setting" diff --git a/runner/src/server/plugins/engine/pageControllers/MultiStartPageController.ts b/runner/src/server/plugins/engine/pageControllers/MultiStartPageController.ts index f7fa9cd6be..7d623215b9 100644 --- a/runner/src/server/plugins/engine/pageControllers/MultiStartPageController.ts +++ b/runner/src/server/plugins/engine/pageControllers/MultiStartPageController.ts @@ -3,15 +3,24 @@ import { PageController } from "./PageController"; export class MultiStartPageController extends PageController { get viewName() { - return "multi-start-page"; + if (this.relatedContent) { + return "multi-start-page-with-related-content"; + } else { + return "multi-start-page"; + } } getViewModel(formData: FormData, errors?: FormSubmissionErrors) { const viewModel = super.getViewModel(formData, errors); - const { showContinueButton, startPageNavigation } = this.pageDef; + const { + showContinueButton, + startPageNavigation, + relatedContent, + } = this.pageDef; return { ...viewModel, continueButtonText: showContinueButton && this.pageDef.continueButtonText, startPageNavigation, + relatedContent, isMultiStartPageController: true, }; } diff --git a/runner/src/server/plugins/engine/pageControllers/PageControllerBase.ts b/runner/src/server/plugins/engine/pageControllers/PageControllerBase.ts index 033fa67788..0460241640 100644 --- a/runner/src/server/plugins/engine/pageControllers/PageControllerBase.ts +++ b/runner/src/server/plugins/engine/pageControllers/PageControllerBase.ts @@ -55,6 +55,7 @@ export class PageControllerBase { section: any; // TODO sectionForExitJourneySummaryPages: any; sectionForMultiSummaryPages: any; + relatedContent: any; components: ComponentCollection; hasFormComponents: boolean; hasConditionalFormComponents: boolean; @@ -84,6 +85,7 @@ export class PageControllerBase { this.sectionForExitJourneySummaryPages = pageDef.sectionForExitJourneySummaryPages; this.sectionForMultiSummaryPages = pageDef.sectionForMultiSummaryPages; + this.relatedContent = pageDef.relatedContent; // Components collection const components = new ComponentCollection(pageDef.components, model); diff --git a/runner/src/server/views/multi-start-page-with-related-content.html b/runner/src/server/views/multi-start-page-with-related-content.html new file mode 100644 index 0000000000..a2f48756a1 --- /dev/null +++ b/runner/src/server/views/multi-start-page-with-related-content.html @@ -0,0 +1,68 @@ +{% from "pagination/macro.njk" import govukPagination %} +{% from "button/macro.njk" import govukButton %} +{% extends 'layout.html' %} + +{% block templateImports %} +{{ super() }} +{% endblock %} + +{% from "error-summary/macro.njk" import govukErrorSummary %} +{% from "partials/components.html" import componentList with context %} + +{% block content %} + +{% set gridSize = "full" %} +Detailed guidance
+{{ value | dump(2) | safe }}+
{{ value | dump(2) | safe }}-
From: UK Health Security Agency
Applies to England
\n You can use this service if you provide adult social care, such as a care home, retirement home, supported living or extra care.\n
Use this service to report:
\n
ARIs include COVID-19, flu, respiratory syncytial virus (RSV), and other respiratory infections.
\nIt should take about 10 minutes to complete.
\n\n\n If possible, test all service users with symptoms who are eligible for COVID-19 treatments using a COVID-19 rapid lateral flow test. Staff with symptoms who are eligible for COVID-19 treatments should test themselves at home. \n
\n\n If you cannot test people, do not wait. Report as soon as possible. \n
\n\n You'll need to know the:\n
\nYou’ll need to give your email address to access this service.
\n\n Do not use this online service to give an update on an outbreak that you have already reported. If you need to give an update, contact your local UKHSA health protection team or your community infection control team.\n
You only need to report 2 or more ARI cases if they could be linked by spread in your setting. If the infection could not have been spread in your setting, you should not report it as an outbreak. If in doubt, report as an outbreak.
\nYour local UKHSA health protection team, or the community infection control team, will use your information to assess your outbreak. They will help you manage the outbreak and prevent further spread.
\nIf you need help using the service or have any other questions, contact your local UKHSA health protection team.
\nIf your enquiry is urgent outside of working hours, telephone your health protection team's out-of-hours service.
\nIf you need urgent medical advice, you should call NHS 111 or visit 111.nhs.uk. For life-threatening emergencies, call 999.
\n" + "content": "From: UK Health Security Agency
Applies to England
You can use this service if you provide adult social care, such as a care home, retirement home, supported living or extra care.
\nUse this service to report:
\nARIs include COVID-19, flu, respiratory syncytial virus (RSV), and other respiratory infections.
\nIt should take about 10 minutes to complete.
\nIf possible, test all service users with symptoms who are eligible for COVID-19 treatments using a COVID-19 rapid lateral flow test. Staff with symptoms who are eligible for COVID-19 treatments should test themselves at home.
\nIf you cannot test people, do not wait. Report as soon as possible.
\nYou'll need to know the:
\nYou’ll need to give your email address to access this service.
\n\nDo not use this online service to give an update on an outbreak that you have already reported. If you need to give an update, contact your local UKHSA health protection team or your community infection control team.
\nYou only need to report 2 or more ARI cases if they could be linked by spread in your setting. If the infection could not have been spread in your setting, you should not report it as an outbreak. If in doubt, report as an outbreak.
\nYour local UKHSA health protection team, or the community infection control team, will use your information to assess your outbreak. They will help you manage the outbreak and prevent further spread.
\nIf you need help using the service or have any other questions, contact your local UKHSA health protection team.
\nIf your enquiry is urgent outside of working hours, telephone your health protection team's out-of-hours service.
\nIf you need urgent medical advice, you should call NHS 111 or visit 111.nhs.uk. For life-threatening emergencies, call 999.
" } ], "relatedContent": [ diff --git a/runner/src/server/views/multi-start-page-with-related-content.html b/runner/src/server/views/multi-start-page-with-related-content.html index a2f48756a1..bde54939fb 100644 --- a/runner/src/server/views/multi-start-page-with-related-content.html +++ b/runner/src/server/views/multi-start-page-with-related-content.html @@ -47,11 +47,18 @@Detailed guidance
-Detailed guidance
+From: UK Health Security Agency
Applies to England
You can use this service if you provide adult social care, such as a care home, retirement home, supported living or extra care.
\nUse this service to report:
\nARIs include COVID-19, flu, respiratory syncytial virus (RSV), and other respiratory infections.
\nIt should take about 10 minutes to complete.
\nIf possible, test all service users with symptoms who are eligible for COVID-19 treatments using a COVID-19 rapid lateral flow test. Staff with symptoms who are eligible for COVID-19 treatments should test themselves at home.
\nIf you cannot test people, do not wait. Report as soon as possible.
\nYou'll need to know the:
\nYou’ll need to give your email address to access this service.
\n\nDo not use this online service to give an update on an outbreak that you have already reported. If you need to give an update, contact your local UKHSA health protection team or your community infection control team.
\nYou only need to report 2 or more ARI cases if they could be linked by spread in your setting. If the infection could not have been spread in your setting, you should not report it as an outbreak. If in doubt, report as an outbreak.
\nYour local UKHSA health protection team, or the community infection control team, will use your information to assess your outbreak. They will help you manage the outbreak and prevent further spread.
\nIf you need help using the service or have any other questions, contact your local UKHSA health protection team.
\nIf your enquiry is urgent outside of working hours, telephone your health protection team's out-of-hours service.
\nIf you need urgent medical advice, you should call NHS 111 or visit 111.nhs.uk. For life-threatening emergencies, call 999.
" } ], - "relatedContent": [ - { - "title": "Infection prevention and control in adult social care: acute respiratory infection", - "link": "https://www.gov.uk/government/publications/infection-prevention-and-control-in-adult-social-care-acute-respiratory-infection" - }, - { - "title": "Identifying and treating respiratory tract infections on the NHS website", - "link": "https://www.nhs.uk/conditions/respiratory-tract-infection/" - } - ], + "sidebarContent": { + "title": "Related content", + "subtitle": "Detailed guidance", + "links": [ + { + "title": "Infection prevention and control in adult social care: acute respiratory infection", + "link": "https://www.gov.uk/government/publications/infection-prevention-and-control-in-adult-social-care-acute-respiratory-infection" + }, + { + "title": "Identifying and treating respiratory tract infections on the NHS website", + "link": "https://www.nhs.uk/conditions/respiratory-tract-infection/" + } + ] + }, "next": [ { "path": "/setting" diff --git a/runner/src/server/plugins/engine/pageControllers/MultiStartPageController.ts b/runner/src/server/plugins/engine/pageControllers/MultiStartPageController.ts index 7d623215b9..a2a1b495cf 100644 --- a/runner/src/server/plugins/engine/pageControllers/MultiStartPageController.ts +++ b/runner/src/server/plugins/engine/pageControllers/MultiStartPageController.ts @@ -3,7 +3,7 @@ import { PageController } from "./PageController"; export class MultiStartPageController extends PageController { get viewName() { - if (this.relatedContent) { + if (this.sidebarContent) { return "multi-start-page-with-related-content"; } else { return "multi-start-page"; @@ -14,13 +14,13 @@ export class MultiStartPageController extends PageController { const { showContinueButton, startPageNavigation, - relatedContent, + sidebarContent, } = this.pageDef; return { ...viewModel, continueButtonText: showContinueButton && this.pageDef.continueButtonText, startPageNavigation, - relatedContent, + sidebarContent, isMultiStartPageController: true, }; } diff --git a/runner/src/server/plugins/engine/pageControllers/PageControllerBase.ts b/runner/src/server/plugins/engine/pageControllers/PageControllerBase.ts index 0460241640..0fb201fd2b 100644 --- a/runner/src/server/plugins/engine/pageControllers/PageControllerBase.ts +++ b/runner/src/server/plugins/engine/pageControllers/PageControllerBase.ts @@ -55,7 +55,7 @@ export class PageControllerBase { section: any; // TODO sectionForExitJourneySummaryPages: any; sectionForMultiSummaryPages: any; - relatedContent: any; + sidebarContent: any; components: ComponentCollection; hasFormComponents: boolean; hasConditionalFormComponents: boolean; @@ -85,7 +85,9 @@ export class PageControllerBase { this.sectionForExitJourneySummaryPages = pageDef.sectionForExitJourneySummaryPages; this.sectionForMultiSummaryPages = pageDef.sectionForMultiSummaryPages; - this.relatedContent = pageDef.relatedContent; + this.sidebarTitle = pageDef.sidebarTitle; + this.sidebarSubtitle = pageDef.sidebarSubtitle; + this.sidebarContent = pageDef.sidebarContent; // Components collection const components = new ComponentCollection(pageDef.components, model); diff --git a/runner/src/server/views/multi-start-page-with-related-content.html b/runner/src/server/views/multi-start-page-with-sidebar-content.html similarity index 91% rename from runner/src/server/views/multi-start-page-with-related-content.html rename to runner/src/server/views/multi-start-page-with-sidebar-content.html index bde54939fb..8f7a33d0bf 100644 --- a/runner/src/server/views/multi-start-page-with-related-content.html +++ b/runner/src/server/views/multi-start-page-with-sidebar-content.html @@ -44,13 +44,13 @@Detailed guidance
+{{sidebarContent.subtitle}}
Your reference number is: TEST. Use this number if you need to contact the UKHSA health protection team about your outbreak.
We will send 2 automated emails to {{ MainContactEmailAddress }}. An acknowledgement email will give you your reference number and a copy of the information you've provided. The email will tell you if you have a low-risk COVID-19 outbreak, a medium-risk COVID-19 outbreak, a high-priority outbreak, or a single case of flu. An advice email will give you information specific to your situation to help you prevent the spread of infection. It explains what to expect from your local UKHSA health protection team or the community infection control team. If these emails do not arrive within one hour, or you need urgent advice, telephone your local UKHSA health protection team (opens in a new tab) or community infection control team.
If your acknowledgement or advice email tells you that your outbreak is assessed as high priority on a weekend or a bank holiday, you also need to telephone your local UKHSA health protection team (opens in a new tab). Call during the daytime if possible. If you do not call the health protection team, a member of the health protection team will only call you on the next working day.
If you need urgent medical advice, you can call NHS 111 or visit 111.nhs.uk (opens in a new tab). For life-threatening emergencies, call 999.
This is a new service. Help us improve it and give your feedback (opens in new tab).
", - "title": "Report sent" + "nextSteps": "We will send 2 automated emails to {{ YourSetting.MainContactEmailAddress }}.
An acknowledgement email will give you your reference number and a copy of the information you've provided. The email will tell you if you have a low-risk COVID-19 outbreak, a medium-risk COVID-19 outbreak, a high-priority outbreak, or a single case of flu.
An advice email will give you information specific to your situation to help you prevent the spread of infection. It explains what to expect from your local UKHSA health protection team or the community infection control team.
If these emails do not arrive within one hour, or you need urgent advice, telephone your local UKHSA health protection team (opens in a new tab) or community infection control team.
If your acknowledgement or advice email tells you that your outbreak is assessed as high priority on a weekend or a bank holiday, you also need to telephone your local UKHSA health protection team (opens in a new tab). Call during the daytime if possible. If you do not call the health protection team, a member of the health protection team will only call you on the next working day.
If you need urgent medical advice, you can call NHS 111 or visit 111.nhs.uk (opens in a new tab). For life-threatening emergencies, call 999.
This is a new service. Help us improve it and give your feedback (opens in new tab).
", + "title": "Report sent", + "referenceTitle": "Your outbreak reference number", + "referenceContent": "Use this number if you need to contact the UKHSA health protection team about your outbreak." } } } diff --git a/runner/src/server/services/webhookService.ts b/runner/src/server/services/webhookService.ts index a357f2a3ae..ed3534bb08 100644 --- a/runner/src/server/services/webhookService.ts +++ b/runner/src/server/services/webhookService.ts @@ -46,7 +46,15 @@ export class WebhookService { if (typeof payload === "object" && !Buffer.isBuffer(payload)) { return payload.reference; } + + const Name = JSON.parse(payload)[0].Name; + + if (Name) { + return Name; + } + const { reference } = JSON.parse(payload); + this.logger.info( ["WebhookService", "postRequest"], `Webhook request to ${url} submitted OK` diff --git a/runner/src/server/views/confirmation.html b/runner/src/server/views/confirmation.html index c9eb837176..25c4008388 100644 --- a/runner/src/server/views/confirmation.html +++ b/runner/src/server/views/confirmation.html @@ -45,6 +45,15 @@+ Your reference number is: {{ reference }}. + {{ customText.referenceContent }} +
+ {% endif %} {% if customText.nextSteps %}
{{ customText.nextSteps | safe }}
From 7b20943806bb3acaabe22ebef91d000c211ede12 Mon Sep 17 00:00:00 2001
From: emilyjevans <30391244+emilyjevans@users.noreply.github.com>
Date: Tue, 18 Feb 2025 11:38:08 +0000
Subject: [PATCH 082/403] Remove domicilliary or home care from setting type
options
---
runner/src/server/forms/ReportAnOutbreak.json | 4 ----
1 file changed, 4 deletions(-)
diff --git a/runner/src/server/forms/ReportAnOutbreak.json b/runner/src/server/forms/ReportAnOutbreak.json
index 1ba0544387..4fed6ba3fa 100644
--- a/runner/src/server/forms/ReportAnOutbreak.json
+++ b/runner/src/server/forms/ReportAnOutbreak.json
@@ -2969,10 +2969,6 @@
"text": "Extra care",
"value": "Extra care"
},
- {
- "text": "Domiciliary or home care",
- "value": "Domiciliary or home care"
- },
{
"text": "Rehabilitation, reablement or respite",
"value": "Rehabilitation, reablement or respite"
From 2c537bac49849bd3989eebf5c4fc382140397ed1 Mon Sep 17 00:00:00 2001
From: emilyjevans <30391244+emilyjevans@users.noreply.github.com>
Date: Tue, 18 Feb 2025 12:33:42 +0000
Subject: [PATCH 083/403] remove 'or on visits out' from staff question hints
---
runner/src/server/forms/ReportAnOutbreak.json | 50 +++++++++----------
1 file changed, 25 insertions(+), 25 deletions(-)
diff --git a/runner/src/server/forms/ReportAnOutbreak.json b/runner/src/server/forms/ReportAnOutbreak.json
index 4fed6ba3fa..dbf89f6f19 100644
--- a/runner/src/server/forms/ReportAnOutbreak.json
+++ b/runner/src/server/forms/ReportAnOutbreak.json
@@ -736,7 +736,7 @@
"name": "StaffAdenovirus",
"type": "NumberField",
"title": "How many staff have tested positive for adenovirus?",
- "hint": "Include those who are currently in hospital or on visits out",
+ "hint": "Include those who are currently in hospital",
"schema": {
"min": 0,
"max": 999
@@ -778,7 +778,7 @@
"name": "StaffHmpv",
"type": "NumberField",
"title": "How many staff have tested positive for human Metapneumovirus (hMPV)?",
- "hint": "Include those who are currently in hospital or on visits out",
+ "hint": "Include those who are currently in hospital",
"schema": {
"min": 0,
"max": 999
@@ -816,7 +816,7 @@
"name": "StaffParainfluenza",
"type": "NumberField",
"title": "How many staff have tested positive for parainfluenza?",
- "hint": "Include those who are currently in hospital or on visits out",
+ "hint": "Include those who are currently in hospital",
"schema": {
"min": 0,
"max": 999
@@ -850,7 +850,7 @@
"name": "StaffRSV",
"type": "NumberField",
"title": "How many staff have tested positive for Respiratory Syncytial Virus (RSV)?",
- "hint": "Include those who are currently in hospital or on visits out",
+ "hint": "Include those who are currently in hospital",
"schema": {
"min": 0,
"max": 999
@@ -880,7 +880,7 @@
"name": "StaffRhinovirus",
"type": "NumberField",
"title": "How many staff have tested positive for rhinovirus?",
- "hint": "Include those who are currently in hospital or on visits out",
+ "hint": "Include those who are currently in hospital",
"schema": {
"min": 0,
"max": 999
@@ -906,7 +906,7 @@
"name": "StaffOtherARI",
"type": "NumberField",
"title": "How many staff have tested positive for an other acute respiratory infection?",
- "hint": "Include those who are currently in hospital or on visits out",
+ "hint": "Include those who are currently in hospital",
"schema": {
"min": 0,
"max": 999
@@ -984,7 +984,7 @@
"name": "StaffSymptomsNotTested",
"type": "NumberField",
"title": "How many staff have symptoms of an acute respiratory infection, but have not been tested for any infection?",
- "hint": "Include those who are currently in hospital or on visits out",
+ "hint": "Include those who are currently in hospital",
"schema": {
"min": 0,
"max": 999
@@ -1032,7 +1032,7 @@
"name": "StaffSymptomsNotTested",
"type": "NumberField",
"title": "How many staff have symptoms of an acute respiratory infection, but have not been tested for any infection?",
- "hint": "Include those who are currently in hospital or on visits out
If none, enter 0",
+ "hint": "Include those who are currently in hospital
If none, enter 0",
"schema": {
"min": 0,
"max": 999
@@ -1637,7 +1637,7 @@
"type": "NumberField",
"name": "StaffCovidTestPositive",
"title": "How many staff have COVID-19 confirmed by a positive test?",
- "hint": "Include those who are currently in hospital or on visits out",
+ "hint": "Include those who are currently in hospital",
"options": {
"required": true
},
@@ -1649,7 +1649,7 @@
"name": "StaffConfirmedARI",
"type": "NumberField",
"title": "How many staff have tested positive for adenovirus?",
- "hint": "Include those who are currently in hospital or on visits out",
+ "hint": "Include those who are currently in hospital",
"schema": {},
"options": {}
},
@@ -1657,7 +1657,7 @@
"name": "StaffSymptomsNotTested",
"type": "NumberField",
"title": "How many staff have symptoms of an acute respiratory infection, but have not been tested for any infection?",
- "hint": "Include those who are currently in hospital or on visits out
If none, enter 0",
+ "hint": "Include those who are currently in hospital
If none, enter 0",
"schema": {},
"options": {}
},
@@ -1871,7 +1871,7 @@
"type": "NumberField",
"name": "StaffCovidTestPositive",
"title": "How many staff have COVID-19 confirmed by a positive test?",
- "hint": "Include those who are currently in hospital or on visits out",
+ "hint": "Include those who are currently in hospital",
"options": {
"required": true
},
@@ -1883,7 +1883,7 @@
"type": "NumberField",
"name": "StaffFluSwabTest",
"title": "How many staff have flu confirmed by a positive swab test?",
- "hint": "Include those who are currently in hospital or on visits out",
+ "hint": "Include those who are currently in hospital",
"schema": {}
},
{
@@ -1898,13 +1898,13 @@
},
"nameHasError": false,
"title": "How many staff have been diagnosed with a chest infection by a GP?",
- "hint": "Include those who are currently in hospital or on visits out
If none, enter 0"
+ "hint": "Include those who are currently in hospital
If none, enter 0"
},
{
"name": "StaffSymptomsNotTested",
"type": "NumberField",
"title": "How many staff have symptoms of an acute respiratory infection, but have not been tested for any infection?",
- "hint": "Do not include cases that have been confirmed by a test as flu or diagnosed by a GP as a chest infection
Among elderly people this may include people who have a sudden onset of acute respiratory symptoms, fever, or sudden mental or physical deterioration without any other known cause
Include those who are currently in hospital or on visits out
If none, enter 0"
+ "hint": "Do not include cases that have been confirmed by a test as flu or diagnosed by a GP as a chest infection
Among elderly people this may include people who have a sudden onset of acute respiratory symptoms, fever, or sudden mental or physical deterioration without any other known cause
Include those who are currently in hospital
If none, enter 0"
}
],
"next": [
@@ -2189,7 +2189,7 @@
"type": "NumberField",
"name": "StaffCovidTestPositive",
"title": "How many staff have COVID-19 confirmed by a positive test?",
- "hint": "Include those who are currently in hospital or on visits out
If none, enter 0",
+ "hint": "Include those who are currently in hospital
If none, enter 0",
"options": {
"required": true
},
@@ -2201,7 +2201,7 @@
"type": "NumberField",
"name": "StaffSymptomsNotTested",
"title": "How many staff have symptoms of an acute respiratory infection, but have not been tested for any infection?",
- "hint": "Include those who are currently in hospital or on visits out
If none, enter 0",
+ "hint": "Include those who are currently in hospital
If none, enter 0",
"options": {
"required": true
},
@@ -2225,7 +2225,7 @@
"type": "NumberField",
"name": "StaffCovidTestPositive",
"title": "How many staff have COVID-19 confirmed by a positive test?",
- "hint": "Include those who are currently in hospital or on visits out",
+ "hint": "Include those who are currently in hospital",
"options": {
"required": true
},
@@ -2237,7 +2237,7 @@
"type": "NumberField",
"name": "StaffFluSwabTest",
"title": "How many staff have flu confirmed by a positive swab test?",
- "hint": "Include those who are currently in hospital or on visits out",
+ "hint": "Include those who are currently in hospital",
"schema": {},
"options": {}
},
@@ -2253,13 +2253,13 @@
},
"nameHasError": false,
"title": "How many staff have been diagnosed with a chest infection by a GP?",
- "hint": "Include those who are currently in hospital or on visits out
If none, enter 0"
+ "hint": "Include those who are currently in hospital
If none, enter 0"
},
{
"name": "StaffSymptomsNotTested",
"title": "How many staff have symptoms of an acute respiratory infection, but have not been tested for any infection?",
"type": "NumberField",
- "hint": "Do not include cases that have been confirmed by a test as flu or diagnosed by a GP as a chest infection
Among elderly people this may include people who have a sudden onset of acute respiratory symptoms, fever, or sudden mental or physical deterioration without any other known cause
Include those who are currently in hospital or on visits out
If none, enter 0",
+ "hint": "Do not include cases that have been confirmed by a test as flu or diagnosed by a GP as a chest infection
Among elderly people this may include people who have a sudden onset of acute respiratory symptoms, fever, or sudden mental or physical deterioration without any other known cause
Include those who are currently in hospital
If none, enter 0",
"schema": {},
"options": {}
}
@@ -2343,7 +2343,7 @@
"type": "NumberField",
"name": "StaffFluSwabTest",
"title": "How many staff have flu confirmed by a positive swab test?",
- "hint": "Include those who are currently in hospital or on visits out",
+ "hint": "Include those who are currently in hospital",
"schema": {},
"options": {}
},
@@ -2351,7 +2351,7 @@
"name": "StaffConfirmedARI",
"type": "NumberField",
"title": "How many staff have tested positive for adenovirus?",
- "hint": "Include those who are currently in hospital or on visits out",
+ "hint": "Include those who are currently in hospital",
"schema": {},
"options": {}
},
@@ -2367,13 +2367,13 @@
},
"nameHasError": false,
"title": "How many staff have been diagnosed with a chest infection by a GP?",
- "hint": "Include those who are currently in hospital or on visits out
If none, enter 0"
+ "hint": "Include those who are currently in hospital
If none, enter 0"
},
{
"name": "StaffSymptomsNotTested",
"title": "How many staff have symptoms of an acute respiratory infection, but have not been tested for any infection?",
"type": "NumberField",
- "hint": "Do not include cases that have been confirmed by a test as flu or diagnosed by a GP as a chest infection
Among elderly people this may include people who have a sudden onset of acute respiratory symptoms, fever, or sudden mental or physical deterioration without any other known cause
Include those who are currently in hospital or on visits out
If none, enter 0",
+ "hint": "Do not include cases that have been confirmed by a test as flu or diagnosed by a GP as a chest infection
Among elderly people this may include people who have a sudden onset of acute respiratory symptoms, fever, or sudden mental or physical deterioration without any other known cause
Include those who are currently in hospital
If none, enter 0",
"schema": {},
"options": {}
},
From a218d380a7664f42be0d3dacf81119c458ddb5bd Mon Sep 17 00:00:00 2001
From: emilyjevans <30391244+emilyjevans@users.noreply.github.com>
Date: Tue, 18 Feb 2025 13:03:47 +0000
Subject: [PATCH 084/403] consistent use of 'If none, enter 0' in hint text
---
runner/src/server/forms/ReportAnOutbreak.json | 62 +++++++++----------
1 file changed, 31 insertions(+), 31 deletions(-)
diff --git a/runner/src/server/forms/ReportAnOutbreak.json b/runner/src/server/forms/ReportAnOutbreak.json
index dbf89f6f19..995baeec6e 100644
--- a/runner/src/server/forms/ReportAnOutbreak.json
+++ b/runner/src/server/forms/ReportAnOutbreak.json
@@ -540,7 +540,7 @@
"name": "ServiceUsersAdenovirus",
"type": "NumberField",
"title": "How many service users have tested positive for adenovirus?",
- "hint": "Include those who are currently in hospital or on visits out",
+ "hint": "Include those who are currently in hospital or on visits out
If none, enter 0",
"schema": {
"min": 0,
"max": 999
@@ -582,7 +582,7 @@
"name": "ServiceUsersHmpv",
"type": "NumberField",
"title": "How many service users have tested positive for human Metapneumovirus (hMPV)?",
- "hint": "Include those who are currently in hospital or on visits out",
+ "hint": "Include those who are currently in hospital or on visits out
If none, enter 0",
"schema": {
"min": 0,
"max": 999
@@ -620,7 +620,7 @@
"name": "ServiceUsersParainfluenza",
"type": "NumberField",
"title": "How many service users have tested positive for parainfluenza?",
- "hint": "Include those who are currently in hospital or on visits out",
+ "hint": "Include those who are currently in hospital or on visits out
If none, enter 0",
"schema": {
"min": 0,
"max": 999
@@ -654,7 +654,7 @@
"name": "ServiceUsersRSV",
"type": "NumberField",
"title": "How many service users have tested positive for Respiratory Syncytial Virus (RSV)?",
- "hint": "Include those who are currently in hospital or on visits out",
+ "hint": "Include those who are currently in hospital or on visits out
If none, enter 0",
"schema": {
"min": 0,
"max": 999
@@ -684,7 +684,7 @@
"name": "ServiceUsersRhinovirus",
"type": "NumberField",
"title": "How many service users have tested positive for rhinovirus?",
- "hint": "Include those who are currently in hospital or on visits out",
+ "hint": "Include those who are currently in hospital or on visits out
If none, enter 0",
"schema": {
"min": 0,
"max": 999
@@ -710,7 +710,7 @@
"name": "ServiceUsersOtherARI",
"type": "NumberField",
"title": "How many service users have tested positive for an other acute respiratory infection?",
- "hint": "Include those who are currently in hospital or on visits out",
+ "hint": "Include those who are currently in hospital or on visits out
If none, enter 0",
"schema": {
"min": 0,
"max": 999
@@ -736,7 +736,7 @@
"name": "StaffAdenovirus",
"type": "NumberField",
"title": "How many staff have tested positive for adenovirus?",
- "hint": "Include those who are currently in hospital",
+ "hint": "Include those who are currently in hospital
If none, enter 0",
"schema": {
"min": 0,
"max": 999
@@ -778,7 +778,7 @@
"name": "StaffHmpv",
"type": "NumberField",
"title": "How many staff have tested positive for human Metapneumovirus (hMPV)?",
- "hint": "Include those who are currently in hospital",
+ "hint": "Include those who are currently in hospital
If none, enter 0",
"schema": {
"min": 0,
"max": 999
@@ -816,7 +816,7 @@
"name": "StaffParainfluenza",
"type": "NumberField",
"title": "How many staff have tested positive for parainfluenza?",
- "hint": "Include those who are currently in hospital",
+ "hint": "Include those who are currently in hospital
If none, enter 0",
"schema": {
"min": 0,
"max": 999
@@ -850,7 +850,7 @@
"name": "StaffRSV",
"type": "NumberField",
"title": "How many staff have tested positive for Respiratory Syncytial Virus (RSV)?",
- "hint": "Include those who are currently in hospital",
+ "hint": "Include those who are currently in hospital
If none, enter 0",
"schema": {
"min": 0,
"max": 999
@@ -880,7 +880,7 @@
"name": "StaffRhinovirus",
"type": "NumberField",
"title": "How many staff have tested positive for rhinovirus?",
- "hint": "Include those who are currently in hospital",
+ "hint": "Include those who are currently in hospital
If none, enter 0",
"schema": {
"min": 0,
"max": 999
@@ -906,7 +906,7 @@
"name": "StaffOtherARI",
"type": "NumberField",
"title": "How many staff have tested positive for an other acute respiratory infection?",
- "hint": "Include those who are currently in hospital",
+ "hint": "Include those who are currently in hospital
If none, enter 0",
"schema": {
"min": 0,
"max": 999
@@ -928,7 +928,7 @@
"name": "ServiceUsersConfirmedARI",
"type": "NumberField",
"title": "How many service users have symptoms of an acute respiratory infection but have not been tested?",
- "hint": "Include those who are currently in hospital or on visits out",
+ "hint": "Include those who are currently in hospital or on visits out
If none, enter 0",
"schema": {
"min": 0,
"max": 999
@@ -984,7 +984,7 @@
"name": "StaffSymptomsNotTested",
"type": "NumberField",
"title": "How many staff have symptoms of an acute respiratory infection, but have not been tested for any infection?",
- "hint": "Include those who are currently in hospital",
+ "hint": "Include those who are currently in hospital
If none, enter 0",
"schema": {
"min": 0,
"max": 999
@@ -1141,7 +1141,7 @@
},
"nameHasError": false,
"title": "How many service users have flu confirmed by a positive swab test?",
- "hint": "Include those who are currently in hospital or on visits out"
+ "hint": "Include those who are currently in hospital or on visits out
If none, enter 0"
},
{
"name": "ServiceUsersChestInfection",
@@ -1580,7 +1580,7 @@
"type": "NumberField",
"name": "ServiceUsersCovidTestPositive",
"title": "How many service users have COVID-19 confirmed by a positive test?",
- "hint": "Include those who are currently in hospital or on visits out",
+ "hint": "Include those who are currently in hospital or on visits out
If none, enter 0",
"options": {
"required": true
},
@@ -1592,7 +1592,7 @@
"name": "ServiceUsersConfirmedARI",
"type": "NumberField",
"title": "How many service users have tested positive for adenovirus?",
- "hint": "Include those who are currently in hospital or on visits out",
+ "hint": "Include those who are currently in hospital or on visits out
If none, enter 0",
"schema": {},
"options": {}
},
@@ -1637,7 +1637,7 @@
"type": "NumberField",
"name": "StaffCovidTestPositive",
"title": "How many staff have COVID-19 confirmed by a positive test?",
- "hint": "Include those who are currently in hospital",
+ "hint": "Include those who are currently in hospital
If none, enter 0",
"options": {
"required": true
},
@@ -1649,7 +1649,7 @@
"name": "StaffConfirmedARI",
"type": "NumberField",
"title": "How many staff have tested positive for adenovirus?",
- "hint": "Include those who are currently in hospital",
+ "hint": "Include those who are currently in hospital
If none, enter 0",
"schema": {},
"options": {}
},
@@ -1769,7 +1769,7 @@
"type": "NumberField",
"name": "ServiceUsersCovidTestPositive",
"title": "How many service users have COVID-19 confirmed by a positive test?",
- "hint": "Include those who are currently in hospital or on visits out",
+ "hint": "Include those who are currently in hospital or on visits out
If none, enter 0",
"options": {
"required": true
},
@@ -1781,7 +1781,7 @@
"type": "NumberField",
"name": "ServiceUsersFluSwabTest",
"title": "How many service users have flu confirmed by a positive swab test?",
- "hint": "Include those who are currently in hospital or on visits out",
+ "hint": "Include those who are currently in hospital or on visits out
If none, enter 0",
"schema": {},
"options": {}
},
@@ -1871,7 +1871,7 @@
"type": "NumberField",
"name": "StaffCovidTestPositive",
"title": "How many staff have COVID-19 confirmed by a positive test?",
- "hint": "Include those who are currently in hospital",
+ "hint": "Include those who are currently in hospital
If none, enter 0",
"options": {
"required": true
},
@@ -1883,7 +1883,7 @@
"type": "NumberField",
"name": "StaffFluSwabTest",
"title": "How many staff have flu confirmed by a positive swab test?",
- "hint": "Include those who are currently in hospital",
+ "hint": "Include those who are currently in hospital
If none, enter 0",
"schema": {}
},
{
@@ -2127,7 +2127,7 @@
"type": "NumberField",
"name": "ServiceUsersCovidTestPositive",
"title": "How many service users have COVID-19 confirmed by a positive test?",
- "hint": "Include those who are currently in hospital or on visits out",
+ "hint": "Include those who are currently in hospital or on visits out
If none, enter 0",
"options": {
"required": true
},
@@ -2139,7 +2139,7 @@
"type": "NumberField",
"name": "ServiceUsersFluSwabTest",
"title": "How many service users have flu confirmed by a positive swab test?",
- "hint": "Include those who are currently in hospital or on visits out",
+ "hint": "Include those who are currently in hospital or on visits out
If none, enter 0",
"schema": {},
"options": {}
},
@@ -2225,7 +2225,7 @@
"type": "NumberField",
"name": "StaffCovidTestPositive",
"title": "How many staff have COVID-19 confirmed by a positive test?",
- "hint": "Include those who are currently in hospital",
+ "hint": "Include those who are currently in hospital
If none, enter 0",
"options": {
"required": true
},
@@ -2237,7 +2237,7 @@
"type": "NumberField",
"name": "StaffFluSwabTest",
"title": "How many staff have flu confirmed by a positive swab test?",
- "hint": "Include those who are currently in hospital",
+ "hint": "Include those who are currently in hospital
If none, enter 0",
"schema": {},
"options": {}
},
@@ -2279,7 +2279,7 @@
"type": "NumberField",
"name": "ServiceUsersFluSwabTest",
"title": "How many service users have flu confirmed by a positive swab test?",
- "hint": "Include those who are currently in hospital or on visits out",
+ "hint": "Include those who are currently in hospital or on visits out
If none, enter 0",
"schema": {},
"options": {}
},
@@ -2287,7 +2287,7 @@
"name": "ServiceUsersConfirmedARI",
"type": "NumberField",
"title": "How many service users have tested positive for adenovirus?",
- "hint": "Include those who are currently in hospital or on visits out",
+ "hint": "Include those who are currently in hospital or on visits out
If none, enter 0",
"schema": {},
"options": {}
},
@@ -2343,7 +2343,7 @@
"type": "NumberField",
"name": "StaffFluSwabTest",
"title": "How many staff have flu confirmed by a positive swab test?",
- "hint": "Include those who are currently in hospital",
+ "hint": "Include those who are currently in hospital
If none, enter 0",
"schema": {},
"options": {}
},
@@ -2351,7 +2351,7 @@
"name": "StaffConfirmedARI",
"type": "NumberField",
"title": "How many staff have tested positive for adenovirus?",
- "hint": "Include those who are currently in hospital",
+ "hint": "Include those who are currently in hospital
If none, enter 0",
"schema": {},
"options": {}
},
From 75e8868a620949d03257f7682465fd73e43de4ec Mon Sep 17 00:00:00 2001
From: emilyjevans <30391244+emilyjevans@users.noreply.github.com>
Date: Tue, 18 Feb 2025 13:06:24 +0000
Subject: [PATCH 085/403] consistent use of 'If none, enter 0' in hint text
---
runner/src/server/forms/ReportAnOutbreak.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/runner/src/server/forms/ReportAnOutbreak.json b/runner/src/server/forms/ReportAnOutbreak.json
index 995baeec6e..c0bed6a4d6 100644
--- a/runner/src/server/forms/ReportAnOutbreak.json
+++ b/runner/src/server/forms/ReportAnOutbreak.json
@@ -1214,7 +1214,7 @@
},
"nameHasError": false,
"title": "How many staff have flu confirmed by a positive swab test?",
- "hint": "Include those who are currently in hospital."
+ "hint": "Include those who are currently in hospital
If none, enter 0"
},
{
"name": "StaffChestInfection",
From 6058fe9a235b34a885ce28fdb290da53df19acb7 Mon Sep 17 00:00:00 2001
From: emilyjevans <30391244+emilyjevans@users.noreply.github.com>
Date: Tue, 18 Feb 2025 13:29:25 +0000
Subject: [PATCH 086/403] CAR-544 landing page content fixes
---
runner/src/server/forms/ReportAnOutbreak.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/runner/src/server/forms/ReportAnOutbreak.json b/runner/src/server/forms/ReportAnOutbreak.json
index dbf89f6f19..d42823f1ba 100644
--- a/runner/src/server/forms/ReportAnOutbreak.json
+++ b/runner/src/server/forms/ReportAnOutbreak.json
@@ -10,7 +10,7 @@
"name": "mainContent",
"options": {},
"type": "Para",
- "content": "
From: UK Health Security Agency
Applies to England
You can use this service if you provide adult social care, such as a care home, retirement home, supported living or extra care.
\nUse this service to report:
\nARIs include COVID-19, flu, respiratory syncytial virus (RSV), and other respiratory infections.
\nIt should take about 10 minutes to complete.
\nIf possible, test all service users with symptoms who are eligible for COVID-19 treatments using a COVID-19 rapid lateral flow test. Staff with symptoms who are eligible for COVID-19 treatments should test themselves at home.
\nIf you cannot test people, do not wait. Report as soon as possible.
\nYou'll need to know the:
\nYou’ll need to give your email address to access this service.
\n\nDo not use this online service to give an update on an outbreak that you have already reported. If you need to give an update, contact your local UKHSA health protection team or your community infection control team.
\nYou only need to report 2 or more ARI cases if they could be linked by spread in your setting. If the infection could not have been spread in your setting, you should not report it as an outbreak. If in doubt, report as an outbreak.
\nYour local UKHSA health protection team, or the community infection control team, will use your information to assess your outbreak. They will help you manage the outbreak and prevent further spread.
\nIf you need help using the service or have any other questions, contact your local UKHSA health protection team.
\nIf your enquiry is urgent outside of working hours, telephone your health protection team's out-of-hours service.
\nIf you need urgent medical advice, you should call NHS 111 or visit 111.nhs.uk. For life-threatening emergencies, call 999.
" + "content": "From: UK Health Security Agency
Applies to England
You can use this service if you provide adult social care, such as a care home, supported living or extra care.
\nUse this service to report:
\nARIs include COVID-19, flu, respiratory syncytial virus (RSV), and other respiratory infections.
\nIt should take about 10 minutes to complete.
\nIf possible, test all service users with symptoms who are eligible for COVID-19 treatments using a COVID-19 rapid lateral flow test. Staff with symptoms who are eligible for COVID-19 treatments should test themselves at home.
\nIf you cannot test people, do not wait. Report as soon as possible.
\nYou'll need to know the:
\nYou’ll need to give your email address to access this service.
\n\nDo not use this online service to give an update on an outbreak that you have already reported. If you need to give an update, contact your local UKHSA health protection team or your community infection control team.
\nYou only need to report 2 or more ARI cases if they could be linked by spread in your setting. If the infection could not have been spread in your setting, you should not report it as an outbreak. If in doubt, report as an outbreak.
\nYour local UKHSA health protection team, or the community infection control team, will use your information to assess your outbreak. They will help you manage the outbreak and prevent further spread.
\nIf you need help using the service or have any other questions, contact your local UKHSA health protection team.
\nIf you need urgent medical advice, you should call NHS 111 or visit 111.nhs.uk. For life-threatening emergencies, call 999.
" } ], "sidebarContent": { From a91dd326ec8ecf10bdf045a6ddcc0f90ced4b556 Mon Sep 17 00:00:00 2001 From: emilyjevans <30391244+emilyjevans@users.noreply.github.com> Date: Wed, 19 Feb 2025 08:40:28 +0000 Subject: [PATCH 087/403] fix circular routing issue --- runner/src/server/forms/ReportAnOutbreak.json | 197 ++++++++++++++++-- 1 file changed, 177 insertions(+), 20 deletions(-) diff --git a/runner/src/server/forms/ReportAnOutbreak.json b/runner/src/server/forms/ReportAnOutbreak.json index dbf89f6f19..038d926bd0 100644 --- a/runner/src/server/forms/ReportAnOutbreak.json +++ b/runner/src/server/forms/ReportAnOutbreak.json @@ -505,6 +505,10 @@ } ], "next": [ + { + "condition": "OtherARIServiceOrStaff:Staff", + "path": "/staff-ari-confirmed" + }, { "condition": "ARIInfectionType:Adenovirus&OtherARIServiceOrStaff:ServiceUser", "path": "/service-users-ari-adenovirus" @@ -569,7 +573,31 @@ "path": "/service-users-ari-other" }, { - "path": "/service-users-ari-confirmed" + "condition": "ARIInfectionType:Adenovirus&OtherARIServiceOrStaff:Staff", + "path": "/staff-ari-adenovirus" + }, + { + "condition": "ARIInfectionType:Hmpv&OtherARIServiceOrStaff:Staff", + "path": "/staff-ari-hmpv" + }, + { + "condition": "ARIInfectionType:Parainfluenza&OtherARIServiceOrStaff:Staff", + "path": "/staff-ari-parainfluenza" + }, + { + "condition": "ARIInfectionType:RSV&OtherARIServiceOrStaff:Staff", + "path": "/staff-ari-rsv" + }, + { + "condition": "ARIInfectionType:Rhinovirus&OtherARIServiceOrStaff:Staff", + "path": "/staff-ari-rhinovirus" + }, + { + "condition": "ARIInfectionType:Unknown&OtherARIServiceOrStaff:Staff", + "path": "/staff-ari-other" + }, + { + "path": "/severity-of-illness" } ] }, @@ -607,7 +635,31 @@ "path": "/service-users-ari-other" }, { - "path": "/service-users-ari-confirmed" + "condition": "ARIInfectionType:Adenovirus&OtherARIServiceOrStaff:Staff", + "path": "/staff-ari-adenovirus" + }, + { + "condition": "ARIInfectionType:Hmpv&OtherARIServiceOrStaff:Staff", + "path": "/staff-ari-hmpv" + }, + { + "condition": "ARIInfectionType:Parainfluenza&OtherARIServiceOrStaff:Staff", + "path": "/staff-ari-parainfluenza" + }, + { + "condition": "ARIInfectionType:RSV&OtherARIServiceOrStaff:Staff", + "path": "/staff-ari-rsv" + }, + { + "condition": "ARIInfectionType:Rhinovirus&OtherARIServiceOrStaff:Staff", + "path": "/staff-ari-rhinovirus" + }, + { + "condition": "ARIInfectionType:Unknown&OtherARIServiceOrStaff:Staff", + "path": "/staff-ari-other" + }, + { + "path": "/severity-of-illness" } ] }, @@ -641,7 +693,31 @@ "path": "/service-users-ari-other" }, { - "path": "/service-users-ari-confirmed" + "condition": "ARIInfectionType:Adenovirus&OtherARIServiceOrStaff:Staff", + "path": "/staff-ari-adenovirus" + }, + { + "condition": "ARIInfectionType:Hmpv&OtherARIServiceOrStaff:Staff", + "path": "/staff-ari-hmpv" + }, + { + "condition": "ARIInfectionType:Parainfluenza&OtherARIServiceOrStaff:Staff", + "path": "/staff-ari-parainfluenza" + }, + { + "condition": "ARIInfectionType:RSV&OtherARIServiceOrStaff:Staff", + "path": "/staff-ari-rsv" + }, + { + "condition": "ARIInfectionType:Rhinovirus&OtherARIServiceOrStaff:Staff", + "path": "/staff-ari-rhinovirus" + }, + { + "condition": "ARIInfectionType:Unknown&OtherARIServiceOrStaff:Staff", + "path": "/staff-ari-other" + }, + { + "path": "/severity-of-illness" } ] }, @@ -671,7 +747,31 @@ "path": "/service-users-ari-other" }, { - "path": "/service-users-ari-confirmed" + "condition": "ARIInfectionType:Adenovirus&OtherARIServiceOrStaff:Staff", + "path": "/staff-ari-adenovirus" + }, + { + "condition": "ARIInfectionType:Hmpv&OtherARIServiceOrStaff:Staff", + "path": "/staff-ari-hmpv" + }, + { + "condition": "ARIInfectionType:Parainfluenza&OtherARIServiceOrStaff:Staff", + "path": "/staff-ari-parainfluenza" + }, + { + "condition": "ARIInfectionType:RSV&OtherARIServiceOrStaff:Staff", + "path": "/staff-ari-rsv" + }, + { + "condition": "ARIInfectionType:Rhinovirus&OtherARIServiceOrStaff:Staff", + "path": "/staff-ari-rhinovirus" + }, + { + "condition": "ARIInfectionType:Unknown&OtherARIServiceOrStaff:Staff", + "path": "/staff-ari-other" + }, + { + "path": "/severity-of-illness" } ] }, @@ -697,7 +797,31 @@ "path": "/service-users-ari-other" }, { - "path": "/service-users-ari-confirmed" + "condition": "ARIInfectionType:Adenovirus&OtherARIServiceOrStaff:Staff", + "path": "/staff-ari-adenovirus" + }, + { + "condition": "ARIInfectionType:Hmpv&OtherARIServiceOrStaff:Staff", + "path": "/staff-ari-hmpv" + }, + { + "condition": "ARIInfectionType:Parainfluenza&OtherARIServiceOrStaff:Staff", + "path": "/staff-ari-parainfluenza" + }, + { + "condition": "ARIInfectionType:RSV&OtherARIServiceOrStaff:Staff", + "path": "/staff-ari-rsv" + }, + { + "condition": "ARIInfectionType:Rhinovirus&OtherARIServiceOrStaff:Staff", + "path": "/staff-ari-rhinovirus" + }, + { + "condition": "ARIInfectionType:Unknown&OtherARIServiceOrStaff:Staff", + "path": "/staff-ari-other" + }, + { + "path": "/severity-of-illness" } ] }, @@ -1067,7 +1191,55 @@ ], "next": [ { + "condition": "ARIInfectionType:Adenovirus&OtherARIServiceOrStaff:ServiceUser", "path": "/service-users-ari-adenovirus" + }, + { + "condition": "ARIInfectionType:Hmpv&OtherARIServiceOrStaff:ServiceUser", + "path": "/service-users-ari-hmpv" + }, + { + "condition": "ARIInfectionType:Parainfluenza&OtherARIServiceOrStaff:ServiceUser", + "path": "/service-users-ari-parainfluenza" + }, + { + "condition": "ARIInfectionType:RSV&OtherARIServiceOrStaff:ServiceUser", + "path": "/service-users-ari-rsv" + }, + { + "condition": "ARIInfectionType:Rhiovirus&OtherARIServiceOrStaff:ServiceUser", + "path": "/service-users-ari-rhinovirus" + }, + { + "condition": "ARIInfectionType:Unknown&OtherARIServiceOrStaff:ServiceUser", + "path": "/service-users-ari-other" + }, + { + "condition": "ARIInfectionType:Adenovirus&OtherARIServiceOrStaff:Staff", + "path": "/staff-ari-adenovirus" + }, + { + "condition": "ARIInfectionType:Hmpv&OtherARIServiceOrStaff:Staff", + "path": "/staff-ari-hmpv" + }, + { + "condition": "ARIInfectionType:Parainfluenza&OtherARIServiceOrStaff:Staff", + "path": "/staff-ari-parainfluenza" + }, + { + "condition": "ARIInfectionType:RSV&OtherARIServiceOrStaff:Staff", + "path": "/staff-ari-rsv" + }, + { + "condition": "ARIInfectionType:Rhinovirus&OtherARIServiceOrStaff:Staff", + "path": "/staff-ari-rhinovirus" + }, + { + "condition": "ARIInfectionType:Unknown&OtherARIServiceOrStaff:Staff", + "path": "/staff-ari-other" + }, + { + "path": "/severity-of-illness" } ] }, @@ -1476,20 +1648,12 @@ } ], "next": [ - { - "condition": "WhichARI:COVID19&FLU&OTHER", - "path": "/service-users-master" - }, { "condition": "OtherARIServiceOrStaff:ServiceUsers", "path": "/service-users-ari-confirmed" }, { - "condition": "OtherARIServiceOrStaff:Staff", "path": "/staff-ari-cases" - }, - { - "path": "/service-users-master" } ] }, @@ -1562,10 +1726,6 @@ "path": "/staff-covid", "condition": "WhichARI:Covid&ARIServiceOrStaff:Staff" }, - { - "condition": "ARIServiceOrStaff:ServiceUsers", - "path": "/service-users-ari-confirmed" - }, { "path": "/staff-ari-cases" } @@ -1856,9 +2016,6 @@ { "condition": "ARIInfectionType:Unknown&OtherARIServiceOrStaff:Staff", "path": "/staff-ari-other" - }, - { - "path": "/service-users-ari-confirmed" } ] }, From 53f7395a615cc03680d4fcdd2e1fdc6a395047b9 Mon Sep 17 00:00:00 2001 From: emilyjevans <30391244+emilyjevans@users.noreply.github.com> Date: Wed, 19 Feb 2025 10:39:11 +0000 Subject: [PATCH 088/403] Fix staff flu cases content --- runner/src/server/forms/ReportAnOutbreak.json | 18 +++--------------- 1 file changed, 3 insertions(+), 15 deletions(-) diff --git a/runner/src/server/forms/ReportAnOutbreak.json b/runner/src/server/forms/ReportAnOutbreak.json index dbf89f6f19..a305da61f3 100644 --- a/runner/src/server/forms/ReportAnOutbreak.json +++ b/runner/src/server/forms/ReportAnOutbreak.json @@ -1214,10 +1214,10 @@ }, "nameHasError": false, "title": "How many staff have flu confirmed by a positive swab test?", - "hint": "Include those who are currently in hospital." + "hint": "Include those who are currently in hospitalFrom: UK Health Security Agency
Applies to England
You can use this service if you provide adult social care, such as a care home, supported living or extra care.
\nUse this service to report:
\nARIs include COVID-19, flu, respiratory syncytial virus (RSV), and other respiratory infections.
\nIt should take about 10 minutes to complete.
\nIf possible, test all service users with symptoms who are eligible for COVID-19 treatments using a COVID-19 rapid lateral flow test. Staff with symptoms who are eligible for COVID-19 treatments should test themselves at home.
\nIf you cannot test people, do not wait. Report as soon as possible.
\nYou'll need to know the:
\nYou’ll need to give your email address to access this service.
\n\nDo not use this online service to give an update on an outbreak that you have already reported. If you need to give an update, contact your local UKHSA health protection team or your community infection control team.
\nYou only need to report 2 or more ARI cases if they could be linked by spread in your setting. If the infection could not have been spread in your setting, you should not report it as an outbreak. If in doubt, report as an outbreak.
\nYour local UKHSA health protection team, or the community infection control team, will use your information to assess your outbreak. They will help you manage the outbreak and prevent further spread.
\nIf you need help using the service or have any other questions, contact your local UKHSA health protection team.
\nIf you need urgent medical advice, you should call NHS 111 or visit 111.nhs.uk. For life-threatening emergencies, call 999.
" + "content": "From: UK Health Security Agency
Applies to England
You can use this service if you provide adult social care. This includes a care home, supported living or extra care.
\nUse this service to report:
\nARIs include COVID-19, flu, respiratory syncytial virus (RSV), and other respiratory infections.
\nIt should take about 10 minutes to complete.
\nIf possible, test all service users with symptoms who are eligible for COVID-19 treatments using a COVID-19 rapid lateral flow test. Staff with symptoms who are eligible for COVID-19 treatments should test themselves at home.
\nIf you cannot test people, do not wait. Report as soon as possible.
\nYou'll need to know the:
\nYou’ll need to give your email address to access this service.
\n\nDo not use this online service to give an update on an outbreak that you have already reported. If you need to give an update, contact your local UKHSA health protection team or your community infection control team.
\nYou only need to report 2 or more ARI cases if they could be linked by spread in your setting. If the infection could not have been spread in your setting, you should not report it as an outbreak. If in doubt, report as an outbreak.
\nYour local UKHSA health protection team, or the community infection control team, will use your information to assess your outbreak. They will help you manage the outbreak and prevent further spread.
\nIf you need help using the service or have any other questions, contact your local UKHSA health protection team.
\nIf you need urgent medical advice, you should call NHS 111 or visit 111.nhs.uk. For life-threatening emergencies, call 999.
" } ], "sidebarContent": { From 990226bee0c29beea5ca55fdefdfc7033f8d11b9 Mon Sep 17 00:00:00 2001 From: emilyjevans <30391244+emilyjevans@users.noreply.github.com> Date: Thu, 20 Feb 2025 11:45:14 +0000 Subject: [PATCH 100/403] allow configuration for single page questions to render the question title --- model/src/schema/schema.ts | 1 + runner/src/server/forms/ReportAnOutbreak.json | 35 +++++++++++++++++-- .../pageControllers/PageControllerBase.ts | 19 ++++++---- 3 files changed, 46 insertions(+), 9 deletions(-) diff --git a/model/src/schema/schema.ts b/model/src/schema/schema.ts index c92256a3a5..c6ce782d4f 100644 --- a/model/src/schema/schema.ts +++ b/model/src/schema/schema.ts @@ -118,6 +118,7 @@ const pageSchema = joi.object().keys({ sidebarContent: joi.object().optional(), controller: joi.string(), components: joi.array().items(componentSchema), + disableSingleComponentAsHeading: joi.boolean(), next: joi.array().items(nextSchema), repeatField: joi.string().optional(), options: joi.object().optional(), diff --git a/runner/src/server/forms/ReportAnOutbreak.json b/runner/src/server/forms/ReportAnOutbreak.json index feefe87058..4a83ef875b 100644 --- a/runner/src/server/forms/ReportAnOutbreak.json +++ b/runner/src/server/forms/ReportAnOutbreak.json @@ -466,6 +466,7 @@ "path": "/service-users-ari-confirmed", "title": "Service users: number of cases", "section": "InfectionsInYourSetting", + "disableSingleComponentAsHeading": true, "components": [ { "name": "ServiceUsersSymptomsNotTested", @@ -539,6 +540,7 @@ "path": "/service-users-ari-adenovirus", "title": "Service users: number of adenovirus cases", "section": "InfectionsInYourSetting", + "disableSingleComponentAsHeading": true, "components": [ { "name": "ServiceUsersAdenovirus", @@ -605,6 +607,7 @@ "path": "/service-users-ari-hmpv", "title": "Service users: number of human Metapneumovirus (hMPV) cases", "section": "InfectionsInYourSetting", + "disableSingleComponentAsHeading": true, "components": [ { "name": "ServiceUsersHmpv", @@ -667,6 +670,7 @@ "path": "/service-users-ari-parainfluenza", "title": "Service users: number of parainfluenza cases", "section": "InfectionsInYourSetting", + "disableSingleComponentAsHeading": true, "components": [ { "name": "ServiceUsersParainfluenza", @@ -725,6 +729,7 @@ "path": "/service-users-ari-rsv", "title": "Service users: number of Respiratory Syncytial Virus (RSV) cases", "section": "InfectionsInYourSetting", + "disableSingleComponentAsHeading": true, "components": [ { "name": "ServiceUsersRSV", @@ -779,6 +784,7 @@ "path": "/service-users-ari-rhinovirus", "title": "Service users: number of rhinovirus cases", "section": "InfectionsInYourSetting", + "disableSingleComponentAsHeading": true, "components": [ { "name": "ServiceUsersRhinovirus", @@ -829,6 +835,7 @@ "path": "/service-users-ari-other", "title": "Service users: number of other acute respiratory infection cases", "section": "InfectionsInYourSetting", + "disableSingleComponentAsHeading": true, "components": [ { "name": "ServiceUsersOtherARI", @@ -843,8 +850,24 @@ ], "next": [ { - "condition": "OtherARIServiceOrStaff:Staff", - "path": "/staff-ari-cases" + "condition": "ARIInfectionType:Hmpv&OtherARIServiceOrStaff:Staff", + "path": "/staff-ari-hmpv" + }, + { + "condition": "ARIInfectionType:Parainfluenza&OtherARIServiceOrStaff:Staff", + "path": "/staff-ari-parainfluenza" + }, + { + "condition": "ARIInfectionType:RSV&OtherARIServiceOrStaff:Staff", + "path": "/staff-ari-rsv" + }, + { + "condition": "ARIInfectionType:Rhinovirus&OtherARIServiceOrStaff:Staff", + "path": "/staff-ari-rhinovirus" + }, + { + "condition": "ARIInfectionType:Unknown&OtherARIServiceOrStaff:Staff", + "path": "/staff-ari-other" }, { "path": "/severity-of-illness" @@ -855,6 +878,7 @@ "path": "/staff-ari-adenovirus", "title": "Staff: number of adenovirus cases", "section": "InfectionsInYourSetting", + "disableSingleComponentAsHeading": true, "components": [ { "name": "StaffAdenovirus", @@ -897,6 +921,7 @@ "path": "/staff-ari-hmpv", "title": "Staff: number of human Metapneumovirus (hMPV) cases", "section": "InfectionsInYourSetting", + "disableSingleComponentAsHeading": true, "components": [ { "name": "StaffHmpv", @@ -935,6 +960,7 @@ "path": "/staff-ari-parainfluenza", "title": "Staff: number of parainfluenza cases", "section": "InfectionsInYourSetting", + "disableSingleComponentAsHeading": true, "components": [ { "name": "StaffParainfluenza", @@ -969,6 +995,7 @@ "path": "/staff-ari-rsv", "title": "Staff: number of Respiratory Syncytial Virus (RSV) cases", "section": "InfectionsInYourSetting", + "disableSingleComponentAsHeading": true, "components": [ { "name": "StaffRSV", @@ -999,6 +1026,7 @@ "path": "/staff-ari-rhinovirus", "title": "Staff: number of rhinovirus cases", "section": "InfectionsInYourSetting", + "disableSingleComponentAsHeading": true, "components": [ { "name": "StaffRhinovirus", @@ -1025,6 +1053,7 @@ "path": "/staff-ari-other", "title": "Staff: number of other acute respiratory infection cases", "section": "InfectionsInYourSetting", + "disableSingleComponentAsHeading": true, "components": [ { "name": "StaffOtherARI", @@ -1047,6 +1076,7 @@ "path": "/service-users-ari-unknown", "title": "Service users: number of cases", "section": "InfectionsInYourSetting", + "disableSingleComponentAsHeading": true, "components": [ { "name": "ServiceUsersConfirmedARI", @@ -1099,6 +1129,7 @@ "path": "/staff-ari-unknown", "title": "Staff: number of cases", "section": "InfectionsInYourSetting", + "disableSingleComponentAsHeading": true, "components": [ { "type": "Para", diff --git a/runner/src/server/plugins/engine/pageControllers/PageControllerBase.ts b/runner/src/server/plugins/engine/pageControllers/PageControllerBase.ts index 8f15c173d1..7c646033d6 100644 --- a/runner/src/server/plugins/engine/pageControllers/PageControllerBase.ts +++ b/runner/src/server/plugins/engine/pageControllers/PageControllerBase.ts @@ -57,6 +57,7 @@ export class PageControllerBase { sectionForMultiSummaryPages: any; sidebarContent: any; components: ComponentCollection; + disableSingleComponentAsHeading: boolean; hasFormComponents: boolean; hasConditionalFormComponents: boolean; backLinkFallback?: string; @@ -76,6 +77,8 @@ export class PageControllerBase { this.condition = pageDef.condition; this.repeatField = pageDef.repeatField; this.backLinkFallback = pageDef.backLinkFallback; + this.disableSingleComponentAsHeading = + pageDef.disableSingleComponentAsHeading; // Resolve section this.section = model.sections?.find( @@ -169,14 +172,16 @@ export class PageControllerBase { if (singleFormComponent && singleFormComponentIsFirst) { const label: any = singleFormComponent.model.label; - if (pageTitle) { - label.text = pageTitle; - } + if (!this.disableSingleComponentAsHeading) { + if (pageTitle) { + label.text = pageTitle; + } - label.isPageHeading = true; - label.classes = "govuk-label--l"; - pageTitle = pageTitle || label.text; - showTitle = false; + label.isPageHeading = true; + label.classes = "govuk-label--l"; + pageTitle = pageTitle || label.text; + showTitle = false; + } } return { From 0f5400f42a372d962ccd086c4a370a4c10c02767 Mon Sep 17 00:00:00 2001 From: emilyjevans <30391244+emilyjevans@users.noreply.github.com> Date: Thu, 20 Feb 2025 13:40:40 +0000 Subject: [PATCH 101/403] fix missing adenovirus route --- runner/src/server/forms/ReportAnOutbreak.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/runner/src/server/forms/ReportAnOutbreak.json b/runner/src/server/forms/ReportAnOutbreak.json index 68de774360..1436151f8f 100644 --- a/runner/src/server/forms/ReportAnOutbreak.json +++ b/runner/src/server/forms/ReportAnOutbreak.json @@ -849,6 +849,10 @@ } ], "next": [ + { + "condition": "ARIInfectionType:Adenovirus&OtherARIServiceOrStaff:Staff", + "path": "/staff-ari-adenovirus" + }, { "condition": "ARIInfectionType:Hmpv&OtherARIServiceOrStaff:Staff", "path": "/staff-ari-hmpv" From 222c4bfe32e56a909ee89d105261def7ce01c18a Mon Sep 17 00:00:00 2001 From: emilyjevans <30391244+emilyjevans@users.noreply.github.com> Date: Fri, 21 Feb 2025 13:49:52 +0000 Subject: [PATCH 102/403] add custom CSS for the beta phase tag --- runner/src/client/sass/application.scss | 32 +++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/runner/src/client/sass/application.scss b/runner/src/client/sass/application.scss index 51d6284c34..efa1156e43 100644 --- a/runner/src/client/sass/application.scss +++ b/runner/src/client/sass/application.scss @@ -109,3 +109,35 @@ .govuk-checkboxes__conditional--hidden { display: none; } + +.govuk-phase-banner__content__tag { + background-color: #1d70b8; /* Example blue background */ + padding: 5px 8px; + font-size: 1rem; + line-height: 1.25; + text-transform: lowercase; + letter-spacing: normal; +} + +.govuk-phase-banner__content__tag::first-letter { + text-transform: uppercase; +} + +.govuk-tag { + font-family: GDS Transport, arial, sans-serif; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + font-weight: 400; + font-size: 1rem; + line-height: 1.25; + display: inline-block; + max-width: 160px; + margin-top: -2px; + margin-bottom: -3px; + padding: 2px 8px 3px; + color: #0c2d4a; + background-color: #bbd4ea; + text-decoration: none; + overflow-wrap: break-word; + letter-spacing: 0; +} From 2f7a2f8aafae9ac51d320ab9a15bb718c4648454 Mon Sep 17 00:00:00 2001 From: emilyjevans <30391244+emilyjevans@users.noreply.github.com> Date: Mon, 24 Feb 2025 15:58:03 +0000 Subject: [PATCH 103/403] Fix other ari service user and staff routing --- runner/src/server/forms/ReportAnOutbreak.json | 312 +++++++++--------- 1 file changed, 156 insertions(+), 156 deletions(-) diff --git a/runner/src/server/forms/ReportAnOutbreak.json b/runner/src/server/forms/ReportAnOutbreak.json index 1436151f8f..fcbdef0244 100644 --- a/runner/src/server/forms/ReportAnOutbreak.json +++ b/runner/src/server/forms/ReportAnOutbreak.json @@ -554,46 +554,46 @@ } ], "next": [ - { - "condition": "ARIInfectionType:Hmpv&OtherARIServiceOrStaff:ServiceUser", - "path": "/service-users-ari-hmpv" - }, - { - "condition": "ARIInfectionType:Parainfluenza&OtherARIServiceOrStaff:ServiceUser", - "path": "/service-users-ari-parainfluenza" - }, - { - "condition": "ARIInfectionType:RSV&OtherARIServiceOrStaff:ServiceUser", - "path": "/service-users-ari-rsv" - }, - { - "condition": "ARIInfectionType:Rhinovirus&OtherARIServiceOrStaff:ServiceUser", - "path": "/service-users-ari-rhinovirus" - }, - { - "condition": "ARIInfectionType:Unknown&OtherARIServiceOrStaff:ServiceUser", - "path": "/service-users-ari-other" - }, { "condition": "ARIInfectionType:Adenovirus&OtherARIServiceOrStaff:Staff", "path": "/staff-ari-adenovirus" }, + { + "condition": "ARIInfectionType:Hmpv&OtherARIServiceOrStaff:ServiceUser", + "path": "/service-users-ari-hmpv" + }, { "condition": "ARIInfectionType:Hmpv&OtherARIServiceOrStaff:Staff", "path": "/staff-ari-hmpv" }, + { + "condition": "ARIInfectionType:Parainfluenza&OtherARIServiceOrStaff:ServiceUser", + "path": "/service-users-ari-parainfluenza" + }, { "condition": "ARIInfectionType:Parainfluenza&OtherARIServiceOrStaff:Staff", "path": "/staff-ari-parainfluenza" }, + { + "condition": "ARIInfectionType:RSV&OtherARIServiceOrStaff:ServiceUser", + "path": "/service-users-ari-rsv" + }, { "condition": "ARIInfectionType:RSV&OtherARIServiceOrStaff:Staff", "path": "/staff-ari-rsv" }, + { + "condition": "ARIInfectionType:Rhinovirus&OtherARIServiceOrStaff:ServiceUser", + "path": "/service-users-ari-rhinovirus" + }, { "condition": "ARIInfectionType:Rhinovirus&OtherARIServiceOrStaff:Staff", "path": "/staff-ari-rhinovirus" }, + { + "condition": "ARIInfectionType:Unknown&OtherARIServiceOrStaff:ServiceUser", + "path": "/service-users-ari-other" + }, { "condition": "ARIInfectionType:Unknown&OtherARIServiceOrStaff:Staff", "path": "/staff-ari-other" @@ -604,16 +604,16 @@ ] }, { - "path": "/service-users-ari-hmpv", - "title": "Service users: number of human Metapneumovirus (hMPV) cases", + "path": "/staff-ari-adenovirus", + "title": "Staff: number of adenovirus cases", "section": "InfectionsInYourSetting", "disableSingleComponentAsHeading": true, "components": [ { - "name": "ServiceUsersHmpv", + "name": "StaffAdenovirus", "type": "NumberField", - "title": "How many service users have tested positive for human Metapneumovirus (hMPV)?", - "hint": "Include those who are currently in hospital or on visits outRead guidance on when cases may be linked by spread in the care setting (opens in a new tab).
" + "content": "Read guidance on when cases may be linked by spread in the care setting (opens in a new tab).
" } ], "next": [ From 028a05d5eeb409c05eede3c26175f20cbe3d829c Mon Sep 17 00:00:00 2001 From: emilyjevans <30391244+emilyjevans@users.noreply.github.com> Date: Fri, 7 Mar 2025 11:19:58 +0000 Subject: [PATCH 108/403] fix missing email Report Sent page --- runner/src/server/forms/ReportAnOutbreak.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/runner/src/server/forms/ReportAnOutbreak.json b/runner/src/server/forms/ReportAnOutbreak.json index 1782a42388..361dd89175 100644 --- a/runner/src/server/forms/ReportAnOutbreak.json +++ b/runner/src/server/forms/ReportAnOutbreak.json @@ -5445,7 +5445,7 @@ "specialPages": { "confirmationPage": { "customText": { - "nextSteps": "We will send 2 automated emails to {{ YourSetting.MainContactEmailAddress }}.
An acknowledgement email will give you your reference number and a copy of the information you've provided. The email will tell you if you have a low-risk COVID-19 outbreak, a medium-risk COVID-19 outbreak, a high-priority outbreak, or a single case of flu.
An advice email will give you information specific to your situation to help you prevent the spread of infection. It explains what to expect from your local UKHSA health protection team or the community infection control team.
If these emails do not arrive within one hour, or you need urgent advice, telephone your local UKHSA health protection team (opens in a new tab) or community infection control team.
If your acknowledgement or advice email tells you that your outbreak is assessed as high priority on a weekend or a bank holiday, you also need to telephone your local UKHSA health protection team (opens in a new tab). Call during the daytime if possible. If you do not call the health protection team, a member of the health protection team will only call you on the next working day.
If you need urgent medical advice, you can call NHS 111 or visit 111.nhs.uk (opens in a new tab). For life-threatening emergencies, call 999.
This is a new service. Help us improve it and give your feedback (opens in new tab).
", + "nextSteps": "We will send 2 automated emails to {{ MainContactEmailAddress }}.
An acknowledgement email will give you your reference number and a copy of the information you've provided. The email will tell you if you have a low-risk COVID-19 outbreak, a medium-risk COVID-19 outbreak, a high-priority outbreak, or a single case of flu.
An advice email will give you information specific to your situation to help you prevent the spread of infection. It explains what to expect from your local UKHSA health protection team or the community infection control team.
If these emails do not arrive within one hour, or you need urgent advice, telephone your local UKHSA health protection team (opens in a new tab) or community infection control team.
If your acknowledgement or advice email tells you that your outbreak is assessed as high priority on a weekend or a bank holiday, you also need to telephone your local UKHSA health protection team (opens in a new tab). Call during the daytime if possible. If you do not call the health protection team, a member of the health protection team will only call you on the next working day.
If you need urgent medical advice, you can call NHS 111 or visit 111.nhs.uk (opens in a new tab). For life-threatening emergencies, call 999.
This is a new service. Help us improve it and give your feedback (opens in new tab).
", "title": "Report sent", "referenceTitle": "Your outbreak reference number", "referenceContent": "Use this number if you need to contact the UKHSA health protection team about your outbreak." From 43ef63604e28d7473fe30e9bfcacf989fa23f0de Mon Sep 17 00:00:00 2001 From: emilyjevans <30391244+emilyjevans@users.noreply.github.com> Date: Fri, 7 Mar 2025 14:47:59 +0000 Subject: [PATCH 109/403] WIP feedback form --- runner/src/server/forms/ReportAnOutbreak.json | 4 +- runner/src/server/forms/feedback.json | 127 ++++++++++++++++++ 2 files changed, 129 insertions(+), 2 deletions(-) create mode 100644 runner/src/server/forms/feedback.json diff --git a/runner/src/server/forms/ReportAnOutbreak.json b/runner/src/server/forms/ReportAnOutbreak.json index 1782a42388..63af61d7f5 100644 --- a/runner/src/server/forms/ReportAnOutbreak.json +++ b/runner/src/server/forms/ReportAnOutbreak.json @@ -5437,7 +5437,7 @@ "name": "Report an outbreak", "feedback": { "feedbackForm": true, - "url": "" + "url": "/feedback" }, "phaseBanner": { "phase": "beta" @@ -5445,7 +5445,7 @@ "specialPages": { "confirmationPage": { "customText": { - "nextSteps": "We will send 2 automated emails to {{ YourSetting.MainContactEmailAddress }}.
An acknowledgement email will give you your reference number and a copy of the information you've provided. The email will tell you if you have a low-risk COVID-19 outbreak, a medium-risk COVID-19 outbreak, a high-priority outbreak, or a single case of flu.
An advice email will give you information specific to your situation to help you prevent the spread of infection. It explains what to expect from your local UKHSA health protection team or the community infection control team.
If these emails do not arrive within one hour, or you need urgent advice, telephone your local UKHSA health protection team (opens in a new tab) or community infection control team.
If your acknowledgement or advice email tells you that your outbreak is assessed as high priority on a weekend or a bank holiday, you also need to telephone your local UKHSA health protection team (opens in a new tab). Call during the daytime if possible. If you do not call the health protection team, a member of the health protection team will only call you on the next working day.
If you need urgent medical advice, you can call NHS 111 or visit 111.nhs.uk (opens in a new tab). For life-threatening emergencies, call 999.
This is a new service. Help us improve it and give your feedback (opens in new tab).
", + "nextSteps": "We will send 2 automated emails to {{ YourSetting.MainContactEmailAddress }}.
An acknowledgement email will give you your reference number and a copy of the information you've provided. The email will tell you if you have a low-risk COVID-19 outbreak, a medium-risk COVID-19 outbreak, a high-priority outbreak, or a single case of flu.
An advice email will give you information specific to your situation to help you prevent the spread of infection. It explains what to expect from your local UKHSA health protection team or the community infection control team.
If these emails do not arrive within one hour, or you need urgent advice, telephone your local UKHSA health protection team (opens in a new tab) or community infection control team.
If your acknowledgement or advice email tells you that your outbreak is assessed as high priority on a weekend or a bank holiday, you also need to telephone your local UKHSA health protection team (opens in a new tab). Call during the daytime if possible. If you do not call the health protection team, a member of the health protection team will only call you on the next working day.
If you need urgent medical advice, you can call NHS 111 or visit 111.nhs.uk (opens in a new tab). For life-threatening emergencies, call 999.
This is a new service. Help us improve it and give your feedback (opens in new tab).
", "title": "Report sent", "referenceTitle": "Your outbreak reference number", "referenceContent": "Use this number if you need to contact the UKHSA health protection team about your outbreak." diff --git a/runner/src/server/forms/feedback.json b/runner/src/server/forms/feedback.json new file mode 100644 index 0000000000..6d78132994 --- /dev/null +++ b/runner/src/server/forms/feedback.json @@ -0,0 +1,127 @@ +{ + "metadata": {}, + "startPage": "/start", + "name": "Report an outbreak", + "skipSummary": true, + "pages": [ + { + "path": "/start", + "title": "Give feedback on Report an Outbreak", + "components": [ + { + "name": "Feedback", + "options": {}, + "type": "CheckboxesField", + "title": "How would you describe Report an outbreak?", + "hint": "Select all that apply", + "list": "FeedbackOptions" + }, + { + "name": "OtherFeedbackTextBox", + "options": {}, + "type": "MultilineTextField", + "title": "Tell us about any difficulties or highlights you experienced, and how we could improve the service.", + "hint": "Do not include any personal information here, for example patient or disease details." + }, + { + "name": "FeedbackPara", + "options": {}, + "type": "Para", + "content": "You can now close this page.
", + "hidePanel": true } } } diff --git a/runner/src/server/plugins/initialiseSession/types.ts b/runner/src/server/plugins/initialiseSession/types.ts index 531cf57570..b0a8315053 100644 --- a/runner/src/server/plugins/initialiseSession/types.ts +++ b/runner/src/server/plugins/initialiseSession/types.ts @@ -17,6 +17,7 @@ export type InitialiseSessionOptions = { title: string; paymentSkipped?: false | string; nextSteps?: false | string; + hidePanel?: boolean; }; components: ContentComponentsDef[]; }; diff --git a/runner/src/server/schemas/webhookSchema.ts b/runner/src/server/schemas/webhookSchema.ts index e490291e88..bec9f0ffb4 100644 --- a/runner/src/server/schemas/webhookSchema.ts +++ b/runner/src/server/schemas/webhookSchema.ts @@ -78,6 +78,7 @@ const optionsSchema: joi.ObjectSchema< title: joi.string().optional().allow(false, ""), paymentSkipped: joi.string().optional().allow(false, ""), nextSteps: joi.string().optional().allow(false, ""), + hidePanel: joi.boolean().optional(), }) .optional(), components: joi.array().items(componentSchema), diff --git a/runner/src/server/views/confirmation.html b/runner/src/server/views/confirmation.html index 25c4008388..5fad12fe0c 100644 --- a/runner/src/server/views/confirmation.html +++ b/runner/src/server/views/confirmation.html @@ -14,58 +14,66 @@ {% endblock %} {% block content %} -- Someone will be in touch to make a payment. -
- {% else %} -- You will receive an email with details with the next steps. -
- {% endif %} - {% if components.length > 0 %} -Your reference number is: {{ reference }}
+ {% endif %} + {% if not customText.hidePanel %} + {% if not customText %} + {{ govukPanel({ + titleText: "Application complete", + html: tmpl + }) }} + {% else %} + {{ govukPanel({ + titleText: customText.title, + html: tmpl + }) }} + {% endif %} {% endif %} - {% else %} - {{ govukPanel({ - titleText: customText.title, - html: tmpl - }) }} - {% if paymentSkipped and customText.paymentSkipped %} -- {{ customText.paymentSkipped | safe }} -
+ + + {% if not customText %} + {% if paymentSkipped %} ++ Someone will be in touch to make a payment. +
+ {% else %} ++ You will receive an email with details with the next steps. +
+ {% endif %} {% else %} - {% if reference %} -- Your reference number is: {{ reference }}. - {{ customText.referenceContent }} -
- {% endif %} - {% if customText.nextSteps %} + {% if paymentSkipped and customText.paymentSkipped %}- {{ customText.nextSteps | safe }} + {{ customText.paymentSkipped | safe }}
+ {% else %} + {% if reference and not useNormalHeading %} ++ Your reference number is: {{ reference }}. + {{ customText.referenceContent }} +
+ {% endif %} + + {% if customText.nextSteps %} ++ {{ customText.nextSteps | safe }} +
+ {% endif %} {% endif %} {% endif %} + {% if components.length > 0 %}We will send 2 automated emails to {{ MainContactEmailAddress }}.
An acknowledgement email will give you your reference number and a copy of the information you've provided. The email will tell you if you have a low-risk COVID-19 outbreak, a medium-risk COVID-19 outbreak, a high-priority outbreak, or a single case of flu.
An advice email will give you information specific to your situation to help you prevent the spread of infection. It explains what to expect from your local UKHSA health protection team or the community infection control team.
If these emails do not arrive within one hour, or you need urgent advice, telephone your local UKHSA health protection team (opens in a new tab) or community infection control team.
If your acknowledgement or advice email tells you that your outbreak is assessed as high priority on a weekend or a bank holiday, you also need to telephone your local UKHSA health protection team (opens in a new tab). Call during the daytime if possible. If you do not call the health protection team, a member of the health protection team will only call you on the next working day.
If you need urgent medical advice, you can call NHS 111 or visit 111.nhs.uk (opens in a new tab). For life-threatening emergencies, call 999.
This is a new service. Help us improve it and give your feedback (opens in new tab).
", + "nextSteps": "We will send 2 automated emails to {{ MainContactEmailAddress }}.
An acknowledgement email will give you your reference number and a copy of the information you've provided. The email will tell you if you have a low-risk COVID-19 outbreak, a medium-risk COVID-19 outbreak, a high-priority outbreak, or a single case of flu.
An advice email will give you information specific to your situation to help you prevent the spread of infection. It explains what to expect from your local UKHSA health protection team or the community infection control team.
If these emails do not arrive within one hour, or you need urgent advice, telephone your local UKHSA health protection team (opens in a new tab) or community infection control team.
If your acknowledgement or advice email tells you that your outbreak is assessed as high priority on a weekend or a bank holiday, you also need to telephone your local UKHSA health protection team (opens in a new tab). Call during the daytime if possible. If you do not call the health protection team, a member of the health protection team will only call you on the next working day.
If you need urgent medical advice, you can call NHS 111 or visit 111.nhs.uk (opens in a new tab). For life-threatening emergencies, call 999.
This is a new service. Help us improve it and give your feedback (opens in new tab).
", "title": "Report sent", "referenceTitle": "Your outbreak reference number", "referenceContent": "Use this number if you need to contact the UKHSA health protection team about your outbreak." From 85280c4173b1d5bc1e08fc5a5895003a7b217a2c Mon Sep 17 00:00:00 2001 From: emilyjevans <30391244+emilyjevans@users.noreply.github.com> Date: Wed, 12 Mar 2025 16:10:28 +0000 Subject: [PATCH 118/403] Setting details page error messages and validation --- runner/src/server/forms/ReportAnOutbreak.json | 32 ++++++++++++++---- .../components/SelectionControlField.ts | 33 ++++++++++++++----- .../pageControllers/PageControllerBase.ts | 6 ++-- 3 files changed, 54 insertions(+), 17 deletions(-) diff --git a/runner/src/server/forms/ReportAnOutbreak.json b/runner/src/server/forms/ReportAnOutbreak.json index 61e03143e4..40ca0dbe71 100644 --- a/runner/src/server/forms/ReportAnOutbreak.json +++ b/runner/src/server/forms/ReportAnOutbreak.json @@ -2738,7 +2738,12 @@ "components": [ { "name": "SettingName", - "options": {}, + "options": { + "customValidationMessages": { + "string.empty": "Enter your setting name", + "string.base": "Enter your setting name" + } + }, "type": "TextField", "nameHasError": false, "title": "Your setting name", @@ -2749,7 +2754,12 @@ }, { "name": "SettingPostcode", - "options": {}, + "options": { + "customValidationMessages": { + "string.empty": "Enter postcode", + "string.pattern.base": "Enter a full UK postcode" + } + }, "type": "TextField", "nameHasError": false, "title": "Your setting postcode", @@ -2763,8 +2773,8 @@ "options": { "required": true, "customValidationMessages": { - "string.empty": "Your local UKHSA health protection team is required", - "string.base": "Your local UKHSA health protection team is required" + "string.empty": "Select your local UKHSA health protection team", + "any.only": "Select your local UKHSA health protection team" } }, "type": "SelectField", @@ -2786,13 +2796,23 @@ { "name": "CQCRegistered", "options": { + "customValidationMessages": { + "any.required": "Select yes if your setting is registered with the Care Quality Commission (CQC)" + }, "conditionallyRevealedComponents": { "CQCLocationID": { "type": "TextField", "name": "CQCLocationID", "title": "Enter your CQC location ID, for example, 1-123456789", - "options": {}, - "schema": {} + "options": { + "customValidationMessages": { + "string.empty": "CQC location ID cannot be blank", + "string.pattern.base": "Enter a CQC location ID in the correct format" + } + }, + "schema": { + "regex": "^1-\\d{9}$" + } } } }, diff --git a/runner/src/server/plugins/engine/components/SelectionControlField.ts b/runner/src/server/plugins/engine/components/SelectionControlField.ts index 609682993f..2fd6875cdc 100644 --- a/runner/src/server/plugins/engine/components/SelectionControlField.ts +++ b/runner/src/server/plugins/engine/components/SelectionControlField.ts @@ -19,6 +19,7 @@ export class SelectionControlField extends ListFormComponent { constructor(def, model) { super(def, model); const { options } = def; + this.options = options; const { items } = this; @@ -31,6 +32,21 @@ export class SelectionControlField extends ListFormComponent { .conditionallyRevealedComponents[item.value]; if (conditionallyRevealedComponent != undefined) { + // Pass custom validation messages to the conditionally revealed component + if (options.customValidationMessages) { + conditionallyRevealedComponent.options = + conditionallyRevealedComponent.options || {}; + conditionallyRevealedComponent.options.customValidationMessages = + conditionallyRevealedComponent.options.customValidationMessages || + {}; + + // Merge parent validation messages with child validation messages + Object.assign( + conditionallyRevealedComponent.options.customValidationMessages, + options.customValidationMessages + ); + } + item.hasConditionallyRevealedComponents = true; item.conditionallyRevealedComponents = new ComponentCollection( [conditionallyRevealedComponent], @@ -196,19 +212,20 @@ export class SelectionControlField extends ListFormComponent { schemaKeysFunctionName ](); + const conditionalMessages = + item.conditionallyRevealedComponents.items[0].options + .customValidationMessages || {}; + Object.keys(conditionalSchemaKeys).forEach((key) => { - Object.assign(schemaKeys, { - [key]: joi.alternatives().conditional(joi.ref(conditionalName), { - is: key, - then: joi.string(), //TODO should work for other validations - otherwise: joi.optional(), - }), + let schema = joi.alternatives().conditional(joi.ref(conditionalName), { + is: item.value, // Make sure this is the correct value to check against + then: conditionalSchemaKeys[key].messages(conditionalMessages), + otherwise: joi.optional(), }); + schemaKeys[key] = schema; }); }); - //TODO should work for checkbox components - return schemaKeys; } } diff --git a/runner/src/server/plugins/engine/pageControllers/PageControllerBase.ts b/runner/src/server/plugins/engine/pageControllers/PageControllerBase.ts index 7c646033d6..f6f9a69ab1 100644 --- a/runner/src/server/plugins/engine/pageControllers/PageControllerBase.ts +++ b/runner/src/server/plugins/engine/pageControllers/PageControllerBase.ts @@ -625,7 +625,7 @@ export class PageControllerBase { }); formResult.errors = Object.is(formResult.errors, null) - ? { titleText: "Fix the following errors" } + ? { titleText: "There is a problem" } : formResult.errors; formResult.errors.errorList = reformattedErrors; } @@ -652,7 +652,7 @@ export class PageControllerBase { }); formResult.errors = Object.is(formResult.errors, null) - ? { titleText: "Fix the following errors" } + ? { titleText: "There is a problem" } : formResult.errors; formResult.errors.errorList = reformattedErrors; } @@ -845,7 +845,7 @@ export class PageControllerBase { } get errorSummaryTitle() { - return "Fix the following errors"; + return "There is a problem"; } /** From 0dab88473a6694bc8f4d5c4bdb10d231ac3bd4f9 Mon Sep 17 00:00:00 2001 From: emilyjevans <30391244+emilyjevans@users.noreply.github.com> Date: Wed, 12 Mar 2025 16:15:43 +0000 Subject: [PATCH 119/403] Remove comment --- .../server/plugins/engine/components/SelectionControlField.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/runner/src/server/plugins/engine/components/SelectionControlField.ts b/runner/src/server/plugins/engine/components/SelectionControlField.ts index 2fd6875cdc..855f1eaaf3 100644 --- a/runner/src/server/plugins/engine/components/SelectionControlField.ts +++ b/runner/src/server/plugins/engine/components/SelectionControlField.ts @@ -218,7 +218,7 @@ export class SelectionControlField extends ListFormComponent { Object.keys(conditionalSchemaKeys).forEach((key) => { let schema = joi.alternatives().conditional(joi.ref(conditionalName), { - is: item.value, // Make sure this is the correct value to check against + is: item.value, then: conditionalSchemaKeys[key].messages(conditionalMessages), otherwise: joi.optional(), }); From 281d4c70229baefa98a7261a500f3ab8f331ba3f Mon Sep 17 00:00:00 2001 From: emilyjevans <30391244+emilyjevans@users.noreply.github.com> Date: Thu, 13 Mar 2025 09:21:26 +0000 Subject: [PATCH 120/403] missing feedback form option --- runner/src/server/forms/feedback.json | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/runner/src/server/forms/feedback.json b/runner/src/server/forms/feedback.json index 0b6060964f..aa5ae95ed7 100644 --- a/runner/src/server/forms/feedback.json +++ b/runner/src/server/forms/feedback.json @@ -6,7 +6,7 @@ "pages": [ { "path": "/start", - "title": "Give feedback on Report an Outbreak", + "title": "Give feedback on Report an outbreak", "components": [ { "name": "Feedback", @@ -77,6 +77,10 @@ "text": "Useful resource", "value": "Useful resource" }, + { + "text": "Easy to understand", + "value": "Easy to understand" + }, { "text": "Easy to complete", "value": "Easy to complete" From 7bcd0ec42bb8fd3da6a7cf1e9d1b3b424623d1ad Mon Sep 17 00:00:00 2001 From: emilyjevans <30391244+emilyjevans@users.noreply.github.com> Date: Thu, 13 Mar 2025 11:24:40 +0000 Subject: [PATCH 121/403] Add in Magic link authentication (#284) --- model/src/data-model/types.ts | 3 + model/src/schema/schema.ts | 5 + runner/config/production.json | 2 +- runner/config/test.json | 2 +- runner/src/server/forms/ReportAnOutbreak.json | 13 +- runner/src/server/forms/magic-link.json | 176 ++++++++++++++ .../server/plugins/engine/components/Para.ts | 9 +- .../engine/models/submission/NotifyModel.ts | 3 +- .../pageControllers/MagicLinkController.ts | 155 +++++++++++++ .../MagicLinkStartPageController.ts | 25 ++ .../pageControllers/PageControllerBase.ts | 54 +++++ .../pageControllers/ResubmitPageController.ts | 218 ++++++++++++++++++ .../plugins/engine/pageControllers/helpers.ts | 6 + .../plugins/engine/pageControllers/index.ts | 3 + .../plugins/initialiseSession/helpers.ts | 15 ++ runner/src/server/services/statusService.ts | 50 ++-- runner/src/server/utils/hmac.ts | 84 +++++++ 17 files changed, 800 insertions(+), 23 deletions(-) create mode 100644 runner/src/server/forms/magic-link.json create mode 100644 runner/src/server/plugins/engine/pageControllers/MagicLinkController.ts create mode 100644 runner/src/server/plugins/engine/pageControllers/MagicLinkStartPageController.ts create mode 100644 runner/src/server/plugins/engine/pageControllers/ResubmitPageController.ts create mode 100644 runner/src/server/utils/hmac.ts diff --git a/model/src/data-model/types.ts b/model/src/data-model/types.ts index 8821ca461e..dc09e3534a 100644 --- a/model/src/data-model/types.ts +++ b/model/src/data-model/types.ts @@ -195,6 +195,7 @@ export type FormDefinition = { lists: List[]; sections: Section[]; startPage?: Page["path"] | undefined; + authentication?: boolean | undefined; name?: string | undefined; feedback?: Feedback; phaseBanner?: PhaseBanner; @@ -208,4 +209,6 @@ export type FormDefinition = { paymentReferenceFormat?: string; feeOptions: FeeOptions; exitOptions: ExitOptions; + jwtKey?: string | undefined; + toggle?: boolean | string | undefined; }; diff --git a/model/src/schema/schema.ts b/model/src/schema/schema.ts index 90e7581d6d..185dd136b1 100644 --- a/model/src/schema/schema.ts +++ b/model/src/schema/schema.ts @@ -230,6 +230,7 @@ const notifySchema = joi.object().keys({ addReferencesToPersonalisation: joi.boolean().optional(), emailReplyToIdConfiguration: joi.array().items(replyToConfigurationSchema), escapeURLs: joi.boolean().default(false), + hmacKey: joi.string().optional(), }); const emailSchema = joi.object().keys({ @@ -317,6 +318,7 @@ export const Schema = joi name: localisedString.optional(), feedback: feedbackSchema, startPage: joi.string().required(), + authentication: joi.boolean().optional(), pages: joi .array() .required() @@ -335,9 +337,12 @@ export const Schema = joi version: joi.number().default(CURRENT_VERSION), phaseBanner: phaseBannerSchema, specialPages: specialPagesSchema.optional(), + jwtKey: joi.string().optional(), feeOptions: feeOptionSchema, exitOptions: exitSchema.optional(), showFilenamesOnSummaryPage: joi.boolean().optional(), + toggle: joi.alternatives().try(joi.boolean(), joi.string()).optional(), + toggleRedirect: joi.string().optional(), }); /** diff --git a/runner/config/production.json b/runner/config/production.json index 9a0bba2e85..3e552e02b8 100644 --- a/runner/config/production.json +++ b/runner/config/production.json @@ -1,6 +1,6 @@ { "env": "production", "logPrettyPrint": false, - "enableCsrf": true, + "enforceCsrf": true, "previewMode": false } diff --git a/runner/config/test.json b/runner/config/test.json index 7b02cb55d9..82c6aa5adc 100644 --- a/runner/config/test.json +++ b/runner/config/test.json @@ -6,7 +6,7 @@ ], "isTest": true, "previewMode": true, - "enforceCsrf": false, + "enforceCsrf": true, "initialisedSessionKey": "predictable-key", "env": "test", "documentUploadApiUrl": "http://localhost:9000" diff --git a/runner/src/server/forms/ReportAnOutbreak.json b/runner/src/server/forms/ReportAnOutbreak.json index 10df867565..4869aed926 100644 --- a/runner/src/server/forms/ReportAnOutbreak.json +++ b/runner/src/server/forms/ReportAnOutbreak.json @@ -1,5 +1,7 @@ { "metadata": {}, + "authentication": true, + "toggle": "${magicLinkToggle}", "startPage": "/start", "pages": [ { @@ -10,7 +12,7 @@ "name": "mainContent", "options": {}, "type": "Para", - "content": "From: UK Health Security Agency
Applies to England
You can use this service if you provide adult social care. This includes a care home, supported living or extra care.
\nUse this service to report:
\nARIs include COVID-19, flu, respiratory syncytial virus (RSV), and other respiratory infections.
\nIt should take about 10 minutes to complete.
\nIf possible, test all service users with symptoms who are eligible for COVID-19 treatments using a COVID-19 rapid lateral flow test. Staff with symptoms who are eligible for COVID-19 treatments should test themselves at home.
\nIf you cannot test people, do not wait. Report as soon as possible.
\nYou'll need to know the:
\nYou’ll need to give your email address to access this service.
\n\nDo not use this online service to give an update on an outbreak that you have already reported. If you need to give an update, contact your local UKHSA health protection team or your community infection control team.
\nYou only need to report 2 or more ARI cases if they could be linked by spread in your setting. If the infection could not have been spread in your setting, you should not report it as an outbreak. If in doubt, report as an outbreak.
\nYour local UKHSA health protection team, or the community infection control team, will use your information to assess your outbreak. They will help you manage the outbreak and prevent further spread.
\nIf you need help using the service or have any other questions, contact your local UKHSA health protection team.
\nIf you need urgent medical advice, you should call NHS 111 or visit 111.nhs.uk. For life-threatening emergencies, call 999.
" + "content": "From: UK Health Security Agency
Applies to England
You can use this service if you provide adult social care. This includes a care home, supported living or extra care.
\nUse this service to report:
\nARIs include COVID-19, flu, respiratory syncytial virus (RSV), and other respiratory infections.
\nIt should take about 10 minutes to complete.
\nIf possible, test all service users with symptoms who are eligible for COVID-19 treatments using a COVID-19 rapid lateral flow test. Staff with symptoms who are eligible for COVID-19 treatments should test themselves at home.
\nIf you cannot test people, do not wait. Report as soon as possible.
\nYou'll need to know the:
\nYou’ll need to give your email address to access this service.
\nStart now\nDo not use this online service to give an update on an outbreak that you have already reported. If you need to give an update, contact your local UKHSA health protection team or your community infection control team.
\nYou only need to report 2 or more ARI cases if they could be linked by spread in your setting. If the infection could not have been spread in your setting, you should not report it as an outbreak. If in doubt, report as an outbreak.
\nYour local UKHSA health protection team, or the community infection control team, will use your information to assess your outbreak. They will help you manage the outbreak and prevent further spread.
\nIf you need help using the service or have any other questions, contact your local UKHSA health protection team.
\nIf you need urgent medical advice, you should call NHS 111 or visit 111.nhs.uk. For life-threatening emergencies, call 999.
" } ], "sidebarContent": { @@ -27,13 +29,13 @@ } ] }, + "controller": "MultiStartPageController", + "showContinueButton": false, "next": [ { "path": "/setting" } - ], - "controller": "MultiStartPageController", - "showContinueButton": false + ] }, { "path": "/setting", @@ -5579,5 +5581,6 @@ "referenceContent": "Use this number if you need to contact the UKHSA health protection team about your outbreak." } } - } + }, + "jwtKey": "${jwtKey}" } diff --git a/runner/src/server/forms/magic-link.json b/runner/src/server/forms/magic-link.json new file mode 100644 index 0000000000..b2b0190a6b --- /dev/null +++ b/runner/src/server/forms/magic-link.json @@ -0,0 +1,176 @@ +{ + "startPage": "/start", + "skipSummary": true, + "toggle": "${magicLinkToggle}", + "toggleRedirect": "/ReportAnOutbreak/setting", + "pages": [ + { + "path": "/start", + "controller": "MagicLinkStartPageController" + }, + { + "title": "What is your email address?", + "path": "/email", + "continueButtonText": "Send secure link", + "showContinueButton": true, + "backLinkFallback": "/ReportAnOutbreak/start", + "components": [ + { + "name": "EmailIntro", + "options": {}, + "type": "Para", + "content": "We need to email you a secure link to the service.Click the link in the email to continue to Report an outbreak.
You can change the email address if it’s not correct or if you’d like to use a different email.
Check your spam or junk folder.
If you’ve not received the email, you can resubmit the email.
Check your spam or junk folder.
If you’ve not received the email, you can resubmit the email.
We’ve sent another email to {{ email }}.
Click the link in the email to continue to Report an outbreak.
You can change the email address if it’s not correct or if you’d like to use a different email.
Check your spam or junk folder.
If you’ve not received the email, you can resubmit the email.
Check your spam or junk folder.
If you’ve not received the email, you can resubmit the email.
Check your spam or junk folder.
If you’ve still not received the email in 5 minutes, you need to request a new link.
Click the link in the email to continue to Report an outbreak.
You can change the email address if it’s not correct or if you’d like to use a different email.
Check your spam or junk folder.
If you’ve not received the email, you can resubmit the email.
Click the link in the email to continue to report an outbreak.
Check your spam or junk folder.
If you’ve not received the email in 5 minutes, you can resubmit the email.
Click the link in the email to continue to report an outbreak.
Check your spam or junk folder.
If you’ve not received the email in 5 minutes, you can resubmit the email.
Click the link in the email to continue to report an outbreak.
Check your spam or junk folder.
If you’ve not received the email in 5 minutes, you can resubmit the email.
Include cases confirmed by a test and people with symptoms of acute respiratory infections, including chest infections
" }, { "name": "TwoOrMoreCovid5days", From 6caaed9a3489e8c6a8f33a947f93314067f67f26 Mon Sep 17 00:00:00 2001 From: Masuk KaziProvide a contact who will be available to receive:
If possible, provide a work phone number and email address instead of personal contact details.
Enter a contact to receive:
If possible, provide a work phone number and email address instead of personal contact details.
Enter details for an alternative contact if you want the emails to also be sent to a second contact person. We will use this phone number for a follow up call if the main contact is not available.
", + "content": "Enter another contact to also receive the emails. We will use this phone number if the main contact is not available.
", "schema": {} }, { From 0d678f1b11e21ca2bd397bb2bf5febb277575586 Mon Sep 17 00:00:00 2001 From: Masuk KaziWe’ve sent another email to {{ email }}.
Click the link in the email to continue to Report an outbreak.
You can change the email address if it’s not correct or if you’d like to use a different email.
Check your spam or junk folder.
If you’ve not received the email, you can resubmit the email.
We’ve sent another email to {{ email }}.
Click the link in the email to continue to report an outbreak.
Check your spam or junk folder.
If you’ve still not received the email in 5 minutes, you need to request a new link.
You only need to report:
Read guidance on infection prevention and control in adult social care settings.
" - } - }, - "components": [] - }, { "path": "/2-or-more-cases-not-covid-or-flu", "title": "Are you reporting 2 or more cases of an acute respiratory infection?", @@ -347,22 +321,6 @@ } ], "next": [ - { - "condition": "WhichARI:COVID19ANDOTHER_BOTH_NOT_REPORTABLE", - "path": "/do-not-need-to-report-multiple" - }, - { - "condition": "WhichARI:COVID19ANDOTHER_BOTH_NOT_REPORTABLE2", - "path": "/do-not-need-to-report-multiple" - }, - { - "condition": "WhichARI:COVID19ANDOTHER_COVID_NOT_REPORTABLE", - "path": "/mid-way-summary-covid-no-other-yes" - }, - { - "condition": "WhichARI:COVID19ANDOTHER_OTHER_NOT_REPORTABLE", - "path": "/mid-way-summary-covid-yes-other-no" - }, { "condition": "TwoOrMoreCasesNotCovidFlu:YES", "path": "/ari-infection-type" @@ -372,53 +330,6 @@ } ] }, - { - "path": "/mid-way-summary", - "title": "Check your answers before continuing", - "controller": "CheckpointSummaryPageController", - "options": { - "multiSummary": true - }, - "components": [] - }, - { - "path": "/mid-way-summary-covid-yes-flu-yes-other-yes", - "title": "Check your answers before continuing", - "controller": "CheckpointSummaryPageController", - "options": { - "multiSummary": true - }, - "components": [], - "next": [ - { - "path": "/other-ari-confirmed-cases-setting" - } - ] - }, - { - "path": "/mid-way-summary-covid-yes-other-no", - "title": "Check your answers before continuing", - "controller": "CheckpointSummaryPageController", - "options": { - "multiSummary": true, - "customText": { - "insetText": "Based on your answers:
Based on your answers:
Your setting name | Belmont Care Home | Change |
Your setting postcode | TQ5 0AH | Change |
Your local UKHSA health protection team | South West Health Protection Team | Change |
Your Care Quality Commission (CQC) location ID | 000001888 | Change |
Type of adult social care you provide | Residential care home | Change |
Full name of contact person | Pat Deerfield | Change |
Job title of contact person | Manager | Change |
Telephone number | 07451300300 | Change |
Email address | Pat@cov.com | Change |
Acute respiratory infections you are reporting | Flu | Change |
Number of cases of Flu you are reporting | 2 or more | Change |
Symptoms in 2 or more cases of Flu started within 5 days of each other | Yes | Change |
You think the cases of Flu could be linked by spread in your setting | Yes | Change |
At least one case of Flu has been confirmed by a positive test | Yes | Change |
How would you describe the majority of your service users | Service users, staff | Change |
Number of people that currently live in your setting or use your service | 27 | Change |
Number of staff that work in your care setting or service | 7 | Change |
Number of empty beds (optional) | 3 | Change |
You are reporting cases or symptoms of Flu in service users or staff | 2 | Change |
Number of service users who have Flu confirmed by a test | 5 | Change |
Number of service users who have symptoms of an acute respiratory infection, but have not been tested for Flu | 5 | Change |
Number of staff members who have Flu confirmed by a test | 1 | Change |
Number of staff who have symptoms of an acute respiratory infection, but have not been tested for Flu | 2 | Change |
Date symptoms started in the first case of Flu | 02 August 2024 | Change |
Date symptoms started in the second case of Flu (optional) | N/A | Change |
Date symptoms started in the most recent case of Flu | 10 August 2024 | Change |
Number of service users who have had the flu vaccine for this current winter season (optional) | 20 | Change |
Number of staff who have had the flu vaccine for this current winter season (optional) | 6 | Change |
How often are you monitoring staff IPC practices | Within the last month | Change |
Issues you are currently experiencing and need support with | Test kit supply | Change |
Your setting undertakes aerosol generating procedures (AGPs) | Yes | Change |
Staff carrying out aerosol generating procedures, wear fit-tested and FFP3 masks | All | Change |
You use agency staff or share staff with other care settings | Yes | Change |
Number of additional agency staff or staff shared with settings you have used during this outbreak | Fewer than 5 | Change |
Your responses may be shared with your local UKHSA health protection team, your local authority community infection control team, and the NHS. They will use your information to help you to manage your situation.
By submitting this report you confirm that the details you are providing are correct to the best of your knowledge. You confirm that you have not included any personally identifiable information, for example names or dates of birth.
Your responses will be shared with your local health protection teams. They will use your information to help you manage your situation.
By submitting this report you confirm that the details are correct to the best of your knowledge. You confirm that you have not included any personally identifiable information for service users or staff, for example names or dates of birth.
Your responses may be shared with your local UKHSA health protection team, your local authority community infection control team, and the NHS. They will use your information to help you to manage your situation.\n
By submitting this report you confirm that the details you are providing are correct to the best of your knowledge. You confirm that you have not included any personally identifiable information, for example names or dates of birth
\nTotal cost: £{{fees.total / 100 }}
+You should not be charged an exchange fee if you pay with a UK credit or debit card.
+ {% endif %} + + {% if customText.endContent %} + {{ customText.endContent | safe }} + {% endif %} + + {% if not result.error %} +Include cases confirmed by a test and people with symptoms of acute respiratory infections, including chest infections
" + }, { "name": "TwoOrMoreCovid", "type": "RadiosField", From ce04af52dd2ec0a662cdc98cbc36df693506ed36 Mon Sep 17 00:00:00 2001 From: emilyjevans <30391244+emilyjevans@users.noreply.github.com> Date: Fri, 28 Mar 2025 11:32:36 +0000 Subject: [PATCH 194/403] CAR-601 & CAR-602 - Date validation for symptom onset questions (#312) --- runner/src/server/forms/ReportAnOutbreak.json | 37 +++- .../engine/components/DatePartsField.ts | 36 +++- .../DateComparisonPageController.ts | 173 ++++++++++++++++++ .../plugins/engine/pageControllers/helpers.ts | 2 + .../plugins/engine/pageControllers/index.ts | 1 + 5 files changed, 242 insertions(+), 7 deletions(-) create mode 100644 runner/src/server/plugins/engine/pageControllers/DateComparisonPageController.ts diff --git a/runner/src/server/forms/ReportAnOutbreak.json b/runner/src/server/forms/ReportAnOutbreak.json index d052f579e0..867f39038d 100644 --- a/runner/src/server/forms/ReportAnOutbreak.json +++ b/runner/src/server/forms/ReportAnOutbreak.json @@ -1483,6 +1483,10 @@ "path": "/symptom-onset-flu", "title": "Symptom onset for the case of flu", "sectionForEndSummaryPages": "SymptomOnset", + "controller": "DateComparisonPageController", + "options": { + "firstDateComponent": "FluSymptomOnsetDate" + }, "components": [ { "name": "intro", @@ -1491,9 +1495,16 @@ }, { "name": "FluSymptomOnsetDate", + "errorLabel": "The date symptoms started", "options": { "maxDaysInFuture": "0", - "summaryTitle": "Symptoms started" + "summaryTitle": "Symptoms started", + "customValidationMessages": { + "dayMonthYear": "Enter the date symptoms started", + "nonNumeric": "The date symptoms started must be a real date", + "date.max": "The date symptoms started must be in the past", + "date.base": "The date symptoms started must be a real date" + } }, "type": "DatePartsField", "nameHasError": false, @@ -2296,6 +2307,11 @@ "path": "/symptom-onset", "title": "Symptom onset of cases in this outbreak", "sectionForEndSummaryPages": "SymptomOnset", + "controller": "DateComparisonPageController", + "options": { + "firstDateComponent": "FirstCaseOnset", + "secondDateComponent": "MostRecentCaseOnset" + }, "components": [ { "name": "introText1", @@ -2313,22 +2329,37 @@ "name": "FirstCaseOnset", "type": "DatePartsField", "title": "When did symptoms start in the first case in this outbreak?", + "errorLabel": "The date that symptoms started in the first case of this outbreak", "hint": "For example, 31 3 2024", "options": { "summaryTitle": "First case: symptoms started", "required": true, - "maxDaysInFuture": "0" + "maxDaysInFuture": 0, + "customValidationMessages": { + "nonNumeric": "The date symptoms started in the first case of this outbreak must be a real date", + "dayMonthYear": "Enter the date symptoms started in the first case of this outbreak", + "date.max": "The date symptoms started in the first case of this outbreak must be in the past", + "date.base": "The date symptoms started in the first case of this outbreak must be a real date" + } } }, { "name": "MostRecentCaseOnset", "type": "DatePartsField", + "errorLabel": "The date symptoms started in the most recent case of this outbreak", "title": "When did symptoms start in the most recent case in this outbreak?", "hint": "For example, 31 3 2024", "options": { "summaryTitle": "Most recent case: symptoms started", "required": true, - "maxDaysInFuture": "0" + "maxDaysInFuture": 0, + "customValidationMessages": { + "dayMonthYear": "Enter the date symptoms started in the most recent case of this outbreak", + "nonNumeric": "The date symptoms started in the most recent case of this outbreak must be a real date", + "date.max": "The date symptoms started in the most recent case of this outbreak must be in the past", + "date.base": "The date symptoms started in the most recent case of this outbreak must be a real date", + "date.min": "The date symptoms started in the most recent case of this outbreak must be the same as or after the first case" + } } } ], diff --git a/runner/src/server/plugins/engine/components/DatePartsField.ts b/runner/src/server/plugins/engine/components/DatePartsField.ts index 23644cdcde..48450c7060 100644 --- a/runner/src/server/plugins/engine/components/DatePartsField.ts +++ b/runner/src/server/plugins/engine/components/DatePartsField.ts @@ -1,4 +1,4 @@ -import { add, sub, parseISO, format } from "date-fns"; +import { parseISO, format } from "date-fns"; import { InputFieldsComponentsDef } from "@xgovformbuilder/model"; import { FormComponent } from "./FormComponent"; @@ -39,7 +39,9 @@ export class DatePartsField extends FormComponent { customValidationMessages: { "number.min": "{{#label}} must be between 1 and 31", "number.max": "{{#label}} must be between 1 and 31", - "number.base": `${def.title} must include a day`, + "number.base": `${ + def.errorLabel ?? def.title + } must include a day`, }, }, hint: "", @@ -56,7 +58,9 @@ export class DatePartsField extends FormComponent { customValidationMessages: { "number.min": "{{#label}} must be between 1 and 12", "number.max": "{{#label}} must be between 1 and 12", - "number.base": `${def.title} must include a month`, + "number.base": `${ + def.errorLabel ?? def.title + } must include a month`, }, }, hint: "", @@ -71,7 +75,9 @@ export class DatePartsField extends FormComponent { optionalText: optionalText, classes: "govuk-input--width-4", customValidationMessages: { - "number.base": `${def.title} must include a year`, + "number.base": `${ + def.errorLabel ?? def.title + } must include a year`, }, }, hint: "", @@ -95,6 +101,7 @@ export class DatePartsField extends FormComponent { schema = schema.custom( helpers.getCustomDateValidator(maxDaysInPast, maxDaysInFuture) ); + if (options.customValidationMessages) { schema = schema.messages(options.customValidationMessages); } @@ -118,6 +125,27 @@ export class DatePartsField extends FormComponent { getStateValueFromValidForm(payload: FormPayload) { const name = this.name; + const day = payload[`${name}__day`]; + const month = payload[`${name}__month`]; + const year = payload[`${name}__year`]; + + // If any of the date parts are missing, return null + if (!day || !month || !year) { + return null; + } + + // Convert to Date object (month is 0-indexed) + const date = new Date(year, month - 1, day); + + // Check if the reconstructed date matches the input + if ( + date.getFullYear() !== year || + date.getMonth() !== month - 1 || // Convert back to 1-indexed + date.getDate() !== day + ) { + console.error("Invalid date detected:", { day, month, year }); + return null; // Invalid date + } return payload[`${name}__year`] ? new Date( diff --git a/runner/src/server/plugins/engine/pageControllers/DateComparisonPageController.ts b/runner/src/server/plugins/engine/pageControllers/DateComparisonPageController.ts new file mode 100644 index 0000000000..322bb38819 --- /dev/null +++ b/runner/src/server/plugins/engine/pageControllers/DateComparisonPageController.ts @@ -0,0 +1,173 @@ +import joi from "joi"; +import { PageController } from "./PageController"; +import { format, parseISO } from "date-fns"; +import { FormSubmissionErrors } from "../types"; + +/** + * DateComparisonPageController validates that: + * 1. Dates are not in the future + * 2. Most recent case onset date is not before the first case onset date + */ + +export class DateComparisonPageController extends PageController { + firstDateComponent: any; + secondDateComponent: any; + firstDateName: string; + secondDateName: string; + + constructor(model: any = {}, pageDef: any = {}) { + super(model, pageDef); + + this.firstDateName = pageDef?.options?.firstDateComponent || ""; + this.secondDateName = pageDef?.options?.secondDateComponent || ""; + + this.firstDateComponent = + pageDef?.components?.find( + (component) => component.name === this.firstDateName + ) || null; + + this.secondDateComponent = + pageDef?.components?.find( + (component) => component.name === this.secondDateName + ) || null; + + this.stateSchema = this.stateSchema.append({ + [this.firstDateName]: joi + .date() + .required() + .max("now") // Prevents dates in the future + .messages({ + ...this.firstDateComponent?.options?.customValidationMessages, + }), + }); + + if (this.secondDateComponent) { + this.stateSchema = this.stateSchema.append({ + [this.secondDateName]: joi + .date() + .required() + .min(joi.ref(this.firstDateName)) // Ensures most recent date is not before first date + .max("now") // Prevents dates in the future + .messages({ + ...this.secondDateComponent?.options?.customValidationMessages, + }), + }); + } + } + + getErrors(validationResult): FormSubmissionErrors | undefined { + if (!validationResult?.error) { + return undefined; + } + const errors = validationResult.error.details; + const formItems = this.components.formItems; + + const formatDateMessage = (message: string) => { + return message.replace(isoRegex, (text) => + format(parseISO(text), "d MMMM yyyy") + ); + }; + + const findTitle = (fieldName: string) => { + return ( + formItems.find((item) => item.name === fieldName)?.title || + "Title not found" + ); + }; + const isoRegex = /\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z)/; + + const errorList = errors.map((err) => { + let name = err.path.join("__"); + let title = findTitle(name.split("__")[0]); + let text = formatDateMessage(err.message); + + return { + path: err.path.join("."), + href: `#${name}`, + name: name, + title: title, + text: text, + type: err.type, + value: err.context.value, + }; + }); + + const addCustomErrors = (errorList) => { + const errorMap = {}; + + // Populate the errorMap with the base name and suffix + errorList.forEach((err) => { + const baseName = err.name.split("__")[0]; + const suffix = err.name.match(/__(day|month|year)$/)?.[0]; + + if (!errorMap[baseName]) { + errorMap[baseName] = { + baseName: baseName, + day: false, + month: false, + year: false, + errors: [], + name: err.name, + }; + } + + if (suffix === "__day") errorMap[baseName].day = true; + if (suffix === "__month") errorMap[baseName].month = true; + if (suffix === "__year") errorMap[baseName].year = true; + + errorMap[baseName].errors.push(err); + }); + + // Process the errorMap to set text based on combinations and add to finalErrors + const finalErrors: any = []; + Object.values(errorMap).forEach((e: any) => { + if (e.day && e.year && e.month) { + e.errors.forEach((err) => { + if (e.name.includes(this.firstDateName)) { + err.text = this.firstDateComponent?.options?.customValidationMessages?.dayMonthYear; + } + if (this.secondDateComponent) { + if (e.name.includes(this.secondDateName)) { + err.text = this.secondDateComponent?.options?.customValidationMessages?.dayMonthYear; + } + } + }); + } + + // New condition to handle number.base errors + const numberBaseErrors = e.errors.filter( + (err) => + err.type === "number.base" && + err.value !== undefined && + err.value !== "" + ); + + if (numberBaseErrors.length > 0) { + numberBaseErrors.forEach((err) => { + if (e.name.includes(this.firstDateName)) { + err.text = this.firstDateComponent?.options?.customValidationMessages?.nonNumeric; + } + if (e.name.includes(this.secondDateName)) { + err.text = this.secondDateComponent?.options?.customValidationMessages?.nonNumeric; + } + err.type = "custom.numberBase"; + }); + } + + finalErrors.push(...e.errors); + }); + + return finalErrors; + }; + + const processedErrorList = addCustomErrors(errorList); + + return { + titleText: this.errorSummaryTitle, + errorList: processedErrorList.filter( + ({ text }, index) => + index === errorList.findIndex((err) => err.text === text) + ), + }; + } +} diff --git a/runner/src/server/plugins/engine/pageControllers/helpers.ts b/runner/src/server/plugins/engine/pageControllers/helpers.ts index 2a3209869a..309c2b0bd8 100644 --- a/runner/src/server/plugins/engine/pageControllers/helpers.ts +++ b/runner/src/server/plugins/engine/pageControllers/helpers.ts @@ -16,6 +16,7 @@ import { ResubmitPageController } from "./ResubmitPageController"; import { MagicLinkController } from "./MagicLinkController"; import { MagicLinkStartPageController } from "./MagicLinkStartPageController"; import { CustomSummaryPageController } from "./CustomSummaryPageController"; +import { DateComparisonPageController } from "./DateComparisonPageController"; const PageControllers = { DobPageController, @@ -33,6 +34,7 @@ const PageControllers = { MagicLinkController, MagicLinkStartPageController, CustomSummaryPageController, + DateComparisonPageController, }; export const controllerNameFromPath = (filePath: string) => { diff --git a/runner/src/server/plugins/engine/pageControllers/index.ts b/runner/src/server/plugins/engine/pageControllers/index.ts index f9a3400e75..9ae47f3a60 100644 --- a/runner/src/server/plugins/engine/pageControllers/index.ts +++ b/runner/src/server/plugins/engine/pageControllers/index.ts @@ -11,3 +11,4 @@ export { ResubmitPageController } from "./ResubmitPageController"; export { MagicLinkController } from "./MagicLinkController"; export { MagicLinkStartPageController } from "./MagicLinkStartPageController"; export { CustomSummaryPageController } from "./CustomSummaryPageController"; +export { DateComparisonPageController } from "./DateComparisonPageController"; From 0b825129c3978d563a3c617b7d136fa0ecf83171 Mon Sep 17 00:00:00 2001 From: emilyjevans <30391244+emilyjevans@users.noreply.github.com> Date: Tue, 1 Apr 2025 13:29:09 +0100 Subject: [PATCH 195/403] CAR-1546 changes to other ARI flow (#316) --- runner/src/server/forms/ReportAnOutbreak.json | 1041 +++++++++++++---- 1 file changed, 803 insertions(+), 238 deletions(-) diff --git a/runner/src/server/forms/ReportAnOutbreak.json b/runner/src/server/forms/ReportAnOutbreak.json index 867f39038d..9d62546bc2 100644 --- a/runner/src/server/forms/ReportAnOutbreak.json +++ b/runner/src/server/forms/ReportAnOutbreak.json @@ -380,11 +380,7 @@ ], "next": [ { - "condition": "WhichARI:Other", "path": "/other-ari-confirmed-cases-setting" - }, - { - "path": "/ari-confirmed-cases-setting" } ] }, @@ -451,28 +447,11 @@ ], "next": [ { - "condition": "ARIInfectionType:Adenovirus&OtherARIServiceOrStaff:ServiceUser", - "path": "/service-users-ari-adenovirus" - }, - { - "condition": "ARIInfectionType:Hmpv&OtherARIServiceOrStaff:ServiceUser", - "path": "/service-users-ari-hmpv" - }, - { - "condition": "ARIInfectionType:Parainfluenza&OtherARIServiceOrStaff:ServiceUser", - "path": "/service-users-ari-parainfluenza" - }, - { - "condition": "ARIInfectionType:RSV&OtherARIServiceOrStaff:ServiceUser", - "path": "/service-users-ari-rsv" - }, - { - "condition": "ARIInfectionType:Rhinovirus&OtherARIServiceOrStaff:ServiceUser", - "path": "/service-users-ari-rhinovirus" + "condition": "OtherARIServiceOrStaff:Both", + "path": "/staff-ari-confirmed" }, { - "condition": "ARIInfectionType:Unknown&OtherARIServiceOrStaff:ServiceUser", - "path": "/service-users-ari-other" + "path": "/severity-of-illness" } ] }, @@ -502,50 +481,26 @@ } ], "next": [ - { - "condition": "ARIInfectionType:Adenovirus&OtherARIServiceOrStaff:Staff", - "path": "/staff-ari-adenovirus" - }, { "condition": "ARIInfectionType:Hmpv&OtherARIServiceOrStaff:ServiceUser", "path": "/service-users-ari-hmpv" }, - { - "condition": "ARIInfectionType:Hmpv&OtherARIServiceOrStaff:Staff", - "path": "/staff-ari-hmpv" - }, { "condition": "ARIInfectionType:Parainfluenza&OtherARIServiceOrStaff:ServiceUser", "path": "/service-users-ari-parainfluenza" }, - { - "condition": "ARIInfectionType:Parainfluenza&OtherARIServiceOrStaff:Staff", - "path": "/staff-ari-parainfluenza" - }, { "condition": "ARIInfectionType:RSV&OtherARIServiceOrStaff:ServiceUser", "path": "/service-users-ari-rsv" }, - { - "condition": "ARIInfectionType:RSV&OtherARIServiceOrStaff:Staff", - "path": "/staff-ari-rsv" - }, { "condition": "ARIInfectionType:Rhinovirus&OtherARIServiceOrStaff:ServiceUser", "path": "/service-users-ari-rhinovirus" }, - { - "condition": "ARIInfectionType:Rhinovirus&OtherARIServiceOrStaff:Staff", - "path": "/staff-ari-rhinovirus" - }, { "condition": "ARIInfectionType:Unknown&OtherARIServiceOrStaff:ServiceUser", "path": "/service-users-ari-other" }, - { - "condition": "ARIInfectionType:Unknown&OtherARIServiceOrStaff:Staff", - "path": "/staff-ari-other" - }, { "path": "/severity-of-illness" } @@ -577,48 +532,97 @@ } ], "next": [ - { - "condition": "ARIInfectionType:Hmpv&OtherARIServiceOrStaff:ServiceUser", - "path": "/service-users-ari-hmpv" - }, { "condition": "ARIInfectionType:Hmpv&OtherARIServiceOrStaff:Staff", "path": "/staff-ari-hmpv" }, - { - "condition": "ARIInfectionType:Parainfluenza&OtherARIServiceOrStaff:ServiceUser", - "path": "/service-users-ari-parainfluenza" - }, { "condition": "ARIInfectionType:Parainfluenza&OtherARIServiceOrStaff:Staff", "path": "/staff-ari-parainfluenza" }, - { - "condition": "ARIInfectionType:RSV&OtherARIServiceOrStaff:ServiceUser", - "path": "/service-users-ari-rsv" - }, { "condition": "ARIInfectionType:RSV&OtherARIServiceOrStaff:Staff", "path": "/staff-ari-rsv" }, - { - "condition": "ARIInfectionType:Rhinovirus&OtherARIServiceOrStaff:ServiceUser", - "path": "/service-users-ari-rhinovirus" - }, { "condition": "ARIInfectionType:Rhinovirus&OtherARIServiceOrStaff:Staff", "path": "/staff-ari-rhinovirus" }, - { - "condition": "ARIInfectionType:Unknown&OtherARIServiceOrStaff:ServiceUser", - "path": "/service-users-ari-other" - }, { "condition": "ARIInfectionType:Unknown&OtherARIServiceOrStaff:Staff", "path": "/staff-ari-other" }, { - "path": "/severity-of-illness" + "path": "/staff-ari-confirmed" + } + ] + }, + { + "path": "/both-ari-adenovirus", + "title": "Number of adenovirus cases", + "sectionForEndSummaryPages": "InfectionsInYourSetting", + "disableSingleComponentAsHeading": true, + "components": [ + { + "name": "ServiceUsersAdenovirus", + "type": "NumberField", + "title": "How many service users have tested positive for adenovirus?", + "hint": "Include those who are currently in hospital or on visits outYour responses will be shared with your local health protection teams. They will use your information to help you manage your situation.
By submitting this report you confirm that the details are correct to the best of your knowledge. You confirm that you have not included any personally identifiable information for service users or staff, for example names or dates of birth.
Your responses will be shared with your local UKHSA health protection team, local authority, local community infection prevention control team and the NHS. They will use your information to help you manage your situation.
By submitting this report you confirm that the details are correct to the best of your knowledge. You confirm that you have not included any personally identifiable information for service users, for example names or dates of birth.
From: UK Health Security Agency
Applies to England
You can use this service if you provide adult social care. This includes a care home, supported living or extra care.
\nUse this service to report:
\nARIs include COVID-19, flu, respiratory syncytial virus (RSV), and other respiratory infections.
\nIt should take about 10 minutes to complete.
\nIf possible, test all service users with symptoms who are eligible for COVID-19 treatments using a COVID-19 rapid lateral flow test. Staff with symptoms who are eligible for COVID-19 treatments should test themselves at home.
\nIf you cannot test people, do not wait. Report as soon as possible.
\nYou'll need to know the:
\nYou’ll need to give your email address to access this service.
\nStart now\nDo not use this online service to give an update on an outbreak that you have already reported. If you need to give an update, contact your local UKHSA health protection team or your community infection control team.
\nYou only need to report 2 or more ARI cases if they could be linked by spread in your setting. If the infection could not have been spread in your setting, you should not report it as an outbreak. If in doubt, report as an outbreak.
\nYour local UKHSA health protection team, or the community infection control team, will use your information to assess your outbreak. They will help you manage the outbreak and prevent further spread.
\nIf you need help using the service or have any other questions, contact your local UKHSA health protection team.
\nIf you need urgent medical advice, you should call NHS 111 or visit 111.nhs.uk. For life-threatening emergencies, call 999.
" + "content": "From: UK Health Security Agency
Applies to England
You can use this service if you provide adult social care. This includes a care home, supported living or extra care.
\nUse this service to report:
\nARIs include COVID-19, flu, respiratory syncytial virus (RSV), and other respiratory infections.
\nIt should take about 10 minutes to complete.
\nIf possible, test all service users with symptoms who are eligible for COVID-19 treatments using a COVID-19 rapid lateral flow test. Staff with symptoms who are eligible for COVID-19 treatments should test themselves at home.
\nIf you cannot test people, do not wait. Report as soon as possible.
\nYou'll need to know the:
\nYou’ll need to give your email address to access this service.
\nStart now\nDo not use this online service to give an update on an outbreak that you have already reported. If you need to give an update, contact your local UKHSA health protection team or your community infection control team.
\nYou only need to report 2 or more ARI cases if they could be linked by spread in your setting. If the infection could not have been spread in your setting, you should not report it as an outbreak. If in doubt, report as an outbreak.
\nYour local UKHSA health protection team, or the community infection control team, will use your information to assess your outbreak. They will help you manage the outbreak and prevent further spread.
\nIf you need help using the service or have any other questions, contact your local UKHSA health protection team.
\nIf you need urgent medical advice, you should call NHS 111 or visit 111.nhs.uk. For life-threatening emergencies, call 999.
" } ], "sidebarContent": { @@ -31,12 +31,77 @@ }, "controller": "MultiStartPageController", "showContinueButton": false, + "next": [ + { + "path": "/hpt-region" + } + ] + }, + { + "path": "/hpt-region", + "title": "Where is your adult social care setting?", + "sectionForEndSummaryPages": "SettingDetails", + "unauthenticated": true, + "components": [ + { + "name": "IntroPara", + "type": "Para", + "content": "This service is only available in some regions of England." + }, + { + "name": "HPT", + "options": { + "summaryTitle": "Local UKHSA health protection team", + "exposeToContext": true, + "customValidationMessages": { + "any.required": "Select your local UKHSA health protection team" + } + }, + "type": "RadiosField", + "nameHasError": false, + "title": "Which acute respiratory infection do you have a positive test result for? ", + "list": "HPTs", + "values": { + "type": "listRef" + } + }, + { + "name": "HPTLink", + "options": {}, + "type": "Para", + "content": "\n Use your postcode to find your local health protection team (opens in a new tab)\n", + "schema": {} + } + ], + "next": [ + { "path": "/magic-link-redirect", "condition": "HPTRegionActive" }, + { + "path": "/service-not-available" + } + ] + }, + { + "path": "/magic-link-redirect", + "unauthenticated": true, + "controller": "MagicLinkRedirectController", "next": [ { "path": "/setting" } ] }, + { + "path": "/service-not-available", + "unauthenticated": true, + "title": "This service is not available in the {{ HPT }} region", + "components": [ + { + "name": "ServiceNotAvailableContent", + "type": "Para", + "content": "Phone your local UKHSA health protection team to report:Click the link in the email to continue to report an outbreak.
Check your spam or junk folder.
If you’ve not received the email in 5 minutes, you can resubmit the email.
Click the link in the email to continue to report an outbreak.
Check your spam or junk folder.
If you’ve not received the email in 5 minutes, you can resubmit the email.
We need to email you a secure link to the service.
+ +The link expires after 20 minutes.
+ +By continuing, you agree to our privacy notice.
+ + + {% if minutesRemaining %} +We've sent an email to {{ email }}.
+ +Click the link in the email to continue to report an outbreak.
+ +Check your spam or junk folder.
+ +If you've not received the email in {{ retryTimeoutSeconds/60 }} minutes, you can resubmit the email.
+ + {% if minutesRemaining %} ++ This accessibility statement applies to the Report an Outbreak website https://forms.ukhsa.gov.uk/ReportAnOutbreak (opens in new tab). + + This website is run by UK Health Security Agency (UKHSA). We want as many people as possible to be able to use this website. For example, that means you should be able to: +
++
+ We’ve also made the website text as simple as possible to understand. + + AbilityNet (opens in new tab) has advice on making your device easier to use if you have a disability. +
++ We know some parts of this website are not fully accessible: + +
+ If you find any problems not listed on this page or believe we're not meeting accessibility requirements, email ukhsa_techbp_product@ukhsa.gov.uk + + If you have difficulty using the website to report an outbreak, you should phone your local UKHSA health protection team (opens in new tab). +
++ + The Equality and Human Rights Commission (EHRC) is responsible for enforcing the Public Sector Bodies (Websites and Mobile Applications) (No. 2) Accessibility Regulations 2018 (the ‘accessibility regulations’). If you’re not happy with how we respond to your complaint, contact the Equality Advisory and Support Service (EASS) (opens in new tab). +
++ UK Health Security Agency (UKHSA) is committed to making its website accessible, in accordance with the Public Sector Bodies (Websites and Mobile Applications) (No. 2) Accessibility Regulations 2018. +
++ This website is partially compliant with the Content Accessibility Guidelines version 2.2 (opens in new tab) AA standard, due to the non-compliances and exemptions listed below +
++ The content listed below is non-accessible for the following reasons. +
+
+ Some page headers and subtitles are incorrectly tagged or do not correspond to their associated content. This fails WCAG success criterion 2.4.6 (headings and labels).
+ There is no user interface that allows the keyboard focus indicator to be visible. This fails WCAG success criterion 2.4.7 (focus visible).
+ External links do not signal that they will open in a new tab, so people using a screen reader do not know that the page content is changing. This fails WCAG success criterion 4.1.3 (status changes)
+
+ We plan to address these issues soon.
+
+ The accessibility regulations do not require us to fix PDFs or other documents delivered by email. We plan to meet accessibility standards with all new PDFs or Word documents we will share. +
++ We have been testing our website with users with a variety of accessibility needs. We intend to fix the non-accessible content listed above. We keep testing our website to understand where we are non-compliant with accessibility standards. Any non-compliant components will be raised in our roadmap and improved in the coming months. +
+
+ This statement was prepared in October 2023. It was last reviewed in April 2025.
+ This website was last tested in March 2025 against the WCAG 2.2 AA standard.
+ The test was carried out by UK Health Security Agency. The most viewed pages were tested using automated testing tools by our website team. A further audit of the website was carried out to the WCAG 2.2 AA standard.
+
Cookies are files saved on your phone, tablet or computer when you visit a website.
+We use cookies to remember information you've entered when applying to prove your eligibility.
+ +When you use this service, we’ll set a cookie to remember your progress through the forms. These cookies do not store your personal data and are deleted once you’ve completed the transaction.
+Name | +Purpose | +Expires | +
---|---|---|
cookies_policy | +Saves your cookie consent settings | +When you close your browser | +
session | +Set to remember information you’ve entered into a form | +When you close your browser | +
crumb | +Helps us to prevent cross site scripting attacks | +When you close your browser | +
auth_token | +Set to keep you authenticated on the service | +When you close your browser | +
magicLinkRetry | +Set to aid initial authentication | +When you close your browser | +
We use Google Analytics to measure how you use the website so we can improve it based on user needs. We do not allow Google to use or share the data about how you use this site.
+Google Analytics sets cookies that store anonymised information about:
+Name | +Purpose | +Expires | +
---|---|---|
_ga | +Used to distinguish users | +2 years | +
_ga_[id] | +used to persist session state | +2 years | +
We use Matomo Analytics software to collect non-personally-identifying information of the sort that web browsers and servers typically make available, such as the browser type, language preference, referring site, and the date and time of each visitor request.
+We do this to better understand how applicants for overseas loans use the website. From time to time, the Foreign and Commonwealth Office may release non-personally-identifying information in the aggregate, eg, by publishing a report on trends in the usage of its website.
+We don't use any cookies to do this.
+ {% endif %} + {% if gtmId1 or gtmId2 %} + {{ govukButton({ attributes: { id: "submit" }, text: "Save changes" }) }} +In order to ensure the data you've inputted into the system is protected, please re-enter the form where you left off.
+ On 1 October 2021, the UK Health Security Agency (UKHSA) came into being. An executive agency of the Department of Health and Social Care (DHSC), UKHSA combines many of the health protection activities previously undertaken by Public Health England (PHE), together with all of the activities of the NHS Test and Trace Programme and the Joint Biosecurity Centre (JBC).
+
+ The processing activities previously undertaken by these organisations and their associated data processors have not changed with the establishment of UKHSA. Individual rights are not affected by this change.
+
+ We are responsible for planning, preventing and responding to external health threats, and providing intellectual, scientific and operational leadership at national and local level, as well as internationally. UKHSA will ensure the nation can respond quickly and at greater scale to deal with pandemics and future threats.
+
+ We collect and use personal information to fulfil our remit from the government.
+
+ UKHSA’s responsibilities include providing the Report an outbreak service. Read about UKHSA’s responsibilities in the UKHSA strategic plan 2023 to 2026 (opens in new tab).
+
+ The 'Report an outbreak' service enables Adult Social Care (ASC) providers to report outbreaks of acute respiratory infection (ARI) like flu or COVID-19. It automates the outbreak risk assessment process and provides immediate relevant outbreak management advice to the setting via email.
+
+ This privacy notice explains what personal information we collect, use and may share for Report an outbreak. It explains what your rights are if we hold your personal information, and how you can find out more or raise a concern.
+ DHSC is the data controller for the personal information we collect, store and use to fulfil our remit.
+
+ During an outbreak, the local health protection team needs to collect personal information so they can quickly provide the care setting with relevant outbreak management advice.
+
+ The personal information we collect and use includes the reporter’s (and an optional additional contact person’s):
+
+
+ This personal information comes from the person in the ASC setting that reports the outbreak. +
+ +
+ We triage and interpret outbreak reports to prioritise and minimise the impact of outbreaks.
+
+ We use your information to contact you to provide advice and support to help you manage your outbreak.
+
+ We work with local authority health protection teams to make sure the local advice and support you receive is coordinated.
+
+ The personal information used by Report an outbreak is protected in a number of ways.
+
+ It is stored on computer systems that have been tested to make sure they are secure and which are kept up to date to protect them from viruses and hacking. Where we share your personal information with other organisations, we only ever do so using secure computer systems or encrypted email.
+
+ Your information used by us can only be seen by staff who have been specifically trained to protect your privacy. Strong controls are in place to make sure all these staff can only see the minimum amount of personal information they need to do their job.
+
+ Whenever possible, we only use your information in a form that does not directly identify you.
+
+ No information that could identify individual people is ever published by UKHSA.
+
+ All personal information used by Report an Outbreak is held in the UK only. +
++ We may share your personal information with other organisations to support the service. If we do share your personal information, we only do so where the law allows and we only share the minimum necessary amount of information. +
++ Local authorities and mayoral and combined local authorities have responsibilities for protecting the health of their residents. We share information from Report an outbreak with your local authority to enable a coordinated local outbreak management response. You can find privacy information about the data your local authority collects and uses to prevent and control the spread of acute respiratory infections on its website. +
+
+ We will only keep your personal information for as long as we need it to protect public health or as otherwise required by law.
+
+ Most of the time, we will keep your information in accordance with the time periods specified in the Records Management Code of Practice for Health and Social Care 2021 (opens in new tab). For example, the Code sets out an 8-year retention period for general medical records.
+
+ As one of our purposes for collecting personal information is to recognise trends, we may need to keep your information for longer.
+
+ The personal information used by Report an outbreak is kept for 20 years.
+
+ The information needs to be kept for this long so we can monitor outbreak reporting and control measures over a sufficient time period.
+
+ Under data protection law, you have a number of rights over your personal information. You have the right to: +
++
+ You can exercise any of these rights by contacting UKHSA at: +
++ You will be asked to provide proof of your identity so that we can be sure we only provide you with your information. +
+ +
+ The law on protecting personal information, known as the UK General Data Protection Regulation (UK GDPR) and the Data Protection Act 2018 (DPA), allows UKHSA to use the personal information collected by Report an outbreak.
+
+ The sections of the UK GDPR and the DPA that apply where we use personal information for Report an outbreak are:
+
+
+ If you would like to find out more about Report an outbreak, you can contact us at enquiries@ukhsa.gov.uk.
+
+ If you have any concerns about how personal information is used and protected by UKHSA, you can contact the Department of Health and Social Care’s Data Protection Officer at data_protection@dhsc.gov.uk or by writing to:
+
+ You also have the right to contact the Information Commissioner’s Office (opens in new tab) if you have any concerns about how Public Health England uses and protects any personal information it holds about you. You can do so by calling the ICO’s helpline on 0303 123 1113, visiting the ICO’s website at ico.org.uk (opens in new tab) or by writing to: +
+
+ The personal information we collect and use may change so we may need to revise this notice. If we do, the publication date will change.
+
+ Published April 2025.
+
+ For more information, see the UKHSA privacy notice (opens in new tab)
+
UK Health Security Agency (UKHSA) is committed to making its website accessible, in accordance with the Public Sector Bodies (Websites and Mobile Applications) (No. 2) Accessibility Regulations 2018.
-This website is partially compliant with the Content Accessibility Guidelines version 2.2 (opens in new tab) AA standard, due to the non-compliances and exemptions listed below
-The content listed below is non-accessible for the following reasons.
-
Some page headers and subtitles are incorrectly tagged or do not correspond to their associated content. This fails WCAG success criterion 2.4.6 (headings and labels).
There is no user interface that allows the keyboard focus indicator to be visible. This fails WCAG success criterion 2.4.7 (focus visible).
@@ -68,10 +68,9 @@
- The accessibility regulations do not require us to fix PDFs or other documents delivered by email. We plan to meet accessibility standards with all new PDFs or Word documents we will share. + PDFs and other documents - The accessibility regulations do not require us to fix PDFs or other documents delivered by email. We plan to meet accessibility standards with all new PDFs or Word documents we will share.
diff --git a/runner/src/server/views/ReportAnOutbreak/privacy.html b/runner/src/server/views/ReportAnOutbreak/privacy.html index 269c0a681f..f192186e95 100644 --- a/runner/src/server/views/ReportAnOutbreak/privacy.html +++ b/runner/src/server/views/ReportAnOutbreak/privacy.html @@ -77,7 +77,7 @@
We may share your personal information with other organisations to support the service. If we do share your personal information, we only do so where the law allows and we only share the minimum necessary amount of information.
-Local authorities and mayoral and combined local authorities have responsibilities for protecting the health of their residents. We share information from Report an outbreak with your local authority to enable a coordinated local outbreak management response. You can find privacy information about the data your local authority collects and uses to prevent and control the spread of acute respiratory infections on its website.
From 1b82e1d61ee4287e8efa03b8efa20f296a43144d Mon Sep 17 00:00:00 2001 From: Connor Avery <55276424+connoravo@users.noreply.github.com> Date: Fri, 25 Apr 2025 10:15:38 +0100 Subject: [PATCH 237/403] CAR-1671 Accessibility help page styling adjustments (#357) * CAR-1671 Further styling adjustments Signed-off-by: Connor Avery <55276424+connoravo@users.noreply.github.com> --------- Signed-off-by: Connor Avery <55276424+connoravo@users.noreply.github.com> --- .../ReportAnOutbreak/accessibility-statement.html | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/runner/src/server/views/ReportAnOutbreak/accessibility-statement.html b/runner/src/server/views/ReportAnOutbreak/accessibility-statement.html index 5f8bcfcec2..e2e4077d30 100644 --- a/runner/src/server/views/ReportAnOutbreak/accessibility-statement.html +++ b/runner/src/server/views/ReportAnOutbreak/accessibility-statement.html @@ -12,7 +12,7 @@
This accessibility statement applies to the Report an Outbreak website https://forms.ukhsa.gov.uk/ReportAnOutbreak (opens in new tab).
-
+
This website is run by UK Health Security Agency (UKHSA). We want as many people as possible to be able to use this website. For example, that means you should be able to:
@@ -25,7 +25,7 @@
We’ve also made the website text as simple as possible to understand.
-
+
AbilityNet (opens in new tab) has advice on making your device easier to use if you have a disability.
If you find any problems not listed on this page or believe we're not meeting accessibility requirements, email ukhsa_techbp_product@ukhsa.gov.uk
-
+
+
If you have difficulty using the website to report an outbreak, you should phone your local UKHSA health protection team (opens in new tab).
- This website is partially compliant with the Content Accessibility Guidelines version 2.2 (opens in new tab) AA standard, due to the non-compliances and exemptions listed below + This website is partially compliant with the Web Content Accessibility Guidelines version 2.2 (opens in new tab) AA standard, due to the non-compliances and exemptions listed below
@@ -63,6 +65,7 @@
Some page headers and subtitles are incorrectly tagged or do not correspond to their associated content. This fails WCAG success criterion 2.4.6 (headings and labels).
+
There is no user interface that allows the keyboard focus indicator to be visible. This fails WCAG success criterion 2.4.7 (focus visible).
External links do not signal that they will open in a new tab, so people using a screen reader do not know that the page content is changing. This fails WCAG success criterion 4.1.3 (status changes)
From b06bd2c6c9a332773491216325e2377c7b1ab6e8 Mon Sep 17 00:00:00 2001
From: Connor Avery <55276424+connoravo@users.noreply.github.com>
Date: Fri, 25 Apr 2025 10:52:03 +0100
Subject: [PATCH 238/403] Disallow 04 and 06 numbers in telephone validation
regex (#359)
* CAR-1820 Adjust telephone regex to not allow 04 or 06 numbers
Signed-off-by: Connor Avery <55276424+connoravo@users.noreply.github.com>
---------
Signed-off-by: Connor Avery <55276424+connoravo@users.noreply.github.com>
---
.../server/plugins/engine/components/TelephoneNumberField.ts | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/runner/src/server/plugins/engine/components/TelephoneNumberField.ts b/runner/src/server/plugins/engine/components/TelephoneNumberField.ts
index feb872c19a..46f1c3d7a0 100644
--- a/runner/src/server/plugins/engine/components/TelephoneNumberField.ts
+++ b/runner/src/server/plugins/engine/components/TelephoneNumberField.ts
@@ -7,8 +7,7 @@ import { FormData, FormSubmissionErrors } from "../types";
import joi, { Schema } from "joi";
const TELEPHONE_REGEX =
- "^(((\\+44\\s?\\d{4}|\\(?0\\d{4}\\)?)\\s?\\d{3}\\s?\\d{3})|((\\+44\\s?\\d{3}|\\(?0\\d{3}\\)?)\\s?\\d{3}\\s?\\d{4})|((\\+44\\s?\\d{2}|\\(?0\\d{2}\\)?)\\s?\\d{4}\\s?\\d{4}))(\\s?#(\\d{4}|\\d{3}))?$";
-
+ "^(((+44s?(?!4|6)d{4}|(?0(?!4|6)d{4})?)s?d{3}s?d{3})|((+44s?(?!4|6)d{3}|(?0(?!4|6)d{3})?)s?d{3}s?d{4})|((+44s?(?!4|6)d{2}|(?0(?!4|6)d{2})?)s?d{4}s?d{4}))(s?#(d{4}|d{3}))?$";
export class TelephoneNumberField extends FormComponent {
constructor(def: TelephoneNumberFieldComponent, model: FormModel) {
super(def, model);
From 06f2cf85fbbdfeb598d76747694249db27b03d6e Mon Sep 17 00:00:00 2001
From: calum-ukhsa About UKHSA
The 'Report an outbreak' service enables Adult Social Care (ASC) providers to report outbreaks of acute respiratory infection (ARI) like flu or COVID-19. It automates the outbreak risk assessment process and provides immediate relevant outbreak management advice to the setting via email.
This privacy notice explains what personal information we collect, use and may share for Report an outbreak. It explains what your rights are if we hold your personal information, and how you can find out more or raise a concern.
+
DHSC is the data controller for the personal information we collect, store and use to fulfil our remit.
The law on protecting personal information, known as the UK General Data Protection Regulation (UK GDPR) and the Data Protection Act 2018 (DPA), allows UKHSA to use the personal information collected by Report an outbreak.
-
+
The sections of the UK GDPR and the DPA that apply where we use personal information for Report an outbreak are:
From 63869a789e2399afea1605f6fcfd8405bf2252b6 Mon Sep 17 00:00:00 2001
From: calum-ukhsa Click the link in the email to continue to report an outbreak. Check your spam or junk folder. Click the link in the email to continue to report an outbreak. Check your spam or junk folder. {{ component.model.content | safe }} We need to email you a secure link to the service. The link expires after 20 minutes. By continuing, you agree to our privacy notice. We've sent an email to {{ email }}. Click the link in the email to continue to report an outbreak. Check your spam or junk folder. If you've not received the email in {{ retryTimeoutSeconds/60 }} minutes, you can resubmit the email. A literature search is a detailed, comprehensive and systematic search of the literature (published and unpublished) from a variety of quality sources about specific topics or conditions. The search yields a set of results on the topic in question – usually a list of journal articles and reports, each containing a summary (known as an abstract). Reading the results enables you to get an overview of what is known about the topic. This is often referred to as the ‘evidence base’ and is an integral part of the methodology for any UKHSA project. The main types of evidence synthesis products are systematic reviews, rapid reviews, mapping reviews, scoping reviews and umbrella reviews. They all follow explicit, systematic methods to collate and synthesise findings of studies that address a clear question. Systematic reviews are the gold standard in evidence synthesis. However, they are time-consuming and resource-intensive. Rapid systematic methodologies use modified systematic review methods to accelerate the review process, and can be applied to all the types of reviews listed here. Systematic review Scoping review Mapping review Umbrella review
"
+ },
{
"name": "StaffCovid19Vaccination",
"options": {
From 8a797ab73604b2c493df0a23fba2bf197d035e1f Mon Sep 17 00:00:00 2001
From: emilyjevans <30391244+emilyjevans@users.noreply.github.com>
Date: Wed, 30 Apr 2025 17:14:08 +0100
Subject: [PATCH 269/403] CAR-1463 Magic link defects (#370)
---
model/src/components/types.ts | 14 ++++-
runner/src/server/forms/magic-link.json | 29 +++++++++-
.../engine/components/ContentWithState.ts | 55 +++++++++++++++++++
.../server/plugins/engine/components/index.ts | 1 +
.../MagicLinkFirstSubmitPageController.ts | 4 +-
.../MagicLinkSecondSubmitPageController.ts | 4 +-
.../MagicLinkSubmissionPageController.ts | 43 +++++++++------
.../views/components/contentwithstate.html | 3 +
.../server/views/email-time-remaining.html | 46 ----------------
.../views/magic-link-time-remaining.html | 44 ---------------
10 files changed, 128 insertions(+), 115 deletions(-)
create mode 100644 runner/src/server/plugins/engine/components/ContentWithState.ts
create mode 100644 runner/src/server/plugins/engine/views/components/contentwithstate.html
delete mode 100644 runner/src/server/views/email-time-remaining.html
delete mode 100644 runner/src/server/views/magic-link-time-remaining.html
diff --git a/model/src/components/types.ts b/model/src/components/types.ts
index e671fd3f03..ce0ca3807f 100644
--- a/model/src/components/types.ts
+++ b/model/src/components/types.ts
@@ -24,6 +24,7 @@ export enum ComponentTypeEnum {
FlashCard = "FlashCard",
List = "List",
ContextComponent = "ContextComponent",
+ ContentWithState = "ContentWithState",
}
export type ComponentType =
@@ -52,7 +53,8 @@ export type ComponentType =
| "FlashCard"
| "List"
| "WebsiteField"
- | "ContextComponent";
+ | "ContextComponent"
+ | "ContentWithState";
export type ComponentSubType = "field" | "content";
@@ -278,6 +280,10 @@ export interface ParaComponent extends ContentFieldBase {
type: "Para";
}
+export interface ContentWithStateComponent extends ContentFieldBase {
+ type: "ContentWithState";
+}
+
export interface DetailsComponent extends ContentFieldBase {
type: "Details";
}
@@ -352,7 +358,8 @@ export type ComponentDef =
| UkAddressFieldComponent
| YesNoFieldComponent
| WebsiteFieldComponent
- | ContextComponent;
+ | ContextComponent
+ | ContentWithStateComponent;
// Components that render inputs.
export type InputFieldsComponentsDef =
@@ -378,7 +385,8 @@ export type ContentComponentsDef =
| HtmlComponent
| InsetTextComponent
| ListComponent
- | FlashCardComponent;
+ | FlashCardComponent
+ | ContentWithStateComponent;
// Components that render Lists
export type ListComponentsDef =
diff --git a/runner/src/server/forms/magic-link.json b/runner/src/server/forms/magic-link.json
index cf971e68d8..a500547030 100644
--- a/runner/src/server/forms/magic-link.json
+++ b/runner/src/server/forms/magic-link.json
@@ -22,7 +22,7 @@
"name": "EmailIntro",
"options": {},
"type": "Para",
- "content": "We need to email you a secure link to the service.
The link expires after 20 minutes.
",
+ "content": "We need to email you a secure link to the service.
The link expires after 20 minutes.
If you're returning to a report that you started in the last 3 days, use the same email address.
",
"schema": {}
},
{
@@ -37,6 +37,15 @@
}
}
},
+ {
+ "name": "alert",
+ "type": "ContentWithState",
+ "options": {
+ "exposeToContext": true,
+ "stateVariable": "minutesRemaining"
+ },
+ "content": "{% if minutesRemaining %}
If you've not received an email
If you’ve not received the email in 5 minutes, you can resubmit the email.
If you've not received an email
If you’ve not received the email, you can resubmit the email in 5 minutes.What is your email address?
-
-
- Check your email
- If you've not received an email
-
-
\n\nSystematic review: the provision of complex literature searches to help in the production of a systematic review, with associated guidance on the stages of conducting a review. The time taken to deliver the search and advice will be dependent on the type of review.\n
\n\nEvidence briefing: outlines the main messages taken from evidence that has been identified and selected using systematic methods and strict inclusion criteria. It usually takes at least 3 weeks to produce an Evidence Briefing and they are subject to certain eligibility criteria\n
\n\nCurrent awareness alerts: support to access a range of current awareness products to be kept regularly up to date with the latest research in your field of work.\n
\n\nGeneral enquiry: select this option for support with any other queries.",
+ "schema": {}
+ },
+ {
+ "name": "tUKBgj",
+ "options": { "exposeToContext": false },
+ "type": "RadiosField",
+ "title": "Which option best matches your enquiry?",
+ "list": "eKfmVf",
+ "values": { "type": "listRef" },
+ "schema": {}
+ }
+ ],
+ "next": [
+ {
+ "path": "/about-your-current-awareness-alerts-query",
+ "condition": "OchNDo"
+ },
+ { "path": "/how-can-we-help", "condition": "mZdZMC" },
+ { "path": "/evidence-briefing-information", "condition": "eiTtgM" },
+ { "path": "/about-your-enquiry", "condition": "XvwdpX" }
+ ]
+ },
+ {
+ "path": "/additional-information",
+ "title": "Additional information",
+ "components": [
+ {
+ "name": "YIrnKT",
+ "options": { "required": false },
+ "type": "MultilineTextField",
+ "title": "If you need to tell us more, please do so in this text box",
+ "schema": {}
+ },
+ {
+ "name": "KefoiX",
+ "options": {},
+ "type": "TextField",
+ "hint": "We will use this title as the subject line if we need to contact you by email",
+ "title": "Enquiry title",
+ "schema": {}
+ },
+ {
+ "name": "aazUpS",
+ "options": { "required": false },
+ "type": "FileUploadField",
+ "title": "Please attach any supporting information, for example a protocol or list of references.",
+ "schema": {},
+ "hint": ""
+ }
+ ],
+ "next": [
+ { "path": "/about-you" },
+ { "path": "/about-you-GXSFdb", "condition": "EgJCgx" },
+ { "path": "/about-you-dHykmu", "condition": "IbKdRK" }
+ ]
+ },
+ {
+ "path": "/check-your-details-before-submitting-your-enquiry",
+ "title": "Check your details before submitting your enquiry",
+ "components": [],
+ "next": [],
+ "controller": "./pages/summary.js"
+ },
+ {
+ "path": "/about-your-current-awareness-alerts-query",
+ "title": "About your current awareness alerts query",
+ "components": [
+ {
+ "name": "voCgKn",
+ "options": {},
+ "type": "InsetText",
+ "content": "Sign up to comprehensive alerts highlighting the latest research from peer-reviewed publications about important public health topics. Select the topics you want to sign up for below."
+ },
+ {
+ "name": "Nuedpc",
+ "options": {},
+ "type": "CheckboxesField",
+ "title": "Which alerts do you want to subscribe to?",
+ "list": "gTPicc"
+ }
+ ],
+ "next": [
+ { "path": "/about-you" },
+ { "path": "/about-you-GXSFdb", "condition": "EgJCgx" },
+ { "path": "/about-you-dHykmu", "condition": "IbKdRK" }
+ ]
+ },
+ {
+ "path": "/about-your-enquiry",
+ "title": "About your enquiry",
+ "components": [
+ {
+ "name": "yYKOmJ",
+ "options": {},
+ "type": "Para",
+ "content": "Please complete as many fields as you can, otherwise the KLS team will need to contact you for more information ",
+ "schema": {}
+ },
+ {
+ "name": "LuoKqU",
+ "options": {},
+ "type": "MultilineTextField",
+ "title": "What is your focussed question?",
+ "schema": {}
+ },
+ {
+ "name": "bhBuDQ",
+ "options": { "required": true },
+ "type": "MultilineTextField",
+ "title": "Explain any relevant concepts",
+ "schema": {},
+ "hint": "Consider the questions: Who? What? Where? Why? When? How?"
+ },
+ {
+ "name": "uBPfQS",
+ "options": { "required": false },
+ "type": "MultilineTextField",
+ "title": "Give an example of a paper that should be included in the output",
+ "schema": {},
+ "hint": "Enter a relevant publication or key author you would expect to be included"
+ },
+ {
+ "name": "VbhnXH",
+ "options": {},
+ "type": "RadiosField",
+ "title": "Publication date range",
+ "list": "OGYVAD",
+ "hint": "Indicate the time period from which evidence should be sourced",
+ "values": { "type": "listRef" },
+ "schema": {}
+ },
+ {
+ "name": "MArgxL",
+ "options": { "required": false },
+ "type": "TextField",
+ "title": "If you selected 'other' above, please give details",
+ "schema": {}
+ },
+ {
+ "name": "etcpxo",
+ "options": {},
+ "type": "TextField",
+ "title": "UK only or international?",
+ "hint": "Help the KLS team understand the geographic scope of your work by entering the relevant country/countries",
+ "schema": {}
+ },
+ {
+ "name": "hQXIgL",
+ "options": { "maxDaysInPast": "0" },
+ "type": "DatePartsField",
+ "title": "Desired completion date",
+ "hint": "The KLS team will be in touch to discuss the feasibility of this date",
+ "schema": {}
+ },
+ {
+ "name": "RCdnGJ",
+ "options": { "required": false, "optionalText": true },
+ "type": "CheckboxesField",
+ "title": "Can we share the results with other public health professionals?",
+ "list": "IQAoJu"
+ },
+ {
+ "name": "oNDRUt",
+ "options": { "required": false, "optionalText": true },
+ "type": "CheckboxesField",
+ "title": "Can we share your contact details so other public health professionals can contact you with queries about the work you are doing?",
+ "list": "IQAoJu"
+ }
+ ],
+ "next": [
+ { "path": "/systematic-review-questions", "condition": "dCqSKz" },
+ { "path": "/literature-search-questions", "condition": "fNTYcH" },
+ { "path": "/evidence-briefing-questions", "condition": "eiTtgM" }
+ ]
+ },
+ {
+ "path": "/literature-search-questions",
+ "title": "Literature search questions",
+ "components": [
+ {
+ "name": "BPoIas",
+ "options": {},
+ "type": "Details",
+ "title": "What is a literature search?",
+ "content": "
\nSystematic reviews should have a clearly defined question and eligibility criteria. Study data is summarised using narrative text and tables; or sometimes as a meta-analysis, a statistical technique that provides an overall summary measure of effect.
\nScoping reviews are concerned with the ‘state of the evidence’. They are appropriate when exploring a topic to inform future research or policy development by clarifying key concepts or methods, using a broad review question. They usually have in-depth data extraction. Synthesis can include qualitative analysis, narrative synthesis, maps or a table.
\nMapping reviews are used to map out and categorise the literature. They are appropriate when information is required on where the evidence is, usually through a visual summary known as an evidence gap map, to inform research priorities. Study data is coded for use in the evidence gap map. Data extraction tends to be more limited than for a scoping review.
\nAn umbrella review or “review of reviews” identifies multiple systematic reviews on related research questions and analyses their results across agreed outcomes. Umbrella reviews normally address a broad scope. Meta-analysis may be performed in order to provide an overall summary measure of effect.
\n\nCurrent awareness alerts: support to access a range of current awareness products to be kept regularly up to date with the latest research in your field of work.\n
\n\nGeneral enquiry: select this option for support with any other queries.",
+ "schema": {}
+ },
+ {
+ "name": "VeQCVM",
+ "options": {},
+ "type": "RadiosField",
+ "list": "AUYYCW",
+ "title": "Which option best matches your enquiry?",
+ "values": { "type": "listRef" },
+ "schema": {}
+ }
+ ],
+ "next": [
+ { "path": "/how-can-we-help", "condition": "lsHzLP" },
+ {
+ "path": "/about-your-current-awareness-alerts-query",
+ "condition": "MQeZyE"
+ },
+ { "path": "/about-your-enquiry-RPOaaR" }
+ ]
+ },
+ {
+ "path": "/about-your-enquiry-RPOaaR",
+ "title": "About your enquiry",
+ "components": [
+ {
+ "name": "fXvmRh",
+ "options": {},
+ "type": "Para",
+ "content": "Please complete as many fields as you can, otherwise the KLS team will need to contact you for more information ",
+ "schema": {}
+ },
+ {
+ "name": "qvJHYP",
+ "options": {},
+ "type": "MultilineTextField",
+ "title": "What is your focussed question?",
+ "schema": {}
+ },
+ {
+ "name": "WYbcGt",
+ "options": {},
+ "type": "MultilineTextField",
+ "title": "Explain any relevant concepts",
+ "hint": "Consider the questions: Who? What? Where? Why? When? How?",
+ "schema": {}
+ },
+ {
+ "name": "Ercwfj",
+ "options": { "required": false },
+ "type": "MultilineTextField",
+ "title": "Give an example of a paper that should be included in the output",
+ "hint": "Enter a relevant publication or key author you would expect to be included",
+ "schema": {}
+ },
+ {
+ "name": "scPrBh",
+ "options": {},
+ "type": "RadiosField",
+ "hint": "Indicate the time period from which evidence should be sourced",
+ "title": "Publication date range",
+ "list": "OGYVAD",
+ "schema": {}
+ },
+ {
+ "name": "zVphJY",
+ "options": { "required": false },
+ "type": "TextField",
+ "title": "If you selected 'other' above, please give details",
+ "schema": {}
+ },
+ {
+ "name": "UjGoiE",
+ "options": {},
+ "type": "TextField",
+ "hint": "Help the KLS team understand the geographic scope of your work by entering the relevant country/countries",
+ "title": "UK only or international?",
+ "schema": {}
+ },
+ {
+ "name": "kgNqhg",
+ "options": { "maxDaysInFuture": "", "maxDaysInPast": "0" },
+ "type": "DatePartsField",
+ "hint": "The KLS team will be in touch to discuss the feasibility of this date",
+ "title": "Desired completion date",
+ "schema": {}
+ },
+ {
+ "name": "GxImes",
+ "options": { "required": false, "optionalText": true },
+ "type": "CheckboxesField",
+ "title": "Can we share the results with other public health professionals?",
+ "list": "IQAoJu"
+ },
+ {
+ "name": "DdsEuf",
+ "options": { "required": false, "optionalText": true },
+ "type": "CheckboxesField",
+ "title": "Can we share your contact details so other public health professionals can contact you with queries about the work you are doing?",
+ "list": "IQAoJu"
+ }
+ ],
+ "next": [{ "path": "/literature-search-questions" }]
+ },
+ {
+ "path": "/evidence-briefing-information",
+ "title": "Evidence briefing information",
+ "components": [
+ {
+ "name": "jojhvk",
+ "options": {},
+ "type": "Para",
+ "content": "Before proceeding with your request, please review the following criteria and expectations to ensure your request is suitable for an evidence briefing.",
+ "schema": {}
+ },
+ {
+ "name": "ADkeed",
+ "options": {},
+ "type": "Para",
+ "content": "To be eligible for an evidence briefing, the purpose of your request must fall into at least one of the following categories:",
+ "schema": {}
+ },
+ {
+ "name": "sLYgMF",
+ "options": {},
+ "type": "List",
+ "title": "EB purpose",
+ "list": "GNXXmY",
+ "schema": {}
+ },
+ {
+ "name": "BrQyCZ",
+ "options": {},
+ "type": "Para",
+ "content": "In addition, your request should have a clear, focused question that is feasible to address within the standard 3-week timeframe.",
+ "schema": {}
+ },
+ {
+ "name": "lhetvO",
+ "options": {},
+ "type": "Para",
+ "content": "Please note that if your request is too broad, outside the eligibility criteria, or time-sensitive, it may be more appropriate to conduct a literature search instead. ",
+ "schema": {}
+ }
+ ],
+ "next": [{ "path": "/about-your-enquiry" }]
+ },
+ {
+ "path": "/about-you-GXSFdb",
+ "title": "About you",
+ "components": [
+ {
+ "name": "nwLDox",
+ "options": {},
+ "type": "Para",
+ "content": "Please complete as many fields as you can so that the KLS team will be able to contact you about your enquiry."
+ },
+ {
+ "name": "dagbPo",
+ "options": {},
+ "type": "TextField",
+ "title": "Full name"
+ },
+ {
+ "name": "uksayz",
+ "options": { "required": true },
+ "type": "TextField",
+ "title": "Job title"
+ },
+ {
+ "name": "nmlFzr",
+ "options": {},
+ "type": "SelectField",
+ "hint": "Tell us which work group you belong to",
+ "title": "Group",
+ "list": "sYQQmN",
+ "values": { "type": "listRef" }
+ },
+ {
+ "name": "oUmeSI",
+ "options": {},
+ "type": "SelectField",
+ "hint": "Tell us which directorate you belong to",
+ "title": "Directorate",
+ "list": "pTYDbB"
+ },
+ {
+ "name": "EkwRix",
+ "options": {},
+ "type": "SelectField",
+ "hint": "Tell us your work location",
+ "title": "Location",
+ "list": "wrhJNi",
+ "values": { "type": "listRef" }
+ },
+ {
+ "name": "SPKrpE",
+ "options": {},
+ "type": "EmailAddressField",
+ "title": "Email address"
+ },
+ {
+ "name": "rqzRcc",
+ "options": { "required": false },
+ "type": "EmailAddressField",
+ "title": "Should anyone else be included in emails about this enquiry?"
+ }
+ ],
+ "next": [{ "path": "/check-your-details-before-submitting-your-enquiry" }]
+ },
+ {
+ "path": "/about-you-dHykmu",
+ "title": "About you",
+ "components": [
+ {
+ "name": "nBYObd",
+ "options": {},
+ "type": "TextField",
+ "title": "Full name"
+ },
+ {
+ "name": "CNbJUr",
+ "options": {},
+ "type": "TextField",
+ "title": "Job title"
+ },
+ {
+ "name": "PIjqqt",
+ "options": {},
+ "type": "EmailAddressField",
+ "title": "Email address"
+ },
+ {
+ "name": "YeDsms",
+ "options": { "required": false },
+ "type": "EmailAddressField",
+ "title": "Should anyone else be included in emails about this enquiry?"
+ },
+ {
+ "name": "oCVslj",
+ "options": {},
+ "type": "SelectField",
+ "title": "Location",
+ "list": "iTBoCy",
+ "values": { "type": "listRef" }
+ }
+ ],
+ "next": [{ "path": "/check-your-details-before-submitting-your-enquiry" }]
+ }
+ ],
+ "lists": [
+ {
+ "title": "Preferred contact method",
+ "name": "slVZMW",
+ "type": "string",
+ "items": [
+ { "text": "email", "value": "email" },
+ { "text": "telephone", "value": "telephone" }
+ ]
+ },
+ {
+ "title": "Group",
+ "name": "sYQQmN",
+ "type": "string",
+ "items": [
+ {
+ "description": "",
+ "text": "Chief Scientific Officer (CSO)",
+ "value": "CSO"
+ },
+ {
+ "description": "",
+ "text": "Chief Medical Advisor (CMA)",
+ "value": "CMA"
+ },
+ {
+ "description": "",
+ "text": "Chief Data Officer (CDO)",
+ "value": "CDO"
+ },
+ {
+ "description": "",
+ "text": "Chief Operating Officer (COO)",
+ "value": "COO"
+ }
+ ]
+ },
+ {
+ "title": "Directorate",
+ "name": "pTYDbB",
+ "type": "string",
+ "items": [
+ {
+ "description": "",
+ "text": "CSO: Public Health Microbiology",
+ "value": "CSO: Public Health Microbiology"
+ },
+ {
+ "description": "",
+ "text": "CSO: Radiation",
+ "value": "CSO: Radiation"
+ },
+ { "description": "", "text": "Chemicals", "value": "Chemicals" },
+ {
+ "value": "Climate and Environmental Hazards",
+ "description": "",
+ "text": "Climate and Environmental Hazards"
+ },
+ {
+ "value": "CSO: Scientific Facilities and Performance",
+ "description": "",
+ "text": "CSO: Scientific Facilities and Performance"
+ },
+ {
+ "value": "CSO: Science Strategy and Evidence",
+ "description": "",
+ "text": "CSO: Science Strategy and Evidence"
+ },
+ {
+ "value": "CMA: Emergency Preparedness",
+ "description": "",
+ "text": "CMA: Emergency Preparedness"
+ },
+ {
+ "value": "Resilience and Response (EPRR) and Response Operations",
+ "description": "",
+ "text": "Resilience and Response (EPRR) and Response Operations"
+ },
+ {
+ "description": "",
+ "text": "CMA: Epidemic and Emerging Infections",
+ "value": "CMA: Epidemic and Emerging Infections"
+ },
+ {
+ "value": "CMA: Global Health Protection",
+ "description": "",
+ "text": "CMA: Global Health Protection"
+ },
+ {
+ "description": "",
+ "value": "CMA: Health Equity and Clinical Governance",
+ "text": "CMA: Health Equity and Clinical Governance"
+ },
+ {
+ "value": "CMA: Health Protection in Regions",
+ "description": "",
+ "text": "CMA: Health Protection in Regions"
+ },
+ {
+ "value": "CMA: Public Health Programmes",
+ "description": "",
+ "text": "CMA: Public Health Programmes"
+ },
+ {
+ "value": "CDO: Analysis and Intelligence Assessment",
+ "description": "",
+ "text": "CDO: Analysis and Intelligence Assessment"
+ },
+ {
+ "value": "CDO: Data Protection",
+ "description": "",
+ "text": "CDO: Data Protection"
+ },
+ {
+ "value": "Security and Technology Services",
+ "description": "",
+ "text": "Security and Technology Services"
+ },
+ {
+ "value": "CDO: Digital and Data",
+ "description": "",
+ "text": "CDO: Digital and Data"
+ },
+ {
+ "value": "CDO: Digital and Technology Transition",
+ "description": "",
+ "text": "CDO: Digital and Technology Transition"
+ },
+ {
+ "value": "COO: Commercial, Vaccines and Countermeasures Supply",
+ "description": "",
+ "text": "COO: Commercial, Vaccines and Countermeasures Supply"
+ },
+ {
+ "value": "COO: Communications",
+ "description": "",
+ "text": "COO: Communications"
+ },
+ {
+ "value": "COO: Finance, Performance, Risk and Assurance",
+ "description": "",
+ "text": "COO: Finance, Performance, Risk and Assurance"
+ },
+ {
+ "value": "COO: People and Workplace",
+ "description": "",
+ "text": "COO: People and Workplace"
+ },
+ {
+ "value": "COO: Public Inquiry",
+ "description": "",
+ "text": "COO: Public Inquiry"
+ },
+ {
+ "value": "COO: Strategy and Policy",
+ "description": "",
+ "text": "COO: Strategy and Policy"
+ },
+ { "value": "COO: Transformation", "text": "COO: Transformation" }
+ ]
+ },
+ {
+ "title": "Location",
+ "name": "wrhJNi",
+ "type": "string",
+ "items": [
+ { "description": "", "text": "Chilton", "value": "Chilton" },
+ { "description": "", "text": "Colindale", "value": "Colindale" },
+ { "description": "", "text": "Porton", "value": "Porton" },
+ { "text": "Other", "value": "Other" }
+ ]
+ },
+ {
+ "title": "Enquiry type",
+ "name": "eKfmVf",
+ "type": "string",
+ "items": [
+ { "text": "Literature search", "value": "Literature search" },
+ { "text": "Systematic review", "value": "Systematic review" },
+ { "text": "Evidence briefing", "value": "Evidence briefing" },
+ {
+ "text": "Current awareness alerts",
+ "value": "Current awareness alerts"
+ },
+ {
+ "text": "General enquiry",
+ "value": "General",
+ "description": "Select this for all other enquiries"
+ }
+ ]
+ },
+ {
+ "title": "Preferred results format",
+ "name": "LgzPJy",
+ "type": "string",
+ "items": [
+ { "description": "", "text": "Endnote", "value": "Endnote" },
+ { "description": "", "text": "Word", "value": "Word" },
+ { "description": "", "text": "Excel", "value": "Excel" },
+ {
+ "description": "",
+ "text": "RIS (for reference management software)",
+ "value": "RIS"
+ }
+ ]
+ },
+ {
+ "title": "Priority or strategic objective",
+ "name": "RMetHZ",
+ "type": "string",
+ "items": [
+ {
+ "description": "",
+ "text": "Achieve more equitable outcomes",
+ "value": "Achieve more equitable outcomes"
+ },
+ {
+ "description": "",
+ "text": "Covid-19 response",
+ "value": "Covid-19 response"
+ },
+ {
+ "description": "",
+ "text": "Drive international efforts to strengthen global surveillance and systems",
+ "value": "Drive international efforts to strengthen global surveillance and systems"
+ },
+ {
+ "description": "",
+ "text": "Drive the development of countermeasures",
+ "value": "Drive the development of countermeasures"
+ },
+ {
+ "description": "",
+ "text": "Eliminate Hepatitis C as a public health threat",
+ "value": "Eliminate Hepatitis C as a public health threat"
+ },
+ {
+ "description": "",
+ "text": "Enhance the resilience and scalability of national and local public health systems",
+ "value": "Enhance the resilience and scalability of national and local public health systems"
+ },
+ {
+ "description": "",
+ "text": "Ensure robust response capacity and capability to respond to Chemical, Biological, Radiological and Nuclear (CBRN) incidents",
+ "value": "Ensure robust response capacity and capability to respond to Chemical, Biological, Radiological and Nuclear (CBRN) incidents"
+ },
+ {
+ "description": "",
+ "text": "Reduce the health harm from air pollution",
+ "value": "Reduce the health harm from air pollution"
+ },
+ {
+ "description": "",
+ "text": "Reduce the impact of Antimicrobial Resistance (AMR)",
+ "value": "Reduce the impact of Antimicrobial Resistance (AMR)"
+ },
+ {
+ "description": "",
+ "text": "Reduce vaccine preventable diseases",
+ "value": "Reduce vaccine preventable diseases"
+ },
+ {
+ "description": "",
+ "text": "Strengthen preparedness across UKHSA for all hazards to health",
+ "value": "Strengthen preparedness across UKHSA for all hazards to health"
+ },
+ {
+ "description": "",
+ "text": "Strengthen surveillance of health hazards",
+ "value": "Strengthen surveillance of health hazards"
+ },
+ {
+ "description": "",
+ "text": "Support communities and services to adapt to and respond to climate and environmental change health",
+ "value": "Support communities and services to adapt to and respond to climate and environmental change health"
+ },
+ {
+ "description": "If you select this item, please enter details below.",
+ "text": "OHID priority or objective",
+ "value": "OHID priority or objective - enter details"
+ },
+ {
+ "text": "NHSE Public Health priority or objective",
+ "value": "NHSE Public Health priority or objective",
+ "description": "If you select this item, please enter details below"
+ }
+ ]
+ },
+ {
+ "title": "Lit search type",
+ "name": "aGVTgz",
+ "type": "string",
+ "items": [
+ {
+ "description": "It usually takes the KLS team at least 1 working week to complete this work.",
+ "text": "Option 1. A list of relevant literature search results in either chronological or author order.",
+ "value": "Option 1. A list of relevant literature search results in either chronological or author order"
+ },
+ {
+ "description": "It usually takes the KLS team at least 2 working weeks to complete this request.",
+ "text": "Option 2. A list of the relevant literature search results, organised or annotated by theme or study type.",
+ "value": "Option 2. A list of the relevant literature search results, organised or annotated by theme or study type."
+ }
+ ]
+ },
+ {
+ "title": "Literature search results purpose",
+ "name": "PxpncX",
+ "type": "string",
+ "items": [
+ {
+ "description": "",
+ "text": "Collaborative project",
+ "value": "Collaborative project"
+ },
+ {
+ "description": "",
+ "text": "Evidence summary",
+ "value": "Evidence summary"
+ },
+ { "description": "", "text": "Guidelines", "value": "Guidelines" },
+ {
+ "description": "",
+ "text": "Keeping up to date",
+ "value": "Keeping up to date"
+ },
+ { "text": "Other", "value": "Other" },
+ {
+ "description": "",
+ "text": "Policy and strategy development",
+ "value": "Policy and strategy development"
+ },
+ {
+ "description": "",
+ "text": "Report writing",
+ "value": "Report writing"
+ },
+ {
+ "description": "",
+ "text": "Research and development",
+ "value": "Research and development"
+ },
+ {
+ "description": "",
+ "text": "Service development",
+ "value": "Service development"
+ }
+ ]
+ },
+ {
+ "title": "Type of systematic review",
+ "name": "cZlqVP",
+ "type": "string",
+ "items": [
+ {
+ "description": "",
+ "text": "Full systematic review",
+ "value": "Full systematic review"
+ },
+ {
+ "description": "",
+ "text": "Scoping review",
+ "value": "Scoping review"
+ },
+ {
+ "description": "",
+ "text": "Mapping review",
+ "value": "Mapping review"
+ },
+ { "text": "Umbrella review", "value": "Umbrella review" },
+ {
+ "description": "",
+ "text": "Unsure/to be confirmed",
+ "value": "Unsure/to be confirmed"
+ },
+ { "text": "Other", "value": "Other" }
+ ]
+ },
+ {
+ "title": "Yes, No, Unsure",
+ "name": "wYJotW",
+ "type": "string",
+ "items": [
+ { "text": "Yes", "value": "Yes" },
+ { "text": "No", "value": "No" },
+ { "text": "Unsure", "value": "Unsure" }
+ ]
+ },
+ {
+ "title": "Publication location",
+ "name": "Zappeq",
+ "type": "string",
+ "items": [
+ { "text": "Peer reviewed journal", "value": "Journal" },
+ { "description": "", "text": "GOV.UK", "value": "GOV.UK" },
+ {
+ "description": "",
+ "text": "Internal only",
+ "value": "Internal only"
+ },
+ { "text": "Other", "value": "Other" }
+ ]
+ },
+ {
+ "title": "Language",
+ "name": "rZyXKL",
+ "type": "string",
+ "items": [
+ { "text": "English language only", "value": "English language only" },
+ { "text": "English and other", "value": "English and other" },
+ { "text": "Other", "value": "Other" }
+ ]
+ },
+ {
+ "title": "Type of information requested",
+ "name": "bROvBS",
+ "type": "string",
+ "items": [
+ {
+ "description": "",
+ "text": "Direction/Guidance",
+ "value": "Direction/Guidance"
+ },
+ {
+ "description": "",
+ "text": "Secondary Evidence",
+ "value": "Secondary Evidence"
+ },
+ {
+ "description": "",
+ "text": "Primary Research",
+ "value": "Primary Research"
+ },
+ {
+ "description": "",
+ "text": "Ongoing Trials and Research",
+ "value": "Ongoing Trials and Research"
+ },
+ {
+ "description": "",
+ "text": "Implementation Support",
+ "value": "Implementation Support"
+ },
+ {
+ "text": "Information for the Public",
+ "value": "Information for the Public"
+ }
+ ]
+ },
+ {
+ "title": "Affiliation",
+ "name": "ULmwPo",
+ "type": "string",
+ "items": [
+ { "text": "UK Health Security Agency", "value": "UKHSA" },
+ {
+ "text": "Office for Health Improvement and Disparities",
+ "value": "OHID"
+ },
+ { "text": "NHS England Public Health", "value": "NHSE" },
+ { "text": "Local Authority Public Health", "value": "LAPH" }
+ ]
+ },
+ {
+ "title": "Reason for conducting review",
+ "name": "tOKEMX",
+ "type": "string",
+ "items": [
+ { "text": "Evidence gap", "description": "", "value": "Evidence gap" },
+ {
+ "description": "",
+ "text": "Updating previous evidence",
+ "value": "Updating previous evidence"
+ },
+ {
+ "description": "",
+ "text": "Personal interest",
+ "value": "Personal interest"
+ },
+ {
+ "description": "",
+ "text": "UKHSA priority topic",
+ "value": "UKHSA priority topic"
+ },
+ { "text": "Other", "value": "Other" }
+ ]
+ },
+ {
+ "title": "Publication date range",
+ "name": "OGYVAD",
+ "type": "string",
+ "items": [
+ { "text": "last 3 years", "value": "3 years" },
+ { "text": "last 5 years", "value": "5 years" },
+ { "text": "Not applicable", "value": "Not applicable" },
+ { "text": "Other", "value": "Other" }
+ ]
+ },
+ {
+ "title": "Evidence briefing criteria",
+ "name": "VPAkeH",
+ "type": "string",
+ "items": [
+ {
+ "description": "",
+ "text": "Strategy, policy or guideline development",
+ "value": "Strategy, policy or guideline development"
+ },
+ {
+ "description": "",
+ "text": "Immediate action to improve or implement services",
+ "value": "Immediate action to improve or implement services"
+ },
+ {
+ "description": "",
+ "text": "To contribute to an organisational priority or strategic objective",
+ "value": "To contribute to an organisational priority or strategic objective"
+ },
+ {
+ "description": "",
+ "text": "Incident response",
+ "value": "Incident response"
+ },
+ { "text": "Other", "value": "Other" }
+ ]
+ },
+ {
+ "title": "Enquiry type LAPH",
+ "name": "AUYYCW",
+ "type": "string",
+ "items": [
+ { "text": "Literature search", "value": "Literature search" },
+ {
+ "text": "Current awareness alerts",
+ "value": "Current awareness alerts"
+ },
+ {
+ "text": "General enquiry",
+ "value": "General",
+ "description": "Select this for all other enquiries"
+ }
+ ]
+ },
+ {
+ "title": "EB purpose list",
+ "name": "GNXXmY",
+ "type": "string",
+ "items": [
+ {
+ "text": "Strategy, policy, or guideline development",
+ "value": "Strategy, policy, or guideline development"
+ },
+ {
+ "text": "Immediate action to improve or implement services",
+ "value": "Immediate action to improve or implement services"
+ },
+ {
+ "text": "Contribution to an organisational priority or strategic objective",
+ "value": "Contribution to an organisational priority or strategic objective"
+ },
+ { "text": "An incident response", "value": "An incident response" }
+ ]
+ },
+ {
+ "title": "Location: LAPH",
+ "name": "iTBoCy",
+ "type": "string",
+ "items": [
+ { "description": "", "text": "North East", "value": "North East" },
+ { "description": "", "text": "North West", "value": "North West" },
+ { "text": "Yorkshire and Humber", "value": "Yorkshire and Humber" },
+ { "text": "East Midlands", "value": "East Midlands" },
+ { "text": "West Midlands", "value": "West Midlands" },
+ {
+ "description": "",
+ "text": "East of England",
+ "value": "East of England"
+ },
+ { "description": "", "text": "London", "value": "London" },
+ { "description": "", "text": "South East", "value": "South East" },
+ { "description": "", "text": "South West", "value": "South West" }
+ ]
+ },
+ {
+ "title": "Yes",
+ "name": "IQAoJu",
+ "type": "string",
+ "items": [{ "text": "Agree", "value": "Agree" }]
+ },
+ {
+ "title": "Current awareness alerts options",
+ "name": "gTPicc",
+ "type": "string",
+ "items": [
+ {
+ "text": "Adverse Weather and Health",
+ "value": "Adverse Weather and Health"
+ },
+ {
+ "text": "Antimicrobial Resistance",
+ "value": "Antimicrobial Resistance"
+ },
+ { "text": "COVID-19 Re-infection", "value": "COVID-19 Re-infection" },
+ {
+ "text": "Global Public Health Security",
+ "value": "Global Public Health Security"
+ },
+ { "text": "Healthy Ageing", "value": "Healthy Ageing" },
+ { "text": "Infection", "value": "Infection" },
+ { "text": "Long-COVID", "value": "Long-COVID" },
+ { "text": "Mental Health", "value": "Mental Health" },
+ { "text": "Musculoskeletal Health", "value": "Musculoskeletal Health" },
+ {
+ "text": "Nutrition, Diet & Obesity",
+ "value": "Nutrition, Diet & Obesity"
+ },
+ { "text": "Vector Borne Disease", "value": "Vector Borne Disease" }
+ ]
+ }
+ ],
+ "sections": [],
+ "conditions": [
+ {
+ "displayName": "General route",
+ "name": "mZdZMC",
+ "value": {
+ "name": "General route",
+ "conditions": [
+ {
+ "field": {
+ "name": "tUKBgj",
+ "type": "RadiosField",
+ "display": "Which option best matches your query?"
+ },
+ "operator": "is",
+ "value": {
+ "type": "Value",
+ "value": "General",
+ "display": "General"
+ }
+ }
+ ]
+ }
+ },
+ {
+ "displayName": "Current awareness route",
+ "name": "OchNDo",
+ "value": {
+ "name": "Current awareness route",
+ "conditions": [
+ {
+ "field": {
+ "name": "tUKBgj",
+ "type": "RadiosField",
+ "display": "Which option best matches your query?"
+ },
+ "operator": "is",
+ "value": {
+ "type": "Value",
+ "value": "Current awareness alerts",
+ "display": "Current awareness alerts"
+ }
+ }
+ ]
+ }
+ },
+ {
+ "displayName": "Literature search",
+ "name": "fNTYcH",
+ "value": {
+ "name": "Literature search",
+ "conditions": [
+ {
+ "field": {
+ "name": "tUKBgj",
+ "type": "RadiosField",
+ "display": "Which option best matches your query?"
+ },
+ "operator": "is",
+ "value": {
+ "type": "Value",
+ "value": "Literature search",
+ "display": "Literature search"
+ }
+ }
+ ]
+ }
+ },
+ {
+ "displayName": "Evidence briefing",
+ "name": "eiTtgM",
+ "value": {
+ "name": "Evidence briefing",
+ "conditions": [
+ {
+ "field": {
+ "name": "tUKBgj",
+ "type": "RadiosField",
+ "display": "Which option best matches your query?"
+ },
+ "operator": "is",
+ "value": {
+ "type": "Value",
+ "value": "Evidence briefing",
+ "display": "Evidence briefing"
+ }
+ }
+ ]
+ }
+ },
+ {
+ "displayName": "Systematic review",
+ "name": "dCqSKz",
+ "value": {
+ "name": "Systematic review",
+ "conditions": [
+ {
+ "field": {
+ "name": "tUKBgj",
+ "type": "RadiosField",
+ "display": "Which option best matches your query?"
+ },
+ "operator": "is",
+ "value": {
+ "type": "Value",
+ "value": "Systematic review",
+ "display": "Systematic review"
+ }
+ }
+ ]
+ }
+ },
+ {
+ "displayName": "Not general or current awareness",
+ "name": "DsFDDA",
+ "value": {
+ "name": "Not general or current awareness",
+ "conditions": [
+ {
+ "field": {
+ "name": "tUKBgj",
+ "type": "RadiosField",
+ "display": "Which option best matches your query?"
+ },
+ "operator": "is not",
+ "value": {
+ "type": "Value",
+ "value": "General",
+ "display": "General"
+ }
+ },
+ {
+ "coordinator": "or",
+ "field": {
+ "name": "tUKBgj",
+ "type": "RadiosField",
+ "display": "Which option best matches your query?"
+ },
+ "operator": "is not",
+ "value": {
+ "type": "Value",
+ "value": "Current awareness alerts",
+ "display": "Current awareness alerts"
+ }
+ }
+ ]
+ }
+ },
+ {
+ "displayName": "LAPH user",
+ "name": "IbKdRK",
+ "value": {
+ "name": "LAPH user",
+ "conditions": [
+ {
+ "field": {
+ "name": "wyvXTj",
+ "type": "RadiosField",
+ "display": "Which organisation do you work for?"
+ },
+ "operator": "is",
+ "value": { "type": "Value", "value": "LAPH", "display": "LAPH" }
+ }
+ ]
+ }
+ },
+ {
+ "displayName": "Other user",
+ "name": "CRsuUh",
+ "value": {
+ "name": "Other user",
+ "conditions": [
+ {
+ "field": {
+ "name": "wyvXTj",
+ "type": "RadiosField",
+ "display": "Which organisation do you work for?"
+ },
+ "operator": "is",
+ "value": { "type": "Value", "value": "Other", "display": "Other" }
+ }
+ ]
+ }
+ },
+ {
+ "displayName": "LAPH general enquiry",
+ "name": "lsHzLP",
+ "value": {
+ "name": "LAPH general enquiry",
+ "conditions": [
+ {
+ "field": {
+ "name": "VeQCVM",
+ "type": "RadiosField",
+ "display": "Which option best matches your enquiry? - LAPH user"
+ },
+ "operator": "is",
+ "value": {
+ "type": "Value",
+ "value": "General",
+ "display": "General"
+ }
+ }
+ ]
+ }
+ },
+ {
+ "displayName": "LAPH lit search",
+ "name": "lxGNAu",
+ "value": {
+ "name": "LAPH lit search",
+ "conditions": [
+ {
+ "field": {
+ "name": "VeQCVM",
+ "type": "RadiosField",
+ "display": "Which option best matches your enquiry? - LAPH user"
+ },
+ "operator": "is",
+ "value": {
+ "type": "Value",
+ "value": "Literature search",
+ "display": "Literature search"
+ }
+ }
+ ]
+ }
+ },
+ {
+ "displayName": "LAPH current awareness enquiry",
+ "name": "MQeZyE",
+ "value": {
+ "name": "LAPH current awareness enquiry",
+ "conditions": [
+ {
+ "field": {
+ "name": "VeQCVM",
+ "type": "RadiosField",
+ "display": "Which option best matches your enquiry? - LAPH user"
+ },
+ "operator": "is",
+ "value": {
+ "type": "Value",
+ "value": "Current awareness alerts",
+ "display": "Current awareness alerts"
+ }
+ }
+ ]
+ }
+ },
+ {
+ "displayName": "Lit search 2",
+ "name": "CHaqWw",
+ "value": {
+ "name": "Lit search 2",
+ "conditions": [
+ {
+ "field": {
+ "name": "tUKBgj",
+ "type": "RadiosField",
+ "display": "Which option best matches your enquiry?"
+ },
+ "operator": "is",
+ "value": {
+ "type": "Value",
+ "value": "Literature search",
+ "display": "Literature search"
+ }
+ },
+ {
+ "coordinator": "or",
+ "field": {
+ "name": "VeQCVM",
+ "type": "RadiosField",
+ "display": "Which option best matches your enquiry? - LAPH user"
+ },
+ "operator": "is",
+ "value": {
+ "type": "Value",
+ "value": "Literature search",
+ "display": "Literature search"
+ }
+ }
+ ]
+ }
+ },
+ {
+ "displayName": "Not G, EB, CA",
+ "name": "XvwdpX",
+ "value": {
+ "name": "Not G, EB, CA",
+ "conditions": [
+ {
+ "field": {
+ "name": "tUKBgj",
+ "type": "RadiosField",
+ "display": "Which option best matches your enquiry?"
+ },
+ "operator": "is not",
+ "value": {
+ "type": "Value",
+ "value": "General",
+ "display": "General"
+ }
+ },
+ {
+ "coordinator": "or",
+ "field": {
+ "name": "tUKBgj",
+ "type": "RadiosField",
+ "display": "Which option best matches your enquiry?"
+ },
+ "operator": "is not",
+ "value": {
+ "type": "Value",
+ "value": "Evidence briefing",
+ "display": "Evidence briefing"
+ }
+ },
+ {
+ "coordinator": "or",
+ "field": {
+ "name": "tUKBgj",
+ "type": "RadiosField",
+ "display": "Which option best matches your enquiry?"
+ },
+ "operator": "is not",
+ "value": {
+ "type": "Value",
+ "value": "Current awareness alerts",
+ "display": "Current awareness alerts"
+ }
+ }
+ ]
+ }
+ },
+ {
+ "displayName": "UKHSA staff",
+ "name": "EgJCgx",
+ "value": {
+ "name": "UKHSA staff",
+ "conditions": [
+ {
+ "field": {
+ "name": "wyvXTj",
+ "type": "RadiosField",
+ "display": "Which organisation do you work for?"
+ },
+ "operator": "is",
+ "value": { "type": "Value", "value": "UKHSA", "display": "UKHSA" }
+ }
+ ]
+ }
+ }
+ ],
+ "fees": [],
+ "outputs": [],
+ "version": 2,
+ "skipSummary": false,
+ "feeOptions": {
+ "allowSubmissionWithoutPayment": true,
+ "maxAttempts": 3,
+ "showPaymentSkippedWarningPage": false
+ },
+ "declaration": "",
+ "name": "kls-service-enquiry-v3-pt2-1",
+ "feedback": { "feedbackForm": true, "url": "" },
+ "phaseBanner": { "phase": "beta" }
+}
From 5503618af6870b887a4c8f1212cb23537d1cb494 Mon Sep 17 00:00:00 2001
From: SullyK <68860309+SullyK@users.noreply.github.com>
Date: Wed, 28 May 2025 16:32:16 +0100
Subject: [PATCH 274/403] feat(timeout): redirect to form start page and
support new config fields (#384)
- Fix timeout.html redirecting incorrectly to the /config route by using the injected referer instead.
(See: https://github.com/ukhsa-collaboration/digital-form-builder/blob/801bc7de3d8f57d316bc46a67518ef07914f54c3/runner/src/server/plugins/router.ts#L263))
- Timeout now correctly redirects to the form's start page.
- Add support for new serviceName form field. This may overlap with existing name field... May be removed based on feedback.
Use new fullStartPage form field instead of the global serviceStartPage setting.
(Overrides config at https://github.com/ukhsa-collaboration/digital-form-builder/blob/801bc7de3d8f57d316bc46a67518ef07914f54c3/runner/config/default.js#L59
)
---
model/src/data-model/types.ts | 2 ++
model/src/schema/schema.ts | 2 ++
runner/src/server/plugins/views.ts | 6 +++---
runner/src/server/views/timeout.html | 2 +-
4 files changed, 8 insertions(+), 4 deletions(-)
diff --git a/model/src/data-model/types.ts b/model/src/data-model/types.ts
index 39133caf9b..1d6f46c8fd 100644
--- a/model/src/data-model/types.ts
+++ b/model/src/data-model/types.ts
@@ -214,4 +214,6 @@ export type FormDefinition = {
jwtKey?: string | undefined;
toggle?: boolean | string | undefined;
retryTimeoutSeconds?: number | undefined;
+ fullStartPage?: string | undefined;
+ serviceName?: string | undefined;
};
diff --git a/model/src/schema/schema.ts b/model/src/schema/schema.ts
index 94ad528e10..2dff3b9170 100644
--- a/model/src/schema/schema.ts
+++ b/model/src/schema/schema.ts
@@ -346,6 +346,8 @@ export const Schema = joi
toggle: joi.alternatives().try(joi.boolean(), joi.string()).optional(),
toggleRedirect: joi.string().optional(),
retryTimeoutSeconds: joi.number().optional(),
+ fullStartPage: joi.string().optional(),
+ serviceName: joi.string().optional(),
});
/**
diff --git a/runner/src/server/plugins/views.ts b/runner/src/server/plugins/views.ts
index 1a1544bcdd..215be23071 100644
--- a/runner/src/server/plugins/views.ts
+++ b/runner/src/server/plugins/views.ts
@@ -65,9 +65,9 @@ export default {
appVersion: pkg.version,
assetPath: "/assets",
cookiesPolicy: request?.state?.cookies_policy,
- serviceName: capitalize(config.serviceName),
+ serviceName: capitalize(request.server?.app?.forms?.[request.params?.id]?.def?.serviceName || config.serviceName),
feedbackLink: config.feedbackLink,
- pageTitle: config.serviceName + " - GOV.UK",
+ pageTitle: (request.server?.app?.forms?.[request.params?.id]?.def?.serviceName || config.serviceName) + " - GOV.UK",
analyticsAccount: config.analyticsAccount,
gtmId1: config.gtmId1,
gtmId2: config.gtmId2,
@@ -77,7 +77,7 @@ export default {
BROWSER_REFRESH_URL: config.browserRefreshUrl,
sessionTimeout: config.sessionTimeout,
skipTimeoutWarning: false,
- serviceStartPage: config.serviceStartPage || "#",
+ serviceStartPage: request.server?.app?.forms?.[request.params?.id]?.def?.fullStartPage || config.serviceName || "#",
privacyPolicyUrl: config.privacyPolicyUrl || "/help/privacy",
phaseTag: config.phaseTag,
navigation: request?.auth.isAuthenticated
diff --git a/runner/src/server/views/timeout.html b/runner/src/server/views/timeout.html
index be8639dde9..d6e104f097 100644
--- a/runner/src/server/views/timeout.html
+++ b/runner/src/server/views/timeout.html
@@ -14,7 +14,7 @@ Your application has timed out
We have reset your application because you did not do anything for {{ sessionTimeout / 60000 }} minutes. We did this
to keep your information secure.
Click the link in the email to continue to report an outbreak.
Check your spam or junk folder.
If you’ve not received the email, you can resubmit the email in 5 minutes.
Check your spam or junk folder.
If you’ve still not received the email in 5 minutes, you need to request a new link.
We’ve sent another email to {{ email }}.
Click the link in the email to continue to report an outbreak.
Check your spam or junk folder.
If you’ve still not received the email in 5 minutes, you need to request a new link.
You are not eligable to use this service, however you can still contact the KLS team via the following email libraryadmin@ukhsa.gov.uk
" + } + ], + "next": [] + }, + { + + "path": "/magic-link-redirect", + "unauthenticated": true, + "controller": "MagicLinkRedirectController", + "next": [ + { + "path": "/which-organisation-do-you-work-for-DUPE" + } + ] + + + }, + { + "title": "Summary", + "path": "/summary", + "controller": "./pages/summary.js", + "components": [], + "next": [] + }, + { "path": "/about-you", "title": "About you", "components": [ @@ -472,8 +537,8 @@ ] }, { - "path": "/which-organisation-do-you-work-for", - "title": "Which organisation do you work for?", + "path": "/which-organisation-do-you-work-for-DUPE", + "title": "Which organisation do you work for-DUPE?", "components": [ { "name": "wyvXTj", @@ -754,6 +819,32 @@ ], "lists": [ { + "title": "Organisation", + "name": "uIwkHV", + "type": "string", + "items": [ + { + "text": "UK Health Security Agency", + "value": "UKHSA" + }, + { + "text": "Office for Health Improvement and Disparities", + "value": "OHID" + }, + { + "text": "NHS England Public Health", + "value": "NHSE" + }, + { + "text": "Local Authority Public Health", + "value": "LAPH" + }, + { + "text": "Other", + "value": "Other" + } + ] + }, { "title": "Preferred contact method", "name": "slVZMW", "type": "string", @@ -1374,6 +1465,50 @@ ], "sections": [], "conditions": [ + { + "displayName": "Other", + "name": "BOkxIN", + "value": { + "name": "Other", + "conditions": [ + { + "field": { + "name": "ZpmVWP", + "type": "RadiosField", + "display": "Organisation" + }, + "operator": "is", + "value": { + "type": "Value", + "value": "Other", + "display": "Other" + } + } + ] + } + }, + { + "displayName": "Not other", + "name": "dhBTmP", + "value": { + "name": "Not other", + "conditions": [ + { + "field": { + "name": "ZpmVWP", + "type": "RadiosField", + "display": "Organisation" + }, + "operator": "is not", + "value": { + "type": "Value", + "value": "Other", + "display": "Other" + } + } + ] + } + }, { "displayName": "General route", "name": "mZdZMC", @@ -1735,9 +1870,5 @@ "allowSubmissionWithoutPayment": true, "maxAttempts": 3, "showPaymentSkippedWarningPage": false - }, - "declaration": "", - "name": "kls-service-enquiry-v3-pt2-1", - "feedback": { "feedbackForm": true, "url": "" }, - "phaseBanner": { "phase": "beta" } -} + } +} \ No newline at end of file From 48159d1e94e2a970ee8c0e94b1ed49bbf2e6d134 Mon Sep 17 00:00:00 2001 From: SullyYou can now close this page.
", + "hidePanel": true + } + } + } +} diff --git a/runner/src/server/forms/kls-magic-link.json b/runner/src/server/forms/kls-magic-link.json new file mode 100644 index 0000000000..0075ca0c0e --- /dev/null +++ b/runner/src/server/forms/kls-magic-link.json @@ -0,0 +1,239 @@ +{ + "startPage": "/start", + "skipSummary": true, + "retryTimeoutSeconds": 300, + "analytics": { + "matomoId": "11", + "matomoUrl": "https://ukhsakls.matomo.cloud" + }, + "magicLinkConfig": "kls-magic-link", + "allowedDomains": ["ukhsa.gov.uk", "dhsc.gov.uk", "nhs.net", "nhs.uk", "gov.uk"], + "invalidDomainRedirect": "/kls-magic-link/your-email-is-not-on-our-approved-list", + "serviceName": "Knowledge and Library Services", + "fullStartPage": "/kls-path-1/start", + "pages": [ + { + "path": "/start", + "controller": "MagicLinkStartPageController", + "unauthenticated": true + }, + { + "title": "What is your email address?", + "path": "/email", + "unauthenticated": true, + "continueButtonText": "Continue", + "showContinueButton": true, + "backLinkFallback": "/kls-path-1/which-organisation-do-you-work-for", + "components": [ + { + "name": "EmailIntro", + "options": {}, + "type": "Para", + "content": "We need to email you a secure link to the service.Click the link in the email to continue to report an outbreak.
Check your spam or junk folder.
If you’ve not received the email, you can resubmit the email in 5 minutes.
Check your spam or junk folder.
If you’ve still not received the email in 5 minutes, you need to request a new link.
We’ve sent another email to {{ email }}.
Click the link in the email to continue to report an outbreak.
Check your spam or junk folder.
If you’ve still not received the email in 5 minutes, you need to request a new link.
You are not eligable to use this service, however you can still contact the KLS team via the following email libraries@kls.ukhsa.gov.uk
" + } + ], + "next": [] + }, + { + "path": "/magic-link-redirect", + "unauthenticated": true, + "controller": "MagicLinkRedirectController", + "next": [ + { + "path": "/which-organisation-do-you-work-for-DUPE" + } + ] }, { "path": "/about-you", @@ -37,27 +92,41 @@ }, { "name": "RpctHr", - "options": { "required": true }, + "options": { + "required": true + }, "type": "TextField", "title": "Job title", "schema": {} }, { "name": "afZPpL", - "options": {}, + "options": { + "customValidationMessages": { + "any.required": "Enter your email address", + "any.only": "Enter your email address", + "string.empty": "Enter your email address" + } + }, "type": "EmailAddressField", "title": "Email address", "schema": {} }, { "name": "ZjyQtC", - "options": { "required": false }, + "options": { + "required": false + }, "type": "EmailAddressField", "title": "Should anyone else be included in emails about this enquiry?", "schema": {} } ], - "next": [{ "path": "/check-your-details-before-submitting-your-enquiry" }] + "next": [ + { + "path": "/summary" + } + ] }, { "path": "/type-of-enquiry", @@ -73,11 +142,15 @@ }, { "name": "tUKBgj", - "options": { "exposeToContext": false }, + "options": { + "exposeToContext": false + }, "type": "RadiosField", "title": "Which option best matches your enquiry?", "list": "eKfmVf", - "values": { "type": "listRef" }, + "values": { + "type": "listRef" + }, "schema": {} } ], @@ -86,9 +159,18 @@ "path": "/about-your-current-awareness-alerts-query", "condition": "OchNDo" }, - { "path": "/how-can-we-help", "condition": "mZdZMC" }, - { "path": "/evidence-briefing-information", "condition": "eiTtgM" }, - { "path": "/about-your-enquiry", "condition": "XvwdpX" } + { + "path": "/how-can-we-help", + "condition": "mZdZMC" + }, + { + "path": "/evidence-briefing-information", + "condition": "eiTtgM" + }, + { + "path": "/about-your-enquiry", + "condition": "XvwdpX" + } ] }, { @@ -97,7 +179,9 @@ "components": [ { "name": "YIrnKT", - "options": { "required": false }, + "options": { + "required": false + }, "type": "MultilineTextField", "title": "If you need to tell us more, please do so in this text box", "schema": {} @@ -112,7 +196,9 @@ }, { "name": "aazUpS", - "options": { "required": false }, + "options": { + "required": false + }, "type": "FileUploadField", "title": "Please attach any supporting information, for example a protocol or list of references.", "schema": {}, @@ -120,18 +206,19 @@ } ], "next": [ - { "path": "/about-you" }, - { "path": "/about-you-GXSFdb", "condition": "EgJCgx" }, - { "path": "/about-you-dHykmu", "condition": "IbKdRK" } + { + "path": "/about-you" + }, + { + "path": "/about-you-GXSFdb", + "condition": "EgJCgx" + }, + { + "path": "/about-you-dHykmu", + "condition": "IbKdRK" + } ] }, - { - "path": "/check-your-details-before-submitting-your-enquiry", - "title": "Check your details before submitting your enquiry", - "components": [], - "next": [], - "controller": "./pages/summary.js" - }, { "path": "/about-your-current-awareness-alerts-query", "title": "About your current awareness alerts query", @@ -151,9 +238,17 @@ } ], "next": [ - { "path": "/about-you" }, - { "path": "/about-you-GXSFdb", "condition": "EgJCgx" }, - { "path": "/about-you-dHykmu", "condition": "IbKdRK" } + { + "path": "/about-you" + }, + { + "path": "/about-you-GXSFdb", + "condition": "EgJCgx" + }, + { + "path": "/about-you-dHykmu", + "condition": "IbKdRK" + } ] }, { @@ -176,7 +271,9 @@ }, { "name": "bhBuDQ", - "options": { "required": true }, + "options": { + "required": true + }, "type": "MultilineTextField", "title": "Explain any relevant concepts", "schema": {}, @@ -184,7 +281,9 @@ }, { "name": "uBPfQS", - "options": { "required": false }, + "options": { + "required": false + }, "type": "MultilineTextField", "title": "Give an example of a paper that should be included in the output", "schema": {}, @@ -197,19 +296,25 @@ "title": "Publication date range", "list": "OGYVAD", "hint": "Indicate the time period from which evidence should be sourced", - "values": { "type": "listRef" }, + "values": { + "type": "listRef" + }, "schema": {} }, { "name": "MArgxL", - "options": { "required": false }, + "options": { + "required": false + }, "type": "TextField", "title": "If you selected 'other' above, please give details", "schema": {} }, { "name": "etcpxo", - "options": {}, + "options": { + "string.empty": "Enter your email address" + }, "type": "TextField", "title": "UK only or international?", "hint": "Help the KLS team understand the geographic scope of your work by entering the relevant country/countries", @@ -217,7 +322,13 @@ }, { "name": "hQXIgL", - "options": { "maxDaysInPast": "0" }, + "options": { + "maxDaysInPast": "0", + "customValidationMessages": { + "nonNumeric": "The date must be in the format of DD/MM/YYYY", + "date.min": "Desired completion date can’t be before today - Ask colin/Jahdiel to look at this" + } + }, "type": "DatePartsField", "title": "Desired completion date", "hint": "The KLS team will be in touch to discuss the feasibility of this date", @@ -225,23 +336,38 @@ }, { "name": "RCdnGJ", - "options": { "required": false, "optionalText": true }, + "options": { + "required": false, + "optionalText": true + }, "type": "CheckboxesField", "title": "Can we share the results with other public health professionals?", "list": "IQAoJu" }, { "name": "oNDRUt", - "options": { "required": false, "optionalText": true }, + "options": { + "required": false, + "optionalText": true + }, "type": "CheckboxesField", "title": "Can we share your contact details so other public health professionals can contact you with queries about the work you are doing?", "list": "IQAoJu" } ], "next": [ - { "path": "/systematic-review-questions", "condition": "dCqSKz" }, - { "path": "/literature-search-questions", "condition": "fNTYcH" }, - { "path": "/evidence-briefing-questions", "condition": "eiTtgM" } + { + "path": "/systematic-review-questions", + "condition": "dCqSKz" + }, + { + "path": "/literature-search-questions", + "condition": "fNTYcH" + }, + { + "path": "/evidence-briefing-questions", + "condition": "eiTtgM" + } ] }, { @@ -266,31 +392,43 @@ }, { "name": "WNVZzn", - "options": { "required": true }, + "options": { + "required": true + }, "type": "SelectField", "title": "What will you primarily use the results of this search for?", "list": "PxpncX", "schema": {}, "hint": "If more than one option apply, please select the most relevant", - "values": { "type": "listRef" } + "values": { + "type": "listRef" + } }, { "name": "nPBXNt", - "options": { "required": false }, + "options": { + "required": false + }, "type": "MultilineTextField", "title": "If you selected 'other' above, please give details", "schema": {} }, { "name": "qwQlWP", - "options": { "required": true }, + "options": { + "required": true + }, "type": "CheckboxesField", "title": "What is your preferred results format?", "list": "LgzPJy", "schema": {} } ], - "next": [{ "path": "/additional-information" }] + "next": [ + { + "path": "/additional-information" + } + ] }, { "path": "/systematic-review-questions", @@ -311,44 +449,60 @@ "title": "What type of review are you doing?", "list": "cZlqVP", "hint": "", - "values": { "type": "listRef" }, + "values": { + "type": "listRef" + }, "schema": {} }, { "name": "IdTRkf", - "options": { "required": false }, + "options": { + "required": false + }, "type": "MultilineTextField", "title": "If you selected 'other' above, please give details", "schema": {} }, { "name": "byRMpb", - "options": { "required": true }, + "options": { + "required": true + }, "type": "SelectField", "title": "What is the reason for conducting this review?", "list": "tOKEMX", - "values": { "type": "listRef" }, + "values": { + "type": "listRef" + }, "schema": {} }, { "name": "mBSuvI", - "options": { "required": false }, + "options": { + "required": false + }, "type": "MultilineTextField", "title": "If you selected 'other' above, please give details", "schema": {} }, { "name": "diftRU", - "options": { "required": true }, + "options": { + "required": true + }, "type": "SelectField", "title": "Where do you intend to publish your review?", "list": "Zappeq", - "values": { "type": "listRef" }, + "values": { + "type": "listRef" + }, "schema": {} }, { "name": "NeCvDK", - "options": { "required": false }, + "options": { + "required": false + }, "type": "MultilineTextField", "title": "If you answered 'other', please give details", "schema": {} @@ -362,15 +516,23 @@ }, { "name": "dmgVPY", - "options": { "required": true }, + "options": { + "required": true + }, "type": "YesNoField", "title": "Have you written a protocol?", - "values": { "type": "listRef" }, + "values": { + "type": "listRef" + }, "schema": {}, "hint": "If so, please use the file upload facility on the next page to share it with the KLS team" } ], - "next": [{ "path": "/additional-information" }] + "next": [ + { + "path": "/additional-information" + } + ] }, { "path": "/evidence-briefing-questions", @@ -393,48 +555,64 @@ }, { "name": "rcGqoK", - "options": { "required": false }, + "options": { + "required": false + }, "type": "TextField", "title": "If you answered 'Other' above, please give details", "schema": {} }, { "name": "TNXqpA", - "options": { "required": true }, + "options": { + "required": true + }, "type": "MultilineTextField", "title": "What are your inclusion criteria for population?", "schema": {} }, { "name": "KXXNzf", - "options": { "required": true }, + "options": { + "required": true + }, "type": "MultilineTextField", "title": "What are your inclusion criteria for intervention or exposure?", "schema": {} }, { "name": "GjCFLx", - "options": { "required": true }, + "options": { + "required": true + }, "type": "MultilineTextField", "title": "What are your inclusion criteria for setting/location?", "schema": {} }, { "name": "MgKlsM", - "options": { "required": true }, + "options": { + "required": true + }, "type": "MultilineTextField", "title": "What are your inclusion criteria for outcomes?", "schema": {} }, { "name": "iYKvoN", - "options": { "required": false }, + "options": { + "required": false + }, "type": "MultilineTextField", "title": "Should anything be excluded?", "schema": {} } ], - "next": [{ "path": "/additional-information" }] + "next": [ + { + "path": "/additional-information" + } + ] }, { "path": "/how-can-we-help", @@ -458,7 +636,9 @@ }, { "name": "FIvjTg", - "options": { "required": false }, + "options": { + "required": false + }, "type": "FileUploadField", "title": "Upload a file", "hint": "To support the KLS team in dealing with your query, you may upload a file here.", @@ -466,14 +646,22 @@ } ], "next": [ - { "path": "/about-you" }, - { "path": "/about-you-GXSFdb", "condition": "EgJCgx" }, - { "path": "/about-you-dHykmu", "condition": "IbKdRK" } + { + "path": "/about-you" + }, + { + "path": "/about-you-GXSFdb", + "condition": "EgJCgx" + }, + { + "path": "/about-you-dHykmu", + "condition": "IbKdRK" + } ] }, { - "path": "/which-organisation-do-you-work-for", - "title": "Which organisation do you work for?", + "path": "/which-organisation-do-you-work-for-DUPE", + "title": "Which organisation do you work for-DUPE?", "components": [ { "name": "wyvXTj", @@ -483,13 +671,23 @@ "hint": "", "list": "ULmwPo", "schema": {}, - "values": { "type": "listRef" } + "values": { + "type": "listRef" + } } ], "next": [ - { "path": "/type-of-enquiry" }, - { "path": "/how-can-we-help", "condition": "CRsuUh" }, - { "path": "/type-of-enquiry-JpEYIe", "condition": "IbKdRK" } + { + "path": "/type-of-enquiry" + }, + { + "path": "/how-can-we-help", + "condition": "CRsuUh" + }, + { + "path": "/type-of-enquiry-JpEYIe", + "condition": "IbKdRK" + } ] }, { @@ -510,17 +708,24 @@ "type": "RadiosField", "list": "AUYYCW", "title": "Which option best matches your enquiry?", - "values": { "type": "listRef" }, + "values": { + "type": "listRef" + }, "schema": {} } ], "next": [ - { "path": "/how-can-we-help", "condition": "lsHzLP" }, + { + "path": "/how-can-we-help", + "condition": "lsHzLP" + }, { "path": "/about-your-current-awareness-alerts-query", "condition": "MQeZyE" }, - { "path": "/about-your-enquiry-RPOaaR" } + { + "path": "/about-your-enquiry-RPOaaR" + } ] }, { @@ -551,7 +756,9 @@ }, { "name": "Ercwfj", - "options": { "required": false }, + "options": { + "required": false + }, "type": "MultilineTextField", "title": "Give an example of a paper that should be included in the output", "hint": "Enter a relevant publication or key author you would expect to be included", @@ -568,7 +775,9 @@ }, { "name": "zVphJY", - "options": { "required": false }, + "options": { + "required": false + }, "type": "TextField", "title": "If you selected 'other' above, please give details", "schema": {} @@ -583,7 +792,10 @@ }, { "name": "kgNqhg", - "options": { "maxDaysInFuture": "", "maxDaysInPast": "0" }, + "options": { + "maxDaysInFuture": "", + "maxDaysInPast": "0" + }, "type": "DatePartsField", "hint": "The KLS team will be in touch to discuss the feasibility of this date", "title": "Desired completion date", @@ -591,20 +803,30 @@ }, { "name": "GxImes", - "options": { "required": false, "optionalText": true }, + "options": { + "required": false, + "optionalText": true + }, "type": "CheckboxesField", "title": "Can we share the results with other public health professionals?", "list": "IQAoJu" }, { "name": "DdsEuf", - "options": { "required": false, "optionalText": true }, + "options": { + "required": false, + "optionalText": true + }, "type": "CheckboxesField", "title": "Can we share your contact details so other public health professionals can contact you with queries about the work you are doing?", "list": "IQAoJu" } ], - "next": [{ "path": "/literature-search-questions" }] + "next": [ + { + "path": "/literature-search-questions" + } + ] }, { "path": "/evidence-briefing-information", @@ -647,7 +869,11 @@ "schema": {} } ], - "next": [{ "path": "/about-your-enquiry" }] + "next": [ + { + "path": "/about-your-enquiry" + } + ] }, { "path": "/about-you-GXSFdb", @@ -661,56 +887,94 @@ }, { "name": "dagbPo", - "options": {}, + "options": { + "required": true + }, "type": "TextField", "title": "Full name" }, { "name": "uksayz", - "options": { "required": true }, + "options": { + "required": true + }, "type": "TextField", "title": "Job title" }, { "name": "nmlFzr", - "options": {}, + "options": { + "customValidationMessages": { + "any.required": "Enter your group", + "any.only": "Enter your group" + } + }, "type": "SelectField", "hint": "Tell us which work group you belong to", "title": "Group", "list": "sYQQmN", - "values": { "type": "listRef" } + "values": { + "type": "listRef" + } }, { "name": "oUmeSI", - "options": {}, + "options": { + "customValidationMessages": { + "any.required": "Enter your directorate", + "any.only": "Enter your directorate" + } + }, "type": "SelectField", "hint": "Tell us which directorate you belong to", "title": "Directorate", - "list": "pTYDbB" + "list": "pTYDbB", + "schema": { + "required": true + } }, { "name": "EkwRix", - "options": {}, + "options": { + "customValidationMessages": { + "any.required": "Enter your location", + "any.only": "Enter your location" + } + }, "type": "SelectField", "hint": "Tell us your work location", "title": "Location", "list": "wrhJNi", - "values": { "type": "listRef" } + "values": { + "type": "listRef" + } }, { "name": "SPKrpE", - "options": {}, + "options": { + "customValidationMessages": { + "any.required": "Enter your email address", + "any.only": "Enter your email address", + "string.empty": "Enter your email address" + } + }, "type": "EmailAddressField", "title": "Email address" }, { "name": "rqzRcc", - "options": { "required": false }, + "options": { + "required": false + }, "type": "EmailAddressField", "title": "Should anyone else be included in emails about this enquiry?" } ], - "next": [{ "path": "/check-your-details-before-submitting-your-enquiry" }] + "next": [ + { + "path": "/summary" + } + ] }, { "path": "/about-you-dHykmu", @@ -730,36 +994,95 @@ }, { "name": "PIjqqt", - "options": {}, + "options": { + "customValidationMessages": { + "any.required": "Enter your email address", + "any.only": "Enter your email address", + "string.empty": "Enter your email address" + } + }, "type": "EmailAddressField", "title": "Email address" }, { "name": "YeDsms", - "options": { "required": false }, + "options": { + "required": false + }, "type": "EmailAddressField", "title": "Should anyone else be included in emails about this enquiry?" }, { "name": "oCVslj", - "options": {}, + "options": { + "customValidationMessages": { + "any.required": "Enter your location", + "any.only": "Enter your location" + } + }, "type": "SelectField", "title": "Location", "list": "iTBoCy", - "values": { "type": "listRef" } + "values": { + "type": "listRef" + } } ], - "next": [{ "path": "/check-your-details-before-submitting-your-enquiry" }] + "next": [ + { + "path": "/summary" + } + ] + }, + { + "path": "/summary", + "title": "Check the details before submitting", + "components": [], + "next": [], + "controller": "./pages/summary.js" } ], "lists": [ + { + "title": "Organisation", + "name": "uIwkHV", + "type": "string", + "items": [ + { + "text": "UK Health Security Agency", + "value": "UKHSA" + }, + { + "text": "Office for Health Improvement and Disparities", + "value": "OHID" + }, + { + "text": "NHS England Public Health", + "value": "NHSE" + }, + { + "text": "Local Authority Public Health", + "value": "LAPH" + }, + { + "text": "Other", + "value": "Other" + } + ] + }, { "title": "Preferred contact method", "name": "slVZMW", "type": "string", "items": [ - { "text": "email", "value": "email" }, - { "text": "telephone", "value": "telephone" } + { + "text": "email", + "value": "email" + }, + { + "text": "telephone", + "value": "telephone" + } ] }, { @@ -804,7 +1127,11 @@ "text": "CSO: Radiation", "value": "CSO: Radiation" }, - { "description": "", "text": "Chemicals", "value": "Chemicals" }, + { + "description": "", + "text": "Chemicals", + "value": "Chemicals" + }, { "value": "Climate and Environmental Hazards", "description": "", @@ -910,7 +1237,10 @@ "description": "", "text": "COO: Strategy and Policy" }, - { "value": "COO: Transformation", "text": "COO: Transformation" } + { + "value": "COO: Transformation", + "text": "COO: Transformation" + } ] }, { @@ -918,10 +1248,25 @@ "name": "wrhJNi", "type": "string", "items": [ - { "description": "", "text": "Chilton", "value": "Chilton" }, - { "description": "", "text": "Colindale", "value": "Colindale" }, - { "description": "", "text": "Porton", "value": "Porton" }, - { "text": "Other", "value": "Other" } + { + "description": "", + "text": "Chilton", + "value": "Chilton" + }, + { + "description": "", + "text": "Colindale", + "value": "Colindale" + }, + { + "description": "", + "text": "Porton", + "value": "Porton" + }, + { + "text": "Other", + "value": "Other" + } ] }, { @@ -929,9 +1274,18 @@ "name": "eKfmVf", "type": "string", "items": [ - { "text": "Literature search", "value": "Literature search" }, - { "text": "Systematic review", "value": "Systematic review" }, - { "text": "Evidence briefing", "value": "Evidence briefing" }, + { + "text": "Literature search", + "value": "Literature search" + }, + { + "text": "Systematic review", + "value": "Systematic review" + }, + { + "text": "Evidence briefing", + "value": "Evidence briefing" + }, { "text": "Current awareness alerts", "value": "Current awareness alerts" @@ -948,9 +1302,21 @@ "name": "LgzPJy", "type": "string", "items": [ - { "description": "", "text": "Endnote", "value": "Endnote" }, - { "description": "", "text": "Word", "value": "Word" }, - { "description": "", "text": "Excel", "value": "Excel" }, + { + "description": "", + "text": "Endnote", + "value": "Endnote" + }, + { + "description": "", + "text": "Word", + "value": "Word" + }, + { + "description": "", + "text": "Excel", + "value": "Excel" + }, { "description": "", "text": "RIS (for reference management software)", @@ -1072,13 +1438,20 @@ "text": "Evidence summary", "value": "Evidence summary" }, - { "description": "", "text": "Guidelines", "value": "Guidelines" }, + { + "description": "", + "text": "Guidelines", + "value": "Guidelines" + }, { "description": "", "text": "Keeping up to date", "value": "Keeping up to date" }, - { "text": "Other", "value": "Other" }, + { + "text": "Other", + "value": "Other" + }, { "description": "", "text": "Policy and strategy development", @@ -1121,13 +1494,19 @@ "text": "Mapping review", "value": "Mapping review" }, - { "text": "Umbrella review", "value": "Umbrella review" }, + { + "text": "Umbrella review", + "value": "Umbrella review" + }, { "description": "", "text": "Unsure/to be confirmed", "value": "Unsure/to be confirmed" }, - { "text": "Other", "value": "Other" } + { + "text": "Other", + "value": "Other" + } ] }, { @@ -1135,9 +1514,18 @@ "name": "wYJotW", "type": "string", "items": [ - { "text": "Yes", "value": "Yes" }, - { "text": "No", "value": "No" }, - { "text": "Unsure", "value": "Unsure" } + { + "text": "Yes", + "value": "Yes" + }, + { + "text": "No", + "value": "No" + }, + { + "text": "Unsure", + "value": "Unsure" + } ] }, { @@ -1145,14 +1533,24 @@ "name": "Zappeq", "type": "string", "items": [ - { "text": "Peer reviewed journal", "value": "Journal" }, - { "description": "", "text": "GOV.UK", "value": "GOV.UK" }, + { + "text": "Peer reviewed journal", + "value": "Journal" + }, + { + "description": "", + "text": "GOV.UK", + "value": "GOV.UK" + }, { "description": "", "text": "Internal only", "value": "Internal only" }, - { "text": "Other", "value": "Other" } + { + "text": "Other", + "value": "Other" + } ] }, { @@ -1160,9 +1558,18 @@ "name": "rZyXKL", "type": "string", "items": [ - { "text": "English language only", "value": "English language only" }, - { "text": "English and other", "value": "English and other" }, - { "text": "Other", "value": "Other" } + { + "text": "English language only", + "value": "English language only" + }, + { + "text": "English and other", + "value": "English and other" + }, + { + "text": "Other", + "value": "Other" + } ] }, { @@ -1206,13 +1613,22 @@ "name": "ULmwPo", "type": "string", "items": [ - { "text": "UK Health Security Agency", "value": "UKHSA" }, + { + "text": "UK Health Security Agency", + "value": "UKHSA" + }, { "text": "Office for Health Improvement and Disparities", "value": "OHID" }, - { "text": "NHS England Public Health", "value": "NHSE" }, - { "text": "Local Authority Public Health", "value": "LAPH" } + { + "text": "NHS England Public Health", + "value": "NHSE" + }, + { + "text": "Local Authority Public Health", + "value": "LAPH" + } ] }, { @@ -1220,7 +1636,11 @@ "name": "tOKEMX", "type": "string", "items": [ - { "text": "Evidence gap", "description": "", "value": "Evidence gap" }, + { + "text": "Evidence gap", + "description": "", + "value": "Evidence gap" + }, { "description": "", "text": "Updating previous evidence", @@ -1236,7 +1656,10 @@ "text": "UKHSA priority topic", "value": "UKHSA priority topic" }, - { "text": "Other", "value": "Other" } + { + "text": "Other", + "value": "Other" + } ] }, { @@ -1244,10 +1667,22 @@ "name": "OGYVAD", "type": "string", "items": [ - { "text": "last 3 years", "value": "3 years" }, - { "text": "last 5 years", "value": "5 years" }, - { "text": "Not applicable", "value": "Not applicable" }, - { "text": "Other", "value": "Other" } + { + "text": "last 3 years", + "value": "3 years" + }, + { + "text": "last 5 years", + "value": "5 years" + }, + { + "text": "Not applicable", + "value": "Not applicable" + }, + { + "text": "Other", + "value": "Other" + } ] }, { @@ -1275,7 +1710,10 @@ "text": "Incident response", "value": "Incident response" }, - { "text": "Other", "value": "Other" } + { + "text": "Other", + "value": "Other" + } ] }, { @@ -1283,7 +1721,10 @@ "name": "AUYYCW", "type": "string", "items": [ - { "text": "Literature search", "value": "Literature search" }, + { + "text": "Literature search", + "value": "Literature search" + }, { "text": "Current awareness alerts", "value": "Current awareness alerts" @@ -1312,7 +1753,10 @@ "text": "Contribution to an organisational priority or strategic objective", "value": "Contribution to an organisational priority or strategic objective" }, - { "text": "An incident response", "value": "An incident response" } + { + "text": "An incident response", + "value": "An incident response" + } ] }, { @@ -1320,26 +1764,60 @@ "name": "iTBoCy", "type": "string", "items": [ - { "description": "", "text": "North East", "value": "North East" }, - { "description": "", "text": "North West", "value": "North West" }, - { "text": "Yorkshire and Humber", "value": "Yorkshire and Humber" }, - { "text": "East Midlands", "value": "East Midlands" }, - { "text": "West Midlands", "value": "West Midlands" }, + { + "description": "", + "text": "North East", + "value": "North East" + }, + { + "description": "", + "text": "North West", + "value": "North West" + }, + { + "text": "Yorkshire and Humber", + "value": "Yorkshire and Humber" + }, + { + "text": "East Midlands", + "value": "East Midlands" + }, + { + "text": "West Midlands", + "value": "West Midlands" + }, { "description": "", "text": "East of England", "value": "East of England" }, - { "description": "", "text": "London", "value": "London" }, - { "description": "", "text": "South East", "value": "South East" }, - { "description": "", "text": "South West", "value": "South West" } + { + "description": "", + "text": "London", + "value": "London" + }, + { + "description": "", + "text": "South East", + "value": "South East" + }, + { + "description": "", + "text": "South West", + "value": "South West" + } ] }, { "title": "Yes", "name": "IQAoJu", "type": "string", - "items": [{ "text": "Agree", "value": "Agree" }] + "items": [ + { + "text": "Agree", + "value": "Agree" + } + ] }, { "title": "Current awareness alerts options", @@ -1354,26 +1832,91 @@ "text": "Antimicrobial Resistance", "value": "Antimicrobial Resistance" }, - { "text": "COVID-19 Re-infection", "value": "COVID-19 Re-infection" }, + { + "text": "COVID-19 Re-infection", + "value": "COVID-19 Re-infection" + }, { "text": "Global Public Health Security", "value": "Global Public Health Security" }, - { "text": "Healthy Ageing", "value": "Healthy Ageing" }, - { "text": "Infection", "value": "Infection" }, - { "text": "Long-COVID", "value": "Long-COVID" }, - { "text": "Mental Health", "value": "Mental Health" }, - { "text": "Musculoskeletal Health", "value": "Musculoskeletal Health" }, + { + "text": "Healthy Ageing", + "value": "Healthy Ageing" + }, + { + "text": "Infection", + "value": "Infection" + }, + { + "text": "Long-COVID", + "value": "Long-COVID" + }, + { + "text": "Mental Health", + "value": "Mental Health" + }, + { + "text": "Musculoskeletal Health", + "value": "Musculoskeletal Health" + }, { "text": "Nutrition, Diet & Obesity", "value": "Nutrition, Diet & Obesity" }, - { "text": "Vector Borne Disease", "value": "Vector Borne Disease" } + { + "text": "Vector Borne Disease", + "value": "Vector Borne Disease" + } ] } ], "sections": [], "conditions": [ + { + "displayName": "Other", + "name": "BOkxIN", + "value": { + "name": "Other", + "conditions": [ + { + "field": { + "name": "ZpmVWP", + "type": "RadiosField", + "display": "Organisation" + }, + "operator": "is", + "value": { + "type": "Value", + "value": "Other", + "display": "Other" + } + } + ] + } + }, + { + "displayName": "Not other", + "name": "dhBTmP", + "value": { + "name": "Not other", + "conditions": [ + { + "field": { + "name": "ZpmVWP", + "type": "RadiosField", + "display": "Organisation" + }, + "operator": "is not", + "value": { + "type": "Value", + "value": "Other", + "display": "Other" + } + } + ] + } + }, { "displayName": "General route", "name": "mZdZMC", @@ -1533,7 +2076,11 @@ "display": "Which organisation do you work for?" }, "operator": "is", - "value": { "type": "Value", "value": "LAPH", "display": "LAPH" } + "value": { + "type": "Value", + "value": "LAPH", + "display": "LAPH" + } } ] } @@ -1551,7 +2098,11 @@ "display": "Which organisation do you work for?" }, "operator": "is", - "value": { "type": "Value", "value": "Other", "display": "Other" } + "value": { + "type": "Value", + "value": "Other", + "display": "Other" + } } ] } @@ -1721,23 +2272,36 @@ "display": "Which organisation do you work for?" }, "operator": "is", - "value": { "type": "Value", "value": "UKHSA", "display": "UKHSA" } + "value": { + "type": "Value", + "value": "UKHSA", + "display": "UKHSA" + } } ] } } ], "fees": [], - "outputs": [], + "outputs": [ + { + "name": "eBBQeD", + "title": "test-output", + "type": "webhook", + "outputConfiguration": { + "url": "https://webhook.site/e87402d7-a93e-406c-bf13-ca72f3973bbc", + "allowRetry": true + } + } + ], "version": 2, "skipSummary": false, - "feeOptions": { - "allowSubmissionWithoutPayment": true, - "maxAttempts": 3, - "showPaymentSkippedWarningPage": false + "phaseBanner": { + "phase": "beta" + }, + "feedback": { + "feedbackForm": true, + "url": "/kls-feedback" }, - "declaration": "", - "name": "kls-service-enquiry-v3-pt2-1", - "feedback": { "feedbackForm": true, "url": "" }, - "phaseBanner": { "phase": "beta" } -} + "jwtKey": "23029328asdasd3923208902de902" +} \ No newline at end of file diff --git a/runner/src/server/views/partials/summary-detail.html b/runner/src/server/views/partials/summary-detail.html index 823480455e..c380b514ec 100644 --- a/runner/src/server/views/partials/summary-detail.html +++ b/runner/src/server/views/partials/summary-detail.html @@ -2,8 +2,8 @@ {% macro summaryDetail(data) %} {% set isRepeatableSection = (data.items[0] | isArray) %} - {% if not isRepeatableSection %} -Check your spam or junk folder.
If you’ve still not received the email in 5 minutes, you need to request a new link.
Check your spam or junk folder.
If you’ve still not received the email in 5 minutes, you need to request a new link.
We’ve sent another email to {{ email }}.
Click the link in the email to continue to report an outbreak.
Check your spam or junk folder.
If you’ve still not received the email in 5 minutes, you need to request a new link.
We’ve sent another email to {{ email }}.
Click the link in the email to continue to report an outbreak.
Check your spam or junk folder.
If you’ve still not received the email in 5 minutes, you need to request a new link.
Click the link in the email to continue to report an outbreak.
Check your spam or junk folder.
If you’ve not received the email, you can resubmit the email in 5 minutes.
Click the link in the email to continue to access the Knowledge and Library Services form.
Check your spam or junk folder.
If you’ve not received the email, you can resubmit the email in 5 minutes.
We’ve sent another email to {{ email }}.
Click the link in the email to continue to report an outbreak.
Check your spam or junk folder.
If you’ve still not received the email in 5 minutes, you need to request a new link.
We’ve sent another email to {{ email }}.
Click the link in the email to continue to with your enquiry.
Check your spam or junk folder.
If you’ve still not received the email in 5 minutes, you need to request a new link.
Click the link in the email to continue to access the Knowledge and Library Services form.
Check your spam or junk folder.
If you’ve not received the email, you can resubmit the email in 5 minutes.
Check your spam or junk folder.
If you’ve still not received the email in 5 minutes, you need to request a new link.
We’ve sent another email to {{ email }}.
Click the link in the email to continue to access the Knowledge and Library Services.
Check your spam or junk folder.
If you’ve still not received the email in 5 minutes, you need to request a new link.
You are not eligable to use this service, however you can still contact the KLS team via the following email: libraries@kls.ukhsa.gov.uk
" + } + ], + "next": [] + }, + { + "path": "/magic-link-redirect", + "unauthenticated": true, + "controller": "MagicLinkRedirectController", + "next": [ + { + "path": "/training-request-part-1" + } + ] + }, + { + "path": "/training-request-part-1", + "title": "Training request part 1", + "components": [ + { + "name": "sqQXGM", + "options": {}, + "type": "Details", + "title": "What types of training sessions are available?", + "content": "1:1 Session: A personalised session tailored to your individual needs.
\n\n\nSmall Group Session: Training for 2–6 participants tailored to the needs of the group.
\n\n\nTeam Session: Selecting elements from our core programme this session can be tailored to the needs of the team and will support the team in developing essential information literacy skills. The session can be developed to help the team find reliable and relevant information efficiently, understand and evaluate sources critically and to use information effectively in research and decision making.
", + "schema": {} + }, + { + "name": "dQAIPE", + "options": { + "required": true, + "customValidationMessages": { + "any.required": "Select training session type", + "any.only": "Select training session type", + "string.empty": "Select training session type" + } + }, + "type": "RadiosField", + "title": "What training session would you like us to provide?", + "list": "oegZub", + "values": { + "type": "listRef" + }, + "schema": {} + }, + { + "name": "WIIAQE", + "options": { + "required": true, + "customValidationMessages": { + "number.base": "Enter number of participants", + "number.min": "Number of participants must be greater than 0" + } + }, + "hint": "Enter number of participants", + "type": "NumberField", + "title": "What is the approximate number of participants?", + "schema": { + "min": 1 + } + }, + { + "name": "FaHtQr", + "options": { + "required": true, + "customValidationMessages": { + "any.required": "Select preferred delivery type", + "any.only": "Select preferred delivery type", + "string.empty": "Select preferred delivery type" + } + }, + "type": "RadiosField", + "title": "What is your preferred delivery type?", + "list": "eVlDbd", + "values": { + "type": "listRef" + } + }, + { + "name": "CncFtZ", + "options": { + "required": false + }, + "type": "TextField", + "title": "If you selected \"In person\", please indicate a region or site" + } + ], + "next": [ + { + "path": "/training-request-part-2" + } + ] + }, + { + "title": "Enquiry summary", + "path": "/summary", + "controller": "./pages/summary.js", + "components": [ + { + "name": "PdoDpO", + "options": {}, + "type": "Para", + "content": "Please check your details and click the 'Submit' button." + } + ], + "next": [] + }, + { + "path": "/training-request-part-2", + "title": "Training request part 2", + "components": [ + { + "name": "BpuPgW", + "options": { + "required": true, + "customValidationMessages": { + "any.required": "Select an organisation", + "any.only": "Select an organisation", + "string.empty": "Select an organisation" + } + }, + "type": "RadiosField", + "title": "Which organisation do you belong to?", + "list": "UzXxgh" + }, + { + "name": "hMxELK", + "options": { + "required": true, + "customValidationMessages": { + "any.required": "Select topic(s)", + "any.only": "Select topics(s)", + "string.empty": "Select topics(s)" + } + }, + "type": "CheckboxesField", + "title": "What topic(s) would you like to cover?", + "hint": "Select all that apply", + "list": "mwdJGV", + "schema": {} + }, + { + "name": "ftUkbz", + "options": { + "required": false + }, + "type": "TextField", + "title": "If Other, please specify." + }, + { + "name": "gpIAot", + "options": { + "required": true, + "customValidationMessages": { + "any.required": "Enter team specialty", + "any.only": "Enter team specialty", + "string.empty": "Enter team specialty" + } + }, + "type": "MultilineTextField", + "title": "Please let us know your team’s area of specialism and any specific topic you would like the training to focus on. Alternatively, indicate if you would prefer a more generic training session. " + }, + { + "name": "ojkYsn", + "options": { + "required": true, + "customValidationMessages": { + "any.required": "Enter suggested date", + "any.only": "Enter suggested date", + "string.empty": "Enter suggested date" + } + }, + "type": "TextField", + "title": "Suggested date(s) for the session:" + } + ], + "next": [ + { + "path": "/about-you", + "condition": "jXoEVp" + }, + { + "path": "/about-you-kyBsdt", + "condition": "bzXkMZ" + }, + { + "path": "/about-you-bHKmvx" + } + ] + }, + { + "path": "/about-you", + "title": "About you", + "components": [ + { + "name": "zmJhdG", + "options": { + "required": true, + "customValidationMessages": { + "any.required": "Enter full name", + "any.only": "Enter full name", + "string.empty": "Enter full name" + } + }, + "type": "TextField", + "title": "Full name" + }, + { + "name": "XpqMGU", + "options": { + "required": true, + "customValidationMessages": { + "any.required": "Enter job title", + "any.only": "Enter job title", + "string.empty": "Enter job title" + } + }, + "type": "TextField", + "title": "Job title" + }, + { + "name": "UlQfrt", + "options": { + "required": true, + "customValidationMessages": { + "any.required": "Enter group", + "any.only": "Enter group", + "string.empty": "Enter group" + } + }, + "type": "SelectField", + "title": "Group", + "hint": "Tell us which UKHSA work group you belong to", + "list": "TjWRyC", + "values": { + "type": "listRef" + } + }, + { + "name": "DMyqPG", + "options": { + "required": true, + "customValidationMessages": { + "any.required": "Enter directorate", + "any.only": "Enter directorate", + "string.empty": "Enter directorate" + } + }, + "type": "SelectField", + "title": "Directorate", + "hint": "Tell us which directorate you belong to", + "list": "likBcc", + "values": { + "type": "listRef" + } + }, + { + "name": "QUKKlr", + "options": { + "required": true, + "customValidationMessages": { + "any.required": "Enter location", + "any.only": "Enter location", + "string.empty": "Enter location" + } + }, + "type": "SelectField", + "title": "Location", + "list": "TqrOXp" + }, + { + "name": "YkNqCD", + "options": { + "required": true, + "customValidationMessages": { + "any.required": "Enter an email address", + "any.only": "Enter an email address", + "string.empty": "Enter an email address", + "string.pattern.base": "Enter an email address in the correct format, like name@example.com" + } + }, + "type": "EmailAddressField", + "title": "Email address", + "nameHasError": false + }, + { + "name": "lZOKDY", + "options": { + "required": false + }, + "type": "EmailAddressField", + "title": "If you would like to copy someone into emails about this enquiry, enter their email address here" + } + ], + "next": [ + { + "path": "/summary" + } + ] + }, + { + "path": "/about-you-kyBsdt", + "title": "About you", + "components": [ + { + "name": "kGNuQf", + "options": { + "required": true, + "customValidationMessages": { + "any.required": "Enter full name", + "any.only": "Enter full name", + "string.empty": "Enter full name" + } + }, + "type": "TextField", + "title": "Full name" + }, + { + "name": "IqdqPY", + "options": { + "required": true, + "customValidationMessages": { + "any.required": "Enter job title", + "any.only": "Enter job title", + "string.empty": "Enter job title" + } + }, + "type": "TextField", + "title": "Job title" + }, + { + "name": "YkNqCD", + "options": { + "required": true, + "customValidationMessages": { + "any.required": "Enter an email address", + "any.only": "Enter an email address", + "string.empty": "Enter an email address", + "string.pattern.base": "Enter an email address in the correct format, like name@example.com" + } + }, + "type": "EmailAddressField", + "title": "Email address" + }, + { + "name": "AOadZe", + "options": { + "required": false + }, + "type": "EmailAddressField", + "title": "If you would like to copy someone into emails about this enquiry, enter their email address here" + }, + { + "name": "GjKMBs", + "options": { + "customValidationMessages": { + "any.required": "Enter location", + "any.only": "Enter location", + "string.empty": "Enter location" + } + }, + "type": "SelectField", + "title": "Location", + "list": "WyDhtv" + } + ], + "next": [ + { + "path": "/summary" + } + ] + }, + { + "path": "/about-you-bHKmvx", + "title": "About you", + "components": [ + { + "name": "eRUvFD", + "options": { + "required": true, + "customValidationMessages": { + "any.required": "Enter full name", + "any.only": "Enter full name", + "string.empty": "Enter full name" + } + }, + "type": "TextField", + "title": "Full name" + }, + { + "name": "fPTkAc", + "options": { + "required": true, + "customValidationMessages": { + "any.required": "Enter job title", + "any.only": "Enter job title", + "string.empty": "Enter job title" + } + }, + "type": "TextField", + "title": "Job title" + }, + { + "name": "UpNOKZ", + "options": { + "required": true, + "customValidationMessages": { + "any.required": "Enter an email address", + "any.only": "Enter an email address", + "string.empty": "Enter an email address", + "string.pattern.base": "Enter an email address in the correct format, like name@example.com" + } + }, + "type": "EmailAddressField", + "title": "Email address" + }, + { + "name": "cEhUTE", + "options": { + "required": false + }, + "type": "EmailAddressField", + "title": "If you would like to copy someone into emails about this enquiry, enter their email address here" + } + ], + "next": [ + { + "path": "/summary" + } + ] + } + ], + "lists": [ + { + "title": "Training session options", + "name": "oegZub", + "type": "string", + "items": [ + { + "text": "1:1 session", + "description": "", + "value": "1:1 session" + }, + { + "text": "Small group session ", + "description": "", + "value": "Small group session " + }, + { + "description": "", + "text": "Team session", + "value": "Team session" + } + ] + }, + { + "title": "Delivery type", + "name": "eVlDbd", + "type": "string", + "items": [ + { + "text": "Online via teams", + "value": "Online via teams" + }, + { + "text": "In person", + "description": "", + "value": "In person" + } + ] + }, + { + "title": "Topic list", + "name": "mwdJGV", + "type": "string", + "items": [ + { + "text": "KLS overview", + "value": "KLS overview" + }, + { + "text": "Literature searching: finding the evidence", + "value": "Literature searching: finding the evidence" + }, + { + "text": "Searching for grey literature", + "value": "Searching for grey literature" + }, + { + "text": "EndNote: an introduction", + "value": "EndNote: an introduction" + }, + { + "text": "EndNote: cite while you write", + "value": "EndNote: cite while you write" + }, + { + "text": "Endnote: collaboration and sharing", + "value": "Endnote: collaboration and sharing" + }, + { + "text": "Accessing resources", + "value": "Accessing resources" + }, + { + "text": "Other", + "value": "Other" + } + ] + }, + { + "title": "user group", + "name": "UzXxgh", + "type": "string", + "items": [ + { + "text": "UK Health Security Agency", + "value": "UKHSA" + }, + { + "text": "Office for Health Improvement and Disparities", + "value": "OHID" + }, + { + "text": "NHS England", + "value": "NHSE" + }, + { + "text": "Local Authority Public Health", + "value": "LAPH" + } + ] + }, + { + "title": "user groups", + "name": "tlYKzK", + "type": "string", + "items": [ + { + "text": "UKHSA", + "value": "UKHSA" + }, + { + "text": "OHID", + "value": "OHID" + }, + { + "text": "NHSE", + "value": "NHSE" + }, + { + "text": "LAPH", + "value": "LAPH" + }, + { + "text": "Other", + "value": "Other" + } + ] + }, + { + "title": "Organisation", + "name": "uIwkHV", + "type": "string", + "items": [ + { + "text": "UK Health Security Agency", + "value": "UKHSA" + }, + { + "text": "Office for Health Improvement and Disparities", + "value": "Office for Health Improvement and Disparities (OHID)" + }, + { + "text": "NHS England Public Health", + "value": "NHS England Public Health" + }, + { + "text": "Local Authority Public Health", + "value": "Local Authority Public Health" + }, + { + "text": "Other", + "value": "Other" + } + ] + }, + { + "title": "Location: LAPH", + "name": "WyDhtv", + "type": "string", + "items": [ + { + "text": "North East", + "value": "North East" + }, + { + "text": "North West", + "value": "North West" + }, + { + "text": "Yorkshire & Humber", + "value": "Yorkshire & Humber" + }, + { + "text": "East Midlands", + "value": "East Midlands" + }, + { + "text": "West Midlands", + "value": "West Midlands" + }, + { + "text": "East of England", + "value": "East of England" + }, + { + "text": "London", + "value": "London" + }, + { + "text": "South East", + "value": "South East" + }, + { + "text": "South West", + "value": "South West" + } + ] + }, + { + "title": "UKHSA Group", + "name": "TjWRyC", + "type": "string", + "items": [ + { + "text": "Chief Scientific Officer (CSO)", + "value": "Chief Scientific Officer (CSO)" + }, + { + "text": "Chief Medical Advisor (CMA)", + "value": "Chief Medical Advisor (CMA)" + }, + { + "text": "Chief Data Officer (CDO)", + "value": "Chief Data Officer (CDO)" + }, + { + "text": "Chief Operating Officer (COO)", + "value": "Chief Operating Officer (COO)" + } + ] + }, + { + "title": "Directorate", + "name": "likBcc", + "type": "string", + "items": [ + { + "text": "CDO: Analysis and Intelligence Assessment", + "value": "CDO: Analysis and Intelligence Assessment" + }, + { + "text": "CDO: Data Protection, Security and Technology Services", + "value": "CDO: Data Protection, Security and Technology Services" + }, + { + "text": "CDO: Digital and Data", + "value": "CDO: Digital and Data" + }, + { + "text": "CDO: Digital and Technology Transition", + "value": "CDO: Digital and Technology Transition" + }, + { + "text": "CMA: Emergency Preparedness, Resilience and Response (EPRR) and Response Operations", + "value": "CMA: Emergency Preparedness, Resilience and Response (EPRR) and Response Operations" + }, + { + "text": "CMA: Epidemic and Emerging Infections", + "value": "CMA: Epidemic and Emerging Infections" + }, + { + "text": "CMA: Global Health Protection", + "value": "CMA: Global Health Protection" + }, + { + "text": "CMA: Health Equity and Clinical Governance", + "value": "CMA: Health Equity and Clinical Governance" + }, + { + "text": "CMA: Health Protection in Regions", + "value": "CMA: Health Protection in Regions" + }, + { + "text": "CMA: Public Health Programmes", + "value": "CMA: Public Health Programmes" + }, + { + "text": "COO: Commercial, Vaccines and Countermeasures Supply", + "value": "COO: Commercial, Vaccines and Countermeasures Supply" + }, + { + "text": "COO: Communications", + "value": "COO: Communications" + }, + { + "text": "COO: Finance, Performance, Risk and Assurance", + "value": "COO: Finance, Performance, Risk and Assurance" + }, + { + "text": "COO: People and Workplace", + "value": "COO: People and Workplace" + }, + { + "text": "COO: Public Inquiry", + "value": "COO: Public Inquiry" + }, + { + "text": "COO: Strategy and Policy", + "value": "COO: Strategy and Policy" + }, + { + "text": "COO: Transformation", + "value": "COO: Transformation" + }, + { + "text": "CSO: Public Health Microbiology", + "value": "CSO: Public Health Microbiology" + }, + { + "text": "CSO: Radiation, Chemicals, Climate and Environmental Hazards", + "value": "CSO: Radiation, Chemicals, Climate and Environmental Hazards" + }, + { + "text": "CSO: Science Strategy and Evidence", + "value": "CSO: Science Strategy and Evidence" + }, + { + "text": "CSO: Scientific Facilities and Performance", + "value": "CSO: Scientific Facilities and Performance" + } + ] + }, + { + "title": "Location: UKHSA", + "name": "TqrOXp", + "type": "string", + "items": [ + { + "text": "Chilton", + "value": "Chilton" + }, + { + "text": "Colindale", + "value": "Colindale" + }, + { + "text": "Porton", + "value": "Porton" + }, + { + "text": "Other", + "value": "Other" + } + ] + } + ], + "sections": [], + "conditions": [ + { + "displayName": "UKHSA path", + "name": "jXoEVp", + "value": { + "name": "UKHSA path", + "conditions": [ + { + "field": { + "name": "BpuPgW", + "type": "RadiosField", + "display": "Which organisation do you belong to?" + }, + "operator": "is", + "value": { + "type": "Value", + "value": "UKHSA", + "display": "UKHSA" + } + } + ] + } + }, + { + "displayName": "LAPH path", + "name": "bzXkMZ", + "value": { + "name": "LAPH path", + "conditions": [ + { + "field": { + "name": "BpuPgW", + "type": "RadiosField", + "display": "Which organisation do you belong to?" + }, + "operator": "is", + "value": { + "type": "Value", + "value": "LAPH", + "display": "LAPH" + } + } + ] + } + }, + { + "displayName": "Other", + "name": "BOkxIN", + "value": { + "name": "Other", + "conditions": [ + { + "field": { + "name": "ZpmVWP", + "type": "RadiosField", + "display": "Organisation" + }, + "operator": "is", + "value": { + "type": "Value", + "value": "Other", + "display": "Other" + } + } + ] + } + }, + { + "displayName": "Not other", + "name": "dhBTmP", + "value": { + "name": "Not other", + "conditions": [ + { + "field": { + "name": "ZpmVWP", + "type": "RadiosField", + "display": "Organisation" + }, + "operator": "is not", + "value": { + "type": "Value", + "value": "Other", + "display": "Other" + } + } + ] + } + } + ], + "fees": [], + "outputs": [ + { + "name": "eBBQeD", + "title": "test-output", + "type": "webhook", + "outputConfiguration": { + "url": "${KLSTrainingWebhook}", + "allowRetry": true + } + } + ], + "version": 2, + "skipSummary": false, + "feeOptions": { + "allowSubmissionWithoutPayment": true, + "maxAttempts": 3, + "showPaymentSkippedWarningPage": false + }, + "jwtKey": "${KLSTrainingJwtKey}" +} \ No newline at end of file From 5acb4c9d4bf7b6d8d080a0ec226e9a70f46d29f6 Mon Sep 17 00:00:00 2001 From: kitttangLorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam eget volutpat tortor. Duis placerat ornare ipsum, eget molestie arcu tincidunt eget. Nam luctus arcu eu pulvinar mattis. Sed lobortis venenatis quam vel semper. Nunc lacinia augue eu nisl placerat, quis dignissim diam rutrum. Vestibulum sed leo pellentesque, gravida nibh at, consequat purus. Proin ultrices, arcu ac cursus accumsan, tellus mauris tincidunt erat, quis pellentesque sapien tortor sit amet erat.