# Version 9.1.252 (7 September 2026)

#### **AutoDoc**

##### Ensure the admin only receives emails for active employees (#154866)

**Problem**

- Admin received a reminder for an outstanding document for a terminated employee

**Solution**

- Ensure the user and the admin are both active

---

#### **Performance Management**

##### Added recompile to PM query (#155012)

**Problem**

- SQL Server was reusing a cached execution plan that was poor for some parameter values, causing parameter sniffing performance issues.

**Solution**

- Added OPTION (RECOMPILE) to the main query so SQL Server builds an execution plan per execution using the current parameters.

##### Resolved spyscroll on Contract with Nav and content sections (#154486)

**Problem**

- The ScrollSpy used a fixed 310 px offset, causing navigation items near the middle of the content pane to be highlighted instead of the section displayed at the top.

**Solution**

- Changed ScrollSpy to track sections at the top of the pane using a 100 px tolerance. When the pane reaches the bottom, it switches to a bottom fallback so the final section can still be highlighted. Also added a new utility class to keep contained and split for easy debugging and reference

##### Changed historical graph year order and fixed the graph when 100% rating (#154846)

**Problem**

- Historical Score Graph with full rating hides score at the top

**Solution**

- Ensure rating is not hidden when rating is 100%
- Change the Order of Historical Score Graphs

##### Additional fixes in calendar TypeScript to address the month selector not working. Ensure previous calendar functionality still functions (#154485)

**Problem**

- Previous fixes to calendar controls worked, but caused incorrect behaviour on the month picker, and focus was diverted when clicking on the year picker.

**Solution**

- Reworked the calendar input to ensure that all calendar controls function (paging arrow, month dropdown, year scroller, date selection). Ensured that the calendar displays docked to the relevant input.

##### Fixed inconsistent date formatting on review year setup phase dates (#154466)

**Problem**

- When editing performance year period phase dates, depending on user culture, the formatting can be inconsistent between right after change and on load / reload.

**Solution**

- Ensure that the date inputs are correctly formatted to ISO for save operations and to user culture for display purposes.

##### Resolved issue where paging to next date on calendar input caused other calendar inputs to focus (#154485)

**Problem**

- When more than 1 calendar input exists on a modal, paging to the next month causes other input to be focused and its calendar to be opened. MDB focus trap moves focus to the first input and opens that picker.

**Solution**

- Added a guard to prevent focus transfer and ensure that the calendar stays docked to the correct input.

---

#### **Communication Portal**

##### Resolved styling on portal header (#155024)

**Problem**

- Left-aligned the unread message count label and the “MARK ALL AS READ” button

**Solution**

- Added a change to styling to align context flex start

##### Removed border radius from button (#154525)

**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

**Solution**

- Added change to access .dataset properties
- And corrected and ensured that the same variables are used for btn-primary and btn-secondary

##### Added backdrop shadows for comms portal and system message (#154521)

**Problem**

- When opening the Communication Portal modal, the background behind the modal is not greyed out.
- When opening a System Message on the Communication Portal, the Communication Portal modal is also not greyed out.

**Solution**

- Added a backdrop to the comms portal
- Added backdrop to System message modal centered and changed the z-index of the different backdrops

##### Resolved DateTime differences (#154595)

**Problem**

- When the banner dates are saved, they where configure on the client timezone and saved accordingly, but all other calculations are assumed that it saved in UTC

**Solution**

- Added a fix to convert back to UTC when saving and, when showing, convert again from UTC

##### Set default width starting point of banners (#154511)

**Problem**

- Gantt chart overlaps with the banner list

**Solution**

- Added a change to increase the default width

##### Added client-side validation for system alert dates (#154902)

**Problem**

- A recent change was added where validation within the controller restricted certain values and threw a snack error message, but a suggestion was requested to add client-side validation to display a span text

**Solution**

- Add jQuery client-side validation that matches to show the span error message

##### Added change to active search users (#134821)

**Problem**

- Terminated users could be searched

**Solution**

- Added a change to the Users view to only return active appointment users

##### Implemented suggestion to move carousel buttons (#153514)

**Problem**

- Carousel prev and next got lost within the banners; moved them to the bottom right

**Solution**

- Added CSS to move the prev and next of the carousel to the bottom right

##### Resolved Load more on recipients (#153972)

**Problem**

- Load more does not work correctly as the start increases, but in the query it does a skip of start \* size. Requested to add a navigate back before search

**Solution**

- Resolved the load more to not try to append load with previous results - just load the next page size so only increase number
- Added navigation back

##### Resolved Audience being created without dates (#153519)

**Problem**

- Could save an alert without a valid start and end date selected

**Solution**

- Added a check within the controller to ensure values are selected

##### Implement standalone Communication portal page for the mobile app (#154022)

**Problem**

- The communication portal is a modal and thus cannot be opened in a webview on the mobile app.

**Solution**

- Open the communication portal in a standalone page that the mobile app can open

---

#### **Data Warehouse**

##### Resolved errors where the records were not inserted in the correct order for jpHRProcessRequestData and jpHRProcessRequestPivotData (#154850)

**Problem**

- The records were not inserted in the correct order for jpHRProcessRequestData and jpHRProcessRequestPivotData

**Solution**

- Resolved errors where the records were not inserted in the correct order for jpHRProcessRequestData and jpHRProcessRequestPivotData within the Insert Staging Steps

##### Resolved an issue with jpReportingLines where the latest records were not refreshed (#154796)

**Problem**

- The latest jpReportingLines did not refresh within the DWH

**Solution**

- Resolved an error within the insert step for jpReportingLines to ensure that the latest records are inserted

##### Added field PersonInPosition within jpJobPositions (#153622)

**Problem**

- Field PersonInPosition needs to be added within jpJobPositions

**Solution**

- Added field PersonInPosition within jpJobPositions

---

#### **Imports**

##### Import Sage profile images (#148015)

**New functionality:**

- This change adds a PowerShell process that imports employee profile photos from Sage into Signify.
- It can run automatically every day through Windows Task Scheduler.
- Developers can also run it manually to preview which employees and photos will be processed before starting an import.
- How it works 
    - Retrieves employee photos from Sage.
    - Filters the results by the configured company and company rule.
    - Selects the latest photo for each employee.
    - Safely ignores identical duplicate Sage records.
    - Stops when duplicate records contain conflicting photos.
    - Uploads photos to Signify in small batches.
    - Records successes and failures in timestamped log files.
    - Returns a failure exit code when a scheduled import does not complete successfully

##### Correction to import of custom fields (#154641)

**Problem**

- Import fails when new users and existing users are imported that have custom fields

**Solution**

- This change makes improvements to the `ImportUsersCommandHandler` in the Account service, focusing on better error reporting and ensuring proper entity detachment during user import operations.

---

#### **People Management**

##### Fixing tables not loading after using the breadcrumb back button (#153690)

**Problem**

- After using the Back button, the relevant tab is displayed, but its data is not refreshed or displayed.

**Solution**

- Updated the page onload event to make the correct data call and update the correct table. Additionally, updated the URL when switching tabs so that a page reload uses the current tab instead of the previously selected tab.

##### Correct schema selection for table relationships, only show recycle bin when user has delete profile permission, prevent deletion of useractions (#151416)

**Problem**

- Recycle bin shown when user does not have delete profile permission; UserAction table records also deleted for user.

**Solution**

- Correct schema selection for table relationships, only show recycle bin when user has delete profile permission, prevent deletion of useractions

##### Make Delete and Merge Profile permissions disabled by default (#151415)

**Problem**

- Merge and Delete module permissions should be disabled by default

**Solution**

- Add migration to make Delete and Merge Profile permissions disabled by default

---

#### **Report Builder**

##### Add a " No results found" message on data source field search (#154857)

**Problem**

- On Report Builder data sources, when no results are returned for the field name search, all sources are shown with no indication as to why

**Solution**

- Added small span text to indicate no results were found

---

#### **Notifications**

##### Fallback to from email of default ruleset when current ruleset's user own smtp setting is off (#154837)

**Problem**

- From email of the current ruleset is displayed even though the user's own SMTP setting is off.

**Solution**

- Fallback to the From email of the default ruleset when the current ruleset user's own SMTP setting is off.
- This brings it in line with the email template page default From email that is displayed.

---

#### **API**

##### Add endpoint to terminate user (#153656)

**Problem**

- There is no endpoint to terminate a user.

**Solution**

- Add an endpoint and function that takes Username, terminationDate(in format yyyy-MM-dd) and terminationReason(takes a string and matches it with the termination reasons for that ruleset in JobProfiler.TerminationReasons) and terminates the user.

---

#### **Organisational Structure**

##### Resolved delete tooltip not showing (#153241)

**Problem**

- The delete icon was missing the class in which it was identified to register the tooltip

**Solution**

- Added the missing class

---

#### **Master Data**

##### Resolved Single Global Admin can not access master data (#153620)

**Problem**

- When a single admin is given, a user can not see the master data

**Solution**

- Added a check to ensure that if the user has the single role admin and the manage master data permission, they can see all

---

#### **Job Profiler**

##### Fix ListUserJobProfileInherentRequirements EvidenceQuery alias (#154786)

**Problem**

- The SQL selects from an alias that was not set

**Solution**

- Ensure the alias is correct

---