SSL Service Manager · Scheduling module · Getting requests and tasks onto the right person’s day – installs, equipment changes, decommissions, assessments and welfare calls. The old Service Manager’s weakest-scored area (SaaS4: 2–4/9). Keeps the section name and adopts Mark’s look/functions (C-001), and is reimagined around the customer demands recorded in C-004. Sources: consolidated meeting notes (M5, M8), the Current SM “6 Scheduling” screenshots, Mark’s prototype (Daily Planning / Dispatch / Live Service), 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
Scheduling is where a request’s tasks (G-002) become booked visits on a named person’s day. It stays a top-level section (G-004) and keeps its name (C-001). In the old SM it was a searchable task list plus a single Planner; everyone agreed this was “the real area that needs simplifying”. The SSL Service Manager rebuilds it into three working screens and adds the things customers have been asking for.
| Old SM | SSL Service Manager | Ref |
|---|---|---|
| “Scheduling” = an Advanced/Basic task search list (Task State / Task Type / Actions / Add General Task) + a Planner | Scheduling – section home = Bookings (the work-to-schedule queue); sub-pages Daily Planning (dispatcher board) and Roster. “Bookings” replaces the old “bookings” wording without renaming the section. | C-001, G-004 |
| Separate Daily Planner + Daily Planning ideas in Mark’s prototype | Combined into one board – unscheduled work, responder lanes and the route map on a single screen (C-001 “consider combining the last two”). | C-001 |
| No rostering at all | Roster – shift patterns plus sick / holiday / training / admin time; the scheduler only offers staff who are on shift. | C-004 |
| Appointments booked only as “AM / PM”; the install team “check the scheduler each morning and verbally agree who does what”; planners screenshot the day and take changes by phone | Named person + timed slot, day-aware assignment, route planning by priority & travel time, full client name/address everywhere, and an outfield app that pushes jobs and takes accept/reject. | C-004, Q-015 |
Design principle. A booking is never one-click guesswork. The queue shows what needs doing and by when (SLA-derived, Q-006); the board shows who is free and where they already are; auto-schedule proposes an order by priority then travel, and every booking stays editable – reassign, reschedule or return to the queue, all audited.
The section landing view is a cross-client list of every schedulable item – tasks from requests (G-002), auto-generated assessment-review tasks (P-003) and recurring occurrences – using the same engine pattern as the Requests and Referrals consoles for consistency.
Five count tiles are the filter: Unscheduled · Overdue · Due today · Due in 7 days · Scheduled. Clicking a tile filters the list and highlights it; clicking again clears. A separate All teams / My team / Mine scope toggle limits the view. The 30-day ceiling customers complained about is gone – the queue plans arbitrarily far ahead.
| Column | Notes | Ref |
|---|---|---|
| Task | Task ID above its parent request (REQ-yyyy-nnnn). Opens in the request (Requests console). | G-002 |
| Service user & address | Name and full address – never an ID alone. Directly fixes the old planner that “needs to display full client name / address”. | C-004 |
| Type | Installation · Equipment change · Decommission · Assessment · Welfare call · Other. A recurs tag marks recurring tasks. | C-003, C-004 |
| SLA window | Derived from the task type’s SLA in Administration (no user-set due dates, Q-006); RAG-aged. Urgent tasks carry an Urgent pill. | Q-006 |
| Status / Assigned / Booked | Unscheduled vs Scheduled; the person (or whole team); the booked date & time once placed. | Q-016 |
| Actions | By state: Schedule + Make-recurring (unscheduled); Reschedule + Reassign (scheduled); Open request (always). | Q-015 |
A type dropdown lets a planner narrow to one kind of work – e.g. assessments only – which was the explicit ask for handling assessment renewals separately from field jobs (C-003). This also satisfies the reporting discussion in M5: rather than running a “scheduled-assessment report”, the planner filters the scheduler to assessments and works the list in place; an exportable report remains available in Reports (P-003).
One board with three columns: Unscheduled work · Responder lanes · a route map. It combines Mark’s “Daily Planner” and “Daily Planning” concepts (C-001) and keeps his drag-into-lanes pattern, but adds the routing and travel-time intelligence customers asked for.
| Behaviour | Detail | Ref |
|---|---|---|
| On-shift only NEW | Lanes show only staff on shift that day (from the Roster). A person on holiday/sick simply isn’t a drop target – the day-aware rule behind Q-015. | Q-015 |
| Plan date arrows NEW | Prev/next-day arrows beside the date picker flick the board through days. | Client, 23 Jun |
| Place work anywhere CHANGED | Select an unscheduled item, then a single + slot to drop it at any position in a lane – start, middle or end, not just the bottom. Each leg shows travel time and distance (min · km) between stops. | C-004 |
| Whole-team lanes NEW | Work can be booked to a team (any member can pick it up), not only a named person – “allocate jobs to full teams”. | C-004 |
| End-of-shift & return NEW | Each lane header shows the shift end and the projected back-to-depot time; a day that would overrun is flagged ⚠ late, so it’s obvious whether the person can return on time. | Client, 23 Jun |
Auto-schedule orders unscheduled work by priority then SLA and assigns each to the on-shift responder whose last stop is nearest (least travel), respecting capacity and skill/team – but it makes proposals only: each proposed booking is shown highlighted in the lane with Accept / Reject buttons (plus Accept all / Reject all), and nothing is committed until accepted. Optimise routes likewise proposes a nearest-neighbour re-sequence: the lane is shown in the proposed order with the moved stops highlighted (kept full-size, no cross-out), accepted or rejected per route. Accepted bookings remain fully editable.
A real interactive map (Leaflet + OpenStreetMap) replaces the schematic – pan/zoom, real Leeds positions, coloured pins per responder and a routed polyline. It carries a legend (depot · scheduled · unscheduled · selected route). Hovering a job enlarges its pin; clicking a pin highlights the job in the list (and vice-versa). Selecting a lane draws that person’s route while all other pins stay visible (including unassigned), with total distance and time. Travel legs everywhere read min · km. People use a high-contrast colour each so routes don’t blend.
The tray is ordered with the longest-waiting jobs on top, each box colour-coded by task type (tag colours). The task-type filter sits in the Unscheduled section. The lanes sit under a “Responsible’s user group” selector (All / Installations team / Assessors) so the board can be narrowed to one group.
A brand-new capability – rostering did not exist in the old Service Manager (“rostering that didn’t exist before, which is obviously a great new feature”, M5). A weekly grid of staff × days. Each day cell is a 24-hour bar with only the on-shift hours coloured, so you can see who covers which part of the day at a glance; absences (off · sick · holiday · training · admin) colour the whole cell.
| Behaviour | Detail | Ref |
|---|---|---|
| 24-hour day cells NEW | Each cell shows a 0–23h strip with the worked hours filled – “see who is on shift in the different parts of the day”. Training has its own colour, distinct from a shift. | Client, 23 Jun |
| Flexible shift patterns NEW | Clicking a person’s name opens a recurring-pattern editor for irregular weeks – pick any days and a start/end time, e.g. every week Wed–Sat, 07:00–15:00. Clicking a single day cell still makes a one-off change/absence. | Client, 23 Jun |
| Drives the scheduler | On-shift status is what the board and the schedule picker read when offering assignees (Q-015). | Q-015 |
| Week navigation + filters NEW | Working prev/next week arrows; week dates, arrows, a filter-by-name box and the team dropdown sit on one row above the grid. | Client, 23 Jun |
| Roster-change reassign CHANGED | Marking someone sick/holiday who has booked work opens the “Reassign affected work” flow (renamed from “re-home”): every affected task is listed with its own assignee dropdown, plus “set all to …” and auto-distribute-by-travel helpers. | C-002 |
| Locked referrals surfaced too NEW | Booked tasks are not the only work stranded when someone goes off. Opening a referral locks it to that user (R-008), so a referral opened at 16:55 by a person who then calls in sick is invisible work nobody else can touch. The reassign flow therefore has a second section – “Referrals locked to them” – listing each locked referral (id, prospect, status, how long it has been held, urgent flag, link into the Referrals module) with a per-row choice: reassign to a colleague (the lock transfers), release to the team queue (unlocked, whoever opens it next takes it), or deliberately leave locked. “Release all” and “set all to …” helpers mirror the task section, and both sections are applied in one confirm, one audit entry apiece. Crucially, the flow now opens even when the person has no booked tasks but does hold locked referrals – that case previously slipped through with no prompt at all. | R-008, C-002 |
| MS Teams / 365 sync | Built as a Teams panel (see §8) – sync shifts/bookings to Teams/365 calendars, push jobs, accept/reject in Teams. Copy week → duplicates the week’s roster. | C-011 |
| Flow | Behaviour | Ref |
|---|---|---|
| Schedule (day-aware) | Pick a visit day and duration; assignees are filtered to who’s on shift that day; choose a free slot from a grid (busy slots greyed). Books a named person + time. | Q-015 |
| Reassign | Group → person within it (no ghost users), with an audited reason – including “closer to other jobs (travel)”. | Q-005 |
| Reschedule | Move a booking to another day/time; SLA target is unchanged and a move past target is flagged; audited. | Q-016 |
| Make recurring NEW | Weekly … annual frequency; each occurrence auto-created and queued; option to create the next only after the current closes. | C-004 |
The field crew’s phone view, included to show the loop the planner depends on. Today crews “take screen grabs prior to leaving office … and receive changes via phone calls”; this replaces that with push.
| Capability | Detail | Ref |
|---|---|---|
| Push + accept / reject NEW | New jobs are pushed to the assignee; they accept or reject with a reason. A rejection returns the job to Unscheduled and notifies the dispatcher. | C-004 |
| Live to the ARC | Accept, start, complete and outcomes sync the moment the crew taps – no end-of-day catch-up. | C-004 |
| Navigate & sign | Turn-by-turn to the what3words square; capture notes and a signature on completion. | SaaS4 |
| Offline TBD | Several sites have poor signal – updates queue and sync when back in range. | SaaS4 |
| Depends on / feeds | What | Ref |
|---|---|---|
| Requests (13/14) | Tasks originate from requests; the queue links back to each request. Task delete/reassign/reschedule grammar is shared (Q-016). | G-002 |
| Administration | Task types & their SLAs (Q-003/Q-006), shift patterns, skills, teams, and the recurring/follow-on options are configured there. | Q-003 |
| Inventory | Stock reserved for an install task is held against the request (Q-004); the old “Task Stock” screens belong to Inventory, not Scheduling. | Q-004 |
| Reports | Scheduled-assessment report and route/utilisation reporting (P-003) live in Reports; the scheduler can show assessment schedules only. | P-003 |
| ILOS call-handling | Welfare/notification calls captured on a service push to ILOS as reminders; a separate sync workstream (deep-review meeting 2, item 33). | M2 review |
| Service User Profile | Decommission schedules an equipment-recovery task (S-005); a request’s follow-on is auto-scheduled for its date (S-012). | S-005, S-012 |
The Current SM 6 Scheduling folder holds 15 screenshots. Every one is accounted for below; the counts sum to 15.
| Old SM screen group | Count | Disposition | Where |
|---|---|---|---|
| Advanced Search 1 & 2, Basic Search, Add General Task, Task State menu, Task Type menu, end-of-table Actions | 7 | REBUILT as the Bookings queue (search, type filter → C-003, add task, row actions). | Scheduling – §1 (built) |
| Task Details menu (1 & 2) | 2 | OWNED ELSEWHERE Task detail is the request/task detail; surfaced here via Open request + the board’s Job detail. | Requests (13/14) |
| Task Stock menu + Stock Items / Allocated-from-Prescription / Deallocated / Parts Used tables | 5 | OWNED ELSEWHERE Stock against a task belongs to Inventory. | Inventory (later) |
| Planner | 1 | REBUILT as Daily Planning (lanes + route map + auto-schedule). | Scheduling – §2 (built) |
| Total old screens | 15 / 15 ✓ | ||
Net-new (no old screen): Roster (§3), the day-aware Schedule / Reassign / Reschedule / Recurring flows (§4), Auto-schedule & route map (§2) and the Outfield app (§5) – all driven by C-002 and C-004.
A major client raised seven requirements that touch Scheduling. All are implemented in the wireframe and recorded as decisions C-005…C-011.
| Requirement | How it’s implemented | Ref |
|---|---|---|
| Recurring appointments – “same schedule for another week” | A NEW Recurring-appointment flow (weekly … annual) plus a Repeat week → action on Daily Planning and a Copy week → on the Roster that duplicate the week’s shifts & bookings; each occurrence is auto-created and individually editable. | C-010 |
| See how long a job has waited – colour-change if not accepted within an hour | A NEW wait-time chip on every un-booked job and pool item: green < 30 min, amber 30–60, red > 1 hour (a gentle pulse) – in the queue, the planning tray and the outfield app. | C-007 |
| Accept jobs into an available queue | A NEW Available jobs pool: a job can be offered to the team (Offer to pool) and any on-shift member self-accepts it into their own day – on the dispatcher console and in the outfield app. | C-008 |
| Reassign tasks to others – by themselves | Self-service hand-over on the outfield app (and reassign on the console): the assignee moves their own job to another on-shift colleague, who is notified – no dispatcher required. | C-009 |
| T-shirt job sizing (S/M/L/XL) for the Tunstall team | A NEW size badge on every job (queue, board, outfield); size combines with the job type to set the expected duration. | C-006 |
| Configure how long a job should take (per job type) | Job durations are configured in the Administration module – minutes (m) per job type × size – not on the scheduling screen; the scheduler reads them to lay out lanes and pre-fill the visit duration. | C-005 |
| Teams app integration | A NEW Microsoft Teams panel: sync shifts/bookings to Teams / 365 calendars, push jobs as Teams notifications, and accept/reject from within Teams (adaptive cards). | C-011 |
Ivan's review batch of 02 Jul 2026 – three functional additions (decisions C-012…C-014) plus board polish. All are implemented in the wireframes.
| Correction | How it's implemented | Ref |
|---|---|---|
| Gender-restricted visits – service users may carry the keyword "Visits by females only" / "Visits by males only" | The keywords join the ILOS vocabulary (Administration → Keyword management; also on the profile keyword picker). Restricted tasks carry a NEW ♀/♂ chip in the tray, on lane cards, in the work queue and in the task panel. Dropping a task on a mismatched responder opens an explanatory popup – the planner can still Assign anyway (recorded in the audit log). The schedule/reassign people lists mark mismatched staff, and Auto-schedule only proposes matching staff. | C-012 |
| Responder pairing – bind two Responders so their schedules align for a period (shared van / partnership / training), unbind later | A NEW Administration → Responder pairing page: bind two same-group Responders with a reason and a from–to period; active pairs listed; Unbind asks for confirmation and is audited. While bound, Daily Planning shows a Paired · [partner] chip on both lanes, the two lanes mirror each other (booking on either books both), and Auto-schedule / Optimise treat the pair as one unit. | C-013 |
| Multi-person tasks – "number of people required" at task creation; all attendees must align | The Add-task popup (Requests / profile) gains a NEW People required field. On the board, multi-person tasks carry a ×N chip; when booked with fewer people than required a second-responder picker opens, showing each candidate's arrival time computed from their own route and shift fit. The latest natural arrival sets the shared start; earlier attendees show an explicit "waits n min so all people start together" leg and a striped wait segment on the day bar; each attendee's travel to/from their own other tasks stays their own. | C-014 |
| Responsive board – at 1456 × 858 the centre column was too narrow to use | The three-column plan grid now steps down: side columns shrink first (≤1780px), the map drops below the board at ≤1560px, the tray narrows at ≤1300px, and everything stacks ≤900px – the Responders'-day column stays usable at laptop widths. | – |
| Day-bar tooltips show duration | Hovering a work / travel / Teams-busy / wait block on a responder's day bar now shows start–end · duration (e.g. "Work: 09:30–10:15 · 45m"). | – |
Ivan's second 02 Jul batch – decisions C-015…C-018, G-012, G-013 and a revision of Q-008. All implemented in the wireframes.
| Correction | How it's implemented | Ref |
|---|---|---|
| Handover re-oriented to the next shift and moved under My Work | The staff-names list is replaced by a per-entry toggle – Inform next shift (prominent teal callout for the incoming team) vs Log for everybody; a To do contribution type is added. A Previous shift – summary card carries an Acknowledge button that goes inactive once pressed (audited). Until acknowledged, the Handover nav item (now under My Work in every shell) shows a red ! and Home + My Work display a warning banner linking to the Handover. The end-of-shift summary is a larger input with basic formatting (bold / italic / bullets / ☐ to-do lines). | C-015 |
| Hold is task-level only | Requests can no longer be put on hold on their own: the Tasks queue gains pause/resume actions with a reason + review date; holding a task automatically puts the whole request On hold and pauses its SLA; only a task can be resumed, which releases the request. The Requests console modals were reworded accordingly, and My Work gains an On hold section listing each hold with its review date (overdue reviews flagged). | Q-008 |
| Roster – Copy week removed; people can be removed | The Copy week button is gone (rotating patterns supersede it). The shift-pattern popup (click a person's name) gains Remove from roster… with a confirmation popup – booked work is released for reassignment (C-002), history kept per retention. | C-017 |
| Rotating schedules – up to 4 weeks | Each availability row in the employee editor carries a Week 1–4 selector; the set repeats as an N-week cycle (weekly if only Week 1 is used), so rotating shift patterns roster in one step. The employees table summarises per-week patterns ("Wk1 … · Wk2 … · repeats as a 2-week cycle"). | C-016 |
| Roster access privilege | View and edit are separate: everyone can view the roster; only authorised roles edit (Administration → Security & permissions). The roster page states that non-editors see it read-only. | C-017 |
| Uncompleted-task release timing | Administration → Platform settings: release uncompleted tasks back to Unscheduled immediately / at midnight (default) / 24 h / 48 h after the shift, using the existing "Released" badge + reason. | C-018 |
| Global units & time format | Administration → Platform settings holds the distance unit (miles by default) and 24-hour vs AM/PM; the planner, people cards, route bar and My Work now display mi. | G-012 |
| Leaver data retention | A leaver's roster & activity data is kept for a configurable period (default 12 months) then redacted – same model as service users. | G-013 |
| Tasks page search-field overlap | The "Search task…" input had the same cascade bug as Requests/Referrals (the generic input[type=text] rule overriding the padded search style); fixed with a higher-specificity selector. | – |
Ivan's 17-item refinement batch on the 02 Jul work – mostly polish of C-012…C-018. Highlights:
| Correction | How it's implemented | Ref |
|---|---|---|
| Map placement | When the three Daily-Planning columns no longer fit (≤1560px), the map moves above the board instead of below it (grid row 1, full width); same on tablet/phone. | – |
| Responders' day polish | Lane headers show the shift start ("starts 08:00"); day-bar hover now also reports free-time gaps with start–end and duration; Teams-busy cards carry the Teams icon on the right so the hour column aligns. | – |
| Pairs everywhere | A bound pair renders as one shared lane ("Anika Patel + Sam Doyle · Paired") – no duplicate lane; the people cards and responder filter merge too, and the Roster shows a Paired chip on both people. | C-013 |
| Roster person popup | The Type list gains "Personal Schedule" – the rotation defined in Administration; start/end fields hide (hours vary across the cycle). The popup also offers "Remove from my roster" (stop managing their schedule – they stay on the roster; restorable via the "Hidden" pill) alongside the destructive Remove from roster…. | C-016 · C-017 |
| Add-task modal | "Welfare phone call" removed from the task types; SLA sits beside Task type at the top; User group + People required share the row under the description; Notify assignee removed. With People required > 1 the Assigned list offers only tandems (two Responders sharing a van) – individuals are visible but not selectable. | C-014 |
| Gender restriction enforced in pickers | Assignment dropdowns (schedule, reassign, add-task, second-responder picker) make only allowed-gender staff selectable for a restricted service user; Administration's employee editor gains a Gender picker (Male/Female). Mrs Edith Carter carries "Visits by females only". | C-012 |
| Rotating-schedule editor | Week blocks with an "Add a week" button (titles "Week 1", "Week 2"… up to 4); the set repeats indefinitely. | C-016 |
| Handover | The "Inform next shift" tag is now a loudspeaker icon; contributor names replace "Dispatcher"; each shift's summary sits on top of its issues in the stream – the Acknowledge button (on the previous shift's summary) covers the summary and all its entries; the ☐ to-do button was dropped from the end-of-shift formatting bar. | C-015 |
| Holds | Request rows no longer offer any hold action (tasks only); the Tasks-page hold popup gains a Note; My Work orders holds by nearest review date first. | Q-008 |
Ivan's fourth batch – Handover restructure, pairing depth, Calendar polish. Highlights:
| Correction | How it's implemented | Ref |
|---|---|---|
| Handover – two equal columns | Left: Previous shifts, each with its summary on top and its issues below – the latest shift carries the Acknowledge button (covers summary + issues; drives the nav dot and Home/My Work warnings) and the shift before shows "✓ Acknowledged by …". Right: Current shift – issue logging, the End of shift Summary (autosaves as you type, no draft button), the shift's logged issues each with a delete (confirmation popup), and Finalise underneath. The loudspeaker tag is sized to fit; the type is "To Do". | C-015 |
| Pair binding checks overlaps | Binding two Responders now shows a popup counting the time-overlapping booked tasks that cannot survive in one combined schedule, listing them, with "Unschedule those & bind" or Cancel. Each pair records a home-base address (bind form + table column). | C-013 |
| Calendar | A bound pair shares one double-height row (tasks fill it); the day view is zoomed ×2 (each hour column twice as wide, horizontal scroll with sticky name column) and opens scrolled to the first task instead of a blank midnight. | C-013 |
| Daily Planning | Shift start moved from the lane header to the first driving leg ("shift starts 08:00 · 12 min · 3.1 mi"); the pair's call button opens a who-to-call chooser; each person in a pair shows their own skill level; a second pair (M. Okafor + Rachel Johnson) demos a partner crossed out while on holiday (tooltip explains); the Unscheduled tray shows task keys; TSK-5001 (Mrs Edith Carter) is pre-assigned to Anika Patel (matches the female-only restriction). | C-012 · C-013 |
| Roster / My Work / profile | All seven day columns share the same width; the My Work On hold table sorts by column (dates sort chronologically via data-sort); the Language & validation block was removed from the profile's Edit details. | – |
Ivan's fifth batch. Headlines (full detail in the project instructions):
| ID | Question | Ref |
|---|---|---|
| OQ-SC1 | MS Teams / O365 sync – confirm direction (read-only import of leave vs full two-way) and the source of truth when they disagree. | C-004 |
| OQ-SC2 | Auto-schedule policy – confirm the ordering rule (priority → SLA → nearest travel) and whether skills/zones constrain candidates; should auto-schedule ever auto-book, or only propose for confirmation? | C-004 |
| OQ-SC3 | Slot granularity – fixed slots vs free start times; default visit durations per task type (from Administration). | Q-006 |
| OQ-SC4 | Team vs individual booking – when booked to a whole team, how is SLA/ownership tracked until a member picks it up? | C-004 |
| OQ-SC5 | Recurring tasks – which task types may recur, and where the catalogue of recurrence options is configured (Administration). | C-004 |
| OQ-SC6 | Outfield offline + rejection routing – confirm offline behaviour and whether a rejected job re-enters auto-schedule or waits for the dispatcher. | C-004 |
| OQ-SC7 | T-shirt sizing & duration source – confirm the size scale (S/M/L/XL?), whether sizing applies only to the Tunstall team, and whether duration comes purely from type × size or can be overridden per job. | C-006, C-005 |
| OQ-SC8 | Available-jobs pool – who may offer to the pool and who may accept (skill/zone limits?); how SLA/ownership is tracked while a job sits unclaimed; and the wait-time thresholds (default 30 / 60 min) for the colour escalation. | C-008, C-007 |
| OQ-SC9 | Teams integration scope – calendar sync direction, whether accept/reject adaptive cards write straight back to the scheduler, and channel-posting policy (per the C-011 build). | C-011 |