Files
hms/apps/miniprogram/src/services/ai-analysis.ts
iven 9576e80175 feat(ai): Phase 2B 洞察→推送→反馈闭环 — 风险评分+通知+建议反馈
- 风险评分引擎 load_patient_data 实装(体征+化验异常)
- refresh_all_patients 高风险自动创建洞察+事件推送
- erp-message 订阅 copilot.insight.created 推送医护通知
- 每日 cron 增加洞察过期清理+建议过期清理
- POST /ai/suggestions/{id}/feedback 建议反馈端点
- SuggestionFeedbackService 反馈服务层
- 小程序健康页建议卡片增加采纳/忽略/咨询医生按钮
2026-05-19 01:19:09 +08:00

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 },
);
}