Files
whyrating-engine-legacy/urt-taxonomy/track-d-integration/D1-Dashboard-Specification.md
Alejandro Gutiérrez 3eda9bdbfa Add complete URT v5.1 taxonomy framework (11 artifacts)
Universal Review Taxonomy v5.1 implementation with:
- Track A (Training): A1 Quickstart, A2 QA Protocol, A3 Calibration Set, A4 Full Manual
- Track B (Engineering): B1 Code Registry, B2 Database Schema, B3 Owner Routing, B4 API Contract
- Track C (Analytics): C1 Issue Lifecycle, C2 KPI Mapping Guide
- Track D (Integration): D1 Dashboard Specification

Covers 7 domains, 28 categories, 138 subcodes, 16 causal codes, and 7 metadata dimensions.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 10:51:41 +00:00

144 KiB
Raw Blame History

D1: Dashboard Specification

Universal Review Taxonomy (URT) v5.1 - Integration Track

Document: D1 - Dashboard Specification Version: 1.0 Status: Production Ready Date: 2026-01-23 Depends On: B2-database-schema.sql, B3-owner-routing.md, C1-Issue-Lifecycle-Framework.md, C2-KPI-Mapping-Guide.md


Purpose

This specification defines the complete UI/visualization requirements for URT v5.1 dashboards. It provides:

  • Dashboard layouts for different user personas (Executive, Operations, Analyst)
  • Widget specifications with data sources and refresh rates
  • Color schemes aligned with URT taxonomy
  • Filter components and interaction patterns
  • ASCII wireframes for each view
  • API endpoint requirements and caching strategies
  • Role-based access control specifications

Table of Contents

  1. Dashboard Architecture
  2. Executive Dashboard
  3. Operations Dashboard
  4. Analytics Dashboard
  5. Deep-Dive Views
  6. Widget Specifications
  7. Color Schemes
  8. Filter Components
  9. Data Requirements
  10. User Roles & Permissions
  11. Responsive Design
  12. Implementation Notes

1. Dashboard Architecture

1.1 System Overview

┌─────────────────────────────────────────────────────────────────────────────┐
│                         URT DASHBOARD ARCHITECTURE                           │
├─────────────────────────────────────────────────────────────────────────────┤
│                                                                             │
│  ┌─────────────────────────────────────────────────────────────────────┐   │
│  │                        PRESENTATION LAYER                            │   │
│  │  ┌──────────┐  ┌──────────┐  ┌──────────┐  ┌──────────┐            │   │
│  │  │Executive │  │Operations│  │Analytics │  │Deep-Dive │            │   │
│  │  │Dashboard │  │Dashboard │  │Dashboard │  │  Views   │            │   │
│  │  └────┬─────┘  └────┬─────┘  └────┬─────┘  └────┬─────┘            │   │
│  └───────┼─────────────┼─────────────┼─────────────┼────────────────────┘   │
│          │             │             │             │                        │
│  ┌───────┴─────────────┴─────────────┴─────────────┴────────────────────┐   │
│  │                         STATE MANAGEMENT                              │   │
│  │  ┌────────────┐  ┌────────────┐  ┌────────────┐  ┌────────────┐     │   │
│  │  │Filter State│  │ User Prefs │  │Cache Layer │  │Real-time   │     │   │
│  │  │ Manager    │  │  Storage   │  │  (Redis)   │  │WebSockets  │     │   │
│  │  └────────────┘  └────────────┘  └────────────┘  └────────────┘     │   │
│  └─────────────────────────────────┬────────────────────────────────────┘   │
│                                    │                                        │
│  ┌─────────────────────────────────┴────────────────────────────────────┐   │
│  │                           API LAYER                                   │   │
│  │  ┌──────────┐  ┌──────────┐  ┌──────────┐  ┌──────────┐             │   │
│  │  │  KPI     │  │  Issue   │  │  Span    │  │  Alert   │             │   │
│  │  │ Endpoints│  │ Endpoints│  │ Endpoints│  │ Endpoints│             │   │
│  │  └────┬─────┘  └────┬─────┘  └────┬─────┘  └────┬─────┘             │   │
│  └───────┴─────────────┴─────────────┴─────────────┴────────────────────┘   │
│                                    │                                        │
│  ┌─────────────────────────────────┴────────────────────────────────────┐   │
│  │                         DATA LAYER (B2)                               │   │
│  │  ┌────────────────────┐  ┌────────────────────┐                      │   │
│  │  │ Materialized Views │  │    Base Tables     │                      │   │
│  │  │ mv_domain_summary  │  │ reviews, spans     │                      │   │
│  │  │ mv_category_break  │  │ issues, causal     │                      │   │
│  │  │ mv_issue_pipeline  │  │ state_history      │                      │   │
│  │  │ mv_cr_trends       │  │ annotation_audit   │                      │   │
│  │  │ mv_daily_volume    │  │                    │                      │   │
│  │  └────────────────────┘  └────────────────────┘                      │   │
│  └──────────────────────────────────────────────────────────────────────┘   │
│                                                                             │
└─────────────────────────────────────────────────────────────────────────────┘

1.2 Dashboard Personas

Dashboard Primary User Focus Refresh Rate
Executive C-Suite, Directors OEI, trends, alerts 15 minutes
Operations Managers, Team Leads Issues, SLAs, workload 5 minutes
Analytics Analysts, Data Scientists Time-series, anomalies 15 minutes
Deep-Dive All users Individual review/span detail On-demand

1.3 Technology Recommendations

Component Recommended Library Alternatives
Charting Recharts D3.js, Chart.js, ECharts
Data Grid AG Grid React Table, TanStack Table
Gauges Custom SVG / D3 Recharts custom, ApexCharts
Radar Charts Recharts Chart.js, Nivo
Sankey Diagrams D3-Sankey Plotly, ECharts
State Management Zustand / Redux Toolkit Jotai, Recoil
Real-time Socket.io Pusher, Ably

2. Executive Dashboard

2.1 Purpose & Key Metrics

The Executive Dashboard provides at-a-glance visibility into overall customer experience health. It answers: "How are we doing, and where should I focus?"

Primary Metrics:

  • Overall Experience Index (OEI)
  • 7-Domain Performance Radar
  • Critical Issue Alerts
  • Week-over-Week and Month-over-Month Trends

2.2 Wireframe

┌─────────────────────────────────────────────────────────────────────────────────┐
│  URT Dashboard     [Executive v]  Period: [Last 30 days v]  [Filters] [Export] │
├─────────────────────────────────────────────────────────────────────────────────┤
│                                                                                 │
│  ┌─────────────────────────────────────┐  ┌─────────────────────────────────┐  │
│  │       OVERALL EXPERIENCE INDEX       │  │         DOMAIN RADAR CHART      │  │
│  │                                      │  │                                 │  │
│  │           ┌─────────────┐            │  │              O                  │  │
│  │          /               \           │  │             /|\                 │  │
│  │         /                 \          │  │          R /   \ P              │  │
│  │        │       79.9        │         │  │           /  .  \               │  │
│  │         \                 /          │  │        V ───.───. J             │  │
│  │          \    ▲ +2.3%    /           │  │           \  .  /               │  │
│  │           └─────────────┘            │  │          A \   / E              │  │
│  │                                      │  │             \|/                 │  │
│  │       Good    [████████████░░]       │  │                                 │  │
│  │                                      │  │  ── Current   -- Prev Month    │  │
│  └─────────────────────────────────────┘  └─────────────────────────────────┘  │
│                                                                                 │
│  ┌─────────────────────────────────────────────────────────────────────────┐   │
│  │                       DOMAIN SCORE CARDS (7 CARDS)                       │   │
│  │  ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐        │   │
│  │  │  O   │ │  P   │ │  J   │ │  E   │ │  A   │ │  V   │ │  R   │        │   │
│  │  │ 82   │ │ 88   │ │ 75   │ │ 80   │ │ 85   │ │ 68   │ │ 78   │        │   │
│  │  │▲+3.2 │ │▲+1.8 │ │▼-0.5 │ │▲+2.1 │ │→+0.3 │ │▼-2.4 │ │→+0.8 │        │   │
│  │  │~~~~~~│ │~~~~~~│ │~~~~~~│ │~~~~~~│ │~~~~~~│ │~~~~~~│ │~~~~~~│        │   │
│  │  └──────┘ └──────┘ └──────┘ └──────┘ └──────┘ └──────┘ └──────┘        │   │
│  └─────────────────────────────────────────────────────────────────────────┘   │
│                                                                                 │
│  ┌───────────────────────────────────┐  ┌───────────────────────────────────┐  │
│  │    CRITICAL ISSUES ALERT PANEL    │  │      TREND INDICATORS             │  │
│  │                                   │  │                                   │  │
│  │  [!] 5 Open I3 Issues > 24h       │  │  IMPROVING ▲                      │  │
│  │      └─ ISSUE-2026-0142 (O2.05)   │  │  • O: Product Quality (+3.2)      │  │
│  │      └─ ISSUE-2026-0156 (P1.02)   │  │  • P: Personnel Index (+1.8)      │  │
│  │      └─ ...                       │  │  • E: Environment (+2.1)          │  │
│  │                                   │  │                                   │  │
│  │  [!] V Domain Below Target        │  │  STABLE →                         │  │
│  │      └─ Score: 68 (Target: 70)    │  │  • A: Accessibility (+0.3)        │  │
│  │                                   │  │  • R: Relationship (+0.8)         │  │
│  │  [!] CR-W Spike Detected          │  │                                   │  │
│  │      └─ J1.01: Wait Time          │  │  DECLINING ▼                      │  │
│  │                                   │  │  • J: Process Efficiency (-0.5)   │  │
│  │  [View All Alerts →]              │  │  • V: Value Perception (-2.4)     │  │
│  └───────────────────────────────────┘  └───────────────────────────────────┘  │
│                                                                                 │
│  ┌─────────────────────────────────────────────────────────────────────────┐   │
│  │                    12-WEEK OEI TREND LINE                                │   │
│  │  85 ┤                                                                   │   │
│  │  80 ┤                           ___*───*                                │   │
│  │  75 ┤        ___*───*───*───*───                                        │   │
│  │  70 ┤   *───*                                                           │   │
│  │  65 ┤                                                                   │   │
│  │     └────W1───W2───W3───W4───W5───W6───W7───W8───W9──W10──W11──W12──    │   │
│  └─────────────────────────────────────────────────────────────────────────┘   │
│                                                                                 │
│  ┌───────────────────────────────────┐  ┌───────────────────────────────────┐  │
│  │      COMPOSITE INDICES            │  │      QUICK STATS                  │  │
│  │                                   │  │                                   │  │
│  │  Service Excellence (SEI)         │  │  Reviews This Period:    2,847    │  │
│  │  [████████████████████░░░] 82.2 ▲ │  │  Spans Classified:       4,215    │  │
│  │                                   │  │  Open Issues:              23     │  │
│  │  Value Perception (VPI-C)         │  │  SLA Compliance:          91.5%   │  │
│  │  [████████████░░░░░░░░░░░] 61.9 ▼ │  │  Avg Resolution Time:   2.3 days  │  │
│  │                                   │  │  Verification Rate:      68.4%    │  │
│  │  Trust & Loyalty (TLI)            │  │                                   │  │
│  │  [████████████████████░░░] 84.5 → │  │  Last Updated: 2 min ago          │  │
│  └───────────────────────────────────┘  └───────────────────────────────────┘  │
│                                                                                 │
└─────────────────────────────────────────────────────────────────────────────────┘

2.3 Widget Specifications

2.3.1 OEI Gauge

Attribute Specification
Type Radial gauge / semi-circular dial
Data Source Computed from mv_domain_summary
Calculation Per C2: weighted sum of domain scores
Ranges 0-50 (Red), 50-65 (Yellow), 65-85 (Green), 85-100 (Blue)
Refresh 15 minutes
Interactions Click to drill into domain breakdown
Library Custom SVG or Recharts RadialBarChart

SQL Query:

SELECT
    SUM(CASE domain_code
        WHEN 'O' THEN avg_score * 0.20
        WHEN 'P' THEN avg_score * 0.18
        WHEN 'J' THEN avg_score * 0.15
        WHEN 'E' THEN avg_score * 0.12
        WHEN 'A' THEN avg_score * 0.10
        WHEN 'V' THEN avg_score * 0.12
        WHEN 'R' THEN avg_score * 0.13
    END) AS oei
FROM mv_domain_summary;

2.3.2 Domain Radar Chart

Attribute Specification
Type Radar / Spider chart
Data Source mv_domain_summary
Axes 7 axes (O, P, J, E, A, V, R)
Scale 0-100 per axis
Overlays Current period (solid), Previous period (dashed)
Colors Current: domain-specific, Previous: gray
Refresh 15 minutes
Interactions Hover for values, click axis to drill into domain

2.3.3 Domain Score Cards

Attribute Specification
Type Metric card with sparkline
Count 7 cards (one per domain)
Layout Horizontal row, responsive wrap
Elements Domain code, score, delta, 12-week sparkline
Colors Header bar in domain color
Refresh 15 minutes
Interactions Click to navigate to Operations view filtered by domain

2.3.4 Critical Issues Alert Panel

Attribute Specification
Type Alert list with severity icons
Data Source issues table filtered by state and priority
Max Items 5 (with "View All" link)
Alert Types I3 issues, threshold breaches, CR-W spikes, SLA violations
Refresh 5 minutes (more frequent than page)
Interactions Click issue ID to open Deep-Dive view

Alert Query:

SELECT issue_id, primary_subcode, state, priority_score,
       EXTRACT(EPOCH FROM (NOW() - created_at)) / 3600 AS age_hours
FROM issues
WHERE state NOT IN ('VERIFIED', 'DECLINED')
  AND max_intensity = 'I3'
  AND deleted_at IS NULL
ORDER BY priority_score DESC
LIMIT 5;

2.3.5 Trend Indicators Panel

Attribute Specification
Type Categorized list with arrows
Categories Improving (>+2%), Stable (-2% to +2%), Declining (<-2%)
Data Source Compare mv_domain_summary with previous period
Visual Green arrows up, gray arrows right, red arrows down
Refresh 15 minutes

3. Operations Dashboard

3.1 Purpose & Key Metrics

The Operations Dashboard provides real-time visibility into issue management and team workload. It answers: "What needs attention now, and who is handling it?"

Primary Metrics:

  • Issue Pipeline by State
  • SLA Compliance Gauges
  • Owner Workload Distribution
  • Category Heatmap
  • Active Issue Table

3.2 Wireframe

┌─────────────────────────────────────────────────────────────────────────────────┐
│  URT Dashboard    [Operations v]  Domain: [All v]  Team: [All v]  [Filters]    │
├─────────────────────────────────────────────────────────────────────────────────┤
│                                                                                 │
│  ┌─────────────────────────────────────────────────────────────────────────┐   │
│  │                    ISSUE PIPELINE (STATE FLOW)                           │   │
│  │                                                                          │   │
│  │  DETECTED → ACKNOWLEDGED → IN_PROGRESS → RESOLVED → VERIFIED             │   │
│  │                                                                          │   │
│  │  ┌────────┐   ┌────────┐   ┌────────┐   ┌────────┐   ┌────────┐         │   │
│  │  │   12   │───│    8   │───│   15   │───│    7   │───│   23   │         │   │
│  │  │ issues │   │ issues │   │ issues │   │ issues │   │ issues │         │   │
│  │  └────────┘   └────────┘   └────────┘   └────────┘   └────────┘         │   │
│  │   Avg: 4h      Avg: 2h      Avg: 3d      Pending       Complete          │   │
│  │                                        Verification                      │   │
│  │                                                                          │   │
│  │  Side tracks:  [DECLINED: 5]  [REOPENED: 3]  [STALE: 2]                 │   │
│  └─────────────────────────────────────────────────────────────────────────┘   │
│                                                                                 │
│  ┌─────────────────────────────────┐  ┌─────────────────────────────────────┐  │
│  │    SLA COMPLIANCE GAUGES        │  │     OWNER WORKLOAD DISTRIBUTION     │  │
│  │                                 │  │                                     │  │
│  │  TTA (Time to Acknowledge)      │  │  Team            │ Open │ Load │Cap │  │
│  │  ┌────────────────────────┐     │  │  ─────────────────────────────────  │  │
│  │  │████████████████░░░░│94.2%│   │  │  Operations      │  12  │████░│ 80%│  │
│  │  └────────────────────────┘     │  │  HR/Training     │   8  │███░░│ 60%│  │
│  │  Target: 95%  ▼ -0.8% WoW       │  │  Product         │   6  │██░░░│ 45%│  │
│  │                                 │  │  Engineering     │   5  │██░░░│ 40%│  │
│  │  TTR (Time to Resolve)          │  │  Facilities      │   4  │█░░░░│ 30%│  │
│  │  ┌────────────────────────┐     │  │  Finance         │   3  │█░░░░│ 25%│  │
│  │  │██████████████░░░░░│87.5%│    │  │  CX Leadership   │   2  │░░░░░│ 15%│  │
│  │  └────────────────────────┘     │  │                                     │  │
│  │  Target: 90%  ▼ -1.3% WoW       │  │  [!] Operations at 80% capacity     │  │
│  │                                 │  │                                     │  │
│  │  Recurrence Rate                │  │                                     │  │
│  │  ┌────────────────────────┐     │  │                                     │  │
│  │  │███░░░░░░░░░░░░░░░│7.8% │     │  │                                     │  │
│  │  └────────────────────────┘     │  │                                     │  │
│  │  Target: <10%  ▼ -1.2% WoW      │  │                                     │  │
│  └─────────────────────────────────┘  └─────────────────────────────────────┘  │
│                                                                                 │
│  ┌─────────────────────────────────────────────────────────────────────────┐   │
│  │                    CATEGORY BREAKDOWN HEATMAP                            │   │
│  │                                                                          │   │
│  │       │  O  │  P  │  J  │  E  │  A  │  V  │  R  │                       │   │
│  │  ─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤                       │   │
│  │   1   │ ██  │ ███ │ ████│  █  │  █  │ ██  │ █░  │  ← Function/Attitude  │   │
│  │   2   │ ███ │ ██  │ ██  │ ██  │  █  │ ███ │ █░  │  ← Quality/Competence │   │
│  │   3   │ █░  │ █░  │ ███ │  █  │  █  │ █░  │ ██  │  ← Complete/Response  │   │
│  │   4   │ ██  │ ██  │ ████│ ███ │ ██  │ ██  │ █░  │  ← Fit/Communication  │   │
│  │                                                                          │   │
│  │  Legend: ░ Low (0-5)  █ Medium (5-15)  ██ High (15-30)  ███ Critical    │   │
│  │          Intensity indicates negative span count in period               │   │
│  └─────────────────────────────────────────────────────────────────────────┘   │
│                                                                                 │
│  ┌─────────────────────────────────────────────────────────────────────────┐   │
│  │                      ACTIVE ISSUES TABLE                                 │   │
│  │                                                                          │   │
│  │  [Search...________________________]  [State: All v] [Priority: All v]   │   │
│  │                                                                          │   │
│  │  ┌────────────┬─────────┬───────┬──────────┬───────┬───────┬──────────┐ │   │
│  │  │ Issue ID   │ Subcode │ State │ Priority │  Age  │ Spans │  Owner   │ │   │
│  │  ├────────────┼─────────┼───────┼──────────┼───────┼───────┼──────────┤ │   │
│  │  │ISSUE-0142 │ O2.05   │ INP   │ ████ 5.60│ 3d 4h │   5   │ Kitchen  │ │   │
│  │  │ISSUE-0156 │ P1.02   │ ACK   │ ████ 4.20│ 1d 2h │   3   │ HR       │ │   │
│  │  │ISSUE-0161 │ J1.01   │ DET   │ ███░ 3.85│ 4h    │   2   │ Ops      │ │   │
│  │  │ISSUE-0167 │ E4.01   │ INP   │ ███░ 3.50│ 8h    │   1   │ Safety   │ │   │
│  │  │ISSUE-0172 │ V1.04   │ ACK   │ ██░░ 2.90│ 12h   │   2   │ Finance  │ │   │
│  │  └────────────┴─────────┴───────┴──────────┴───────┴───────┴──────────┘ │   │
│  │                                                                          │   │
│  │  Showing 1-5 of 40 issues                         [< 1 2 3 4 5 ... 8 >] │   │
│  └─────────────────────────────────────────────────────────────────────────┘   │
│                                                                                 │
└─────────────────────────────────────────────────────────────────────────────────┘

3.3 Widget Specifications

3.3.1 Issue Pipeline

Attribute Specification
Type Horizontal funnel / flow diagram
Data Source mv_issue_pipeline materialized view
States DETECTED, ACKNOWLEDGED, IN_PROGRESS, RESOLVED, VERIFIED
Side States DECLINED, REOPENED, STALE (shown separately)
Metrics Per State Issue count, average time in state
Colors State-specific (see color scheme)
Refresh 5 minutes
Interactions Click state box to filter issue table

SQL Query:

SELECT
    state,
    COUNT(*) AS issue_count,
    AVG(EXTRACT(EPOCH FROM (NOW() - state_changed_at)) / 3600) AS avg_hours_in_state
FROM issues
WHERE deleted_at IS NULL
  AND state NOT IN ('VERIFIED', 'DECLINED')
GROUP BY state
ORDER BY
    CASE state
        WHEN 'DETECTED' THEN 1
        WHEN 'ACKNOWLEDGED' THEN 2
        WHEN 'IN_PROGRESS' THEN 3
        WHEN 'RESOLVED' THEN 4
        ELSE 5
    END;

3.3.2 SLA Compliance Gauges

Attribute Specification
Type Horizontal progress bar with target line
Metrics TTA Compliance, TTR Compliance, Recurrence Rate
Data Source Computed from issues and issue_state_history
Target Lines Configurable per organization
Colors Green (>= target), Yellow (within 5%), Red (< target - 5%)
Refresh 5 minutes
Interactions Click to see breakdown by domain/team

TTA Compliance Query:

WITH tta_data AS (
    SELECT
        i.issue_id,
        i.max_intensity,
        EXTRACT(EPOCH FROM (COALESCE(i.acknowledged_at, NOW()) - i.created_at)) / 3600 AS tta_hours,
        CASE i.max_intensity
            WHEN 'I3' THEN 4
            WHEN 'I2' THEN 24
            ELSE 72
        END AS target_hours
    FROM issues i
    WHERE i.created_at >= NOW() - INTERVAL '30 days'
      AND i.deleted_at IS NULL
)
SELECT
    COUNT(*) FILTER (WHERE tta_hours <= target_hours) * 100.0 / COUNT(*) AS tta_compliance
FROM tta_data;

3.3.3 Owner Workload Distribution

Attribute Specification
Type Horizontal stacked bar chart
Data Source issues joined with B3 routing config
Metrics Open issue count, capacity percentage
Capacity Config Defined per team in configuration
Threshold Alerts Warning at 70%, Critical at 90%
Refresh 5 minutes
Interactions Click row to filter issues by team

3.3.4 Category Breakdown Heatmap

Attribute Specification
Type Matrix heatmap
Dimensions Columns: 7 domains, Rows: 4 category numbers
Cell Value Count of negative spans in period
Color Scale White (0) → Light Red → Dark Red (high count)
Data Source mv_category_breakdown
Refresh 15 minutes
Interactions Click cell to drill into category Deep-Dive

3.3.5 Active Issues Table

Attribute Specification
Type Data grid with sorting, filtering, pagination
Library AG Grid or React Table
Columns Issue ID, Subcode, State, Priority, Age, Span Count, Owner
Default Sort Priority (descending)
Filters State, Priority range, Domain, Owner, Age range
Page Size 10, 25, 50, 100
Refresh 5 minutes
Interactions Row click opens issue Deep-Dive, column headers sort

Table Query:

SELECT
    i.issue_id,
    i.primary_subcode,
    i.state,
    i.priority_score,
    NOW() - i.created_at AS age,
    i.span_count,
    i.owner_team,
    d.name AS domain_name
FROM issues i
JOIN urt_domains d ON i.domain_code = d.domain_code
WHERE i.deleted_at IS NULL
  AND i.state NOT IN ('VERIFIED', 'DECLINED')
ORDER BY i.priority_score DESC;

4. Analytics Dashboard

4.1 Purpose & Key Metrics

The Analytics Dashboard provides deep analytical capabilities for trend analysis and anomaly detection. It answers: "What patterns are emerging, and are things getting better or worse?"

Primary Metrics:

  • Time-series KPI charts
  • Comparative Reference (CR) trends
  • Intensity distribution
  • Sentiment flow (Sankey)
  • Anomaly detection alerts

4.2 Wireframe

┌─────────────────────────────────────────────────────────────────────────────────┐
│  URT Dashboard    [Analytics v]  Period: [Custom v] From:[____] To:[____]      │
├─────────────────────────────────────────────────────────────────────────────────┤
│                                                                                 │
│  ┌─────────────────────────────────────────────────────────────────────────┐   │
│  │                    TIME-SERIES KPI CHARTS                                │   │
│  │                                                                          │   │
│  │  KPI: [OEI v]  Granularity: [Weekly v]  Compare: [Previous Period v]     │   │
│  │                                                                          │   │
│  │  100 ┤                                                                   │   │
│  │   90 ┤                                                                   │   │
│  │   80 ┤           ___*───*───*───*           ___*───*───*                │   │
│  │   70 ┤      *───*                     *───*                              │   │
│  │   60 ┤  *───                                                             │   │
│  │   50 ┤                                                                   │   │
│  │      └──Jan──Feb──Mar──Apr──May──Jun──Jul──Aug──Sep──Oct──Nov──Dec──     │   │
│  │                                                                          │   │
│  │  ── Current Year   -- Previous Year   ▓ Target Zone (75-85)              │   │
│  └─────────────────────────────────────────────────────────────────────────┘   │
│                                                                                 │
│  ┌─────────────────────────────────┐  ┌─────────────────────────────────────┐  │
│  │   COMPARATIVE REFERENCE TRENDS  │  │   INTENSITY DISTRIBUTION            │  │
│  │                                 │  │                                     │  │
│  │  Weekly CR Signal Distribution  │  │  This Period vs Previous            │  │
│  │                                 │  │                                     │  │
│  │      CR-B ████████████  28%     │  │        I1      I2      I3           │  │
│  │      CR-S █████████     18%     │  │  Curr  ████    ██████  ██           │  │
│  │      CR-W ████          8%      │  │        42%     45%     13%          │  │
│  │      CR-N ████████████████ 46%  │  │                                     │  │
│  │                                 │  │  Prev  █████   █████   ███          │  │
│  │  ▲ CR-B/CR-W Ratio: 3.5        │  │        38%     42%     20%          │  │
│  │    (Improving from 2.8)         │  │                                     │  │
│  │                                 │  │  [!] I3 down 7% - good trend        │  │
│  │  12-Week Trend:                 │  │                                     │  │
│  │  ───*───*───*───*───*───*       │  │                                     │  │
│  └─────────────────────────────────┘  └─────────────────────────────────────┘  │
│                                                                                 │
│  ┌─────────────────────────────────────────────────────────────────────────┐   │
│  │                    SENTIMENT FLOW (SANKEY DIAGRAM)                       │   │
│  │                                                                          │   │
│  │   Source          Domain           Valence          Outcome              │   │
│  │                                                                          │   │
│  │                   ┌──────┐                                               │   │
│  │   ┌──────┐  ════╡   O   ╞═══╗    ┌──────┐     ┌──────────┐              │   │
│  │   │Google│══════╡   P   ╞═══╬════╡  V+  ╞═════╡ Resolved │              │   │
│  │   │ 65%  │      ╡   J   ╞═══╬════╡      ╞     └──────────┘              │   │
│  │   └──────┘  ════╡   E   ╞═══╝    └──────┘                               │   │
│  │   ┌──────┐      │   A   │        ┌──────┐     ┌──────────┐              │   │
│  │   │ Yelp │══════╡   V   ╞════════╡  V-  ╞═════╡Open Issue│              │   │
│  │   │ 25%  │  ════╡   R   ╞═══╗    │      │     └──────────┘              │   │
│  │   └──────┘      └──────┘    ╚════╡      ╞                               │   │
│  │   ┌──────┐                       └──────┘     ┌──────────┐              │   │
│  │   │Other │══════════════════════════════════╡  Neutral  │              │   │
│  │   │ 10%  │                                    └──────────┘              │   │
│  │   └──────┘                                                              │   │
│  └─────────────────────────────────────────────────────────────────────────┘   │
│                                                                                 │
│  ┌─────────────────────────────────────────────────────────────────────────┐   │
│  │                    ANOMALY DETECTION ALERTS                              │   │
│  │                                                                          │   │
│  │  ┌───────────────────────────────────────────────────────────────────┐  │   │
│  │  │ [!] CRITICAL: J1.01 (Wait Time) volume +180% vs 7-day avg         │  │   │
│  │  │     Detected: 2026-01-23 14:30 | Affected reviews: 23              │  │   │
│  │  │     [View Details] [Acknowledge] [Create Issue]                    │  │   │
│  │  └───────────────────────────────────────────────────────────────────┘  │   │
│  │  ┌───────────────────────────────────────────────────────────────────┐  │   │
│  │  │ [!] WARNING: V domain score dropped 5.2 points in 2 weeks         │  │   │
│  │  │     Trend: 73.2 → 68.0 | Significance: 95% CI                      │  │   │
│  │  │     [View Details] [Investigate]                                   │  │   │
│  │  └───────────────────────────────────────────────────────────────────┘  │   │
│  │  ┌───────────────────────────────────────────────────────────────────┐  │   │
│  │  │ [i] INFO: CR-B surge in O2.05 suggests successful intervention    │  │   │
│  │  │     Previous issue: ISSUE-2026-0098 (Resolved 2026-01-15)          │  │   │
│  │  │     [View Issue History]                                           │  │   │
│  │  └───────────────────────────────────────────────────────────────────┘  │   │
│  └─────────────────────────────────────────────────────────────────────────┘   │
│                                                                                 │
└─────────────────────────────────────────────────────────────────────────────────┘

4.3 Widget Specifications

4.3.1 Time-Series KPI Charts

Attribute Specification
Type Line chart with area fill option
KPI Options OEI, all domain scores, category scores, issue counts
Granularity Daily, Weekly, Monthly, Quarterly
Overlays Previous period, target zone, trend line
Data Source mv_daily_volume aggregated to selected granularity
Refresh 15 minutes
Interactions Hover for values, zoom, pan, export
Attribute Specification
Type Stacked bar + ratio line
Data Source mv_cr_trends
Metrics CR-B, CR-W, CR-S, CR-N percentages; CR-B/CR-W ratio
Time Range Configurable (default: 12 weeks)
Key Insight Ratio > 2.0 indicates net improvement
Refresh 15 minutes
Interactions Click bar segment to see affected subcodes

SQL Query:

SELECT
    week_start,
    comparative,
    SUM(span_count) AS span_count,
    SUM(span_count) * 100.0 / SUM(SUM(span_count)) OVER (PARTITION BY week_start) AS pct
FROM mv_cr_trends
WHERE week_start >= NOW() - INTERVAL '12 weeks'
GROUP BY week_start, comparative
ORDER BY week_start;

4.3.3 Intensity Distribution Histogram

Attribute Specification
Type Grouped bar chart (current vs previous)
Data Source spans aggregated by intensity
Categories I1 (Mild), I2 (Moderate), I3 (Strong)
Key Insight Decreasing I3 percentage indicates improvement
Refresh 15 minutes
Interactions Click bar to filter Deep-Dive by intensity

4.3.4 Sentiment Flow Sankey Diagram

Attribute Specification
Type Sankey diagram
Library D3-Sankey or Recharts Sankey
Nodes Source → Domain → Valence → Outcome
Link Width Proportional to span count
Colors Domain colors, valence colors
Data Source spans joined with issues and reviews
Refresh 15 minutes
Interactions Hover links for counts, click to filter

4.3.5 Anomaly Detection Alerts

Attribute Specification
Type Alert card list
Detection Methods Z-score (>2.5), Moving average deviation, Trend break
Alert Levels Critical (immediate), Warning (24h), Info (monitoring)
Data Source Real-time anomaly detection service
Refresh 5 minutes
Actions View Details, Acknowledge, Create Issue, Dismiss

Anomaly Detection Logic (per C2 Section 5.4):

WITH daily_stats AS (
    SELECT
        DATE(created_at) AS span_date,
        primary_code,
        COUNT(*) AS daily_count,
        AVG(COUNT(*)) OVER (
            PARTITION BY primary_code
            ORDER BY DATE(created_at)
            ROWS BETWEEN 7 PRECEDING AND 1 PRECEDING
        ) AS moving_avg,
        STDDEV(COUNT(*)) OVER (
            PARTITION BY primary_code
            ORDER BY DATE(created_at)
            ROWS BETWEEN 7 PRECEDING AND 1 PRECEDING
        ) AS moving_stddev
    FROM spans
    WHERE valence = 'V-'
      AND created_at >= NOW() - INTERVAL '30 days'
    GROUP BY DATE(created_at), primary_code
)
SELECT *
FROM daily_stats
WHERE ABS(daily_count - moving_avg) > 2.5 * NULLIF(moving_stddev, 0);

5. Deep-Dive Views

5.1 Individual Review Annotation Viewer

┌─────────────────────────────────────────────────────────────────────────────────┐
│  Review Deep-Dive                               [Print] [Export JSON] [Close X] │
├─────────────────────────────────────────────────────────────────────────────────┤
│                                                                                 │
│  ┌─────────────────────────────────────────────────────────────────────────┐   │
│  │ REVIEW METADATA                                                          │   │
│  │                                                                          │   │
│  │  Review ID:     RVW-2026-04521           Source:  Google                │   │
│  │  Author:        John D.                   Rating:  ★★☆☆☆ (2/5)          │   │
│  │  Date:          2026-01-20                Business: Main Street Cafe     │   │
│  │  Language:      en                        External ID: CgxKCQ1...        │   │
│  └─────────────────────────────────────────────────────────────────────────┘   │
│                                                                                 │
│  ┌─────────────────────────────────────────────────────────────────────────┐   │
│  │ ANNOTATED REVIEW TEXT                                                    │   │
│  │                                                                          │   │
│  │  "[The food was cold when it arrived]₁ but [the waiter was very        │   │
│  │   apologetic and helpful]₂. [We had to wait 45 minutes for a table     │   │
│  │   despite having a reservation]₃."                                      │   │
│  │                                                                          │   │
│  │  Legend: [Span 1]₁ = O2.05  [Span 2]₂ = P1.01+R3.02  [Span 3]₃ = J1.01 │   │
│  └─────────────────────────────────────────────────────────────────────────┘   │
│                                                                                 │
│  ┌─────────────────────────────────────────────────────────────────────────┐   │
│  │ SPAN DETAILS                                                             │   │
│  │                                                                          │   │
│  │  ┌───────────────────────────────────────────────────────────────────┐  │   │
│  │  │ SPAN 1: "The food was cold when it arrived"                       │  │   │
│  │  │                                                                   │  │   │
│  │  │ Primary Code:   O2.05 (Condition at Delivery)                     │  │   │
│  │  │ Secondary:      None                                              │  │   │
│  │  │                                                                   │  │   │
│  │  │ ┌─────────────────────────────────────────────────────────────┐   │  │   │
│  │  │ │ Valence      │ V-  Negative    │ Temporal    │ TC  Current  │   │  │   │
│  │  │ │ Intensity    │ I2  Moderate    │ Evidence    │ ES  Stated   │   │  │   │
│  │  │ │ Specificity  │ S2  Moderate    │ Comparative │ CR-N None    │   │  │   │
│  │  │ │ Actionability│ A2  Medium      │             │              │   │  │   │
│  │  │ └─────────────────────────────────────────────────────────────┘   │  │   │
│  │  │                                                                   │  │   │
│  │  │ Linked Issue: ISSUE-2026-0142  [View Issue →]                     │  │   │
│  │  │ Confidence:   0.92                                                │  │   │
│  │  │ Annotated By: LLM (claude-3-opus) at 2026-01-20 14:32:00          │  │   │
│  │  └───────────────────────────────────────────────────────────────────┘  │   │
│  │                                                                          │   │
│  │  ┌───────────────────────────────────────────────────────────────────┐  │   │
│  │  │ SPAN 2: "the waiter was very apologetic and helpful"              │  │   │
│  │  │                                                                   │  │   │
│  │  │ Primary Code:   P1.01 (Warmth/Friendliness)                       │  │   │
│  │  │ Secondary:      R3.02 (Apology)                                   │  │   │
│  │  │                                                                   │  │   │
│  │  │ ┌─────────────────────────────────────────────────────────────┐   │  │   │
│  │  │ │ Valence      │ V+  Positive    │ Temporal    │ TC  Current  │   │  │   │
│  │  │ │ Intensity    │ I2  Moderate    │ Evidence    │ ES  Stated   │   │  │   │
│  │  │ │ Specificity  │ S2  Moderate    │ Comparative │ CR-N None    │   │  │   │
│  │  │ │ Actionability│ A1  Low         │             │              │   │  │   │
│  │  │ └─────────────────────────────────────────────────────────────┘   │  │   │
│  │  │                                                                   │  │   │
│  │  │ Linked Issue: None (positive feedback)                            │  │   │
│  │  │ Confidence:   0.88                                                │  │   │
│  │  └───────────────────────────────────────────────────────────────────┘  │   │
│  │                                                                          │   │
│  │  [+ Show Span 3]                                                        │   │
│  └─────────────────────────────────────────────────────────────────────────┘   │
│                                                                                 │
└─────────────────────────────────────────────────────────────────────────────────┘

5.2 Issue History Timeline

┌─────────────────────────────────────────────────────────────────────────────────┐
│  Issue Deep-Dive: ISSUE-2026-0142                    [Export] [Print] [Close X] │
├─────────────────────────────────────────────────────────────────────────────────┤
│                                                                                 │
│  ┌─────────────────────────────────────────────────────────────────────────┐   │
│  │ ISSUE SUMMARY                                                            │   │
│  │                                                                          │   │
│  │  Issue ID:       ISSUE-2026-0142        State:    IN_PROGRESS           │   │
│  │  Primary Code:   O2.05 (Condition)       Priority: ████ 5.60             │   │
│  │  Domain:         O (Offering)            Confidence: 0.88                │   │
│  │  Owner:          Kitchen Operations      Reopened:   1 time              │   │
│  │                                                                          │   │
│  │  Entity:         Food delivery           Location:  Main Kitchen         │   │
│  │  Created:        2026-01-18 09:15        Last Update: 2 hours ago        │   │
│  └─────────────────────────────────────────────────────────────────────────┘   │
│                                                                                 │
│  ┌─────────────────────────────────────────────────────────────────────────┐   │
│  │ STATE TIMELINE                                                           │   │
│  │                                                                          │   │
│  │  ●──────●──────●──────●──────●──────●                                   │   │
│  │  │      │      │      │      │      │                                   │   │
│  │  DET    ACK    INP    RES    REO    INP                                 │   │
│  │  1/18   1/18   1/18   1/19   1/21   1/21                                │   │
│  │                                                                          │   │
│  │  [+] Jan 18, 09:15 - DETECTED                                           │   │
│  │      Trigger: New V- span (I2) on O2.05                                 │   │
│  │      Initial spans: 1                                                    │   │
│  │                                                                          │   │
│  │  [+] Jan 18, 09:45 - ACKNOWLEDGED                                       │   │
│  │      Actor: kitchen_manager (manual)                                     │   │
│  │      Note: "Third cold food report this week"                           │   │
│  │                                                                          │   │
│  │  [+] Jan 18, 11:00 - IN_PROGRESS                                        │   │
│  │      Actor: kitchen_supervisor                                           │   │
│  │      Note: "Checking heat lamp timers"                                  │   │
│  │                                                                          │   │
│  │  [+] Jan 19, 14:30 - RESOLVED                                           │   │
│  │      Actor: kitchen_supervisor                                           │   │
│  │      Resolution: FIX-EQUIPMENT                                          │   │
│  │      Note: "Heat lamps recalibrated, new bags ordered"                  │   │
│  │                                                                          │   │
│  │  [!] Jan 21, 10:15 - REOPENED                                           │   │
│  │      Trigger: CR-S span detected ("Food still cold")                    │   │
│  │      Span ID: SPN-2026-08742                                            │   │
│  │                                                                          │   │
│  │  [+] Jan 21, 10:30 - IN_PROGRESS                                        │   │
│  │      Actor: kitchen_manager                                              │   │
│  │      Note: "Escalating to delivery process review"                      │   │
│  └─────────────────────────────────────────────────────────────────────────┘   │
│                                                                                 │
│  ┌─────────────────────────────────────────────────────────────────────────┐   │
│  │ CONTRIBUTING SPANS (5)                                                   │   │
│  │                                                                          │   │
│  │  ┌─────────┬──────────────────────────────────────┬────┬────┬────────┐  │   │
│  │  │ Date    │ Span Text (truncated)                │ V  │ I  │ CR     │  │   │
│  │  ├─────────┼──────────────────────────────────────┼────┼────┼────────┤  │   │
│  │  │ Jan 18  │ "The food was cold when it arrived"  │ V- │ I2 │ CR-N   │  │   │
│  │  │ Jan 19  │ "My burger came out cold"            │ V- │ I2 │ CR-N   │  │   │
│  │  │ Jan 20  │ "Food arrived cold again"            │ V- │ I2 │ CR-S   │  │   │
│  │  │ Jan 21  │ "Food still arrives cold"            │ V- │ I2 │ CR-S   │  │   │
│  │  │ Jan 22  │ "Temperature is always bad"          │ V- │ I2 │ CR-S   │  │   │
│  │  └─────────┴──────────────────────────────────────┴────┴────┴────────┘  │   │
│  │                                                                          │   │
│  │  [View All Spans →]                                                      │   │
│  └─────────────────────────────────────────────────────────────────────────┘   │
│                                                                                 │
│  ┌─────────────────────────────────────────────────────────────────────────┐   │
│  │ CAUSAL CHAIN (if assigned)                                               │   │
│  │                                                                          │   │
│  │  Experience     →    Conditions    →    Management    →    Systemic     │   │
│  │  ┌──────────┐       ┌──────────┐       ┌──────────┐       ┌──────────┐  │   │
│  │  │  O2.05   │  ───► │  CD-E    │  ───► │  MG-R    │  ───► │  SY-R    │  │   │
│  │  │Condition │       │Equipment │       │Resources │       │ Budget   │  │   │
│  │  │at Deliv. │       │          │       │          │       │          │  │   │
│  │  └──────────┘       └──────────┘       └──────────┘       └──────────┘  │   │
│  │                                                                          │   │
│  │  Chain Confidence: 0.75                                                  │   │
│  │  Analyst Note: "Heat lamps outdated, replacement budget pending"         │   │
│  └─────────────────────────────────────────────────────────────────────────┘   │
│                                                                                 │
│  ┌─────────────────────────────────────────────────────────────────────────┐   │
│  │ ACTIONS                                                                  │   │
│  │                                                                          │   │
│  │  [Acknowledge] [Start Work] [Resolve] [Decline] [Add Note] [Reassign]   │   │
│  └─────────────────────────────────────────────────────────────────────────┘   │
│                                                                                 │
└─────────────────────────────────────────────────────────────────────────────────┘

5.3 Causal Chain Visualization

┌─────────────────────────────────────────────────────────────────────────────────┐
│  Causal Chain Analysis                                            [Close X]    │
├─────────────────────────────────────────────────────────────────────────────────┤
│                                                                                 │
│  ┌─────────────────────────────────────────────────────────────────────────┐   │
│  │                      CAUSAL CHAIN DIAGRAM                                │   │
│  │                                                                          │   │
│  │     LAYER 1                LAYER 2              LAYER 3              LAYER 4│
│  │    EXPERIENCE            CONDITIONS           MANAGEMENT            SYSTEMIC│
│  │                                                                          │   │
│  │   ┌──────────┐         ┌──────────┐         ┌──────────┐         ┌──────┐│   │
│  │   │  O2.05   │    ┌───▶│  CD-E    │    ┌───▶│  MG-R    │    ┌───▶│ SY-R ││   │
│  │   │Condition │────┤    │Equipment │────┤    │Resources │────┤    │Budget││   │
│  │   │at Deliv. │    │    │Malfunction│   │    │Maintenance│   │    │      ││   │
│  │   └──────────┘    │    └──────────┘    │    └──────────┘    │    └──────┘│   │
│  │        │          │                    │                    │            │   │
│  │        │          │    ┌──────────┐    │    ┌──────────┐    │    ┌──────┐│   │
│  │        └──────────┼───▶│  CD-O    │────┼───▶│  MG-P    │────┴───▶│ SY-H ││   │
│  │                   │    │Operational│   │    │Planning  │         │Human ││   │
│  │                   │    │Understaffed│   │    │Scheduling│         │Capital│   │
│  │                   │    └──────────┘    │    └──────────┘         └──────┘│   │
│  │                   │                    │                                 │   │
│  │                   │    ┌──────────┐    │                                 │   │
│  │                   └───▶│  CD-S    │────┘                                 │   │
│  │                        │Staff State│                                     │   │
│  │                        │Fatigue    │                                     │   │
│  │                        └──────────┘                                      │   │
│  │                                                                          │   │
│  │  ───────────────────────────────────────────────────────────────────    │   │
│  │                                                                          │   │
│  │  CHAIN STATISTICS:                                                       │   │
│  │                                                                          │   │
│  │  Most Common Paths:                                                      │   │
│  │  1. O2.05 → CD-E → MG-R → SY-R     (45% of similar issues)              │   │
│  │  2. O2.05 → CD-O → MG-P → SY-H     (30% of similar issues)              │   │
│  │  3. O2.05 → CD-S → MG-T → SY-C     (15% of similar issues)              │   │
│  │                                                                          │   │
│  │  Recommended Intervention Level: MANAGEMENT (MG-R)                       │   │
│  │  Reason: 70% of paths converge at resource management                    │   │
│  └─────────────────────────────────────────────────────────────────────────┘   │
│                                                                                 │
└─────────────────────────────────────────────────────────────────────────────────┘

6. Widget Specifications

6.1 Gauge Widget

┌─────────────────────────────────────────────────────────────────┐
│                    GAUGE WIDGET SPECIFICATION                    │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│  Visual:                                                        │
│           ╭─────────────────────────────╮                       │
│                    ░░░░░░░░             ╲                      │
│            ░░░░░░░           ░░░░░░░     ╲                     │
│      │  ░░░           ▲              ░░░   │                    │
│      │ ░░      ╱▔▔▔▔▔▔▔▔▔╲           ░░  │                    │
│       │░         79.9    ╲            ░│                      │
│        │                  ╲           │                       │
│         ╲╱                   ╲╱                                 │
│         ████████████████████░░░░░░░░░                          │
│        Red   Yellow   Green    Blue                             │
│         0      50      65       85    100                       │
│                                                                 │
│  Components:                                                    │
│  ├── Arc: SVG path with gradient                               │
│  ├── Needle: SVG line with rotation transform                  │
│  ├── Value: Centered text                                       │
│  ├── Delta: Below value with arrow                             │
│  ├── Labels: Min/Max/Target markers                            │
│  └── Background: Semi-transparent fill                          │
│                                                                 │
│  Props:                                                         │
│  ├── value: number (0-100)                                     │
│  ├── previousValue?: number (for delta)                        │
│  ├── ranges: Array<{min, max, color}>                          │
│  ├── targetValue?: number (optional target line)               │
│  ├── size: 'sm' | 'md' | 'lg'                                  │
│  └── onDrillDown?: () => void                                  │
│                                                                 │
│  Responsive:                                                    │
│  ├── lg (>1200px): 200x120                                     │
│  ├── md (768-1199px): 160x100                                  │
│  └── sm (<768px): 120x80                                       │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

6.2 Radar Chart Widget

┌─────────────────────────────────────────────────────────────────┐
│                 RADAR CHART WIDGET SPECIFICATION                 │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│  Library: Recharts RadarChart                                   │
│                                                                 │
│  Configuration:                                                 │
│  {                                                              │
│    data: [                                                      │
│      { domain: 'O', current: 82, previous: 79, target: 80 },   │
│      { domain: 'P', current: 88, previous: 86, target: 85 },   │
│      { domain: 'J', current: 75, previous: 76, target: 75 },   │
│      { domain: 'E', current: 80, previous: 78, target: 80 },   │
│      { domain: 'A', current: 85, previous: 85, target: 85 },   │
│      { domain: 'V', current: 68, previous: 70, target: 70 },   │
│      { domain: 'R', current: 78, previous: 77, target: 80 }    │
│    ],                                                           │
│    angleKey: 'domain',                                          │
│    series: [                                                    │
│      { key: 'current', stroke: '#3B82F6', fill: '#3B82F680' }, │
│      { key: 'previous', stroke: '#9CA3AF', strokeDash: '5,5' },│
│      { key: 'target', stroke: '#10B981', strokeDash: '2,2' }   │
│    ]                                                            │
│  }                                                              │
│                                                                 │
│  Interactions:                                                  │
│  ├── Hover axis: Show domain tooltip with score details        │
│  ├── Click axis: Navigate to domain-filtered Operations        │
│  └── Legend toggle: Show/hide series                           │
│                                                                 │
│  Responsive:                                                    │
│  ├── lg: 400x400                                               │
│  ├── md: 300x300                                               │
│  └── sm: 250x250 (stacked with score cards)                    │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

6.3 Data Grid Widget

┌─────────────────────────────────────────────────────────────────┐
│                  DATA GRID WIDGET SPECIFICATION                  │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│  Library: AG Grid Community                                     │
│                                                                 │
│  Column Definitions (Issues Table):                             │
│  [                                                              │
│    { field: 'issue_id', headerName: 'Issue ID', width: 130,    │
│      cellRenderer: 'issueLinkRenderer' },                       │
│    { field: 'primary_subcode', headerName: 'Subcode', width: 90,│
│      cellRenderer: 'subcodeChipRenderer' },                     │
│    { field: 'state', headerName: 'State', width: 100,          │
│      cellRenderer: 'stateBadgeRenderer' },                      │
│    { field: 'priority_score', headerName: 'Priority', width: 120│
│      cellRenderer: 'priorityBarRenderer', sort: 'desc' },       │
│    { field: 'age', headerName: 'Age', width: 80,               │
│      valueFormatter: formatDuration },                          │
│    { field: 'span_count', headerName: 'Spans', width: 70 },    │
│    { field: 'owner_team', headerName: 'Owner', width: 120 }    │
│  ]                                                              │
│                                                                 │
│  Grid Options:                                                  │
│  {                                                              │
│    pagination: true,                                            │
│    paginationPageSize: 10,                                      │
│    paginationPageSizeSelector: [10, 25, 50, 100],              │
│    rowSelection: 'single',                                      │
│    onRowClicked: (event) => openIssueDeepDive(event.data),     │
│    defaultColDef: { sortable: true, filter: true, resizable: true│
│  }                                                              │
│                                                                 │
│  Custom Renderers:                                              │
│  ├── issueLinkRenderer: Clickable link to Deep-Dive           │
│  ├── subcodeChipRenderer: Colored chip with domain color       │
│  ├── stateBadgeRenderer: State-colored badge                   │
│  └── priorityBarRenderer: Mini horizontal bar chart            │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

6.4 Sparkline Widget

┌─────────────────────────────────────────────────────────────────┐
│                 SPARKLINE WIDGET SPECIFICATION                   │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│  Visual: ~~~~~~*                                                │
│                                                                 │
│  Library: Recharts LineChart (minimal config)                   │
│                                                                 │
│  Configuration:                                                 │
│  {                                                              │
│    data: Array<{ date: string, value: number }>,               │
│    width: 80,                                                   │
│    height: 24,                                                  │
│    margin: { top: 2, bottom: 2, left: 0, right: 0 },           │
│    stroke: determineStrokeColor(trend),                        │
│    strokeWidth: 1.5,                                            │
│    dot: { r: 2 } // Only on last point                         │
│  }                                                              │
│                                                                 │
│  Color Logic:                                                   │
│  ├── Positive trend (last > first): Green (#10B981)            │
│  ├── Negative trend (last < first): Red (#EF4444)              │
│  └── Stable (|delta| < 2%): Gray (#6B7280)                     │
│                                                                 │
│  Props:                                                         │
│  ├── data: Array<{date, value}>                                │
│  ├── color?: 'auto' | string                                   │
│  └── showEndpoint?: boolean (default: true)                    │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

6.5 Alert Card Widget

┌─────────────────────────────────────────────────────────────────┐
│                  ALERT CARD WIDGET SPECIFICATION                 │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│  Visual:                                                        │
│  ┌───────────────────────────────────────────────────────────┐  │
│  │ [!] CRITICAL: J1.01 (Wait Time) volume +180%              │  │
│  │     Detected: 2026-01-23 14:30 | Affected: 23 reviews     │  │
│  │     [View Details] [Acknowledge] [Create Issue]           │  │
│  └───────────────────────────────────────────────────────────┘  │
│                                                                 │
│  Severity Styles:                                               │
│  ├── CRITICAL: Red border left, red icon, red highlight        │
│  ├── WARNING: Yellow border left, yellow icon                  │
│  ├── INFO: Blue border left, blue icon                         │
│  └── SUCCESS: Green border left, green icon                    │
│                                                                 │
│  Props:                                                         │
│  {                                                              │
│    severity: 'critical' | 'warning' | 'info' | 'success',      │
│    title: string,                                               │
│    description: string,                                         │
│    timestamp: Date,                                             │
│    metadata?: Record<string, any>,                             │
│    actions: Array<{label: string, onClick: () => void}>        │
│  }                                                              │
│                                                                 │
│  Accessibility:                                                 │
│  ├── role="alert" for critical/warning                         │
│  ├── aria-live="polite" for new alerts                         │
│  └── Focus management for action buttons                       │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

7. Color Schemes

7.1 Domain Color Palette

Each domain has a primary, secondary, and light variant for consistent visual identity.

Domain Code Primary (Dark) Secondary (Medium) Light (Background) Meaning
Offering O #2563EB #3B82F6 #DBEAFE Blue (Product)
People P #7C3AED #8B5CF6 #EDE9FE Purple (Human)
Journey J #0891B2 #06B6D4 #CFFAFE Cyan (Process)
Environment E #059669 #10B981 #D1FAE5 Green (Space)
Access A #D97706 #F59E0B #FEF3C7 Amber (Reach)
Value V #DC2626 #EF4444 #FEE2E2 Red (Cost)
Relationship R #DB2777 #EC4899 #FCE7F3 Pink (Trust)

7.2 Valence Colors

Valence Code Color Hex Use Case
Positive V+ Green #10B981 Praise, satisfaction
Negative V- Red #EF4444 Complaints, issues
Neutral V0 Gray #6B7280 Observations
Mixed V+/- Yellow #F59E0B Ambiguous feedback

7.3 Intensity Gradients

Intensity Code Color Opacity Visual
Mild I1 Base 40% Light shade
Moderate I2 Base 70% Medium shade
Strong I3 Base 100% Full saturation

CSS Variables:

:root {
  /* Intensity modifiers */
  --intensity-i1-opacity: 0.4;
  --intensity-i2-opacity: 0.7;
  --intensity-i3-opacity: 1.0;

  /* Combined with valence */
  --positive-i1: rgba(16, 185, 129, 0.4);
  --positive-i2: rgba(16, 185, 129, 0.7);
  --positive-i3: rgba(16, 185, 129, 1.0);
  --negative-i1: rgba(239, 68, 68, 0.4);
  --negative-i2: rgba(239, 68, 68, 0.7);
  --negative-i3: rgba(239, 68, 68, 1.0);
}

7.4 Alert State Colors

Alert Level Background Border Icon Text
Critical #FEF2F2 #EF4444 #DC2626 #991B1B
Warning #FFFBEB #F59E0B #D97706 #92400E
Info #EFF6FF #3B82F6 #2563EB #1E40AF
Success #F0FDF4 #10B981 #059669 #166534

7.5 Issue State Colors

State Color Hex Icon
DETECTED Orange #F97316 Circle outline
ACKNOWLEDGED Blue #3B82F6 Eye icon
IN_PROGRESS Yellow #EAB308 Spinning loader
RESOLVED Green #22C55E Check circle
VERIFIED Green (dark) #15803D Double check
DECLINED Gray #6B7280 X circle
REOPENED Red #EF4444 Refresh icon
STALE Gray (light) #9CA3AF Clock icon

7.6 Score Range Colors

Range Level Background Text
85-100 Excellent #DCFCE7 #166534
75-84 Good #D1FAE5 #065F46
65-74 Acceptable #FEF3C7 #92400E
50-64 Poor #FEE2E2 #991B1B
0-49 Critical #FEE2E2 #7F1D1D

8. Filter Components

8.1 Date Range Picker

┌─────────────────────────────────────────────────────────────────┐
│                  DATE RANGE PICKER SPECIFICATION                 │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│  Visual:                                                        │
│  ┌────────────────────────────────────────────────────────────┐│
│  │ Period: [Last 30 days ▼]  From: [01/01/2026] To: [01/23/26]││
│  └────────────────────────────────────────────────────────────┘│
│                                                                 │
│  Preset Options:                                                │
│  ├── Today                                                      │
│  ├── Yesterday                                                  │
│  ├── Last 7 days                                               │
│  ├── Last 30 days (default)                                    │
│  ├── Last 90 days                                              │
│  ├── This month                                                │
│  ├── Last month                                                │
│  ├── This quarter                                              │
│  ├── Last quarter                                              │
│  ├── This year                                                 │
│  ├── Last year                                                 │
│  └── Custom range                                              │
│                                                                 │
│  Comparison Options:                                            │
│  ├── Previous period (same length)                             │
│  ├── Same period last year                                     │
│  └── None                                                      │
│                                                                 │
│  Props:                                                         │
│  {                                                              │
│    value: { from: Date, to: Date },                            │
│    onChange: (range) => void,                                   │
│    presets: PresetOption[],                                    │
│    comparison?: 'previous' | 'year_ago' | 'none',              │
│    maxRange?: number (days),                                   │
│    minDate?: Date,                                              │
│    maxDate?: Date                                               │
│  }                                                              │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

8.2 Domain/Category/Subcode Selector

┌─────────────────────────────────────────────────────────────────┐
│            HIERARCHICAL CODE SELECTOR SPECIFICATION              │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│  Visual:                                                        │
│  ┌─────────────────────────────────────────────────────────┐   │
│  │ Domain: [All ▼]  Category: [All ▼]  Subcode: [All ▼]   │   │
│  └─────────────────────────────────────────────────────────┘   │
│                                                                 │
│  Cascading Behavior:                                            │
│  1. Domain selection filters available categories               │
│  2. Category selection filters available subcodes               │
│  3. Subcode selection auto-sets domain and category            │
│                                                                 │
│  Domain Dropdown:                                               │
│  ┌─────────────────────┐                                       │
│  │ ☐ All Domains       │                                       │
│  │ ☑ O - Offering      │ ← Colored chip                        │
│  │ ☐ P - People        │                                       │
│  │ ☑ J - Journey       │                                       │
│  │ ...                 │                                       │
│  └─────────────────────┘                                       │
│                                                                 │
│  Props:                                                         │
│  {                                                              │
│    value: {                                                     │
│      domains: string[],                                        │
│      categories: string[],                                     │
│      subcodes: string[]                                        │
│    },                                                           │
│    onChange: (selection) => void,                              │
│    allowMultiple: boolean,                                      │
│    showCounts: boolean (show span/issue counts per option)     │
│  }                                                              │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

8.3 Valence and Intensity Filters

┌─────────────────────────────────────────────────────────────────┐
│           VALENCE/INTENSITY FILTER SPECIFICATION                 │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│  Visual (Toggle Buttons):                                       │
│  ┌──────────────────────────────────────────────────────────┐  │
│  │ Valence: [V+] [V-] [V0] [V±]    Intensity: [I1] [I2] [I3]│  │
│  └──────────────────────────────────────────────────────────┘  │
│                                                                 │
│  Active states shown with filled background and border          │
│                                                                 │
│  Default: All selected (no filter)                              │
│                                                                 │
│  Props:                                                         │
│  {                                                              │
│    valence: ('V+' | 'V-' | 'V0' | 'V±')[],                     │
│    intensity: ('I1' | 'I2' | 'I3')[],                          │
│    onChange: (filters) => void                                  │
│  }                                                              │
│                                                                 │
│  Quick Actions:                                                 │
│  ├── "Negative Only" → V- selected                             │
│  ├── "Critical Only" → V- + I3 selected                        │
│  └── "Clear All" → All selected                                │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

8.4 Owner/Team Filter

┌─────────────────────────────────────────────────────────────────┐
│                 OWNER/TEAM FILTER SPECIFICATION                  │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│  Visual:                                                        │
│  ┌─────────────────────────────────────────────────────────┐   │
│  │ Owner: [All Teams ▼]  Individual: [All ▼]              │   │
│  └─────────────────────────────────────────────────────────┘   │
│                                                                 │
│  Data Source: B3-owner-routing.yaml teams configuration         │
│                                                                 │
│  Team Options:                                                  │
│  ├── Operations                                                 │
│  ├── HR/Training                                               │
│  ├── Product                                                   │
│  ├── Engineering                                               │
│  ├── Facilities                                                │
│  ├── Finance                                                   │
│  ├── CX Leadership                                             │
│  └── (custom teams from config)                                │
│                                                                 │
│  Individual: Populated based on team selection                  │
│                                                                 │
│  Props:                                                         │
│  {                                                              │
│    teams: string[],                                            │
│    individuals: string[],                                      │
│    onChange: (filters) => void                                  │
│  }                                                              │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

8.5 Issue State Filter

┌─────────────────────────────────────────────────────────────────┐
│                 ISSUE STATE FILTER SPECIFICATION                 │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│  Visual (Pill Toggle):                                          │
│  ┌──────────────────────────────────────────────────────────┐  │
│  │ [All] [Open] [DET] [ACK] [INP] [RES] [VER] [DEC] [REO]  │  │
│  └──────────────────────────────────────────────────────────┘  │
│                                                                 │
│  Presets:                                                       │
│  ├── "All": No filter                                          │
│  ├── "Open": DETECTED, ACKNOWLEDGED, IN_PROGRESS, REOPENED     │
│  ├── "Pending": RESOLVED (awaiting verification)               │
│  └── "Closed": VERIFIED, DECLINED                              │
│                                                                 │
│  State pills show count badges                                  │
│                                                                 │
│  Props:                                                         │
│  {                                                              │
│    selectedStates: IssueState[],                               │
│    onChange: (states) => void,                                  │
│    showCounts: boolean                                          │
│  }                                                              │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

8.6 Comparative Reference Filter

┌─────────────────────────────────────────────────────────────────┐
│              COMPARATIVE REFERENCE FILTER SPECIFICATION          │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│  Visual:                                                        │
│  ┌──────────────────────────────────────────────────────────┐  │
│  │ CR Signal: [All ▼]                                       │  │
│  │            ├── All (no filter)                           │  │
│  │            ├── Has Comparison (CR-B, CR-W, CR-S)         │  │
│  │            ├── Improving (CR-B only)                     │  │
│  │            ├── Worsening (CR-W only)                     │  │
│  │            ├── Persistent (CR-S only)                    │  │
│  │            └── No Comparison (CR-N only)                 │  │
│  └──────────────────────────────────────────────────────────┘  │
│                                                                 │
│  Use Case: Identify improvement opportunities and regressions   │
│                                                                 │
│  Props:                                                         │
│  {                                                              │
│    selected: ('CR-N' | 'CR-B' | 'CR-W' | 'CR-S')[],            │
│    onChange: (cr) => void                                       │
│  }                                                              │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

8.7 Global Filter Bar

┌─────────────────────────────────────────────────────────────────────────────────┐
│                        GLOBAL FILTER BAR LAYOUT                                  │
├─────────────────────────────────────────────────────────────────────────────────┤
│                                                                                 │
│  Desktop (≥1200px):                                                             │
│  ┌─────────────────────────────────────────────────────────────────────────┐   │
│  │ [Date Range    ▼] [Domain ▼] [State ▼] [Valence ▼] [Owner ▼] [⚙ More] │   │
│  └─────────────────────────────────────────────────────────────────────────┘   │
│                                                                                 │
│  Tablet (768-1199px):                                                           │
│  ┌─────────────────────────────────────────────────────────────────────────┐   │
│  │ [Date Range ▼] [Domain ▼] [State ▼] [+ 3 more filters]                 │   │
│  └─────────────────────────────────────────────────────────────────────────┘   │
│                                                                                 │
│  Mobile (<768px):                                                               │
│  ┌─────────────────────────────────────────────────────────────────────────┐   │
│  │ [Filters (5 active) ▼]                    ← Opens filter drawer         │   │
│  └─────────────────────────────────────────────────────────────────────────┘   │
│                                                                                 │
│  Active Filter Pills:                                                           │
│  ┌─────────────────────────────────────────────────────────────────────────┐   │
│  │ Last 30 days × | Domain: O, J × | State: Open × | Valence: V- × | Clear│   │
│  └─────────────────────────────────────────────────────────────────────────┘   │
│                                                                                 │
│  State Management:                                                              │
│  ├── URL params sync for shareable views                                       │
│  ├── Local storage for user preferences                                        │
│  └── Reset to defaults button                                                  │
│                                                                                 │
└─────────────────────────────────────────────────────────────────────────────────┘

9. Data Requirements

9.1 API Endpoints

Endpoint Method Purpose Dashboard Refresh
/api/v1/kpi/oei GET Overall Experience Index Executive 15 min
/api/v1/kpi/domains GET All domain scores Executive, Ops 15 min
/api/v1/kpi/categories/{domain} GET Category breakdown Operations 15 min
/api/v1/kpi/trends GET Time-series data Analytics 15 min
/api/v1/issues GET Issue list with filters Operations 5 min
/api/v1/issues/{id} GET Issue detail Deep-Dive On-demand
/api/v1/issues/{id}/history GET State history Deep-Dive On-demand
/api/v1/spans GET Span list with filters Analytics 15 min
/api/v1/spans/{id} GET Span detail Deep-Dive On-demand
/api/v1/reviews/{id} GET Review with spans Deep-Dive On-demand
/api/v1/alerts GET Active alerts All 5 min
/api/v1/alerts/{id}/acknowledge POST Acknowledge alert All
/api/v1/cr/trends GET CR signal trends Analytics 15 min
/api/v1/anomalies GET Detected anomalies Analytics 5 min
/api/v1/workload GET Team workload Operations 5 min

9.2 Query Parameters (Common)

Parameter Type Description Example
from ISO Date Start date 2026-01-01
to ISO Date End date 2026-01-23
domains String[] Domain filter O,P,J
categories String[] Category filter O1,O2
subcodes String[] Subcode filter O1.01,O1.02
valence String[] Valence filter V-,V±
intensity String[] Intensity filter I2,I3
state String[] Issue state filter DETECTED,IN_PROGRESS
owner String Team/owner filter operations
limit Integer Page size 25
offset Integer Page offset 0
sort String Sort field priority_score
order String Sort direction desc

9.3 WebSocket Events (Real-time)

Event Payload Trigger Dashboard
issue.created Issue summary New issue detected Operations
issue.state_changed Issue ID, old/new state State transition Operations
alert.triggered Alert details Anomaly detected All
kpi.updated Domain, new value MV refresh complete Executive
span.classified Span summary New span processed Analytics

9.4 Polling Intervals

Dashboard Data Type Interval Method
Executive KPIs, OEI 15 min Polling
Executive Alerts 5 min Polling + WebSocket
Operations Issue list 5 min Polling
Operations Pipeline 5 min Polling
Operations Workload 5 min Polling
Analytics Time-series 15 min Polling
Analytics Anomalies 5 min WebSocket
Deep-Dive All data On-demand Request

9.5 Caching Strategy

┌─────────────────────────────────────────────────────────────────────────────────┐
│                           CACHING ARCHITECTURE                                   │
├─────────────────────────────────────────────────────────────────────────────────┤
│                                                                                 │
│  LAYER 1: Client-Side (Browser)                                                 │
│  ├── React Query / SWR for request deduplication                               │
│  ├── staleTime: 5 minutes (for most queries)                                   │
│  ├── cacheTime: 30 minutes                                                      │
│  └── refetchOnWindowFocus: true                                                 │
│                                                                                 │
│  LAYER 2: API Gateway (Redis)                                                   │
│  ├── KPI aggregations: 5 minute TTL                                            │
│  ├── Issue counts: 2 minute TTL                                                │
│  ├── Reference data (domains, categories): 1 hour TTL                          │
│  └── User preferences: 24 hour TTL                                             │
│                                                                                 │
│  LAYER 3: Database (PostgreSQL)                                                 │
│  ├── Materialized Views: Refreshed every 5-15 minutes                          │
│  │   ├── mv_domain_summary: 15 min                                             │
│  │   ├── mv_category_breakdown: 15 min                                         │
│  │   ├── mv_issue_pipeline: 5 min                                              │
│  │   ├── mv_cr_trends: 15 min                                                  │
│  │   └── mv_daily_volume: 15 min                                               │
│  └── pg_cron job: REFRESH MATERIALIZED VIEW CONCURRENTLY                       │
│                                                                                 │
│  Cache Invalidation:                                                            │
│  ├── Issue state change → Invalidate pipeline cache                            │
│  ├── New span classified → Invalidate domain/category caches                   │
│  └── Alert triggered → Broadcast WebSocket, invalidate alert cache             │
│                                                                                 │
└─────────────────────────────────────────────────────────────────────────────────┘

9.6 Data Source Mapping

Widget Primary Table/View Fallback Notes
OEI Gauge mv_domain_summary Computed from spans Prefer MV
Domain Radar mv_domain_summary
Domain Cards mv_domain_summary
Issue Pipeline mv_issue_pipeline issues grouped MV preferred
SLA Gauges issues + issue_state_history Computed
Workload issues + routing config Live query
Heatmap mv_category_breakdown
Issue Table issues JOIN urt_domains Paginated
Time-series mv_daily_volume spans grouped MV preferred
CR Trends mv_cr_trends spans filtered MV preferred
Anomalies Anomaly detection service Real-time
Sankey spans + issues + reviews Complex query

10. User Roles & Permissions

10.1 Role Definitions

Role Description Default Users
executive Strategic overview, read-only C-Suite, Directors
operations Issue management, full write Managers, Team Leads
analyst Deep analytics, export Data Analysts, BI Team
admin Full access, configuration System Administrators
viewer Read-only basic access General staff

10.2 Permission Matrix

Feature Viewer Executive Operations Analyst Admin
View Executive Dashboard
View Operations Dashboard
View Analytics Dashboard
View Deep-Dive
Acknowledge Issues
Change Issue State
Assign Issues
Add Issue Notes
Acknowledge Alerts
Create Issues from Alerts
Export Data
Configure Alerts
Manage Users
Configure Routing
View Audit Logs

10.3 Dashboard Access by Role

┌─────────────────────────────────────────────────────────────────────────────────┐
│                         ROLE-BASED DASHBOARD ACCESS                              │
├─────────────────────────────────────────────────────────────────────────────────┤
│                                                                                 │
│  VIEWER                                                                         │
│  ├── Executive Dashboard (read-only)                                           │
│  └── Operations Dashboard (read-only, no actions)                              │
│                                                                                 │
│  EXECUTIVE                                                                      │
│  ├── Executive Dashboard (default landing)                                     │
│  ├── Operations Dashboard (read, add notes)                                    │
│  ├── Analytics Dashboard (read, export)                                        │
│  └── Deep-Dive Views (read)                                                    │
│                                                                                 │
│  OPERATIONS                                                                     │
│  ├── Operations Dashboard (default landing, full control)                      │
│  ├── Executive Dashboard (read)                                                │
│  ├── Analytics Dashboard (read)                                                │
│  └── Deep-Dive Views (read, manage issues)                                     │
│                                                                                 │
│  ANALYST                                                                        │
│  ├── Analytics Dashboard (default landing, full features)                      │
│  ├── Executive Dashboard (read)                                                │
│  ├── Operations Dashboard (read)                                               │
│  ├── Deep-Dive Views (read, add notes)                                         │
│  └── Custom Report Builder (if available)                                      │
│                                                                                 │
│  ADMIN                                                                          │
│  ├── All dashboards with full access                                           │
│  ├── Settings & Configuration                                                  │
│  ├── User Management                                                           │
│  └── Audit Logs                                                                │
│                                                                                 │
└─────────────────────────────────────────────────────────────────────────────────┘

10.4 Data Filtering by Role

Role Data Scope Rationale
viewer All domains, no PII General awareness
executive All domains, aggregate only Strategic overview
operations All domains, full detail Issue management
analyst All domains, full detail + history Deep analysis
admin All data including system logs Full visibility

10.5 Team-Based Filtering

Operations users may be restricted to issues owned by their team:

IF user.role == 'operations' AND user.teamScope != 'all':
    issues = issues.filter(owner_team IN user.teams)
    alerts = alerts.filter(relevant_team IN user.teams)

11. Responsive Design

11.1 Breakpoints

Breakpoint Width Layout Target Devices
xs <576px Single column Mobile portrait
sm 576-767px Single column Mobile landscape
md 768-1199px 2 columns Tablet
lg 1200-1439px 3 columns Small desktop
xl ≥1440px Full layout Desktop, Large monitors

11.2 Executive Dashboard Responsive Layouts

┌─────────────────────────────────────────────────────────────────────────────────┐
│                    EXECUTIVE DASHBOARD - RESPONSIVE LAYOUTS                      │
├─────────────────────────────────────────────────────────────────────────────────┤
│                                                                                 │
│  XL (≥1440px): Full 3-Column Layout                                            │
│  ┌──────────────┬──────────────┬──────────────┐                                │
│  │  OEI Gauge   │  Radar Chart │    Alerts    │                                │
│  ├──────────────┴──────────────┴──────────────┤                                │
│  │          7 Domain Score Cards (row)        │                                │
│  ├────────────────────────────────────────────┤                                │
│  │          12-Week Trend Line                │                                │
│  ├──────────────────────┬─────────────────────┤                                │
│  │  Composite Indices   │    Quick Stats      │                                │
│  └──────────────────────┴─────────────────────┘                                │
│                                                                                 │
│  MD (768-1199px): 2-Column Layout                                              │
│  ┌──────────────┬──────────────┐                                               │
│  │  OEI Gauge   │  Radar Chart │                                               │
│  ├──────────────┴──────────────┤                                               │
│  │     Domain Cards (2x4 grid) │                                               │
│  ├──────────────┬──────────────┤                                               │
│  │    Alerts    │   Trends     │                                               │
│  ├──────────────┴──────────────┤                                               │
│  │        Trend Line           │                                               │
│  └─────────────────────────────┘                                               │
│                                                                                 │
│  SM/XS (<768px): Single Column, Stacked                                        │
│  ┌─────────────────────────────┐                                               │
│  │  OEI Gauge (large)          │                                               │
│  ├─────────────────────────────┤                                               │
│  │  Domain Cards (carousel)    │ ← Swipeable                                   │
│  ├─────────────────────────────┤                                               │
│  │  Alerts (collapsible)       │                                               │
│  ├─────────────────────────────┤                                               │
│  │  Trend Line (scrollable)    │                                               │
│  └─────────────────────────────┘                                               │
│  Note: Radar chart hidden on mobile, replaced by domain cards                  │
│                                                                                 │
└─────────────────────────────────────────────────────────────────────────────────┘

11.3 Operations Dashboard Responsive Layouts

┌─────────────────────────────────────────────────────────────────────────────────┐
│                   OPERATIONS DASHBOARD - RESPONSIVE LAYOUTS                      │
├─────────────────────────────────────────────────────────────────────────────────┤
│                                                                                 │
│  XL (≥1440px): Full Layout                                                     │
│  ┌─────────────────────────────────────────────────────────────────────────┐   │
│  │                    Issue Pipeline (horizontal)                           │   │
│  ├───────────────────────────────┬─────────────────────────────────────────┤   │
│  │      SLA Gauges (3 stack)     │      Owner Workload (bar chart)         │   │
│  ├───────────────────────────────┴─────────────────────────────────────────┤   │
│  │                    Category Heatmap (7x4 grid)                          │   │
│  ├─────────────────────────────────────────────────────────────────────────┤   │
│  │                    Issue Table (full width)                             │   │
│  └─────────────────────────────────────────────────────────────────────────┘   │
│                                                                                 │
│  MD (768-1199px): Stacked Sections                                             │
│  ┌─────────────────────────────────────────────────────────────────────────┐   │
│  │           Issue Pipeline (compact)                                       │   │
│  ├─────────────────────────────────────────────────────────────────────────┤   │
│  │      SLA Gauges      │       Owner Workload                             │   │
│  ├─────────────────────────────────────────────────────────────────────────┤   │
│  │           Category Heatmap (scrollable)                                 │   │
│  ├─────────────────────────────────────────────────────────────────────────┤   │
│  │           Issue Table (horizontal scroll)                               │   │
│  └─────────────────────────────────────────────────────────────────────────┘   │
│                                                                                 │
│  SM/XS (<768px): Mobile-First                                                  │
│  ┌─────────────────────────────────────────────────────────────────────────┐   │
│  │   Pipeline Summary (counts only, no visualization)                      │   │
│  ├─────────────────────────────────────────────────────────────────────────┤   │
│  │   SLA Compliance (single combined gauge)                                │   │
│  ├─────────────────────────────────────────────────────────────────────────┤   │
│  │   Issue Cards (list view, swipe actions)                                │   │
│  │   ┌───────────────────────────────────────────────────────────────────┐ │   │
│  │   │ ISSUE-0142 │ O2.05 │ INP │ ████ 5.60 │ 3d │  [→ Swipe for actions]│ │   │
│  │   └───────────────────────────────────────────────────────────────────┘ │   │
│  └─────────────────────────────────────────────────────────────────────────┘   │
│                                                                                 │
└─────────────────────────────────────────────────────────────────────────────────┘

11.4 Touch Interactions (Mobile)

Gesture Action Context
Tap Select / Open All interactive elements
Long Press Context menu Issue cards, spans
Swipe Left Quick actions (Ack, Assign) Issue cards
Swipe Right Dismiss / Archive Alerts
Pinch Zoom Zoom charts Time-series, Sankey
Pull Down Refresh data All dashboards
Two-finger Pan Pan zoomed charts Analytics charts

12. Implementation Notes

12.1 Accessibility Requirements

Requirement Implementation
Keyboard Navigation All interactive elements focusable, logical tab order
Screen Reader ARIA labels, roles, live regions for updates
Color Contrast WCAG 2.1 AA minimum (4.5:1 for text)
Focus Indicators Visible focus rings on all focusable elements
Skip Links Skip to main content, skip to navigation
Alternative Text Descriptive alt text for all charts/images
Reduced Motion Respect prefers-reduced-motion media query

12.2 Performance Targets

Metric Target Measurement
First Contentful Paint <1.5s Lighthouse
Time to Interactive <3.0s Lighthouse
Largest Contentful Paint <2.5s Lighthouse
API Response Time <200ms (p95) Server metrics
Chart Render Time <100ms Performance API
Bundle Size <500KB (gzipped) Webpack analyzer

12.3 Error Handling

┌─────────────────────────────────────────────────────────────────────────────────┐
│                           ERROR HANDLING PATTERNS                                │
├─────────────────────────────────────────────────────────────────────────────────┤
│                                                                                 │
│  API Errors:                                                                    │
│  ├── 4xx: Show user-friendly message, offer retry                              │
│  ├── 5xx: Show error boundary, log to monitoring                               │
│  └── Timeout: Show "Taking longer than expected", auto-retry                   │
│                                                                                 │
│  Widget Errors:                                                                 │
│  ├── Data missing: Show placeholder with "No data available"                   │
│  ├── Parse error: Show fallback component, log error                           │
│  └── Render error: Error boundary catches, shows widget skeleton               │
│                                                                                 │
│  Real-time Errors:                                                              │
│  ├── WebSocket disconnect: Auto-reconnect with exponential backoff             │
│  ├── Missed events: Request full refresh on reconnect                          │
│  └── Stale data: Show "Data may be outdated" indicator                         │
│                                                                                 │
│  User Feedback:                                                                 │
│  ├── Toast notifications for transient errors                                  │
│  ├── Inline error messages for form validation                                 │
│  └── Full-page error for critical failures                                     │
│                                                                                 │
└─────────────────────────────────────────────────────────────────────────────────┘

12.4 Testing Strategy

Test Type Coverage Tools
Unit Tests Widget components, utilities Jest, React Testing Library
Integration Tests API interactions, state management MSW, Cypress Component
E2E Tests Critical user flows Cypress, Playwright
Visual Regression UI consistency Percy, Chromatic
Accessibility Tests WCAG compliance axe-core, Pa11y
Performance Tests Load time, render performance Lighthouse CI

12.5 Deployment Considerations

Aspect Recommendation
CDN Static assets via CloudFront/Cloudflare
API Load-balanced behind API gateway
Database Read replicas for dashboard queries
Caching Redis cluster for API response caching
Monitoring DataDog/New Relic for APM
Logging Structured JSON logs to centralized system
Feature Flags LaunchDarkly for gradual rollout

12.6 Future Enhancements

Enhancement Priority Description
Custom Dashboards Medium User-configurable widget layouts
Report Builder Medium Drag-and-drop report creation
Scheduled Reports Medium Email/Slack delivery of snapshots
Embedding Low Embed widgets in external tools
Mobile App Low Native iOS/Android app
AI Insights High Automated insight generation
Predictive Analytics High Issue prediction, churn risk

Document Control

Field Value
Document D1 - Dashboard Specification
Version 1.0
Status Production Ready
Date 2026-01-23
Author URT Working Group
Part Of Track D: Integration Layer

Document Purpose Status
B2-database-schema.sql Database tables and views Complete
B3-owner-routing.md Team routing configuration Complete
C1-Issue-Lifecycle-Framework.md Issue state management Complete
C2-KPI-Mapping-Guide.md KPI calculations and alerts Complete
D2-API-Specification API endpoint details Planned
D3-Integration-Guide Third-party integrations Planned

End of D1: Dashboard Specification