Version 9.1.224.1 (Support Release - 20 April 2026) People Management Resolved transfer user data validation bug (#147063) Problem When the termination date is before the appointment date when transferring a user to another ruleset, the validation happens, but no message is displayed. The validation appeared but instantly hid itself again.   Solution Just ensured that the validation message is not hidden directly after being displayed.   Learning Management Fix translation for marks save error (#147342) Problem When someone tried to save marks, and a duplicate mark already existed, the system showed a confusing technical error message instead of a clear explanation.   Solution Updated the system so it now shows a proper user-friendly message for that save error, making it clear what went wrong instead of exposing technical text.   Log mark audit failures and incorrect audit table names (#147362) Problem Users could accidentally save duplicate marks on the Marksheet by clicking the Save or Inherit Marks buttons multiple times before the request is completed. This caused errors that were either silently swallowed or shown as a confusing technical message with no guidance on what to do next.   Solution Duplicate prevention (frontend) The Save and Inherit Marks buttons are now disabled while a request is in flight, preventing the user from submitting the same marks more than once. Duplicate prevention (database) Two partial unique indexes have been added to the `Marks` table to enforce that a learner can only have one mark per assessment per cycle at the database level — a safety net even if multiple requests arrive simultaneously. Existing duplicate rows are cleaned up as part of the migration (keeping the most recently edited entry). A backup of the `Marks` table is taken before any changes are made. Meaningful error messages When a duplicate mark is detected, the user now sees a clear message: _"A mark for this user already exists. Please reload the page to see the latest marks."_ All other save/inherit failures show the server's error details (if available), followed by "Please reload the page and try again."_ so the user always knows the next step. If there is no specific error detail, only the reload instruction is shown — no empty or generic filler text.   Add idle auto-save and unsaved changes warning to Marksheet (#147137 & #147138) Problem When teachers or administrators are entering marks on the Marksheet, their work can be lost if they: Step away from their computer without saving Accidentally navigate away from the page or close the browser tab Get distracted and forget to click Save There was no safety net to protect unsaved mark entries, which could result in having to re-enter all the data again   Solution Idle Auto-Save The system now automatically saves mark changes after a period of inactivity (defaulting to 5 minutes). If a user steps away or gets distracted, their progress is saved in the background without any action required. This behaviour can be configured or disabled via application settings. Unsaved Changes Warning If a user tries to navigate away from the Marksheet while there are unsaved changes, a clear warning message is shown asking whether they want to save, discard, or stay on the page - giving them full control and preventing accidental data loss.   Imports Improve Payspace performance when fetching employee positions and extend logging in Payspace implementation (#146311) Problem When pulling a large number of positions from PaySpace, it takes a very long time and fails. Logging is limited to debugging the PaySpace API calls and results   Solution Introduce several improvements and refactorings to the PaySpace user details import flow, focusing on simplifying data handling, improving logging, and enhancing error/warning reporting. The changes include updates to proto files, removal of unnecessary dependencies, streamlining of collection operations, and improved logging for better traceability and maintainability. Reduce the fields selected from the position call and implement parallel tasks to speed up processing by 5   Add additional unique field validation to pre-import validation (#144890) Problem Correct creation and update of unique users' fields in import   Solution Refine the error messages for user creation and update failures in the `ImportUsersCommandHandler` to provide clearer and more accurate information about conflicts due to existing users. The changes clarify that the conflict is with another user and improve the details shown for matching fields.   Add additional unique field validation to pre-import validation (#144890) Problem When importing users with the same fields, that is still unique, it is still allowed   Solution Introduce a Unique flag on SelfServiceSetting and wire it through the validation pipeline to support uniqueness checks for Email, ID Number, Passport Number and Employee Code. Precompute per-field value counts and a uniqueFields map in UserDetailsValidationService, and add duplicate-value checks that emit validation errors when a field marked unique is duplicated. Update all SelfServiceSetting construction sites to pass the new Unique flag and adjust related method signatures. Add unit tests covering unique-field scenarios and update existing tests accordingly.   People Management Implement a unique field configuration on the ESS settings (#144890) Problem Cannot define Username, Id Number, Passport Number, Employee Code, and Email as unique for the ruleset using ESS settings   Solution Introduce enhanced uniqueness validation for user-related operations, ensuring that users cannot be created or updated with duplicate key identifiers (such as username, employee code, ID number, passport number, or email) within the same ruleset, according to the ESS setup's unique field configuration. The changes span updates to the data model, gRPC contracts, and command handlers to support this feature.   Performance Management Resolved check-in dial phases (#147902) Problem On the overall summary check-in dial can not be opened unless ratings has been confirmed, discussion resulted in removing the requirement that ratings should be completed When a dial is clicked to view the ratings, even if the rating phase is no longer active, it can still be edited   Solution Removed ratings completed requirement Added Check-Ins phase active check to pass through that ensures if the edit modal can be opened or not   Workplace Assessment App Implemented new endpoint for Observation app to upload stream file content (#143882) Problem Endpoints created to allow the observation app to stream files, large files to service, due to http2 endpoints not being able to make public, normal http1 api transcoding takes place. But with large files, this causes timeouts and stream errors, for example, 60mb to be converted to a base64 string fails   Solution Added a new endpoint and proto to accept a streamed body file and use that to then send for the next method Add a new app setting to allow/regulate the upload max file size