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
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 SM | SSL Service Manager | Ref |
|---|---|---|
| Incidents (OSM) console · Tickets (ILOS ARC) console – two separate lists of work | Requests – 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 |
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.
The landing view of the module is a cross-client list of requests with working status filters, search and quick actions.
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.)
| Column | Notes | Ref |
|---|---|---|
| Request | Meaningful summary (what it's for) above the ID – never an ID alone. "You need to see what the request is for." | Q-007 |
| Service user | Links to the service-user profile (file 03). Dual-occupancy users (Edith / Harold Carter) appear as distinct rows. | G-001 |
| Type | Installation · Change · Decommission · Custom task · Urgent response (the incident form of a request). | Q-001 |
| Status | Fixed 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 by | SLA-derived window (RAG-coloured), not user-picked; the latest date is shown. "Cause" column removed. | Q-006 |
| Assigned | The 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 |
| Priority | Normal / Urgent only (two levels, per old SM). | Q-006 |
| Actions | Per-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.
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.)
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.
/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 | Behaviour | Ref |
|---|---|---|
| Type (first) CHANGED | Installation · 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, Details | Always visible; Title is required (inline validation blocks step 2 without a type and title) and is pre-filled from the type. | M1 |
| SLA panel NEW | A 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 set | Each 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 NEW | Pick 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 CHANGED | Select 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 date | The next-action window is SLA-derived from each task type – not user-set here. | Q-006 |
| what3words NEW | Location 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 NEW | A 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 request | Optional; 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 |
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 ↗
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.
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.
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.
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
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.
| Behaviour | Detail | Ref |
|---|---|---|
| Notes on the task | Notes moved to the task level – multiple notes per task (different people may work it); each records its creator/editor. | Q-007 |
| On hold CHANGED | Extended 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 CHANGED | Tasks 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 & booking | SLA 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 |
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.
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
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.
| Rule | Detail | Ref |
|---|---|---|
| Permission | Only 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 reason | Standard category (Administration), not free text – unlike the optional completion resolution. | Q-010 |
| Tasks cancelled | Cancelling the request cancels all of its open tasks (completed / already-closed tasks are left as-is for the audit trail). | Q-011 |
| Stock release | Reserved 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 ≠ cancellable | Completed requests cannot be cancelled – raise a change request instead. | Q-011 |
| Audit | Recorded with name, timestamp and reason; the user's other open requests are unaffected. | S-014 |
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.
| Area | Owned by | Why |
|---|---|---|
| Task types, default task sets, SLAs, cancellation/hold reason categories | Administration | All configured per client (Q-003, Q-010); this console consumes them. Until Administration is built, lists are illustrative. |
| Stock pick / transfer / store model | Inventory | Reserved/assigned/released states surface here; the mechanics live there (Q-004, Q-011). |
| Distance-ranked / nearest-online assignment, scheduling calendar | Scheduling | Removed from create by decision; returns with Scheduling. |
| Installation origination | Referrals | Installations normally flow from a referral; raising one here is the exception path. |
| Request-response trend reporting | Reports | The console is operational; trends live in Reports. |
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 element | Disposition | Where |
|---|---|---|
| Incidents (OSM) console | CONSOLIDATED into Requests; an incident = an urgent request | §1, G-001 |
| Tickets (ILOS ARC) console | CONSOLIDATED into Requests; pulled from the ARC + local SM | §1, G-001 |
| Service Agreements → Workspace queue | MOVED here as the cross-client list | §1, G-007 |
| Create ticket / incident form | SPECCED + WIREFRAMED as the two-step New request | §2 |
| Ticket detail + task history | SPECCED + WIREFRAMED as Request detail + Tasks | §3, §4 |
| "Allocated" stock, "Next action date", "Cause" | RENAMED / REMOVED – reserved; SLA-derived; Cause removed | Q-007, Q-006 |
| On-hold (change requests) | EXTENDED to all tasks + system-wide query | §4, Q-008 |
| Pickup / drop-off blocks | STAYS IN ARC (out of scope here) | §2 |
| "Show nearest online staff" | REMOVED – returns with Scheduling | §2, §8 |
| ID | Question | Ref |
|---|---|---|
| OQ-R1 | Confirm the Mark-derived create fields as request fields: Channel, Requester (+phone), Location (+what3words) – keep, drop, or make optional? | §2 |
| OQ-R2 | Default 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-R3 | Should the auto stock-transfer on installer pick be initiated from this console or owned entirely by Inventory? (Coverage review open item.) | §7 |
| OQ-R4 | Provide the Incidents / Tickets console screenshot set so the coverage counts can be reconciled programmatically (as done for the profile module). | §9 |
| OQ-R5 | Confirm 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.
| Date | Change | Tag |
|---|---|---|
| 10 Jul 2026 | Request 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 2026 | Cross-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 |