Files
vigilcare-clinical/vigilcare-dashboard
..
2026-06-19 17:42:09 +08:00
2026-06-19 17:42:09 +08:00
2026-06-20 14:32:51 +08:00
2026-06-19 17:42:09 +08:00
2026-06-20 14:32:51 +08:00
2026-06-19 17:42:09 +08:00
2026-06-19 17:48:53 +08:00

VigilCare Dashboard

Vue 3 frontend for the VigilCare Clinical API — virtual ward overview, patient clinical review, alert triage, vital sign charts, NEWS2 history, alert reasoning, and clinician feedback for product research.

Full user guide: docs/dashboard-guide.md — technical overview for developers and facilitators.

Clinician testing guide: docs/clinical-testing-guide.md — for doctors and nurses evaluating alerts and submitting feedback.

Quick start

# API must be running on http://localhost:5270 (see repo root README)
npm install
npm run dev

Open http://localhost:5173

Optional .env:

VITE_API_URL=http://localhost:5270

Scripts

Command Description
npm run dev Vite dev server (port 5173)
npm run build Production build
npm run preview Preview production build
npm test Vitest — 38 tests across 10 files

Routes

Path View
/ward Virtual Ward — active patients by NEWS2 risk
/patients/:encounterId Patient detail — vitals, alerts, charts, replay, reasoning
/alerts Alert Center — global alert inbox with feedback buttons
/feedback Feedback Summary — aggregate ratings + JSON/CSV export

Features

Area Description
Virtual Ward NEWS2-sorted patient table; department filter; 10 s polling
Patient Detail Vitals, scores, alerts, orders, sepsis bundle; 5 vital charts + NEWS2 history
Alert Center Global alert inbox; acknowledge / resolve; six feedback ratings per alert
Alert Reasoning Plain-language “why it fired” + optional medication context (90 min window)
Replay Controls Local pause/resume/speed scrub through fetched data (not live simulator control)
Clinician Feedback Six ratings + optional notes on every alert; persisted in localStorage
Feedback Summary Aggregate stats by alert type; export JSON/CSV for study analysis

Feedback is client-side only in this phase — ratings stay in the browser until exported. See Phase 19 plan: docs/plans/phase-19-plan.md.

Stack

Vue 3 (<script setup>), Vue Router, Pinia, Tailwind CSS v4, Chart.js + vue-chartjs, Vitest.

Project layout

src/
├── api/              # HTTP client, encounters, clinical, alerts, normalize
├── components/
│   ├── alerts/       # AlertCard, AlertReasoning, AlertFilters, AcknowledgeModal
│   ├── charts/       # VitalChart, VitalTrendChart, TrendsGrid, News2History
│   ├── feedback/     # FeedbackButtons (six ratings + notes)
│   ├── layout/       # AppShell, AppSidebar, AppHeader, MobileNav
│   ├── patient/      # VitalsPanel, ScoresPanel, AlertsList, OrdersPanel, SepsisBundlePanel
│   ├── replay/       # ReplayControls
│   ├── ui/           # Button, Badge, Card, Modal, EmptyState, Skeleton
│   └── ward/         # WardTable, PatientRow, PatientCard
├── composables/      # useChartData, useReplayControls, usePolling, useFeedback, chartFormat
├── stores/           # ward, alerts, settings, feedback (localStorage persistence)
├── views/            # WardDashboard, PatientDetail, AlertCenter, FeedbackSummary
└── __tests__/        # Vitest — store, composables, components, views

Tests

npm test
File Coverage
useFeedbackStore.test.js Pinia store — CRUD, stats, grouping, export, localStorage
FeedbackButtons.test.js Six rating buttons, selection, notes, ARIA, keyboard
FeedbackSummary.test.js Aggregate stats, per-type breakdown, export buttons
AlertCard.test.js Severity display, acknowledge/resolve, feedback integration
AlertReasoning.test.js Reasoning text for sepsis, qSOFA, unknown types
useChartData.test.js Chart data transformation
useReplayControls.test.js Pause, speed, progress, jump
usePolling.test.js Polling interval composable
WardTable.test.js Ward table rendering
Badge.test.js Severity badge variants

Implementation plans: docs/plans/phase-17-plan.md (ward shell), docs/plans/phase-18-plan.md (charts, replay, reasoning), docs/plans/phase-19-plan.md (clinician feedback).