feat(health): Phase 1 业务改进 — 诊断编码/统计API/体征表合并/积分修复
Some checks failed
CI / rust-check (push) Has been cancelled
CI / rust-test (push) Has been cancelled
CI / frontend-build (push) Has been cancelled
CI / security-audit (push) Has been cancelled

1.1 Dashboard 统计: 新增 3 个统计端点 (patient/consultation/follow-up)
1.2 事件发布: follow_up.overdue + health_data.critical_alert 事件
1.3 体征表合并: vital_signs 添加 source 列, daily_monitoring 委托写入
1.4 实时预警: 创建体征时检测血压/心率/血糖异常并发布事件
1.5 诊断编码: 新建 diagnosis entity/service/handler + ICD-10 支持
1.6 积分过期: expire_points 定时任务 + 修复 r#type 列名问题

修复: points_transaction.r#type → transaction_type 列重命名
修复: consultation_message.sender_type → sender_role SQL 列名
前端: 3 个统计 API 从伪实现改为真实调用
This commit is contained in:
iven
2026-04-26 00:54:56 +08:00
parent 7ab89f5e93
commit b4735213c5
24 changed files with 643 additions and 190 deletions

View File

@@ -242,32 +242,29 @@ export const pointsApi = {
return data.data;
},
// --- Dashboard Statistics (hybrid: aggregate from list endpoints) ---
// --- Dashboard Statistics ---
getPatientStats: async (): Promise<PatientStatistics> => {
const { data } = await client.get<{
success: boolean;
data: PaginatedResponse<{ id: string }>;
}>('/health/patients', { params: { page: 1, page_size: 1 } });
const total = data.data?.total || 0;
return { total_patients: total, new_this_month: 0, new_this_week: 0, active_this_month: 0 };
data: PatientStatistics;
}>('/health/admin/statistics/patients');
return data.data;
},
getConsultationStats: async (): Promise<ConsultationStatistics> => {
const { data } = await client.get<{
success: boolean;
data: PaginatedResponse<{ id: string }>;
}>('/health/consultation-sessions', { params: { page: 1, page_size: 1 } });
const total = data.data?.total || 0;
return { total_sessions: total, pending_reply: 0, avg_response_time_minutes: null, this_month: 0 };
data: ConsultationStatistics;
}>('/health/admin/statistics/consultations');
return data.data;
},
getFollowUpStats: async (): Promise<FollowUpStatistics> => {
const { data } = await client.get<{
success: boolean;
data: PaginatedResponse<{ id: string }>;
}>('/health/follow-up-tasks', { params: { page: 1, page_size: 1 } });
const total = data.data?.total || 0;
return { total_tasks: total, completed: 0, pending: 0, overdue: 0, completion_rate: 0 };
data: FollowUpStatistics;
}>('/health/admin/statistics/follow-ups');
return data.data;
},
};