6.6 KiB
6.6 KiB
Health Care Admin Page
Goal
Build a separate backend management page for health care data instead of turning the existing operational 健康照护 module into a management surface. The first usable slice should let authorized staff manage real persisted health profiles, vital signs, chronic conditions, and abnormal-review records for elders in the active organization.
Background And Confirmed Facts
- The current
健康照护operational route renders the generic placeholder only:app/(app)/app/health/page.tsx. - The scoped
健康照护route delegates to the unscoped placeholder:app/(app)/app/[organizationSlug]/health/page.tsx. - The placeholder contract explicitly forbids fabricated operational records until real Drizzle-backed data exists:
.trellis/spec/frontend/components.md. - The sidebar already has a separate
管理系统group for backend management pages:modules/shared/lib/navigation.ts. - Existing management routes live under
/settings/...and have scoped mirrors under/app/[organizationSlug]/settings/.... - Breadcrumbs already treat
/settings/...as the management area:modules/shared/components/AppBreadcrumbs.tsx. - The current Drizzle schema includes organizations, elders, rooms, beds, admissions, audit logs, incidents, permissions, roles, and sessions, but no health profile, vital sign, chronic condition, or health review tables:
modules/core/server/schema.ts. - Existing persisted feature pages load data in Server Components and pass initial records into Client Components, for example
app/(app)/app/elders/page.tsxandapp/(app)/app/beds/page.tsx. - The user explicitly clarified that this should be a separate backend management page, split from the current operational health page.
Requirements
Route And Navigation
- Add a new backend management route under the management area.
- Recommended route:
/app/settings/healthwith scoped mirror/app/{organizationSlug}/settings/health. - Add a
管理系统navigation item labeled健康数据管理. - Keep the existing
/app/healthoperational page separate from this management page for this task. - Breadcrumbs must show the new route under
工作台 > 管理系统 > 健康数据管理.
Data Model And Persistence
- Add Drizzle-backed tables for the health-care admin MVP.
- Health data must be scoped by
organizationId. - Health data that belongs to an elder must reference a real elder in the same organization.
- Minimum persisted domains:
- health profile: allergy notes, medical history, medication notes, restrictions, emergency health note.
- vital sign record: recorded time, source, blood pressure, heart rate, temperature, SpO2, blood glucose, weight, notes.
- chronic condition: condition name, status, diagnosed date or note, treatment/follow-up notes.
- abnormal review: severity, status, source vital record or elder, reviewer, reviewed time, handling notes.
- Generated migrations must stay coherent with
modules/core/server/schema.ts. - New mutations must use Drizzle queries or transactions through server boundaries, not legacy write helpers.
Permissions
- Add explicit health permissions unless implementation review finds an existing permission is a better fit:
health:readhealth:manage
- The new management navigation item should require
health:read. - Mutations should require
health:manage. - Default role seeding should grant sensible permissions:
- platform admin: all permissions through the existing all-permissions pattern.
- organization admin and manager: read/manage.
- caregiver: read/manage for health records if the product treats caregivers as health-data operators.
- viewer: read only.
API And Server Boundaries
- Add health-specific Route Handlers under
/api/health/.... - All health APIs must call
requirePermission. - All APIs must validate active organization presence before reading or mutating organization-scoped data.
- Invalid or cross-organization IDs must return structured failures.
- Mutations must record audit logs for create/update/review actions.
- API responses must follow the existing
{ success, reason, ... }shape.
Admin UI
- The new page must be dense and operational, not a hero or marketing page.
- The first screen should show summary metrics and data management controls.
- Expected tabs or sections:
- 健康档案
- 生命体征
- 慢病记录
- 异常复核
- The page should support filtering by elder, status/severity, and search terms where useful.
- Authorized users should be able to create or update health records from the UI.
- Users without manage permission may view records but must not see working mutation paths.
- Use project UI adapters from
components/ui/*. - Do not fabricate UI-only health records.
Default Workspace Data
- If seeded workspace data is used for first-run development/demo, it must create real persisted health records tied to real seeded elders.
- Seed records should cover normal vitals, abnormal vitals, chronic conditions, and at least one pending abnormal review.
Acceptance Criteria
/app/settings/healthrenders a real backend health management page./app/{organizationSlug}/settings/healthrenders the same management page in the active workspace.- The new management page is reachable from the
管理系统navigation group. - Existing
/app/healthremains separate from the backend management page. - Health admin data is loaded from Drizzle-backed tables and scoped to the active organization.
- Health profiles, vital signs, chronic conditions, and abnormal reviews have persisted list views.
- Authorized users can create or update at least the MVP health records from the UI.
- Users without
health:managecannot mutate health records through the API. - Health mutations write audit log entries.
- Invalid input and cross-organization references return structured failure responses.
- Seeded examples, if added, are real database rows tied to seeded elders.
pnpm db:generateis run after schema changes and generated SQL is reviewed.pnpm lintpasses.pnpm type-checkpasses.pnpm buildpasses.
Out Of Scope
- Replacing the existing operational
/app/healthplaceholder with a full clinical dashboard. - Device telemetry integration.
- External medical system integration.
- AI-generated health recommendations.
- Complex clinical decision support.
- Full recurring measurement schedule engine.
- Family app notifications.
- Billing, pricing, or insurance flows.
- Replacing Route Handlers with oRPC.
- Replacing the current authentication/session implementation.
Open Questions
- None currently blocking planning.