Version 9.1.253 (7 September 2026) Imports When a duplicate ID number is received from PaySpace, only import the record with the newest appointment (#154281) Problem When the same user is appointed in multiple PaySpace companies with different usernames, the user fails import validation because the import data contains a duplicate ID number. Solution Remove records with duplicate ID numbers and keep the record with the latest appointment. Optimise export queries and org node processing (#152102) Problem Retrieving the job structure returns a timeout on large rulesets   Solution Refactored org flat-structure SQL to replace cursor-based JSON parsing with a set-based OPENJSON insert and added a clustered temp-table index for faster lookups. Updated export query filtering to use EXISTS instead of a left join to avoid unnecessary row expansion, and switched Dapper execution to CommandDefinition with timeout and cancellation token support. Also modernised NodeIds list creation with collection expression syntax.   Support Sage responses without company fields + Employee code upload (#148015) Problem Sage photo endpoints do not all return the same fields. Some responses do not include company or company-rule codes, which caused the import to stop. The importer also treated a Sage employee code as a Signify username. When an employee's username was different from their employee code, the preview could not find them and reported that no images matched.   Solution Only require Sage company fields when matching company filters are configured. Match each Sage employee code to the employee-code field of a Signify user in the authenticated ruleset. Show the resolved username in the preview, and do not import records when the employee code is missing or belongs to more than one user. The same matching is used for interactive and scheduled imports. WebMVC and Account API must both be deployed with this change because they share the updated employee-code contract.   Communication Portal Resolved cases where the navigation link is empty; do not add the href attribute (#155014) Issue 1: Problem The references already have double quotes   Solution Add a fix to remove the quotes   Issue 2: Problem When there is an empty navigation link and it is clicked, it navigates to    Solution Added a change to not add the href attribute when empty   Changed height to rem-based for comms portal footer (#151959) Problem On Firefox, there seems to be a height difference that causes an overflow   Solution Changed from vh to rem   Resolved Banner links and variant not saving (#154525, #155014, #155263) Problem When the form is being synced to save on the client, it accesses the control .data(); now this only accesses those values it was rendered with or created, but if a value is updated on an existing item within the other file, it sets the .dataset.{} value, which is not read. When on the carousel of banners, click the next it retains focus with a highlight colour    Solution Added a change to access .dataset properties and ensured that the same variables are used as btn-primary and btn-secondary. Added a change that, after carousel interaction, clicked remove focus on click   Make standalone communication portal more mobile-friendly (#154022) Problem The links at the bottom of the communication portal are clipped at the bottom and right-hand side on small screens.    Solution Enable the links to wrap to a second line and enable scrolling on the web page.   Performance Management Resolved variant delimiter for decimal values in contract import (#155293) Problem In different cultures, the decimal operator caused import decimalparse errors   Solution Added invariant culture to accommodate different cultures with delimiters on import   Resolved Import not taking into account approved agreements (#155280) Problem AdditionalOptions was only added during the form submit event, but the AJAX/unobtrusive submit flow was already serialising or posting the form before that handler finished. So the controller received the request without AdditionalOptions.   Solution Create the AdditionalOptions hidden input earlier in the import button click handler, before the form is submitted/serialized. Keep the submit handler as a fallback and reuse the same helper to avoid duplicate hidden inputs.   Wrap Check-Ins label when translation is long (#155250) Problem Where the "Check-Ins" label appears on the performance dashboards (on the check-ins dial, the check-ins count badge, and the "Check-Ins & Ratings" accordion header), the text was forced onto a single line. In languages where the wording is longer, or if the wording changes in future, the label split outside its badge/dial and pushed the surrounding layout out of shape.   Solution Allowed the label to wrap onto multiple lines and stay centred under the dial. The accordion header row can now flow its labels onto a second line instead of squashing them together. Short labels look exactly as before; long ones now wrap neatly.   Create Document item on Kebab menu is disabled (#154060) Problem Grid row actions could use a pending status filter while old rows were still displayed.   Solution Pass GridView the status tied to the loaded users instead of the live filter status   Report Builder Remove the dropdown arrow when the bit operator field (#153976) Problem A change was made to only show is equals to when the field type is a bit operator; currently, a dropdown arrow is still being shown, indicating as if there is another option    Solution Added a change to not render the button when of bit field   Limited Bit field values to only Equals (#153976) Problem Slider fields offered blank-related operators even though they always contain True or False.   Solution Restrict Slider filters to is equal to with True/False values, and migrate existing blank filters to is equal to / True   Resolved scroll with multiple subreports that overflow screen width (#155051) Problem When many sub-reports were displayed in the Add/Edit Report header, the tab list exceeded the available navigation width. The original scrolling logic relied on missing HTML elements, so the navigation arrows never activated. After introducing native scrolling, the wide tab list still contributed its full width to the page layout, causing the entire page to scroll horizontally instead of only the report-tab header. This also made the final “Add Sub-Report” button difficult to reach.   Solution The legacy positioning logic was replaced with a native horizontal-scrolling tab viewport. The report header was then constrained to the layout’s dedicated tabs area so the tab list cannot expand the page width. Left and right navigation controls now appear only when additional tabs exist, active tabs are automatically brought into view, and the final “Add Sub-Report” button remains accessible. Existing tab selection, action menus, drag-and-drop ordering, and report functionality were preserved.   Data Warehouse Implement Performance Improvements for Content Management (#154134) Problem The PowerShell scripts for Content Management need to be improved to only fetch for the past 14 days   Solution Updated PowerShell scripts for Content Management to only fetch files that have been added/edited in the past 14 days   Resolved issue with jpAppointments "Active" field update step (#154126) Problem The Active field for Appointment was not updated correctly for the scenario where EndDate is today's date   Solution Resolved the issue of updating the Appointment's Active field when the EndDate is today's date   Added field OrganisationalLevel4And6 into jpAppointments (#153957) Problem Field OrganisationalLevel4And6 needs to be added to Appointments   Solution Added field OrganisationalLevel4And6 into Appointments   Notifications Preserve SMS tokens when editing the setup and enable test SMS template (#154773) Problem When saving the SMS setup, the user receives an error The SMS portal type is not correctly spelled   Solution Updates SMS setup handling to reuse the existing token when no new token is provided (including whitespace-only input), preventing credential validation failures during updates. It also enables SMS on the EmailSetupTest template in seeded data and via a migration so existing environments are corrected, and fixes smsPortal localisation strings/typos across several locale files.   People Management Hide obsolete Additional Self Service Items profile option (#155020) Problem People viewing their own profile could see an “Additional Self Service Items” option that opened an older page which is no longer in use.   Solution The obsolete option has been removed from the Profile list, so people can no longer navigate to that retired page from People Management.   Ensure the user can only delete the document if admin or the creator of the document (#154324) Problem User can delete a document assigned to them    Solution Ensure the user can only delete the document if admin or the creator of the document    Ruleset Management User Guides: Language not falling back to English (en-ZA) when English (en-GB) is removed (#152901) Problem User guide fallback selected disabled en-GB content as a valid match, blocking enabled lower-priority RS1 en-ZA content.   Solution Only treat fallback cultures as valid when they contain active, non-empty guide content   Add menu item types and external redirect flow (#154121) Problem Unable to access standalone V8 systems from a newer V10 ruleset   Solution Extend the external menu with two new types: Interface connector types, to allow a user to SSO to an older V8 using the interface login deep link menu to redirect a user to any deep V10 pages