Releases: nhsuk/manage-vaccinations-in-schools
v2.0.0 (release candidate 2)
Post-deploy tasks
notify_log_entries:populate_recipient
vaccines:seed[td_ipv]
vaccines:seed[menacwy]
class_imports:assign_year_groups
patient_sessions:add_to_clinic
- Update https://www.notifications.service.gov.uk/services/629645d8-feb9-4fc1-93f4-759c93ac0e21/templates/25473aa7-2d7c-4d1d-b0c6-2ac492f737c3 content to match https://www.notifications.service.gov.uk/services/629645d8-feb9-4fc1-93f4-759c93ac0e21/templates/df3af79e-b8d0-4bbd-a5d2-573ba11be4d9
- Add Td/IPV and MenACWY to Coventry
What's Changed
Mavis v2.0 introduces support for the doubles (jointly administered Teenage 3-in-1 booster and MenACWY vaccines) programmes alongside HPV. This includes the ability to upload cohorts for those programmes, upload historical vaccination records, for parents / guardians to receive consent requests, reminders and other comms, as well as give or refuse consent for those programmes.
Mavis allows uploading patients across once across the HPV, Td/IPV and MenACWY programmes
- MAV-335 Allow Td/IPV and MenACWY cohort uploads
Mavis allows uploads of historic and current Td/IPV and MenACWY vaccinations
- MAV-423 Vaccination uploads: make VACCINE_GIVEN column mandatory
- MAV-426 Allow importing vaccinations administered by someone other than the specific SAIS team (primary source = false)
- MAV-666 Help info on CSV uploads should be updated to reflect programme specific Dose Sequence validation
- MAV-670 Dose Sequence validation for Td/IPV Revaxis is wrong (rules to be defined)
- MAV-671 Vaccination Location set to Unknown for vaccination upload
- MAV-712 Issues with uploaded Td/IPV and MenACWY vaccs records
- MAV-334 Determine eligibility for Td/IPV and MenACWY based on uploaded vaccs records
- MAV-336 Allow Td/IPV and MenACWY vaccination uploads
- MAV-368 Add the two additional vaccine types for doubles
- MAV-744 Historical Vaccination record is throwing error when session id has value
- MAV-753 Vaccination record is not throwing error when program is not avialable in current session
Parents and guardians can give or refuse consent for the Td/IPV and MenACWY programmes digitally or via paper form
- MAV-402 Review and update content in ’Give or refuse consent‘
- MAV-405 Paper consent forms for MenACWY and Td/IPV
- MAV-431 Under the hood: associate Gillick assessments with programmes
- MAV-692 Activity Log for triage emails does not specify programme (though can be worked out from timestamps of triage event log entry)
- MAV-705 HPV should not appear as in option in Menacwy / TdIPV consent journey
- MAV-706 Consent journey confusing when just selecting on of MenACWY/TdIPV
- MAV-707 Health questions do not ask about previous vaccination history
- MAV-713 Child record is not flagged for triage when Td/IPV vaccination record which is recorded as anything other than a fifth dose / second booster
- MAV-717 Consent Confimation Panel shows dates in the past
- MAV-738 When refusing both doubles vaccines incorrect consent message shown
- MAV-268 Set up health questions for Td/IPV and MenACWY
- MAV-677 Update all activity log entries to state which programme(s) they relate to
- MAV-683 Update confirmation panel on parental consent journey
- MAV-369 Give consent for Td/IPV & MenACWY
- MAV-392 Add doubles consent form PDFs
- MAV-690 Triaged a Year 8 child for HPV but email said she will be given Td/IPV, Activity Log also said triage had been for Td/IPV
- MAV-742 Inconsistent "consent given" wording across different programmes
- MAV-701 Results pane shows 'Caption' when no results for filter
SAIS Nurses can record that someone is already vaccinated at any time
- MAV-743 Student is still appearing in Consent check list when nurse updated it as already vaccinated
- MAV-696 SAIS Nurses can record that someone is already vaccinated at any time
Mavis can automatically send comms for the Td/IPV and MenACWY programmes, alongside the HPV programme
- MAV-739 Where more than one session text message is misleading
- MAV-271 Doubles: consent requests and reminders
- MAV-693 Consent emails sent for a Child who moves from Year 8 to Year 9 still only mention HPV
The session overview page shows information for HPV, Td/IPV and MenACWY programmes (as appropriate)
- MAV-333 Session overview page: show separate parent consent form links for HPV and doubles
- MAV-270 Session overview page: new design
Sessions can be set up with Td/IPV, MenACWY and/or HPV programmes
- MAV-396 Select programme and cohorts to administer in a session
- MAV-676 Programmes allowed to be removed from Sessions even when a session for that programme has already happened
Under the hood changes to prepare for Td/IPV and MenACWY triage, recording and reporting
- MAV-715 Feature flag to turn off triage and recording functionality for Td/IPV and MenACWY
Other features
MAV-663 Children can be invited to a community clinic without moving them out of a school session
MAV-410 Mavis allows partial class lists uploads for certain year groups
MAV-411, MAV-412 Add imports to top-level navigation, make important notices more prominent on the home page
Bug fixes
MAV-662 Patients with invalid NHS numbers should be added back to session after the NHS number is corrected
MAV-245 Verbal consent: recording "delay vaccination and invite to clinic" when triaging should invite the patient to clinic
Under the hood changes
- Bump amazing_print from 1.6.0 to 1.7.2 by @dependabot in #3055
- Bump good_job from 4.8.2 to 4.9.0 by @dependabot in #3056
- Bump aws-sdk-iam from 1.115.0 to 1.118.0 by @dependabot in #3057
- Bump annotaterb from 4.13.0 to 4.14.0 by @dependabot in #3054
- Bump aws-sdk-accessanalyzer from 1.65.0 to 1.68.0 by @dependabot in #3058
- Bump prettier from 3.5.1 to 3.5.2 by @dependabot in #3061
- Bump rack from 3.1.9 to 3.1.10 in the bundler group by @dependabot in #2998
- Bump the bundler group with 2 updates by @dependabot in #3004
- Terraform migration by @TheOneFromNorway in #2970
- MAV-384: Create mavis and terraform deployments by @TheOneFromNorway in #3003
- MAV-384: Modify application configuration by @TheOneFromNorway in #2997
- MAV-332: Ensure log group is deleted by tf destroy by @TheOneFromNorway in #3052
- MAV-384: Fix bug in getting DB_NAME by @TheOneFromNorway in #3012
- Setup data for multiple programmes when seeding the db by @mikejamesthompson in #3007
- Bootstrap cleanup by @bogsi17 in #3085
- Add continuous deployment workflow by @bogsi17 in #3072
- Avoid N+1 issue when calculating stats by @thomasleese in #3086
- Avoid N+1 issue when rendering session table by @thomasleese in #3084
- Mavis-2020 Add build workflow by @bogsi17 in #2974
- Add deployment pipelines by @bogsi17 in #3020
- Remove data migration by @thomasleese in #3090
- Add GraphRecords module. by @misaka in #3010
- Refactor session factory by @thomasleese in #3082
- Changes for 2.0.0 by @thomasleese in #2977
- Preload programmes for original_session by @tvararu in #3022
Full Changelog: v1.5.0...v2.0.0-rc2
v2.0.0 (release candidate 1)
Post-deploy tasks
notify_log_entries:populate_recipient
vaccines:seed[td_ipv]
vaccines:seed[menacwy]
class_imports:assign_year_groups
patient_sessions:add_to_clinic
- Update https://www.notifications.service.gov.uk/services/629645d8-feb9-4fc1-93f4-759c93ac0e21/templates/25473aa7-2d7c-4d1d-b0c6-2ac492f737c3 content to match https://www.notifications.service.gov.uk/services/629645d8-feb9-4fc1-93f4-759c93ac0e21/templates/df3af79e-b8d0-4bbd-a5d2-573ba11be4d9
- Add Td/IPV and MenACWY to Coventry
What's Changed
- Terraform migration by @TheOneFromNorway in #2970
- Remove line about header row not counting by @thomasleese in #2979
- Mavis-2020 Add build workflow by @bogsi17 in #2974
- Pass programme to components by @thomasleese in #2978
- Filter programme stats by programme by @thomasleese in #2981
- Show paper consent form links for each programme by @thomasleese in #2982
- Use programme to generate patient session status by @thomasleese in #2983
- Add programme selection to patient session pages by @thomasleese in #2984
- Update consent links to show per programme by @thomasleese in #2994
- Add MenACWY and Td/IPV delivery methods by @thomasleese in #2995
- Bump rack from 3.1.9 to 3.1.10 in the bundler group by @dependabot in #2998
- Add ability to assign programmes to sessions by @thomasleese in #2996
- Invalidate self-consents on a schedule by @thomasleese in #3000
- Add minimum doubles session page design by @thomasleese in #3002
- MAV-384: Create mavis and terraform deployments by @TheOneFromNorway in #3003
- MAV-384: Modify application configuration by @TheOneFromNorway in #2997
- Setup data for multiple programmes when seeding the db by @mikejamesthompson in #3007
- Increase Td/IPV maximum dose sequence by @thomasleese in #3005
- Validate date of vaccination is after date of birth by @thomasleese in #3006
- Change how clinics work to support doubles by @thomasleese in #2999
- Update consent journey for doubles by @tvararu in #2959
- Invite patients to clinics by @thomasleese in #3008
- Add links to consent form start page by @tvararu in #3009
- Add programme to activity log entries by @thomasleese in #3011
- Support special values for DOSE_SEQUENCE by @thomasleese in #3013
- Add MenACWY and Td/IPV health questions by @thomasleese in #3016
- Consider dose sequence when determining vaccination status by @thomasleese in #3015
- Order programmes by name by @thomasleese in #3018
- MAV-384: Fix bug in getting DB_NAME by @TheOneFromNorway in #3012
- Simplify seeds generation by @thomasleese in #3021
- Send session notifications for all programmes by @thomasleese in #3019
- Make the secondary nav on patient session page sticky by @mikejamesthompson in #3014
- Fix main navigation overflow dropdown positioning by @mikejamesthompson in #3017
- Preload programmes for original_session by @tvararu in #3022
- Associate consent forms with multiple programmes by @thomasleese in #3023
- Show consent form link for doubles by @thomasleese in #3025
- Customise consent email templates by group by @thomasleese in #3029
- Associate consent notifications with multiple programmes by @thomasleese in #3026
- Group together consent requests and reminders by @thomasleese in #3027
- Move programme selection to filter panel by @thomasleese in #3030
- Paginate session patients by @thomasleese in #3031
- Add historical MenACWY vaccines by @thomasleese in #3028
- Add vaccination criteria for doubles by @thomasleese in #3032
- Fetch programmes from patient session by @thomasleese in #3033
- Ensure consent requests are only sent to eligible patients by @thomasleese in #3034
- Triage after historical vaccinations by @thomasleese in #3035
- Allow triage without consent by @thomasleese in #3036
- Add deployment pipelines by @bogsi17 in #3020
- Changes for 2.0.0 by @thomasleese in #2977
- Bump the bundler group with 2 updates by @dependabot in #3004
- Update PDF paper consent forms for doubles by @paulrobertlloyd in #3037
- Pluralise GOV.UK Notify vaccination personalisation by @thomasleese in #3038
- Make sure vaccination outcome can be edited by @thomasleese in #3039
- Rework how triage works for incomplete vaccination history by @thomasleese in #3040
- Update health questions for Td/IPV and MenACWY by @thomasleese in #3041
- Show programme separate to vaccine by @thomasleese in #3042
- Add vaccine to vaccination records by @thomasleese in #3043
- Add PROGRAMME column when importing vaccination records by @thomasleese in #3045
- Allow dose_sequence to be optional by @thomasleese in #3047
- Add SESSION_ID column when importing vaccination records by @thomasleese in #3046
- Combine health questions when giving consent by @tvararu in #3044
- Add custom dose sequence values per programme by @thomasleese in #3048
- Make CARE_SETTING optional for all programmes by @thomasleese in #3049
- Allow parents to consent to just one vaccine by @tvararu in #3024
- Allow vaccine and batch to be optional by @thomasleese in #3050
- Add Td/IPV and MenACWY email templates by @thomasleese in #3053
- Allow delivery site to be optional by @thomasleese in #3051
- Bump amazing_print from 1.6.0 to 1.7.2 by @dependabot in #3055
- Bump good_job from 4.8.2 to 4.9.0 by @dependabot in #3056
- Bump aws-sdk-iam from 1.115.0 to 1.118.0 by @dependabot in #3057
- Bump annotaterb from 4.13.0 to 4.14.0 by @dependabot in #3054
- Bump aws-sdk-accessanalyzer from 1.65.0 to 1.68.0 by @dependabot in #3058
- Bump prettier from 3.5.1 to 3.5.2 by @dependabot in #3061
- Update chec...
v1.5.0
Full Changelog: v1.4.0...v1.5.0
This was released on 2025-02-24.
New features
MAVIS-2011 Vaccination uploads: make VACCINE_GIVEN
column mandatory when importing immunisations #2948
To support the upload of doubles vaccinations, the VACCINE_GIVEN
column will be made mandatory.
When uploading offline recording spreadsheets, nurses will have to provide a value for the name of the vaccination in this column, even if it was not given to the child, so that Mavis can correctly link the offline record with the correct programme.
MAVIS-2012 Always sort tables of children by surname not first name #2966
Tables of children are now presented sorted by surname and then given name instead of vice versa.
MAVIS-1428 Allow importing vaccinations administered by someone other than the specific SAIS team #2942
Mavis now allows uploads of vaccination records for vaccinations not administered by the SAIS team.
Bug fixes
MAVIS-1785 Invalid file upload feedback: row number should count header row #2947 INC0261683
Changes Mavis’s import issues screen so that row numbers for import issues now match up exactly with row numbers in Excel.
MAVIS-1854 Mavis not updating invalidated child record in PDS after NHS number update #2912
Mavis now updates an invalidated child record from the Personal Demographics Service after the NHS number is updated by a SAIS team member.
MAVIS-1834 When deleting the NHS number from a patient record, Mavis attempts to merge the record with another record with no NHS number #2914
Mavis no longer suggests a merging of two records without an NHS number when no other details match.
MAVIS-1931 Date fields in Mavis report cannot be formatted so cannot be filtered #2913 INC0271233
Date fields in the Mavis CSV report are now formatted as YYYY-MM-DD so that they can be filtered and sorted in Excel.
MAVIS-1828 Documentation of vaccination record upload does not include mention of supported dd/mm/yyyy format #2946
The in-application documentation for vaccination uploads as been updated to clarify that dates in this file can be formatted as DD/MM/YYYY as well as YYYYMMDD.
MAVIS-1918 Children with consent refused being mistakenly proposed to move to community clinic when closing session #2969 INC0273411
When a session is closed, Mavis now only moves patients to clinic that have not had the vaccine due to a lack of consent response, or if chosen to delay to a clinic session.
MAVIS-1821 For some patients, when you try to add an NHS number to a duplicate record so that you can merge them, you get an error saying: "NHS number is already assigned to a different patient" #2967 INC0267761
Mavis is now able to merge child details in a cohort upload with the relevant patient record, even after the child has been removed from the cohort.
MAVIS-2013 If you invalidate one consent for a child but a different parent responds, the invalid parent gets comms about the child's vaccination #2939 INC0278169
Mavis now does not send notifications about a child’s vaccines to a parental contact if their consent has been invalidated in the system.
MAVIS-2000 If a child is added to a clinic AND vaccinated in school, you can't see in the clinic area that they are already vaccinated #2965 INC0278158
Mavis now shows a child’s vaccinations when viewed in the clinic, even if the vaccination was given in a school.
MAVIS-2018 Children vaccinated in clinics are not being shown as vaccinated in their respective school #2965
Mavis now shows a child’s vaccination when they’re viewed in their school, even if the vaccination took place in a community clinic.
This issue is equivalent to MAVIS-2000 and was resolved by the same software change.
Under the hood
- Replace cohorts with organisations directly #2783
- Remove mailers #2850
- Stop using recipient column #2899
- Add GILLICK_NOTIFY_PARENTS column to report #2918
- Add feature flag for GILLICK_NOTIFY_PARENTS #2972
- Remove duplicate preloading #2919
- Filter triage and consents by programme #2939
- Decouple vaccination records from patient sessions #2938
- MAVIS-1996 Attach gillick assessments to programmes #2945
- Don't create sessions when importing #2944
- Import cohorts and immunisations across multiple programmes #2958
- Add Td/IPV and MenACWY programmes #2961
- Add Td/IPV and MenACWY vaccines #2964
- Add instruction for removing parent from child #2943
- Avoid double ORGANISATION_CODE errors #2971
Dependency bumps
- Bump sass from 1.83.4 to 1.84.0 #2950
- Bump net-imap from 0.5.2 to 0.5.6 #2949
- Bump esbuild from 0.24.2 to 0.25.0 #2951
- Bump prettier from 3.4.2 to 3.5.0 #2952
- Bump phonelib from 0.10.3 to 0.10.4 #2953
- Bump webmock from 3.24.0 to 3.25.0 #2956
- Bump stackprof from 0.2.26 to 0.2.27 #2955
- Bump aws-sdk-rds from 1.264.0 to 1.269.0 #2954
- Bump esbuild from 0.24.2 to 0.25.0 #2963
v1.4.0
Full Changelog: v1.3.2...v1.4.0
This was released on 2025-02-17.
Post-deployment tasks
- Update the
RYG99CL
clinic for Coventry and the clinic for Hertfordshire in production to have a blank ODS code. - Set the
reply_to
addresses for the teams for Coventry and Hertfordshire. - Set the
privacy_notice_url
for Coventry and Hertfordshire. - Run
notify_log_entries:populate_deterministic_recipient
- Update consent request template to match temporary ones in GOV.UK Notify for both email and SMS (to include the child name and organisation-customisable data sharing agreement)
- Configure the delivery receipt callback endpoint and bearer token in GOV.UK Notify
New features
MAVIS-1783 Add child's first name to consent request communications INC0261561
Mavis now includes a child's first name in email and SMS communications send to parents so parents can tell which of their children the request relates to.
MAVIS-1781 Allow adding a child record from an unmatched consent response even if no NHS number found #2849
SAIS staff can now create new cohort child records from unmatched consent responses in all cases.
MAVIS-1755 Add reply-to support for teams #2748 #2873
Reply-to addresses on email comms can now be customised for specific teams.
MAVIS-1913 Add delivery status to parent phone numbers and email addresses #2882 #2887
Allow SAIS staff to see when comms delivery has previously failed for a parental email address or a phone number.
MAVIS-1917 Add ability to add new/edit existing vaccination record notes after-the-fact #2917
SAIS staff can now add or edit notes on a vaccination record after it was recorded on Mavis.
Bug fixes
MAVIS-1756 Add support for separate data sharing agreement and privacy policy URLs #2749
Mavis now allows a URL to a data sharing agreement for a SAIS team to be specified separately from the privacy policy URL.
MAVIS-1826 Prevent errors in the offline spreadsheet when a SAIS team has many active batches #2848
Fix an issue with displaying multiple active batch numbers in the dropdown selector for this column.
MAVIS-1877 Unable to merge patients when the patient without the NHS number has been vaccinated #2874
Fix an issue which prevented merging duplicate patients where one has been vaccinated.
MAVIS-1895 Duplicate resolution screen shows incorrect information for address/postcode changes #2884 INC0261513
When a file import changes a patient's postcode, Mavis will mark the whole address to be changed and not just the postcode, and make this clear on the duplicate resolution screen.
MAVIS-1818 Gillick should override conflicting consent and count as consent given, but the child is still in the conflicting tab #2883
Ensure that patients with both self-consent and conflicting parental consents appear in the correct tab in the "Check consent response" section of Mavis.
Under the hood
- Validate community clinic ODS code doesn't match organisation #2756
- MAVIS-1759 Allow community clinic ODS codes to be optional #2778
- MAVIS 1823 Retry Notify delivery server errors #2833
- MAVIS-1950 Make child date of birth accessible to consent request templates #2916
- Show environment banner on staging environments #2822
- Rename "Responses" header link #2852
- Refactor SMS delivery #2840
- Use GOV.UK Notify directly to send emails #2841
- Link parents with notify log entries #2870
- Add
delivery_status
column tonotify_log_entries
#2853 - Add controller to handle GOV.UK Notify callbacks #2868
- Add /sha endpoint to deployed environments #2877
- Update privacy_notice_url for Herfordshire ymls #2879
- Update Coventry onboarding #2875
- MAVIS-1879 Audit SchoolMove #2872
- Set node count to 3 in qa and test #2889
- Record school move log entries #2880
- Avoid
Time.current
in reports test #2915
Dependency bumps
- Bump debug from 1.9.2 to 1.10.0 #2862
- Bump jwt from 2.9.3 to 2.10.1 #2863
- Bump aws-sdk-iam from 1.114.0 to 1.115.0 #2864
- Bump aws-sdk-s3 from 1.177.0 to 1.178.0 #2865
- Bump aws-sdk-ecr from 1.91.0 to 1.92.0 #2866
- Bump sass from 1.83.1 to 1.83.4 #2867
- Bump phonelib from 0.10.1 to 0.10.3 #2892
- Bump aws-sdk-accessanalyzer from 1.64.0 to 1.65.0 #2893
- Bump csv from 3.3.1 to 3.3.2 #2894
- Bump mechanize from 2.12.2 to 2.14.0 #2896
- Bump @playwright/test from 1.49.1 to 1.50.0 #2897
- Bump playwright-core from 1.49.1 to 1.50.0 #2898
- Bump rubocop-govuk from 5.0.7 to 5.0.8 #2895
- Bump idb from 8.0.1 to 8.0.2 #2926
- Bump @playwright/test from 1.50.0 to 1.50.1 #2927
- Bump playwright-core from 1.50.0 to 1.50.1 #2928
- Bump aws-sdk-ec2 from 1.495.0 to 1.503.0 #2929
- Bump good_job from 4.7.0 to 4.8.2 #2930
- Bump sentry-ruby from 5.22.0 to 5.22.3 #2931
- Bump capybara_accessible_selectors from
c380ba7
toa55fca1
#2932 - Bump puma from 6.5.0 to 6.6.0 #2933
v1.3.2
Full Changelog: v1.3.1...v1.3.2
This is an emergency release planned for 2025-02-05.
Under the hood
Increase interval between PDS jobs #2937
We're still seeing the issue in production where the PDS jobs get stuck in a state where none of them can process successfully. Running some experiments by queueing the jobs manually via a Rails console suggests a 2 second interval between the jobs is handled much better, although it means that it'll take ~11 hours to process all the patients.
We are also changing the schedule for the bulk PDS lookup jobs to run at 6:00 and 18:00, instead of 0:00, 8:00, 12:00 and 18:00. This is to give the bulk jobs the time to finish before starting another one, which would likely trigger our contention issues again.
v1.3.1
Full Changelog: v1.3.0...v1.3.1
This is planned for release on 2025-02-03.
Under the hood
Increase wait time between PDS jobs #2922
We're seeing a problem in production where the queues for PDS jobs gets full with jobs that are not succeeding, likely related to the rate limit.
This wait time was added to artificially slow down the queues and prevent them from needing to be retried, so increasing this wait time should reduce the changes of the jobs ending up in this stuck state.
Increase wait time between PDS executions #2923
This increases the wait time between jobs that interact with the NHS API depending on the number of executions that we've already tried for that job. If the number is high, it suggests that jobs aren't succeeding and that we should throttle the number of jobs getting through.
v1.3.0
Post-deployment tasks
- Revert change to session reminder email template, see: https://trello.com/c/6yPgl600/1829-ensure-session-reminders-are-sent-out-when-there-is-only-one-session-date
New features
MAVIS-1812: Show separate activity log entries for a parent submitting consent and the consent being manually matched to a cohort record #2828
The activity log now includes an entry when a SAIS team member manually matches a consent form with a patient record in the cohort. The entry includes the name of the person who made the match.
MAVIS-1641: Patients with invalid NHS numbers should be re-traced using demographic details #2723
If Mavis traces a previously invalid patient record in the Personal Demographics Service and they're now marked as valid, it should add them to an upcoming session if appropriate.
MAVIS-1790: Make it easier to see the numbers of unresolved import issues, school moves, unmatched consent responses and/or important notices #2808 #2845 #2847
The Mavis navigation bar now displays the numbers of:
- unresolved import issues
- school moves
- unmatched consent responses
- important notices (for superusers)

MAVIS-1803: Make it easier to see which school a class list upload is for #2797
For class list uploads, the school name is now displayed on the upload list and on the upload details page. The upload details page also provides a link to jump to the school session.
MAVIS-1782: Archive consent consent responses from the unmatched consent responses page #2846
Mavis now allows archiving consent consent responses from the unmatched consent responses page e.g. if a parent has submitted a consent form for a sibling who isn’t eligible for the vaccine offer in this programme.
Bug fixes
MAVIS-1840: Postcode sorting issue for S-flagged records #2827
This prevents information about restricted patients being leaked inadvertently, as although the information itself was not shown, by using the sorting and filtering functionality it's possible to guess what the value might be.
Instead Mavis treats restricted patients as having no postcode for the purpose of filtering and sorting.
MAVIS-1829: Ensure session reminders are sent out when there is only one session date #2823
Fix an issue where school session reminder emails weren’t being sent when the school only had one session date.
Under the hood
- Refactor: Raise
NHS::PDS::TooManyMatches
#2758 - Refactor: Use
params.expect
#2801 - Refactor: Record PDS error responses in Sentry #2757
- Refactor: Enable strict loading globally #2771
- Refactor: Improve email address and phone number normalisation #2831
- Refactor: Remove
parent_full_name
personalisation #2829 - Refactor: Link text delivery with GOV.UK Notify IDs #2832
- Refactor: Fix typo in README #2842
- Refactor: Add .cursorrules #2807
- Performance: Increase application server node count to three in production #2909 (MAVIS-1916)
Dependency bumps
- Upgrade Ruby to 3.4.1 #2799
- Bump thruster from 0.1.9 to 0.1.10 #2834
- Bump aws-sdk-s3 from 1.176.1 to 1.177.0 #2838
- Bump activerecord-import from 1.8.1 to 2.0.0 #2837
- Bump govuk-frontend from 5.7.1 to 5.8.0 #2839
- Bump govuk-components from 5.7.1 to 5.8.0 #2836
- Bump govuk_design_system_formbuilder from 5.7.1 to 5.8.0 #2835
Issues raised since the last release
MAVIS-1877: Unable to merge patients when the patient without the NHS number has been vaccinated
Merging duplicate patient records fails with a 500
error when merging a patient with a NHS number into a vaccinated patient without a NHS number.
Workaround: SAIS teams should record vaccinations as usual, and add in the missing NHS number after the report is exported.
MAVIS-1895: Duplicate resolution screen shows incorrect information for address/postcode changes
When SAIS staff upload a class list (that has no addresses) with a child with a different postcode, the duplicate resolution screen incorrectly shows the old address with the new postcode in the duplicate record.
Workaround: Users should be advised that imports of incomplete information will merge the old data with the new, and to check the source spreadsheets before importing when this occurs.
MAVIS-1873: Duplicate records in reporting spreadsheet when an outcome is changed on the same day
Mavis's reporting includes all patient-related events even when, for example, a patient has two independent vaccination outcomes in a session such as the vaccination being delayed and then being performed. These are currently included for auditing purposes.
Workaround: Unwanted items can be removed from the reporting spreadsheet or filtered out until this issue is resolved.
MAVIS-1878: Free-text search on the global children view doesn't prioritise exact matches
Currently results are ordered alphabetically, rather than by match quality, meaning that exact matches fall below inexact but higher alphabetic matches.
Workaround: Users can page through the results to the right entry.
MAVIS-1871: Some children with consent assigned to both clinic and school sessions after school move is confirmed
Children with consent given are sitting under a Community Clinic session and School session after school move has been confirmed. The school move should have moved them from the community clinic into the school.
Workaround: Users can ask the Mavis product team to manually move users from a clinic session to the relevant school session.
MAVIS-1896: Incorrect activity log entry text for when a child record is created from an unmatched consent response
When a child record is created from an unmatched consent response, the first activity log entry for the child says "Consent response manually matched with child record". It should instead be clear that the child record has been created manually from a consent response.
Workaround: Users should be advised that child records created from consenet responses will have this as their initial activity log entry until a fix is released.
MAVIS-1918: Children with consent refused being mistakenly proposed to move to community clinic when closing session
When closing a school session, Mavis will report on outcomes from the session and which children are being moved into a community clinic. Currently Mavis is proposing to move children without consent to the community clinic. This logic has been questioned by users.
Workaround: Users can keep school sessions open without impact for the time-being until this issue is resolved.
MAVIS-1922: Parents can give consent for a child of any age
Mavis does not currently validate that the date of birth of a child referenced in a consent form is within the range that would be expected for a given cohort.
Workaround: Users should be advised to ignore or archive invalid consent responses.
MAVIS-1870: Back button on reason "Not given" goes to wrong screen
In some situations on a specific page during prescreening, clicking the in-page back link will take a user back to an incorrect page.
Workaround: Users can click the back link again to get back to the correct page.
v1.2.0
Full Changelog: v1.1.2...v1.2.0
This was released on 2025-01-20.
New features
MAVIS-1773: Allow patients who are "taught up a year" (who attend year 8 in school but who would be in a lower year purely by their date of birth) to be brought into the cohort #2780 #2826 INC0261265
If a patient record is uploaded in a class list or a cohort record, their year group is derived from their date of birth by default, according to local authority rules. There are validations that prevent patients in years 7 and below from being added to the HPV cohort.
It is now possible to override this derived year group by optionally specifying a CHILD_YEAR_GROUP
column. When specified, the year group will be taken from this value rather than derived from the date of birth.



MAVIS-1794: Always send SMS consent requests and reminders when Mavis has the phone numbers for the child's parents or carers #2824
For non-restricted patients, if Mavis has a phone number for a parent or carer, it will always use that phone number to send them consent requests and reminders.
Parents or carers can still opt-out from receiving updates about the vaccination via text message: consent confirmation, rejected, or vaccination given/not given updates.
Bug fixes
MAVIS-1774: Error when SAIS staff add NHS numbers to patient records under certain circumstances #2777 INC0267761
This fixes a bug where Mavis was unable to merge patient records if consent or session notifications were sent for that record.
MAVIS-1777: Error when SAIS staff upload a file in ISO-8859-1 encoding with validation errors #2782
This fixes a crash that happened if a user uploads a file with validation errors, and the cell causing the error contained certain special characters.
MAVIS-1793: Nurses can't sort patients if there are missing postcodes #2789 INC0266168
This fixes a bug where if a SAIS team member tries to sort on a table by postcode and some of the rows don't have a postcode, the sorting fails.
MAVIS-1804: Fix the date filtering inconsistencies between the CarePlus and Mavis reports #2796
This change ensures the CarePlus report behaves like the Mavis report by filtering vaccination records based on their technical dates (creation or last update) rather than the actual vaccination date. Specifically, any record whose creation or last update date falls within the specified date range is returned, regardless of when the vaccination itself was administered.
This primarily impacts records that were uploaded to Mavis on a different day than the actual vaccination (where the creation date is later than the vaccination date). Records added on the same day as the vaccination should remain unaffected.
MAVIS-1822: Fix crash when filtering by status on register attendance page #2781
This fixes an errors that users were seeing when attempting to filter by status on the Register Attendance page.
Under the hood
- Refactor: Remove consent_form_patient #2779
- Refactor: Patient factory: randomise the date of birth logic and align more obviously with year group calculations #2806
- Refactor: Use
Rails.env.local?
#2800 - Refactor: Update erroneously added primary school URN to the correct secondary school URN #2798
- Refactor: Update docker build step packages #2843
Dependency bumps
- Bump rubyXL from 3.4.27 to 3.4.33 #2794
- Bump Brakeman to 7.0.0 #2809
- Bump rubyzip from 2.3.2 to 2.4.1 #2811
- Bump good_job from 4.6.0 to 4.7.0 #2812
- Bump aws-sdk-ecr from 1.88.0 to 1.91.0 #2813
- Bump sass from 1.83.0 to 1.83.1 #2814
- Bump hotwire-livereload from 1.4.1 to 2.0.0 #2810
New known issues
MAVIS-1824: Missing validation when uploading a vaccination record file without entering a time of vaccination (Vaccination time left blank)
When no vaccination time is entered in the uploaded spreadsheet, the system defaults the time to 12pm. This can lead to confusion if the actual vaccination time differs from the default.
Workaround: Users should be advised to enter a time of vaccination whenever possible. If left blank, it will default to 12pm.
MAVIS-1827: List of vaccinator email addresses in the offline recording spreadsheet doesn’t show all nurses in the SAIS team
Some valid email addresses are missing from the vaccinator dropdown list in the offline recording spreadsheet, preventing users from selecting the correct address.
Workaround: Users should manually copy and paste their email address into the field, which overrides the dropdown options.
MAVIS-1828: Offline recording spreadsheet doesn't handle vaccination and expiry dates in YYYYMMDD format
When the spreadsheet is populated with dates in YYYYMMDD format, the system may not recognize them correctly, causing invalid or incorrect dates to be recorded.
Workaround: Users should record dates in a format that Excel recognizes (e.g. DD/MM/YYYY).
MAVIS-1831: Error displaying patient details with non-UTF-8 characters (e.g. Jalapeño-Pérez)
Patient details containing accented or special ISO-8859-1 encoded characters can cause errors when viewing records.
Workaround: Users should ensure that all cohort and class list spreadsheets are exported from Excel in CSV UTF-8 format.
MAVIS-1845: No audit log entry indicating that one record has been merged into another
When records are merged, the audit log does not currently capture or display this action, making it difficult to trace record merges.
Workaround: Users who suspect a record merge can contact the Mavis support team for confirmation.
v1.1.2
Full Changelog: v1.1.1...v1.1.2
This was released on 2025-01-17.
Bug fixes
MAVIS-1864: Child record showing wrong state when a refusal received after triage #2856 INC0269963
This fixes a bug where Mavis was showing safe to vaccinate status for a child who had a successful triage recorded, even though a subsequent refusal had been received for them.
MAVIS-1695: Fix vaccination status inconsistency where some children are "Ready for nurse" and others are "Safe to vaccinate" #2857
Previously, after successful triage the term “Safe to vaccinate” was used under triage outcome and was also the overall status of the child. This was different from the state shown for children who did not need triage, where the state was “ready for nurse”.
This change makes “Ready for nurse” the status used both when triage is not needed and after successful triage. “Safe to vaccinate” still appears under triage outcome (and in audit log as triage outcome).
Under the hood
- Update docker build step packages #2858
v1.1.1
Full Changelog: v1.1...v1.1.1
This was released on 2025-01-08.
New features
MAVIS-1723: Add flags to child records #2709 #2773 #2776
This adds a number of flags to the component when viewing a ‘child record’ allowing the nurses to see clearly if there are any flags on the patient.
After:
Invalid record

Sensitive record

Deceased patient

Bug fixes
MAVIS-1754: Fix typo on school movers confirmation screen #2711
Without the fix, the screen reads ‘Cohort record record’. Before:

MAVIS-1746: Don't link to patients out of the organisation #2724
If an cohort upload into Mavis resulted in the patient being moved to another SAIS team, the SAIS staff used to be able to see a link to the patient's record but would see an error page (due to no longer having access to that patient's record), which is not a good user experience.
Instead, Mavis no longer displays the link and provides an explanation why the patient is not available:

MAVIS-1768: Ensure notices are always visible #2726
We fixed a bug where notices were only visible if there was at least one deceased patient, and wouldn’t show if there were only restricted or invalidated patients.
MAVIS-1770: Fix notes error message on consents #2768
We fixed a bug where if you invalidate a consent, and don’t fill in the ‘Notes’ section, the error reads ‘can't be blank’ instead of ‘Enter notes.’ After:
MAVIS-1769: Show details from consent form if available #2772 #2786
The parental consent form page used to show the child info from the cohort record, not from the actual consent form itself. In the rare cases where this didn't match (i.e. if the SAIS staff matched the consent form to the wrong patient deliberately or by mistake), the true child info on the consent form wasn't being shown.
MAVIS-1771: Prevent double-recording of HPV vaccinations by navigating back #2737
When using the vaccinate flow it’s possible to inadvertently record two vaccinations for the same patient by navigating back to the confirmation after submitting it and then submitting it again.
MAVIS-1762: Improve performance on register attendance page #2769 #2770 #2781
We found during a training session that the Register attendance page sometimes loads in ~20 seconds depending on the exact data. We found low-hanging DB fixes which reduce this to under 1 second.
MAVIS-1780: Sort attendances alphabetically by default #2788
This gives the page a default sorting order.
MAVIS-1772: Hide health answers from invalidated or outdated consent responses on the consolidated view of health answers #2775
This avoids showing health answers for consents that have been invalidated or overridden by a newer consent response from the same person. The invalidated or overridden data is still available to review by clicking through to those particular consent forms, and the fact that they are invalidated is highlighted.
MAVIS-1778: Error submitting consent response when parent adds a phone number from "check and confirm" screen #2787
If a parent adds a phone number after the consent confirmation page, Mavis now prompts them to provide a contact method otherwise they're unable to submit the consent form.
MAVIS-1800: Offline spreadsheet opens with errors when many vaccinators present in the organisation #2804
Avoid Excel displaying an alert about corrupted data when an offline spreadsheet is opened by an organisation with lots of vaccinators.
MAVIS-1786: Incorrect date shown for manually matched consent response
Fixes a bug where manually matched consent response date shown on the patient page didn't match when the response was submitted by the parent.
MAVIS-1787: Filter children in a programme by status times out
Fixes Mavis performance and avoids a time out when filtering children within the HPV programme view by status.
Under the hood
- Data consistency: Validate presence of
privacy_policy_url
#2715 - Deployment: Enable docker layer caching, speeding up deployments #2741
- Performance: Don't use
not_invalidated
scope #2716 - Refactor: Pass parent relationship to AppParentSummaryComponent #2744
- Refactor: Don't create parents by default in tests #2743
- Refactor: Re-enable accessibility tests on release 1B pages #2746
- Refactor: Remove remaining explicit type from specs #2750
- Refactor: Mark JavaScript tests with :js #2751
- Refactor: Disable
:js
tests if Chrome is unavailable #2752 - Refactor: Choose an organisation on login without CIS2 #2745
- Refactor: Add hertfordshire onboarding ymls #2755
- Refactor: Fix home_educated value in model office script #2767
- Refactor: Fix flaky manage attendance feature test #2774
- Refactor: Fix time-sensitive feature test that breaks in 2025 #2805
- Refactor: Don't bulk queue PDS lookup jobs on staging envs #2785
Dependency bumps
- Bump aws-sdk-s3 from 1.176.0 to 1.176.1 #2759
- Bump caxlsx from 4.1.0 to 4.2.0 #2760
- Bump rails from 8.0.0.1 to 8.0.1 #2761
- Bump csv from 3.3.0 to 3.3.1 #2762
- Bump good_job from 4.5.1 to 4.6.0 #2763
- Bump idb from 8.0.0 to 8.0.1 #2764
- Bump @playwright/test from 1.49.0 to 1.49.1 #2765
- Bump sass from 1.82.0 to 1.83.0 #2766
- Bump aws-sdk-rds from 1.262.0 to 1.264.0 #2802
- Bump rubocop-govuk from 5.0.5 to 5.0.7 #2803
- Bump faraday from 2.12.1 to 2.12.2 #2792
- Bump esbuild from 0.24.0 to 0.24.2 #2795
- Bump capybara_accessible_selectors from aed2860 to c380ba7 #2790
New known issues
MAVIS-1812: Activity log entries for "a parent submitting consent" and "the consent being manually matched to a cohort record" are being shown as one
In cases where consent responses are manually matched to cohort records after initial submission, the Activity Log displays the matching timestamp rather than the original consent submission time. This creates misleading entries showing "consent given" instead of "records manually linked." While consent information remains accurate on the Child Record tab, users should reference that location rather than the Activity Log for correct consent timestamps. This issue is scheduled for urgent fix in the next release.
Impact: No clinical safety risk, as all consent details are correctly stored and displayed on the child's record.
Workaround: Check the Child Record tab for accurate consent submission dates and times.