SSL Service Manager · Reports module (Phase 7). Consolidates the old SM's 21 operational reports into five merged reports plus one planning view, on a shared report-viewer platform with per-login scoping, scheduled delivery by emailed link, “as of” date search and per-customer custom reports. Grounded in Decisions Register P-001…P-008, the dedicated reports call (transcript 4, 26 May 2026 area) and the old SM Operational Reports screens; cross-references C-003 (scheduler filter), Q-006 (SLA-derived targets) and the Inventory I-series.
Artifacts: 00 Register · 01 Shell · 02 Profile spec · 03 Profile wireframes · 04 Build spec · 11 Dashboard spec · 12 Dashboard wireframes · 13 Requests spec · 14 Requests wf · 15 Referrals spec · 16 Referrals wf · 17 Scheduling spec · 18 Scheduling wf · 23 Inventory spec v2 · 23 Inventory wf v2 · 24 Reports spec · 24 Reports wireframes
Reports is the read-only query layer over everything the other modules produce. The old SM ships 21 operational reports; users routinely export several and merge them in Excel to answer one question. The agreed redesign collapses them into five merged reports + one planning view, each a flexible, filterable query, on one shared viewer platform:
| New report | Replaces / merges (old SM) | Ref |
|---|---|---|
| Request report | Request Cause & Resolution · Request vs. Targets · Incidents · request half of Cancellation Reasons; absorbs Task SLA and Termination Reasons. | P-005, P-008 |
| Referral report | Referrals Received · referral half of Cancellation Reasons. | P-004 |
| Service agreements report | Flexible Service State History · Flexible Service Trouble Shooting · Service Agreement Detail / Equipment / Flexible Services / Services · Service Agreements Without Active Services · Service Active Between Given Dates. | P-006 |
| Stock report | Stock Item Detail · Stock Item Expiry Dates · Store Stock Levels (+ missing-stock view). | P-007 |
| Audit report | Stock Transfer History · Stock Item Transferred History – generalised to all tracked activities. | P-008 |
| Assessment next-review (planning view) | Assessment Next Review Date – kept as an exportable report; the planning workload itself moves toward Scheduling. | P-003 |
Mental model: every report is a predefined search – a saved configuration of the same flexible query engine. Customers can commission (or, with a technical user, build) additional predefined searches as custom reports (P-002); the flexible-search engine is a licensed Structured Software component, which supports a commercial model of either self-service or paid report additions.
All six reports run on one viewer surface; only filters and columns differ. The platform features are decisions P-001/P-002:
| Feature | Behaviour | Ref |
|---|---|---|
| Scoping | Every report returns data only for the logged-in user's customer level: authority → ARC → region → global (multi-customer logins for engineers/support). Within their level, users can narrow the scope (e.g. one authority within an ARC – “you may want the report for all authorities within your arc”). The active scope is always displayed on the report. PTL multi-tenancy delivery (26 May) to be confirmed. | P-001 |
| Date range | Explicit from/to range on every report – never a fixed “next 30 days” (the old Assessment report's headline flaw). | P-003 |
| “As of” a date | NEW Run any report as the data stood on a past date (requires change-dates on all entities – build-spec dependency). Presented as a toggle next to the date range. | P-002 |
| Columns | Show/hide columns starting from the most-used set; the browser remembers per-user, per-report selections. Replaces the old two-page Show/Hide Fields screens. | P-002 |
| Filters | Filter row directly under the header (old SM pattern – kept; placement is the designer's choice per the call). Every filter of every merged-away report must exist on its successor. | P-005/6/7 |
| Export / print | CSV export (old SM exports CSV) and print. Row counts and value totals in a footer band where meaningful. | P-002 |
| Sorting / paging | All columns sortable; 25/page pagination (shell conventions). | – |
Reports are read in the system but consumed elsewhere – in board packs, funder updates, contract reviews and emails. Two families of output exist, and both must be one action away.
| Output | Behaviour | Ref |
|---|---|---|
| Export (the data) | The Export button opens a menu: CSV (.csv), Excel (.xlsx) and PDF (.pdf). Exports carry the rows and the visible columns as currently filtered and sorted, not the raw table. The PDF is landscape A4, paginated, with the report title and the active filters on it. | P-002 |
| Copy image (one chart) | Every chart carries a Copy image action: the chart, the ILOS header, the report title and the filters applied, composed into one image, with the values drawn onto the chart itself so the picture is readable without the tooltip. | P-009 |
| Copy dashboard (everything) NEW | Alongside the per-chart copy, each report has a Copy dashboard action that renders every KPI card and every chart on the report into a single image – cards laid out in their grid, the lead chart full width and the rest two-up, exactly as on screen, under the same ILOS header and filter chips, with a generated-on stamp. This is the "put the whole report picture in the pack" action; copying chart by chart was the friction it removes. Copies to the clipboard where the browser supports it, otherwise downloads a PNG. Composed on a canvas from the live chart instances and the rendered cards, so it always reflects the filters actually applied – no separate rendering path to drift out of step. | P-009 |
The Export menu did not open next to its button – and so appeared not to work at all – whenever the page was zoomed in. The platform's accessibility text-size control applies zoom to the root element; under a root zoom, getBoundingClientRect() and innerWidth/Height report visual pixels (already multiplied by the zoom factor) while an absolutely-positioned popup lays out in unzoomed ones, so the menu was pushed progressively further off-target as the zoom rose.
Fixed centrally rather than locally: shell-a11y.js now exposes uiZoom(), uiRect(), uiVW() and uiVH(), which give measurements back in the element's own coordinate space, and the popup is anchored with position:fixed (so it is also immune to page scroll). The same bug affected the shared Columns popups and the styled tooltips on every page, and all have been migrated. Standing rule: never position a popup from a raw getBoundingClientRect() – always go through the shared helpers. P-010
All 21 old Operational Reports (58 screenshots in Current Service Manager/8 Operational Reports/) accounted for:
| Old report | Disposition | Ref |
|---|---|---|
| Assessment Next Review Date | CHANGED Kept as the Assessment next-review view (§7) – date-range + review-task search added; planning workload → Scheduling. | P-003 |
| Cancellation Reasons | REMOVED Split: referral half → Referral report (§4), request half → Request report (§3). | P-004 |
| Referrals Received | REMOVED Merged into the Referral report (§4). | P-004 |
| Request Cause and Resolution | REMOVED Merged into the Request report (§3). | P-005 |
| Request vs. Targets | REMOVED Merged into the Request report (§3) – SLA target/actual columns. | P-005 |
| Incidents | REMOVED Incidents are urgent requests → Request report (§3), priority filter. | P-005 |
| Task SLA | REMOVED Absorbed into the Request report (§3). | P-008 |
| Termination Reasons | REMOVED Absorbed into the Request report (§3). | P-008 |
| Flexible Service State History | REMOVED Merged into the Service agreements report (§5). | P-006 |
| Flexible Service Trouble Shooting | REMOVED Merged into the Service agreements report (§5). | P-006 |
| Service Agreement Detail | REMOVED Merged into the Service agreements report (§5). | P-006 |
| Service Agreement Equipment | REMOVED Merged into the Service agreements report (§5) – equipment sub-query. | P-006 |
| Service Agreement Flexible Services | REMOVED Merged into the Service agreements report (§5). | P-006 |
| Service Agreement Services | REMOVED Merged into the Service agreements report (§5) – services sub-query. | P-006 |
| Service Agreements Without Active Services | REMOVED Status filter preset of the Service agreements report (§5). | P-006 |
| Service Active Between Given Dates | REMOVED Date-range filter of the Service agreements report (§5). | P-006 |
| Stock Item Detail | REMOVED Merged into the Stock report (§6). | P-007 |
| Stock Item Expiry Dates | REMOVED Merged into the Stock report (§6) – expiry columns + battery-request action. | P-007 |
| Store Stock Levels | REMOVED Merged into the Stock report (§6) – levels + re-order recommendation. | P-007 |
| Stock Transfer History | REMOVED Replaced by the Audit report (§8). | P-008 |
| Stock Item Transferred History | REMOVED Replaced by the Audit report (§8). | P-008 |
Counts: kept/changed 1 · merged into Request 7 (incl. the Cancellation-Reasons request half) · merged into Referral 2 (incl. the referral half) · merged into Agreements 8 · merged into Stock 3 · replaced by Audit 2. (Cancellation Reasons counts once, split across two successors; 1 + 6 + 2 + 8 + 3 + 2 = 21 with the split row counted in both halves' narrative but once in the table.)
SSL Service Manager · Reports functional specification · Phase 7 · 3 July 2026 · pairs with 24-reports-wireframes.html and the decisions register (P-001…P-008).
10 Jul 2026 – NOTE (zero-row state): when a run returns no rows, the table shows the shared empty-state pattern (01): icon, "No rows match these filters", and a primary action that clears the last-changed filter. The row-count footer reads "0 rows"; charts show the same pattern in place of the grid. Static note only – the wireframe keeps its live sample data.