# Version 9.1.220 (13 April 2026)

#### **Event Scheduling**

##### Make the loading indicator smoother (#145136)

**Problem**

- On the Event Scheduling Calendar view, clicking an Event flashes the right-side modal. This was due to the loading indicator abruptly displaying and hiding instead of transitioning.

**Solution**

- Add a transition effect to the indicator, making its hiding and showing appear much smoother

##### Make event detail event clicking smoother (#145136)

**Problem**

- When events are open on the right side of the calendar, and you click on other events, the screen flashes.

**Solution**

- Cache event details so that they do not empty when loading the new details, which causes the empty details to be briefly rendered before rendering the new details, which results in the flashing.

---

#### **Data Warehouse**

##### Adjustments made within LearningManagementReport\_ETL (#144417)

**Problem**

- The Calculation for Pass or Fail did not calculate 100% for grades 10-12 due to missing subjects within the calculation
- The latest ModeratedMarks were not updated within lmStudentSubjects

**Solution**

- Updated Step to calculate Pass or Fail for Grade 10-12 within lmTermResults by including two new subjects
- Resolved issue where the 7 hours ago latest Moderated or Calculated Marks were not used within step "Update fields CalculatedMark and ModeratedMark within #ResultsTI" for StudentSubjects

##### Added the latest V9 DWH Package to the repo (#143176)

**Problem**

- The latest V9 DWH Package needs to be added to the repo as backup after Live deployment

**Solution**

- Added the latest V9 DWH Package to the repo

##### Removed Previous SQL Scripts that are not part of the Code Review Folder Structure (#145986)

**Problem**

- There are previous SQL files that were used for the Code Review process before the new folder structure was added

**Solution**

- Removed Previous SQL Scripts that are not part of the Code Review Folder Structure

##### Added field Completed within pdmContractPeriodActionPlans (#146665)

**Problem**

- Field Completed is required within pdmContractPeriodActionPlans

**Solution**

- Added field Completed within pdmContractPeriodActionPlans

##### Updated Existing DataSourceFields (#146665)

**Problem**

- Field Progress needs to be renamed to Milestones within ContractPeriodActionPlans

**Solution**

- Update FieldAlias "Progress" to "Milestones" for DataSource ContractPeriodActionPlans

##### Added field "CustomField" within lmStudentSubjects (#144417)

**Problem**

- Field CustomField is required within lmStudentSubjects

**Solution**

- Added field "CustomField" within lmStudentSubjects

---

#### **Communication Portal**

##### Resolved extra column on file attachment (#146678)

**Problem**

- Extra icon on the left-hand side when sending an attachment

**Solution**

- Remove column

##### Resolved New discussions not shown first (#147067)

**Problem**

- Discussions with new messages are not prioritised at the top

**Solution**

- Add an order clause to correct the new message shown at the top

##### Removed Flags (#146682)

**Problem**

- Flag Icons render within the library differently and return Unicode when the text is extracted

**Solution**

- Removed Flag Category of Emojis

##### Remove inappropriate icons (#146683)

**Problem**

- Certain icons are references in the library that can be used, which is not ideal for children who have access to the icon picker

**Solution**

- Remove the few icons that could be identified

##### Added new Reload icon button (#146674)

**Problem**

- V8 does not allow signal-R updates currently, so no way to refresh the views or indicate when the user is on a page

**Solution**

- Add a new reload button to refresh the discussions

##### Added loading indicator for external clients using package (#146681)

**Problem**

- When within external service, there is no loading indicator that gets triggered, as this is the V9 reference loaders.

**Solution**

- Add a loading component to be used for external clients using the package(v8)

##### Corrected business rule on subject type ignores global setting for discussions disabled (#146739)

**Problem**

- When the global setting of discussions is disabled, a user can not open or create any discussion

**Solution**

- Add a business rule that if it is of a certain subject type, it is allowed to continue

##### Resolved Text overlapping tone colours on emojionearea (#146680)

**Problem**

- In the Emojione area, the tone colours and the first heading overlap one another

**Solution**

- Added override styling to add margin to the tones to push content down

##### Resolved Icon Search Background Colour (#146674)

**Problem**

- V9 colour is calculated from the site CSS with the current background colour lightened. Which V8 does not have

**Solution**

- Add a new Model check if step type is of type topic, add the v8 background colour

---

#### **Ruleset Management**

##### Nullify client secret in payroll connector (#146732)

**Problem**

- Client secret available in plain text on inspection of payroll connectors

**Solution**

- Nullify client secret

##### Correct actions and delete on the payroll connector list (#146588)

**Problem**

- Cannot open the kebab menu on the payroll connector list
- Cannot delete a payroll connector
- PowerShell scripts are too lengthy in the list

**Solution**

- This pull request improves the user interface and user experience for the Ruleset integration management page in both the backend view and the frontend JavaScript. The changes focus on enhancing usability, accessibility, and code maintainability, particularly around dropdown menus, script display, and modal confirmation behaviour.

##### Themes drop-down not loading for system menu items (#146750)

**Problem**

- When a menu item is selected, the page content is loaded dynamically. The themes dropdown was not being initialised as part of that process, so clicking it had no effect.

**Solution**

- Added code to explicitly initialise the themes dropdown each time the page content is loaded, so it responds correctly when clicked.

---

#### **Job Management**

##### Resolved people group org unit selection in tree view modal (#145942)

**Problem**

- Org Unit on tree view modal not rendering, and incorrect nodes are shown; no implementation done for the nodes, incorrect logic on the page

**Solution**

- Added new logic and handler events to handle the different selections

##### Resolved ordering on appointment history (#145442)

**Problem**

- When no order has been identified by defaults it is ordered by the first column, which overrides the foreach on initial data order

**Solution**

- Add the calculation to order by the correct start data

##### Duplicate subordinates returning (#146924)

**Problem**

- The API endpoint ListManagerSubordinatesSimplified returns duplicate subordinates

**Solution**

- Added a distinct keyword to ensure unique subordinates are returning.

##### Add position activation functionality and future planning (#139481)

**Problem**

- A position cannot be reactivated from the front-end. Future planning cannot be captured

**Solution**

- Add active switches to the position list page
- Add a future planning section to position creation
- As a People Management Administrator, I want to be able to set the status of each position (e.g., Planned, Budgeted, Unapproved, Approved), so that I can generate categorised reports for better workforce planning.
- As a People Management Administrator, I want to be able to define the validity period of each position (e.g., Valid From and Valid To), so that I can track position timelines.
- Helper text must show that it is for future use as well.
- As a People Management Administrator, I want to be able to specify the Minimum and Maximum Budget for each position, so that I can analyse and report on budget allocations across positions.
- As a People Management Administrator, I want to see the newly entered data on the Job Management page, where all the positions are summarised.
- Custom styles for the date filter have been added to the position HTML so as not to override the global CSS, which seems to be an issue only on these pages

##### ListOrgUsers endpoint returns future and terminated employees (#146921)

**Problem**

- The ListOrgUsers endpoint returns terminated or future appointments

**Solution**

- Added the new IsCurrentPosition check to filter out terminated and future appointments.

---

#### **Identity and Authorisation**

##### Resolved Disclaimers (#145552)

**Problem**

- An incorrect logic check existed for the ruleset disclaimer before pulling the job profile disclaimer details. Redirect occurring from disclaimers back to the login screen

**Solution**

- Resolved if check, Changed logic checks to ensure context items are added if accepted and not based on their render mode from Razor if conditions
- Added a redirect check to redirect to the disclaimer page again instead of all the way back to login

##### Cleanup expired ID tokens (#144999)

**Problem**

- Expired tokens in OpenIddictTokens will become a performance problem as an index was removed during the .NET 10 upgrade

**Solution**

- Create a quartz job to remove expired tokens at 4 am every day

---

#### **Content Management**

##### Centralise decryption of NextCloud credentials (#147083)

**Problem**

- The decryption feature is missing in the OCI Share link development
- The integration setup is confusing because it sometimes includes an encrypted client secret while at other times it does not.

**Solution**

- Implemented the missing decryption feature
- Ensured that the encrypted data is always stored in a secret and that a public method is used for decryption.

##### Next cloud not working due to missing config (#146727)

**Problem**

- The missing configuration is causing the next cloud to break

**Solution**

- Add encryption keys to the Content management appsettings

##### Upload of and handling of evidence using the workplace assessment app (#143882)

**Problem**

- There is currently no way to upload evidence on a question, e.g., a short video or photo

**Solution**

- If you are online, sync starts in the background and will even continue when the app is closed
- Compress evidence using the V9 compression service, and store compressed evidence in the local entity
- Sync back to V8 once compressed evidence is ready, prompt the user to Submit
- Send compressed content to the content service and store the ContentId against answers
- On V8, when the submit method is called, send ContentId in AssessmentAttemptDTO with the Questions object - one to many
- If the user has an access token for V9, use this to access the content; else, use stored credentials for api user to upload content
- On People Management &gt; Assessment List, if evidence is available to attempt per question, make the "Download evidence" link available

---

#### **People Management**

##### Use StartDateInCompany to calculate work anniversary (#146800)

**Problem**

- On the people management dashboard, the work anniversary query currently uses the user's current position to determine the date, rather than the user's start date with the company

**Solution**

- Return StartDateInCompany to PeopleController and use it for work anniversary mapping

##### Reporting Lines on Summary Page not underlined as a link (#145925)

**Problem**

- Reporting lines have no on-hover effect (underline)

**Solution**

- Move hover class anchor tag

##### When moving an org node to another parent node, correct the update of the calculated org flat path (#146379)

**Problem**

- When moving an org node, the calculated org flat path is not updated

**Solution**

- This pull request updates the UpdateOrgStructureParentCommandHandler to improve how changes to the organisational structure are handled. The main change is the addition of logic to update the flattened organisational path after a parent update, ensuring data consistency across related structures.

---

#### **Notifications**

##### Newly appointed users are getting work anniversary notifications by only returning records of tenure greater than 0 (#146919)

**Problem**

- Work Anniversaries email is being sent on the appointment date to new users

**Solution**

- Resolve the problem of newly appointed users getting work anniversary notifications by only returning records of tenure greater than 0

##### Add a line break before the V9 footer to allow space between the email body (#146666)

**Problem**

- The V9 build in the footer sometimes touches the normal email body

**Solution**

- Add a line break before the V9 footer to allow space between the email body and the footer.

---

#### **Imports**

##### Ruleset Culture never sent to v8 for schema setup (#134516)

**Problem**

- The ruleset's culture is never sent to the v8 schema setup endpoint; this results in en-GB always being set in V8.

**Solution**

- Added the culture to the API request for v8.

##### Correct the delta check for optional staging for the import data (#145548)

**Problem**

- When the appointment details have not changed, but the other personal details have changed, the user data is not staged for import

**Solution**

- Move the appointment to a conditional OR with the other personal details.

##### Ensuring that the link to download the User Validation Report is only shown for User imports and PaySpace Pull imports. (#146598)

**Problem**

- The link to download the User Validation Report is shown for reports for which it does not work.

**Solution**

- Hiding the User Validation Report download link for all reports except the select few reports for which it works.

---

#### **Tenant Management**

##### Use the system Close Date to change the colour to Red (#146313)

**Problem**

- The system does not use the system's Close Date to change the colour to Red

**Solution**

- Update expiry colour display condition to only display on the close date within 1 month

##### As a Consultant or Tenant Admin, I want the Expiry Date to be set at the end of the following month by default (#144228)

**Problem**

- When creating a tenant, the expiry and system close date are not defaulted to the end of next month, and boolean values for lock system and display expiry messages are not defaulted to disabled. Page also not ordered by expiry date ascending.

**Solution**

- Tenant creation defaults expiry and close date to the end of next month. Lock system and expiry messages display defaulted to disabled, and the page is ordered by expiry date ascending by default.

##### As a Tenant Administrator on R1, I want to have updates to the Update Expiry Date modal (#144227)

**Problem**

- New expiry date should be the same as the current expiry date; buttons need to be added to quickly set dates (for end of this week, end of next week, etc); and a new toggle to be added to enable and disable subscription expiry and system close notifications

**Solution**

- New expiry date defaulted to current expiry date; 4 buttons added to quickly set the dates; new toggle added which persists in the database against the subscription, and displays value; and then added logic to ensure when disabled, no system expiry or close notifications are sent

---

#### **Performance Management**

##### Inform user buttons are to create agreement for the selected period (#142925)

**Problem**

- When you move past the review setup tabs at the top, the narrator will simply read the names of the buttons, which will be the same as the names of the tabs. This can be confusing.

**Solution**

- Include the review setup component as a tab index

##### Inform the user that the page is loading when creating an agreement (#142928)

**Problem**

- Loading is not verbally indicated by NVDA

**Solution**

- Indicate loading when creating contract

##### Narrator mentions heading types and sizes (#142929)

**Problem**

- NVDA reads heading levels (h4, h6)

**Solution**

- Suppress the heading levels where possible

##### Unable to interact with my own agreement (#142931)

**Problem**

- Tab navigation is not complete when tabbed past timelines

**Solution**

- Update tab order and inclusion

##### Investigate the possibility of adding pauses between phrases (#142918)

**Problem**

- It is sometimes a bit difficult to follow what the narrator is saying because they ramble off sentences without pausing. Please investigate if it is possible to add some pauses so that you can more easily distinguish between different concepts.

**Solution**

- Create tab-list and add aria improvements to improve flow and readability. Also added accessibility sentence to translations.

##### Review setup container not selected (#142933)

**Problem**

- The tablist forces you to tab through all items to progress.

**Solution**

- Create an index for the entire tab list, and allow the user to press enter to tab through the list, or tab over the list

##### Screen flickers when moving the mouse pointer over the period label (#144966)

**Problem**

- When hovering over some elements that have a popover, it continues to re-render and the popover flickers, as if its visibility state is constantly changed.

**Solution**

- Memoised the popover properties so that it does not re-render when anything else on the dashboard changes.
- Found an additional issue where for a fraction of a second, the popover is shown topleft of the viewport before it positions where it's supposed to. Enforced additional CSS onto the popover to attempt to prevent that from happening.

---

#### **System Access**

##### Encrypt secrets, passwords and tokens (#144974)

**Problem**

- Secrets, passwords and tokens used in V9 are stored in clear text

**Solution**

- Encrypt and decrypt secrets, passwords and tokens when records are stored and fetched from the database by means of changes to OnModelCreating

---

#### **Technical**

##### Syncfusion license key is visible in dev tools (#144510)

**Problem**

- SyncFusion license key is available in clear text in the local storage view in dev tools.

**Solution**

- Remove the license key from local storage; instead, make the lightweight api call. Also, encode the response, and decode it in code

##### Media compression process (#140481)

**Problem**

- Currently media is uploaded in its original size to the system without being compressed or optimised

**Solution**

- Implement a PowerShell script to
- Compress uploaded media
- Remove original large media
- Keep track of what was compressed to compress once

---