Files

2.7 KiB

Emergency Incident Workspace Design

Summary

Replace /app/emergency with a real safety/emergency incident workspace using the existing systemIncidents Drizzle table. The MVP covers manual event creation, status triage, filters, and metrics.

Route Boundary

  • Unscoped route: app/(app)/app/emergency/page.tsx
  • Scoped route: app/(app)/app/[organizationSlug]/emergency/page.tsx
  • Navigation remains under 运营.
  • Permissions:
    • read: incident:read
    • mutate: incident:manage

Server Component behavior:

  1. Load getCurrentAuthContext().
  2. Redirect unauthenticated users to /login.
  3. Redirect users without incident:read to dashboard.
  4. Require active organization.
  5. Load incidents through listEmergencyIncidentData(organizationId).
  6. Render client workspace with canManage.

Data Model

Use existing system_incidents:

  • organizationId
  • severity: info | warning | critical
  • status: open | acknowledged | resolved | closed
  • title
  • description
  • source
  • acknowledgement / resolution account and time fields

No schema change is required for MVP. Elder/bed linking stays future work for the context optimization task.

Server Helpers

Create modules/emergency/:

  • modules/emergency/types.ts
    • labels, DTOs, create/status validators.
  • modules/emergency/server/operations.ts
    • listEmergencyIncidentData(organizationId: string)
    • createEmergencyIncident(input)
    • updateEmergencyIncidentStatus(input)
  • modules/emergency/components/EmergencyWorkspaceClient.tsx
    • metrics, filters, event table, create dialog, status actions.

API Design

  • GET /api/emergency/incidents
    • permission: incident:read
    • response: { success: true; reason: string; data }
  • POST /api/emergency/incidents
    • permission: incident:manage
    • request: { severity; title; description; source }
    • creates an organization-scoped incident
  • PATCH /api/emergency/incidents/[id]
    • permission: incident:manage
    • request: { status }
    • updates only rows in the active organization

All create/update mutations write audit logs after successful persistence.

UI Design

  • Metrics: open, acknowledged, critical, resolved/closed today.
  • Filters: status, severity, search by title/source/description.
  • Dense table columns: event, severity, status, source, created time, updated time, actions.
  • Actions: acknowledge, resolve, close.
  • Manual creation dialog for authorized operators.
  • Read-only users can see rows but not mutation controls.

Compatibility

  • Existing /api/system/incidents/[id] stays for system status settings.
  • The emergency workspace uses dedicated /api/emergency/... routes so tests and UI contracts are local to the operational module.