- 风险评分引擎 load_patient_data 实装(体征+化验异常)
- refresh_all_patients 高风险自动创建洞察+事件推送
- erp-message 订阅 copilot.insight.created 推送医护通知
- 每日 cron 增加洞察过期清理+建议过期清理
- POST /ai/suggestions/{id}/feedback 建议反馈端点
- SuggestionFeedbackService 反馈服务层
- 小程序健康页建议卡片增加采纳/忽略/咨询医生按钮
80 lines
1.8 KiB
TypeScript
80 lines
1.8 KiB
TypeScript
import { api } from './request';
|
|
|
|
export interface AiAnalysisItem {
|
|
id: string;
|
|
patient_id: string;
|
|
analysis_type: string;
|
|
model_used: string;
|
|
status: string;
|
|
result_content: string | null;
|
|
result_metadata: Record<string, unknown> | null;
|
|
error_message: string | null;
|
|
created_at: string;
|
|
}
|
|
|
|
export async function listAiAnalysis(page = 1, pageSize = 20) {
|
|
return api.get<{ data: AiAnalysisItem[]; total: number }>(
|
|
'/ai/analysis/history',
|
|
{ page, page_size: pageSize },
|
|
);
|
|
}
|
|
|
|
export async function getAiAnalysisDetail(id: string) {
|
|
return api.get<AiAnalysisItem>(`/ai/analysis/${id}`);
|
|
}
|
|
|
|
export interface AiSuggestionItem {
|
|
id: string;
|
|
analysis_id: string;
|
|
suggestion_type: string;
|
|
risk_level: string;
|
|
params: Record<string, unknown> | null;
|
|
status: string;
|
|
created_at: string;
|
|
}
|
|
|
|
export async function listPendingSuggestions() {
|
|
const resp = await api.get<{ data: AiSuggestionItem[]; total: number }>(
|
|
'/ai/suggestions',
|
|
{ status: 'pending' },
|
|
);
|
|
return resp.data || [];
|
|
}
|
|
|
|
export async function submitSuggestionFeedback(
|
|
suggestionId: string,
|
|
action: 'adopt' | 'ignore' | 'consult',
|
|
feedbackText?: string,
|
|
) {
|
|
return api.post(`/ai/suggestions/${suggestionId}/feedback`, {
|
|
action,
|
|
feedback_text: feedbackText || null,
|
|
});
|
|
}
|
|
|
|
// === 健康摘要 ===
|
|
|
|
export interface SummaryItem {
|
|
category: string;
|
|
title: string;
|
|
severity: string | null;
|
|
created_at: string;
|
|
}
|
|
|
|
export interface HealthSummary {
|
|
patient_id: string;
|
|
risk_level: string;
|
|
active_insights_count: number;
|
|
recent_analyses_count: number;
|
|
latest_insight_title: string | null;
|
|
latest_analysis_type: string | null;
|
|
summary_items: SummaryItem[];
|
|
}
|
|
|
|
export async function getHealthSummary(patientId: string) {
|
|
return api.get<HealthSummary>(
|
|
'/ai/health-summary',
|
|
{ patient_id: patientId },
|
|
);
|
|
}
|