ILOS

SSL Service Manager

Enter the password to continue

Service User Profile – Functional Specification v0.9

SSL Service Manager · Module 1 of 7 · Replaces the old SM "Service Agreements" section (Quick Agreement, Search, Workspace – 98 screens). Sources: meetings of 15, 18 and 19 May 2026 (M2–M4, verified against full transcripts), consolidated meeting notes, current SM screenshots, Mark's prototype, SaaS4 customer review. Decision IDs refer to the Decisions Register (00).

Artifacts: 00 Register · 01 Shell · 02 Module spec · 03 Wireframes · 04 Build spec

Scope & structural change wireframe ↗

The old SM treats Service Agreements as a menu section with three subsections (Quick Agreement, Search, Workspace). In the SSL Service Manager none of these survive as navigation items (G-004…G-007):

Old SMSSL Service ManagerRef
Service Agreements → SearchGlobal search bar on every page; advanced search opens from the barG-005
Service Agreement Summary pageService User Profile – "it's about the user, not the agreement"S-001
Quick AgreementRemoved. It was a stock-integrity "fudge" (ghost equipment). Replaced by a simpler referral form which may include a stock section – referrals moduleG-006
WorkspaceMoves to Tasks/Scheduling ("over complicated" – SaaS4)G-007
"This should be called Service User Profile – customer is really confusing: is it our customer, an authority, the end user?" – Paula, M4

1.1 Search bar (all pages)

1.2 Advanced search page G-005, S-014

Opened from the search bar on any page. Replaces old SM "Service Agreements → Search" (Basic + Advanced) and absorbs the old History views.

2 · Service User Profile – header & layout wireframe ↗

2.1 Identity panel

ElementBehaviourRef
Organisation logoReplaces the client photograph (consent burden; "a lot of ARCs don't touch it"). Logo of the organisation being monitored – e.g. "Leeds Care Alliance" in the wireframe sample – with the organisation name shown in the details. Product branding: ILOS logo top-left of the shell; "Powered by Tunstall" at the bottom of the left menu (as in Mark's SM).S-002
Name, DOB (age)As current. Inline edit where permitted.S-001
Agreement no. + customer referenceBoth displayed; agreement no. is the permanent key (survives redaction).S-003
Dwelling colour (pencil) / Risk colour (heart)Kept, properly labelled. Colour model TBD: PNC allows any colour, ILOS has 3 (G-008).S-003, G-008
Status badgeActive · Pending · Terminating · Terminated. (Suspended status removed, see 6.1.)S-004
Primary equipmentThe unit that contacts the ARC: model name, model no., telephone no.S-003
KeywordsKept (= ILOS tags), coloured; surfaced prominently – used to call out conditions before a visit.G-008
Linked agreementsSame-dwelling/shared-equipment links (dual occupancy).S-007
Two "unassigned" buttonsRemoved – duplication of Requests ("this whole page looks very much like a mess").S-003
Recent-activity action buttonsRemoved – duplications of requests/tabs.S-010

2.2 Action bar

ActionBehaviourRef
New RequestOpens request creation pre-filled with this user (see §4). Requests stay on the profile – "the caller has that call live in front of them" (Rob, M3).S-012
Add User to AgreementQuick-add of a new user onto this existing service page via a popup (title, name, DOB, relationship to existing resident, shared-equipment choice). No validation applied – the new agreement is being added to an existing valid agreement. (Address-match prompting at creation time lives in Referrals – R-005.)S-007
DecommissionStarts the decommission workflow (§6.2).S-005
ReactivateOnly on decommissioned/terminating users, within 3 months (§6.3).S-006
Print to PDFPrettified browser print of the client-data summary (no server PDF licence – deliberate). Used for archives/coroner files.S-020
Log internal callPopup with: colleague selector (people within the organisation), Teams/Zoom choice, notes field and outcome (Completed / No answer / Declined / Failed). "Start call" hands over to Teams/Zoom while the popup stays open – notes remain editable during the call. Nothing is written until the user presses Log call; closing without logging discards the entry (unsuccessful calls need not be recorded). Logged entries land in Call History tagged Internal with outcome + notes. Call content is not stored – that stays with Teams/Zoom.S-009
Suspend / ResumeRemoved – never used, no billing consequence ("you either have the service or you don't"). If suspension ever returns it must drive billing.S-004

3 · Tabs wireframe ↗

Tab set: Summary · Contacts · Requests · Assessments · Equipment · Call History · Notes · Messages · Audit. Removed: Tasks (nested under Requests), Incidents (urgent requests), History (advanced search), Service Cases (unknown purpose – dropped from Mark's design), Medication (until NHS link), Health Events (separate discussion). S-012/13/14/18

2.2 Identity header

3.1 Summary

3.2 Contacts S-011

3.2c Requests tab: one Request column CHANGED

The request key and title are merged into a single "Request" column, exactly as in the Requests console: the title leads (it is what a reader scans for) with the key beneath it in the muted monospace style. Two columns for one identity was spending width on an ID nobody scans by, and it made the tab read differently from the console it mirrors.

3.2b Messages tab is read-only CHANGED

The profile's Messages tab is a read-only history of messages relating to this service user - a filter of the global Messages console, which is where messages are actually composed and sent. The inline composer is removed: two places to send from is two send paths to keep in step, and the console already owns recipients, channels and the bulk-SMS cost rules. The table also carries no Columns control (no-tt) - it is four self-explanatory columns, not a configurable report. S-019

3.2a Table header grammar (all tabs) CHANGED

One header pattern across every tab (Ivan, 14 Jul 2026), matching the standing table rule that filters belong to the table, not a detached panel above it: title → the table's own filters → (spacer) → secondary actions → icon-only Columns → primary action, with the primary action hard against the right edge and rendered in dark slate. Applied to every tab - Requests (the All / Live / Closed pills moved out of their floating bar and in beside the title; New request hard right), Assessments (Create assessment hard right) and Equipment (the detached control bar is gone: the Live equipment / Include decommissioned scope select now sits with the title because it filters this table, Print to PDF and Columns run to its left, and Request equipment becomes the primary dark action) - alongside Services and Contacts. Also Call history (gains All / Alarms / Internal filters beside the title; "Log internal call" becomes the primary dark action), Notes (its All / Non-expired / Expired filters move beside the title; "Add note" hard right) and Audit (its four filter controls - entity, source, changed-from, changed-to - move out of the floating bar into the table header, as compact inline controls). The Columns control is placed through the shared [data-tt-slot] mechanism in table-tools.js, which is what keeps the primary action truly hard right (appending Columns after a button group gives two competing margin-left:auto and the group drifts inward).
Row actions are icon-only everywhere a table row can be acted on - the .tqa ghost buttons defined in the icon conventions (28x28, transparent border, slate icon, teal on hover). The Assessments rows previously carried text buttons (View / Print / Duplicate / Edit-Publish) and are now aligned with Services: eye = view, printer = print or save as PDF, copy = duplicate, pencil = edit and publish. Each keeps an aria-label and gains the platform's styled tooltip, so nothing is lost by dropping the visible label.
Tri-state sorting CHANGED (standing rule, Ivan 14 Jul 2026): clicking a column heading cycles ascending → descending → unsorted. The third click restores the table's original row order, which usually carries meaning of its own - call history is newest-first, contacts are in call order, notes are grouped by permanence. Without a way back, one stray click on a heading destroyed that order for the rest of the session. Implemented in the profile's inline sorter and in the shared table-tools.js sorter, so it holds platform-wide.

3.3 Equipment S-017

3.4 Call History S-015

3.5 Notes S-019

3.6 Messages S-019

3.7 Audit S-014

4 · Requests tab & request detail wireframe ↗

4.1 Requests list S-012

4.2 Request creation Q-001, Q-003, S-012

Opened from the profile action bar or Requests tab. The form is dynamic, as in Mark's SM (inbox → create): the type selection drives which fields appear. Mark's seven "Route to" forms (Response request / Technology Work / Ticket / Task / Message / Customer note / Assessment) do not survive as routes – the meetings consolidated everything into Requests with the agreed types (G-001, Q-001) – but their field patterns are reused per type. Messages and notes have their own tabs; assessments are created via requests (S-016).

Conflict rule applied: where Mark's form contradicts a meeting decision, the meeting wins. Consequently there are no user-set due dates (next action is SLA-derived, Q-006 – Mark's "Due by"/"Due" fields dropped) and the Custom task-type list comes from Administration, not Mark's hardcoded list (Q-003). Fields taken from Mark with no meeting decision either way are marked +Mark – to confirm below and listed in the open questions.

TypeType-specific fields
Change equipment renamedEquipment affected (from installed list) · change kind (exchange / add / remove / battery). The "Change" type is renamed Change equipment (Q-012). Default-task preview: Pick stock → Install/exchange → Confirm with family, with SLAs; the SLA shows in the prominent panel (Q-003, Q-004, Q-006).
Custom taskTask type – list as configured per client in Administration (old SM: Administration → Default Task Types), each mapping to a role that filters assignees (Q-003, Q-005) · description. Dates come from Scheduling/SLA, not the user (Q-006).
DecommissionReason (standard category, Q-010) · recovery visit date; hands off to the guided decommission flow with the dual-occupancy check (S-005).
InstallationUnavailable once an installation has completed (Q-001); creation normally flows from a referral.
Shared fieldStatusNotes
PriorityAgreedNormal · Urgent – urgent triggers the incident flow (S-013). Two levels per the old SM, not Mark's four.
Assigned / ResponsibleAgreedPer the meetings (Q-005): Assigned = person doing the job, filtered by the task-type role; Responsible = a real manager (no ghost users) plus their user group, chosen from the groups the person belongs to.
Follow-on requestAgreedOptional, saved together with the request, auto-scheduled (S-012).
Channel+Mark – to confirmPhone · WhatsApp · Form · Internal. Not discussed in the meetings.
Requester + phone decidedAgreedNow picked from the service user's contacts (Circle of Care, S-011) or entered free-form (name + phone) for a one-off caller (Q-014).
Location + what3words decidedPartly agreedDefaults to the customer's address ("use customer address if blank"); what3words is picked from the property's saved squares or chosen on a map (Q-015). The address field itself stays Mark-flagged. Pickup/drop-off blocks from Mark's Response route stay in the ARC (G-003).
Title / Details+Mark – to confirmAt the top of the form: Title (short description – shown in the Requests list so the purpose is visible) and Details (operational notes, risks, access information). The meetings only defined "Comment = just notes" (Q-006); the two-field split is for Tunstall to confirm.

Form layout & behaviour (revised 19 Jun 2026, Q-013): Type and Priority are the first two fields; for a new request only Type, Priority, Title and Details show initially and choosing a type reveals the rest – a prominent per-type SLA panel (Q-006), the type-specific group, the auto-added default task set (each with a "N/A – close immediately" tick, Q-003, plus "+ Add custom task"), the channel and the cross-user option. Installation is selectable (defaults: Pick stock → Install → Financial assessment → Welfare follow-up call) with a note that installations normally originate from referrals (Q-001). Assignment flow: select the Responsible's user group first, which filters the Assigned list to who is on shift the chosen visit day (Q-015); the operator can open the schedule and assign directly, after which the booked date/time shows under the assignee. The "Show nearest online staff" panel was removed at Ivan's direction (10 Jun 2026) – distance-ranked / route assignment returns with the Scheduling module (C-004). Applies to all involved: an option raises the request for every resident at the dwelling / linked agreement, creating the paired linked request (Q-018).

4.3 Request detail Q-005…Q-009, Q-016

CHANGED There is one canonical request-detail layout – the detail opened from this Requests tab is identical to the one opened from the all-Requests console (file 14): Details / Links / Actions in the left 330px panel, Tasks and Stock in the wide column (Q-016).

Field/sectionSSL behaviourRef
TypeInstallation · Change · Decommission · Custom (admin-extensible). Change only after completed installation.Q-001
PriorityNormal · Urgent. Urgent = incident flow (notification + timeline).S-013
Assigned / ResponsibleAssigned = person doing the job (filtered by task-type role); Responsible = a real manager + their team (no ghost "installation team" users).Q-005
SLA & Booked CHANGED"Next action by" is replaced by the SLA target (RAG-coloured, derived from the task SLA – not user-picked) plus a Booked row showing who the work is booked on and when.Q-016, Q-006
CauseRemoved ("we already know").Q-006
ResolutionOn completion: optional/free-form. On cancellation: mandatory, from admin list mapped to standard categories.Q-010
Stock items listDedicated stock list on the request: item, serial, source store, status "Reserved" (the old "Allocated" is renamed); reserved on pick, becomes "Assigned to client" when the request completes.Q-004, Q-007
Tasks (was "Task history")Default task set auto-added per type (admin-configured, with SLA each); N/A defaults can be closed immediately; "+ Add task" adds custom tasks – dialog fields: type (admin list; its SLA shown read-only, Q-006), description, Responsible's user group → Assigned person filtered within it (Q-005), assignee notification (app / app+SMS / none), optional note. Each task opens a detail view: status, assignee, SLA, reserved stock, third-party links, the task's notes (multiple, author + timestamp recorded, new notes addable), and actions – Complete, Put on hold (reason/person/date, queryable), Reassign (role-filtered), Reschedule (new date/time; SLA unchanged) and Delete – all audited; the same reassign/reschedule/delete actions are also on each task row.Q-003, Q-005, Q-016, Q-007Q-009
LinksThird-party URLs stored against the request (and per task), with who added them; "+ Add link". Also attach a document from the Tunstall reference library (searchable picker, type filter) and accept auto-suggested guides based on the request type / affected equipment.Q-009, Q-017
Applies to (linked)Where the request covers more than one resident (same dwelling / linked agreement), an Applies to row names the linked residents with a Linked tag; the Requests tab also carries a linked-requests banner.Q-018
Completion flowRequest closes only when all tasks complete. Completing the last open task triggers a prompt to the completing user: "All tasks complete – close this request?" with an optional free-form resolution (Q-010). Closing sets the request to Completed and assigns reserved stock to the client; "Keep request open" leaves it open only by this explicit choice. If other tasks remain open (e.g. a custom task was added), no prompt – the request stays in progress.Q-002, Q-004, Q-010
CancellationStock auto-released to spare (partial release supported); completed requests can't be cancelled → change request. Full flow TBD.Q-011 TBD

3.9 Edit details popup

5 · Assessments S-016 wireframe ↗

6 · Agreement lifecycle wireframe ↗

6.1 States

Pending → Active → Terminating → Terminated → (Redacted), with Reactivate available ≤ 3 months after decommission. No Suspended state (S-004): all eight customers confirmed nobody operates suspension because it has no billing consequence.

6.2 Decommission S-005

6.3 Reactivate S-006

6.4 Termination & redaction S-008, S-022

7 · Terminated agreements archive S-008 wireframe ↗

8 · Work queue (replaces Workspace) G-007, Q-008 wireframe ↗

The old Workspace was a cross-client advanced search over requests (Assigned, Responsible, Type, Status, Request Hold Reason, Address, Name, PNC Equipment Id, Agreement No., Customer Reference → queue table with Next Action, Assigned To, Priority). Customers called it "over complicated" (SaaS4). Decision: it moves out of Service Agreements into the Requests/Tasks area (G-007) as the team work queue. It is specced here because it is part of the old section; it will be wireframed in its final home, with a preview included in this module's wireframes.

9 · Quick Agreement – disposition G-006

Quick Agreement (5 screens) is not rebuilt. It existed to rush hospital discharges onto the platform and did so by creating ghost equipment, breaking stock integrity – "a fudge that was quickly deployed without true detailed planning" (Greg, M2). Replacement, agreed in M2:

10 · Old History sub-pages – disposition S-014 wireframe ↗

Old SM page (under Summary → History / Tasks)SSL dispositionRef
History → Linked Service AgreementIdentity panel "Linked agreement" link (dual occupancy)S-007
History → Previous Agreements HistoryTerminated archive (§7) + advanced search by status/dateS-008
History → Status HistoryAdvanced search on status + Audit tab (who/when/from→to)S-014
History → Service Level HistoryAudit tab + Service Agreements report ("as of" queries)S-014, P-002, P-006
Tasks → Task History pageTasks nested under each request (renamed "Tasks", Q-007)S-012
Tasks → Schedules pageScheduling module (bookings/planner) – links from request tasksC-001
Incidents tab (+ timeline, Increase SLA)Urgent requests; ARC colour timeline kept; SLA handling specced with the Requests moduleS-013

11 · Coverage matrix – all 98 old screens

Every screenshot group from "Current Service Manager / 5 Service Agreements" mapped to its SSL home. ✅ = specced + wireframed in this module · 📄 = specced here, wireframed in a later module · ➡ = owned by a later module · ✂ = removed by decision.

Old screens (group)#SSL dispositionWhere
2 Search → Basic / Advanced Search, Status & Funder menus, results lists (Pending/Terminating views)9✅ Global search bar + Advanced search page (§1)G-005
2 Search → results row-action menus ("…" table options: Navigate to open request, Add Request, Suspend/Resume)7✅ Row click → profile; actions live on the profile action bar (§2.2); Suspend/Resume entries ✂S-004, S-012
2 Search → Agreement Summary (icons, info box, tab views incl. Pending/Suspended/Terminating states)7✅ Profile identity panel + Summary tab (§2, §3.1); status states per lifecycle §6S-001S-003
2 Search → Suspend icon / Suspension Reason / Resume2✂ Removed – never operated, no billing effect (§2.2)S-004
2 Search → Print (icon + displays)4✅ Print to PDF, prettified (§2.2)S-020
2 Search → Contacts tab (+ contact group)3✅ Contacts tab (§3.2)S-011
2 Search → Assessments tab (+ completion details)2✅ Assessments tab, draft→publish (§5)S-016
2 Search → Equipment tab (+ equipment history)2✅ Equipment tab + decommissioned toggle (§3.3)S-017
2 Search → Requests tab + Change/Installation/Decommission Request Details, Add/Edit, Complete, Cancel, Pick Stock, Stock Item Edit, Add Task/Note/Link popups, task details/stock38✅ Requests tab + request detail (§4); pick-stock & stock-edit screens 📄 detailed flow with Requests/Inventory modulesS-012, Q-001Q-011
2 Search → Incidents tab1✂ Tab removed → urgent requests (§3, §4.1); console ➡ Requests moduleS-013
2 Search → History menu (Linked SA, Previous Agreements, Status, Service Level)4✅ Mapped per §10 – advanced search / audit / archiveS-014
2 Search → Tasks menu (Task History, Schedules)2✅ Nested tasks (§4); schedules ➡ Scheduling moduleS-012, C-001
2 Search → Audit tab1✅ Audit tab (§3.7)S-014
2 Search → Terminated agreement views2✅ Lifecycle §6 + Terminated archive (§7)S-005S-008
3 Workspace → Basic/Advanced Search, Type/Status/Hold Reason menus, search outputs9📄 Work queue (§8) – final home: Requests/Tasks areaG-007, Q-008
1 Quick Agreement → form + scope screens5✂ Removed → simplified referral (§9) ➡ Referrals moduleG-006

Counts are screenshot files per group (some files show the same screen in different states). Total 98 ✓.

Round 11 – review changes (12 Jun 2026)

Changes made in response to Ivan's 12 Jun review and the two critique reports (05 stakeholder, 06 UI/UX). Each is reflected in the wireframes (03) and, where structural, in the build spec (04).

#ChangeWhereRefs
1Request cancellation flow – confirmation modal with a mandatory reason from the admin-defined category list, optional note, automatic reserved-stock release to spare (partial release supported), and an audit statement. Distinct from completion (whose resolution is optional/free-form).Request detailQ-010 Q-011 S-014
2Reactivate hidden out of window – the Reactivate control shows only inside the 3-month reactivation window; expired rows show a non-actionable "Reactivation window expired" note instead of a button.ArchiveS-006
3Terminated, non-redacted agreements open read-only – a dedicated read-only profile (identity, services, contacts, audit) reachable from the archive; redacted records cannot be opened (Verify only). No edit/request/call actions.Archive → read-only profileS-008
4Service type added as a first-class field on every service (per the notes: "services have a type, start date, end date, cost, payee"); types configured in Administration.Summary · ServicesS-021
5Add service flow – new-service modal (type, name, start/end, cost, payee) with required-field validation.Summary · ServicesS-021
6Edit service-user data – "Edit details" opens an audited editor of identity/record fields (name, DOB, address, phone, email, refs, scope, MOSA, colours, keywords).Identity panelS-014 SSL-3.1
7Consistent, emphasised section titles – every card/table title uses one treatment (bold, primary colour, accent bar) drawn from Mark's SM headings.All cards06 titles
8Background scroll locked while any popup is open.All modals06 modals
9Removed the "→" arrow from list-view title links (requests, tasks, agreements).Lists
10Phones and addresses are linkstel: on every number, Maps URLs on addresses.Identity, Contacts, Equipment
11Advanced-search click closes the suggestion list (blurs the search input).Global searchG-005
12.1Assessment editor is now a full-page route, not a modal – sticky group navigation (About/Wellbeing/SSM/Connectedness/Outcome), per-group completion counts, autosave + resume indicator, scroll-spy. Publish stays a confirmation modal.Assessment editorS-016
12.2New Request is a 2-step flow (What → Who & when) with pre-filled defaults (channel = Phone, requester = last caller, group from task-type role).New requestQ-001 Q-005
12.3Interaction grammar codified – lifecycle entities (request, assessment) are pages; quick context (task, device, DMP) opens as a slide-in side panel; confirmations stay modals.Global pattern06 grammar
12.4Status-pill token table documented in the global shell (01) – 7 semantic states, reused across modules.01 Shell §406 pills
12.5Required fields marked (red *) with inline validation + error summary on Save (new contact, new service, edit details, cancellation reason, request title).All formsAA 3.3.x
12.6Typeahead keyboard model – arrow-key traversal, Enter to open, substring highlight, "no results – try advanced search" row.Global searchG-005
13.1Urgent-request ARC timeline restored – sent → accepted → en route (ETA) → arrived → completed, colour-coded, shown on the profile under the urgent request (and on the request page).Requests tab / request detailS-013
13.2Per-row quick actions (hold, history) on the requests grid – no need to open each request.Requests tabQ-008
13.3Identity panel fields added – Source (→ referral), Scope, MOSA flag, Email, First contact (name + number).Identity panelSSL-3.1
13.4Contacts call-order column (1, 2, 3…) plus a Change-priority control.Contacts tabS-011
13.5Audit pagination – 6 rows per page with "Show more".Audit tabS-014
13.6Service-expiry workflow – Extend action on expiring services + link to the "expiring within 7 days" report (extend / let lapse / call funder).Summary · ServicesS-021 P-008

Round 12 – review changes (15 Jun 2026)

Changes from Ivan's 15 Jun review. Several refine or reverse Round-11 decisions (noted below); each is reflected in the wireframes (03).

#ChangeWhereRefs
1"Reactivation window expired" text removed from terminated rows – out-of-window rows now simply omit the Reactivate control (no non-actionable label). Reverses R11 #2 wording.ArchiveS-006
2Terminated read-only profile expanded – added read-only Requests, Assessments, Equipment (recovered), Call history, Notes and Messages cards alongside the existing identity/services/contacts/audit. Extends R11 #3.Archive → read-only profileS-008
3Titles on all tables – Requests, Equipment, Work queue and Terminated-agreements tables now carry card-h titles, matching every other table.All tabs / lists06 titles
4Identity panel trimmed – removed Source, Scope, MOSA flag, Email and First contact (build-spec/critique-sourced, never meeting-agreed). Reverses R11 #13.3.Identity panelSSL-3.1 (to-confirm)
5Audit pagination = numbered pages with prev/next, replacing the endless "Show more". Replaces R11 #13.5.Audit tabS-014
6Search highlight strengthened – typeahead match highlight is now a prominent solid amber (was a pale tint), AA in light and dark.Global searchG-005
7Requests visually separated – each request block is delimited; the urgent ARC response timeline is centred in its own distinct dashed panel with a tinted background.Requests tabS-012 S-013
8Per-row quick actions removed from the requests grid. Reverses R11 #13.2.Requests tabQ-008
9Change-priority implemented – the Contacts control opens a working re-order popup (▲/▼); saving writes the new call order back to the contacts list and audits it.Contacts tabS-011
10Extend-service popup trimmed – removed the "Let it lapse" and "Call funder" buttons; Extend / Cancel remain.Summary · ServicesS-021

Open questions for Tunstall (module-specific)

Change log

10 Jul 2026 – SWEEP: cross-module linking pass. Device detail links to the product definition (23); the Services "Expiring soon" filter links across to the Service Agreement Report (24, ≤7-days preset applied in the build); the request view Stock items card mirrors the fulfilment pills and Linked transfers row from 13/14 (Q-004). All hrefs verified programmatically.