ILOS

SSL Service Manager

Enter the password to continue

Requests Console – Functional Specification v0.9

SSL Service Manager · Requests module · Consolidates the old SM Incidents (OSM) / Tickets (ILOS ARC) console and the Service Agreements Workspace queue into a single Requests console (G-001). Sources: consolidated meeting notes (M1–M10), current SM Incidents/Workspace screenshots, Mark's prototype create-form (inbox?create=1), SaaS4 customer review. Decision IDs refer to the Decisions Register (00).

Artifacts: 00 Register · 01 Shell · 02 Profile spec · 03 Profile wf · 04 Build spec · 11 Dashboard spec · 12 Dashboard wf · 13 Requests spec · 14 Requests wf · 15 Referrals spec · 16 Referrals wf · 17 Scheduling spec · 18 Scheduling wf

Scope & structural change wireframe ↗

In the old SM, work-to-be-done is fragmented across two ARC views – Incidents (OSM-side) and Tickets (ILOS ARC-side) – and a separate Service Agreements Workspace queue. The SSL Service Manager collapses all of these into one Requests console (G-001):

Old SMSSL Service ManagerRef
Incidents (OSM) console · Tickets (ILOS ARC) console – two separate lists of workRequests – one console, pulled from both the ARC and the local SM. Requests can be technical, personal or environmental; an incident becomes an urgent request.G-001
Service Agreements → Workspace (cross-client queue of work)Removed from Service Agreements; the cross-client queue of requests & tasks moves here ("the workspace is over complicated" – customer review).G-007
"Ticket console" terminology, ticket "history"Renamed: Request console; ticket history → Tasks; "allocated" stock → reserved; "next action date" → SLA-derived window.Q-007, Q-006
"Incidents and tickets become requests – a request can be technical, personal or environmental, and an incident is just an urgent request. The ticket console becomes the request console, and we pull requests from both the ARC and the local system." – consolidated notes, M1 (G-001).

Design principle. The console is the office/ARC work surface: a supervisor or dispatcher sees every open and closed request in their scope, filters to what needs attention, drills into a request to manage its tasks, and creates new requests. Field staff (responders/installers) primarily act on the mobile app; this console is where work is raised, assigned, watched against SLA and closed.

1 · Requests list wireframe ↗

The landing view of the module is a cross-client list of requests with working status filters, search and quick actions.

Status filters & scope NEW

The five count tiles at the top of the page are the status filter – clicking a tile (Open · Due / overdue · On hold · Unassigned · Closed) filters the list to it and highlights the active tile; clicking it again clears back to all. Counts are computed live from the data. Open = any request still with incomplete tasks; Closed covers both completed and cancelled. A separate All requests / My requests scope toggle limits the list to requests the signed-in user raised, is assigned, or is responsible for. (The earlier duplicate pill row was removed in review – the cards carry the filter.)

Columns

ColumnNotesRef
RequestMeaningful summary (what it's for) above the ID – never an ID alone. "You need to see what the request is for."Q-007
Service userLinks to the service-user profile (file 03). Dual-occupancy users (Edith / Harold Carter) appear as distinct rows.G-001
TypeInstallation · Change · Decommission · Custom task · Urgent response (the incident form of a request).Q-001
StatusFixed pill tokens (shell doc): Accepted = blue, In progress / Scheduled = amber, Completed = green, On hold = purple, Cancelled / neutral = grey, Urgent / breached = red.Q-008
Next action bySLA-derived window (RAG-coloured), not user-picked; the latest date is shown. "Cause" column removed.Q-006
AssignedThe person doing the job; "– unassigned –" is a first-class state surfaced by the Unassigned filter. A row-level Assign action opens the group→person picker (Q-005) and writes back to the row.Q-005
PriorityNormal / Urgent only (two levels, per old SM).Q-006
ActionsPer-row quick actions – assign, put a task on hold, resume, cancel – without first opening the request. (The redundant "open" icon was removed in review; the request title is the open link and the whole row is clickable.)Q-008

Breached rows are highlighted across the whole row (red tint) so SLA breaches read at a glance. The list paginates at 25 rows per page with explicit page controls (1, 2, 3 …, prev/next), as in the old SM advanced-search results.

Search & type filter

The list controls sit on a single horizontal row: the All requests / My requests scope toggle, a text filter that highlights the matching characters (the same treatment as the header search), and a Type dropdown. (The separate "Advanced" search was removed in review – the global header search covers cross-field lookup, and the inline filters cover the list.)

Scope & permissions. The list is scoped to what the signed-in user may see (Authority / CC / Region / System). The footer states the active range and total. This is the full cross-client work queue previewed on the dashboard (SSL-14).

2 · Creating a request wireframe ↗

Service user: search-and-pick, never free text CHANGED

A request must hang off a real service agreement, so the Service-user field is a typeahead, not a text box. Typing searches across surname, forename, "known as" and the 9-digit agreement number, with matches highlighted and the address shown to disambiguate households (three Carters live at 12 Mill Lane). The selection is held in a hidden id and is only ever set by choosing a suggestion; re-editing the text drops it, and leaving the field without a pick clears it - so a half-typed name can never be mistaken for a chosen one. Advancing past step 1 without a real pick is refused. Keyboard: arrows to move, Enter to choose, Escape to close. If nothing matches, the message says why ("a request can only be raised against an existing agreement") rather than offering to create one.

A two-step flow – What → Who & when – replaces Mark's single long form, keeping the dynamic, type-driven field model. Type and Priority are the first two fields (Q-013). For a new request only Type, Priority, Title and Details show at first; choosing a type reveals the rest – a prominent per-type SLA panel, the type-specific fields, the default task set, channel and the cross-user option – and pre-fills suggested values (Title, Details, default task set and the responsible group), per Q-001/Q-003/Q-013. No type is pre-selected.

Validated against the Current Service Manager "Add Change Request" form (/Request/AddChangeRequest). The old form's Next Action Date and Cause fields are intentionally dropped (Q-006 – dates are SLA-derived, "Cause" removed); old free-text Comment becomes Details/notes; Priority stays the old two-option Normal/Urgent; Assigned/Responsible user-lookups become the group→person picker (Q-005); old multi-select Task Types (configured per client) map to the default task set + custom task type (Q-003). Title, Details, Channel, Requester and Location are Mark-derived additions, flagged "+Mark – to confirm".

Field model

FieldBehaviourRef
Type (first) CHANGEDInstallation · Change equipment · Decommission · Custom – all four selectable; the form adapts. Meaning of the two equipment types: Installation = the client currently has no equipment (a first fit / new install); Change equipment = the client already has equipment installed and it is being changed (exchanged, added to, removed or maintained – see the Change-kind field). "Change" is renamed Change equipment (Q-012). Multiple simultaneous requests are allowed (no system block on combinations – user judgment).Q-001, Q-012
Priority (second)Normal / Urgent only. Urgent = incident flow: responder notified via the app; ARC colour-coded timeline applies. The SLA panel switches to the urgent accept/on-site targets.Q-006, S-013
Title, DetailsAlways visible; Title is required (inline validation blocks step 2 without a type and title) and is pre-filled from the type.M1
SLA panel NEWA prominent panel shows the SLA for the chosen type (e.g. Change equipment → engineer visit within 5 working days), refreshed live; for a custom task it follows the selected task type, and for Urgent it shows the accept/on-site incident targets.Q-013, Q-006
Default task setEach type auto-adds its default tasks (configured per client in Administration, each with an SLA). Non-applicable defaults can be ticked "N/A – close immediately"; custom tasks can be added.Q-003
Requester NEWPick from the service user's contacts (Circle of Care, S-011) or choose Other to record a free-form name + phone for a one-off caller.Q-014, S-011
Assignment CHANGEDSelect the Responsible's user group first → the Assigned list is filtered to who is on shift the chosen visit day (off-shift staff hidden). The operator can open the schedule and assign directly from a person's free slots; the booked date/time then shows under the assignee. The responsible manager is derived from the group (a real person – no ghost users).Q-005, Q-015
No user-set due dateThe next-action window is SLA-derived from each task type – not user-set here.Q-006
what3words NEWLocation defaults to the customer address; what3words is picked from the property's saved squares or chosen on a map.Q-015
Applies to all involved NEWA checkbox raises the request for all residents at the dwelling / linked agreement, creating the paired linked request shown on each profile.Q-018
Follow-on requestOptional; saved with this request – the parent can close while the follow-on stays open and auto-schedules.S-012
Channel, Location+Mark – TO CONFIRM Carried from Mark's create-form, not decided in the meetings. (Requester and what3words are now decided – Q-014/Q-015.)OQ-R1
Removed by decision. "Show nearest online staff" was removed (Ivan, round 3) – distance-ranked / route-based assignment returns with the Scheduling module (C-004); the day-aware filter + schedule picker here (Q-015) are the interim model.

2a · List presentation wireframe ↗

3 · Request detail wireframe ↗

The detail view manages a single request and its tasks. There is one canonical layout (Q-016): the detail opened from a profile's Requests tab is identical to the one opened from the all-Requests console – Details / Links / Actions in the left 330px panel, Tasks and Stock in the wide column.

Urgent requests (the incident form of a request) open a dedicated detail carrying the same response timeline component used on the Service-User Profile (S-013): Sent → Accepted → En route → Arrived → Completed, with the live stage highlighted and the SLA-breach banner. In the list, hovering (or focusing) the status pill of an urgent request reveals that whole timeline in a popover. S-013, G-001 · wireframe ↗

3a · Request detail: what it shows wireframe ↗

Everything captured at creation is shown CHANGED

Fields were being collected on the New Request form and then never surfaced again. The detail view now carries the full creation record, grouped in the order it was captured: what it is (type + change kind, priority, title, details, equipment affected), who it is for (service user with the 9-digit agreement number, linked to the profile; requester with a dialable phone), who is doing it (assigned, responsible group, SLA), and where and when (booked slot, location with a map link, the what3words square, the follow-on request and its Pending / SLA-not-started state, and who raised it, when and through which channel). A request should be readable end to end without reopening the form that made it.

Tasks table carries the scheduling picture NEW

A request's tasks are the same objects Scheduling books, so the request now shows what Scheduling knows about them. A Scheduled column gives the booking - day, slot, and any co-attendee ("Fri 12 Jun, 09:00-11:00, with G. Mason"); an urgent task shows dispatch time and ETA instead, because an incident is dispatched, not booked into a slot; a task that cannot be booked (a phone task, or one that starts on arrival) says so.

The constraints Scheduling enforces ride as compact chips under the task name rather than one column each - there is no room for a column per attribute, and they are read together anyway: size and duration (S/M/L/XL, which drives the slot length, C-005), females-only visits (from the service user's profile keyword - Scheduling will not offer a male responder and an override is confirmed and audited), two-person jobs (Scheduling books each attendee and aligns their arrival times), and access (keysafe, etc.). The chip vocabulary is deliberately identical to the Scheduling board, so a dispatcher reading the request and a dispatcher reading the board see the same thing. Every chip carries a full explanation on hover and none rely on colour alone.

One Tasks table for every request CHANGED

The urgent request's Tasks table was a stripped-down read-only list. It is now identical to the standard one - same columns, same chips, same action buttons. An urgent request's tasks are still tasks: they get reassigned, rescheduled and deleted like any others (Q-016), and a responder on an incident needs the two-person and females-only constraints at least as much as one on a planned visit.

Table header grammar follows the platform pattern: icon-only Columns control, then the emphasised primary action (Add task / Add stock item) hard right. The Actions column heading is not shown (the icons are self-evident; the name is kept for screen readers), the column is right-aligned so the icons line up beneath one another, and it is not sortable - an actions column has nothing to sort by, so it carries data-nosort and gets no sort affordance at all.

Opening a task CHANGED: the task name is the link into the task panel. The separate View (eye) action is removed - a row whose title is already a link does not need a button that does the same thing, and it was competing with the actions that actually change something.

Column balance CHANGED: the Task column (name plus constraint chips) was absorbing all available width and crushing Scheduled / Assigned / SLA / Status into slivers on narrower screens. The columns now have explicit shares and the table a minimum width; below that the shared .ttwrap scroller takes over with its edge shadows. Scroll, do not squeeze.

Verify-by-scan on every stock item CHANGED

The scan check was only on the first reserved item. It is now on every one: a responder fitting three devices has to confirm all three are the right ones, not just the first. The modal states the item and serial it was opened from and checks the scan against that task's picked stock, not against inventory - a wrong item is caught before it is installed, and the check is audited. Q-004

4 · Tasks & task lifecycle wireframe ↗

Tasks are the unit of work; a request is the container. The task panel (a side panel) shows status, assignee, SLA, reserved stock, links and notes, with actions to complete, put on hold or reassign.

BehaviourDetailRef
Notes on the taskNotes moved to the task level – multiple notes per task (different people may work it); each records its creator/editor.Q-007
On hold CHANGEDExtended from change-requests-only to any task, capturing reason, person and date (e.g. waiting on ordered equipment). On-hold tasks are queryable across the system – the console's On hold filter is that query.Q-008
Reassign / reschedule / delete CHANGEDTasks can be reassigned (group→person, on-shift filtered, Q-005), rescheduled (new date/time; SLA target unchanged) and deleted – from the task panel and the task-row quick actions; all audited. A manager-level reassignment flow guards against staff bouncing work (M2).Q-016, Q-005
SLA & bookingSLA comes from the task type (Administration) – not user-set; the panel shows the booked date/time the task is scheduled for. "Comment" is just notes; "Cause" removed.Q-006, Q-016

5 · Completion & closing wireframe ↗

A request completes only when all its tasks complete. NEW When the last open task is completed, the completing user is prompted to close the request (the same user may do both); the request stays open only if explicitly chosen.

"A request is only finished when all its tasks are done. When you complete the last task, the system should ask you to close the request – but let you keep it open if you mean to." – consolidated notes (Q-002).

Wireframe demo: open the install task → Complete task → the "close this request?" prompt appears (it requires an explicit choice and does not auto-dismiss). Q-002

6 · Cancellation wireframe ↗

Cancellation is an irreversible action – never one-click. The flow requires a mandatory, predefined reason (so the system "knows" the reason – cost / gone into care / no longer required / …) from the admin-defined category list, releases reserved stock and is audited.

RuleDetailRef
PermissionOnly a user with the Cancel-request privilege may cancel a request; users without it can request cancellation but cannot execute it. The privilege is defined by role in Administration. The Cancel action is hidden / disabled for users who lack it.Q-010
Mandatory reasonStandard category (Administration), not free text – unlike the optional completion resolution.Q-010
Tasks cancelledCancelling the request cancels all of its open tasks (completed / already-closed tasks are left as-is for the audit trail).Q-011
Stock releaseReserved stock is released back to the store it came from (its originating / secondary store), not a generic spare pool; stock already fitted / with the client stays with the client. Partial release is therefore the norm – only the un-fitted reserved items return.Q-011
Completed ≠ cancellableCompleted requests cannot be cancelled – raise a change request instead.Q-011
AuditRecorded with name, timestamp and reason; the user's other open requests are unaffected.S-014

7 · Pick stock / installer flow wireframe ↗

Installation (and stock-bearing change) requests carry a pick-stock task. The agreed process rethink: pick stock first; when an installer is picked, a stock-transfer request is auto-initiated if their van (secondary store) lacks the item; stock is reserved on pick to prevent allocation conflicts.

Dependency. The detailed stock-transfer mechanics and store model live in the Inventory module; this console references reserved/assigned/released states and links out. The auto stock-transfer-on-installer-pick remains an open coordination item (coverage review, 07).

8 · Dependencies & out of scope wireframe ↗

AreaOwned byWhy
Task types, default task sets, SLAs, cancellation/hold reason categoriesAdministrationAll configured per client (Q-003, Q-010); this console consumes them. Until Administration is built, lists are illustrative.
Stock pick / transfer / store modelInventoryReserved/assigned/released states surface here; the mechanics live there (Q-004, Q-011).
Distance-ranked / nearest-online assignment, scheduling calendarSchedulingRemoved from create by decision; returns with Scheduling.
Installation originationReferralsInstallations normally flow from a referral; raising one here is the exception path.
Request-response trend reportingReportsThe console is operational; trends live in Reports.

9 · Coverage – old Incidents / Tickets / Workspace

Disposition of the old work-management surfaces against this module. Counts to be reconciled against the Incidents/Tickets screenshot set once catalogued (OQ-R4).

Old SM elementDispositionWhere
Incidents (OSM) consoleCONSOLIDATED into Requests; an incident = an urgent request§1, G-001
Tickets (ILOS ARC) consoleCONSOLIDATED into Requests; pulled from the ARC + local SM§1, G-001
Service Agreements → Workspace queueMOVED here as the cross-client list§1, G-007
Create ticket / incident formSPECCED + WIREFRAMED as the two-step New request§2
Ticket detail + task historySPECCED + WIREFRAMED as Request detail + Tasks§3, §4
"Allocated" stock, "Next action date", "Cause"RENAMED / REMOVED – reserved; SLA-derived; Cause removedQ-007, Q-006
On-hold (change requests)EXTENDED to all tasks + system-wide query§4, Q-008
Pickup / drop-off blocksSTAYS IN ARC (out of scope here)§2
"Show nearest online staff"REMOVED – returns with Scheduling§2, §8

Open questions for Tunstall

IDQuestionRef
OQ-R1Confirm the Mark-derived create fields as request fields: Channel, Requester (+phone), Location (+what3words) – keep, drop, or make optional?§2
OQ-R2Default list scope on open – the signed-in user's team only, or their whole region? And should the dashboard "Requests open" tile deep-link to Open or Due/overdue?§1
OQ-R3Should the auto stock-transfer on installer pick be initiated from this console or owned entirely by Inventory? (Coverage review open item.)§7
OQ-R4Provide the Incidents / Tickets console screenshot set so the coverage counts can be reconciled programmatically (as done for the profile module).§9
OQ-R5Confirm the cancellation and on-hold reason category lists (the wireframe shows a candidate set) and who may cancel vs. who may only request cancellation.§4, §6
OQ-R6"Freeze vs. stop" request terminology and whether a paused request differs from an on-hold task (carried from the transcript coverage review).07

SSL Service Manager · Requests Console specification v0.9 · paired with 14 Requests console wireframes. Every decision ID links to the register (00); every section links to its wireframe screen. Keep this spec and the wireframes in sync.

Change log

DateChangeTag
10 Jul 2026Request detail – Stock items card extended: each reserved line carries a fulfilment pill (At van / In transit → van / Awaiting pick – store) and the card gains a Linked transfers row listing the auto-raised transfer(s) with id, route, state and a link to Inventory Goods Out (Q-004). A demo at-risk line (in transit, visit Thu 09:00) shows the value. Mirrored on the profile request view (03).CHANGED
10 Jul 2026Cross-module linking sweep: request keys link to the request detail from Reports and Live Service; notification items deep-link to their subject records; home tiles navigate for real. Verified programmatically.SWEEP