Version 9.1.248 (17 August 2026) Notifications Update materialised birthday column to Alias 'Birthday', else query can't find the column (#153450) Problem Manager Birthdays and Work Anniversaries email template not firing on scheduled jobs    Solution Update the materialised birthday column to Alias 'Birthday', else query can't find the column   Implement end-of-service warning notifications for month and day period warnings (#138602) Problem The Line Manager is not warned on user is ending their service soon   Solution Introduced new functionality to support manager notifications about subordinates' upcoming end of service, both for short-term (days) and longer-term (months) periods. It adds new event and recipient codes, extends the data model and queries, and updates the notification service to deliver these new types of notifications. Additionally, it introduces a bi-weekly schedule type and improves code structure by refactoring repeated logic.   Performance Management Fixing mdb script reference (#153492) Problem Models do not open because the MDB script reference is incorrect.    Solution Fixed the MDB script reference. Modals open as expected again.   Resolved issue where Overall Final Score label mappings were not showing (#153405) Problem Score label mappings for Overall Final Score were not showing   Solution Fixed condition check that determines whether to display for overall final score   Job Management Insert missing UserCompanyDates records during user import (#146950) Problem `ImportUserDatesAsync` (used by the JobProfiler user import) only ever `UPDATE`d existing `JobProfiler.UserCompanyDates` rows. Since the materialisation rework, `UserCompanyDates` is no longer created as part of the User aggregate, so newly imported users never got a `UserCompanyDates` row created for them — their start dates were silently dropped.   Solution Added an `INSERT INTO JobProfiler.UserCompanyDates` step (before the existing `UPDATE`) that creates a row for any imported user matched by username who doesn't already have one for that ruleset, using the same create-vs-update semantics as `UserDomainService.UpdateUserCompanyDatesIfRequiredAsync`. Replaced the row-by-row string-concatenated `INSERT` loop used to populate the `#UserDates` temp table with a `SqlBulkCopy`, matching the pattern already used elsewhere in `UserQueries.cs` (e.g. `ListUserOrgPathsAsync`). This also removes the manual string escaping that was needed for the old concatenation approach.   Communication Portal Resolved archived items not shown when collapsed (#151781) Problem Archived items can not be seen when the system alert has elapsed   Solution Add a change to the query that, when searching archived, ignores the dates of the system alert to be shown   Resolved flatpickr that caused errors on communication portal banners (#153083) Problem flatpickr injects a hidden type="number" minute input with step="5". If the banner datetime has a minute like 17, browser validation marks that hidden control invalid and blocks submission before the AJAX save handler runs.   Solution Set minuteIncrement: 1, so all valid minute values 0-59 pass native validation   Data Warehouse Added ID fields within lmEvent tables (#151434) Problem Field EventStatusID needs to be added within lmEventSchedules Field AttendanceStateID needs to be added within lmEventScheduleSessions Field BookingStatusID needs to be added within lmEventScheduleAttendees   Solution Added the field EventStatusID within lmEventSchedules  Added field AttendanceStateID within lmEventScheduleSessions Added field BookingStatusID within lmEventScheduleAttendees   Updated Insert step for lmEventScheduleSessions_Staging_V9 (#153307) Problem Duplicate results are returned  The #Source is not needed in Insert lmEventScheduleSessions_Staging_V9    Solution Added DISTINCT and removed #Source within Insert lmEventScheduleSessions_Staging_V9