Version 9.1.203 (19 January 2026) System Access Update email confirmation logic for user import and update to allow a user without an email to login (#142626) Problem A user without an email address cannot log in because the email has not been confirmed.    Solution In ImportUsersCommandHandler, email is now considered confirmed if the user has no email address. In UpdateUserCommandHandler, email is always marked as confirmed. These changes ensure consistent handling of email confirmation status during user import and update operations.   Imports Change Import Modal to only fetch import status and available imports when opened (#138821) Problem Currently, on every page, navigation checks are done on the import status being retrieved    Solution Change to only load the import status when being opened    Job Management Resolved positions not loading the correct filter type (#140550) Problem When job profiles are loaded, icons indicate the count of vacant, filled and inactive positions, but once clicked, it results in all positions   Solution Implement new development to list positions based on the filter type   Resolved sanitise text on reporting line (#142578) Problem The title of the span is being set and used from JavaScript to set the modal title. When the title of the modal is set, it gets set with the encoding values when HTML is rendered   Solution Add a change to set the modal title as raw text to not be encoded   Report Builder Resolved data source width expand and console error on invalid ajax json (#140432 & #141369) Problem On Firefox, the expand click event did not trigger from SVG find, script issue on Firefox that does not allow inline events CSP* Console errors being logged when JSON is passed, which is HTML for partial views    Solution Add a change to rather just check for class collapse, move the event handler to the JavaScript file. Add a change on ajax.ts to handle JSON to not parse, should it be HTML and rather warn than error   Resolve issue where race condition on Ruleset creation prevents initial user from materialising on ReportBuilder (#140410) Problem When a new ruleset is created, the ruleset creation is requested on each service sequentially. However, the user is copied to the new ruleset as soon as the ruleset is created, and then the SingleUser event is emitted, which informs all other services to materialise the user. This creates a race condition where the SingleUser create event reaches ReportBuilder before the ruleset creation has happened, and because of the foreign key relation between the materialised user and materialised ruleset table on RB, the user creation fails, and the first ruleset user is never created.    Solution Added additional functionality on the RulesetCreation on ReportBuilder, after the ruleset has been materialised, to check if there exist materialised users and then fetch all current users for the ruleset from Account Service and materialise them immediately   Performance Management Reload page when user contract is deleted (#142780) Problem Page reloads only if an additional contract is deleted   Solution Add a change to reload the page after the primary contract deletion   Resolve issue where bulk actions are not displaying all users (#142546) Problem On bulk actions, the list of people displayed on the select list does not include all the available users, because only the first 20 users are filtered out when fetching details from JobProfiler, and then those with contracts or for the review year setup aren't all returned.    Solution Change functionality to the first page for users from performance management, then after selecting job details. Fixed the load more / load all functionality   Add loading indicator when creating contract (#142777) Problem When creating a contract for a review setup, no loading indicator    Solution Add loading indicator   Resolve order of review setup names (#141701) Problem The order causes the numeric values to be incorrectly ordered, for example, Setup 1, Setup 10, Setup 2    Solution Add change to the comparison to take numbers into consideration   Identity Enhance MFA process with option to remember (#134730) Solution Add change and enhancement to the MFA process. Add input to allow ruleset to change the number of hours to remember MFA, should they wish   People Management Optimise user org path queries and improve appointment selection when calculating people group users (#142962 & #142233) Problem A user with an active and future-dated appointment has an incorrect future status in the calculated people group, and the user is excluded from the TA where it is used.   Solution Refactored user org path queries to use temp tables and bulk copy for efficiency, and improved appointment selection logic to better prioritise current appointments. Updated related PeopleGroups queries and gRPC service to handle distinct user IDs and avoid unnecessary queries.    Fix uploading profile image, causing user banner to be removed (#142688) Problem Uploading a profile image causes the user's banner to be removed.   Solution Use the existing profile image if one is provided.   Fix banner not updated if you upload a new one (#142688) Problem If you open the modal to change a person's banner and/or profile image and then upload a new banner image, that banner image will not be set as the new banner image for the person. The first time you select it, nothing will happen, but if you select it a second time, the banner is updated.   Solution Return uploaded banner image details and set them so that they can be used when the image is saved.   Remove functionality to copy profile image and avatar for transferring the user to the ruleset (#142521) Problem Profile image and avatar should not be copied to the new user with transferring the user to a new ruleset    Solution Remove functionality to copy profile image and avatar for transferring the user to the ruleset   Resolve search and collapse problem on Orgnode tree on transfer person to ruleset modal, and prevent transfer of user with same ID number in destination ruleset (#142696 & #142694) Problem When searching for organisations, the treeview populates duplicates. Able to transfer a person with Idnumber that already exists on the destination ruleset    Solution Resolve the search and collapse problem on the Orgnode tree on transferring a person to the ruleset modal. Prevent transfer of the user with the same ID number in the destination ruleset   Notifications Cannot send a list of CC or BCC recipients via the external email API (#142336) Problem When more than one CC or BCC email address has been configured on V8, V9 do not send any emails   Solution Correct the concatenation of the list of emails to allow the SMTP service to process them   Data Warehouse Implemented Performance Improvements within PerformanceManagement_ETL.dtsx (#140865) Problem Performance Improvements are required within the SSIS Package PerformanceManagement_ETL.dtsx due to the growth of system data and the DWH Package    Solution Removed the DELETE and Truncate Steps and replaced them with Update and Inserts for the below Data Sources: pdmContracts, pdmContractSurveys, pdmContractPeriods, pdmContractPeriodActionPlans, pdmContractPeriodSectionItems, pdmReviewYears, pdmContractPeriodEvaluations, pdmReviewYearPeopleGroupsSetup, pdmContractPeriodSectionItemModerations  Adjusted steps for Custom fields calculations/insert for pdmContracts and pdmContractPeriods to only do this for active Contracts/ContractPeriods   Added new Join between jpAppointments and jpJobProfiles (#142103) Problem Join are required between jpAppointments and jpJobProfiles   Solution Added Join between Appointments and JobProfiles for Report Builder   Implemented Performance Improvements within LearningManagementReport_ETL.dtsx (#140865) Problem Performance Improvements are required within the SSIS Package LearningManagementReport_ETL due to the growth of system data and the DWH Package    Solution Removed the DELETE and Truncate Steps and replaced them with Update and Inserts for the below Data Sources: - lmAttendances - lmReportCards