2baf29b3ae
Deliver encrypted health zone, observation API, baseline maturity pipeline, page-data bindings, and H5/WeChat channel integration for health P0. Co-authored-by: Cursor <cursoragent@cursor.com>
63 lines
2.1 KiB
JavaScript
63 lines
2.1 KiB
JavaScript
export const HEALTH_EVENT_NOTIFICATION_TYPES = Object.freeze({
|
|
alert: 'health_event_alert',
|
|
watch: 'health_event_watch',
|
|
});
|
|
|
|
export function shouldCreateWebNotification(severity) {
|
|
return severity === 'watch' || severity === 'alert';
|
|
}
|
|
|
|
export function shouldAttemptWechatNotification(severity) {
|
|
return severity === 'alert';
|
|
}
|
|
|
|
export function healthEventNotificationType(severity) {
|
|
if (severity === 'alert') return HEALTH_EVENT_NOTIFICATION_TYPES.alert;
|
|
if (severity === 'watch') return HEALTH_EVENT_NOTIFICATION_TYPES.watch;
|
|
return null;
|
|
}
|
|
|
|
export function buildHealthEventNotificationCopy(event = {}) {
|
|
const severity = String(event.severity ?? 'info');
|
|
const message = String(event.message ?? event.agentSummary ?? '检测到新的健康变化').trim();
|
|
if (severity === 'alert') {
|
|
return {
|
|
title: '健康提醒:需要关注',
|
|
body: `${message}\n\n这不是医疗诊断。异常会记录在你的健康档案,并在你下次进入时优先展示。`,
|
|
};
|
|
}
|
|
if (severity === 'watch') {
|
|
return {
|
|
title: '健康变化提示',
|
|
body: `${message}\n\n建议继续按规范测量;如持续变化,可将趋势记录提供给医生评估。`,
|
|
};
|
|
}
|
|
return {
|
|
title: '健康记录更新',
|
|
body: message,
|
|
};
|
|
}
|
|
|
|
export function formatHealthAlertsPreamble(alerts = []) {
|
|
if (!alerts.length) return '';
|
|
const lines = [
|
|
'【未读健康提醒】',
|
|
'以下变化已记录在你的健康档案(不是医疗诊断)。请确认已知晓后再继续操作:',
|
|
'',
|
|
];
|
|
for (const alert of alerts.slice(0, 5)) {
|
|
const prefix = alert.severity === 'alert' ? '⚠️' : '•';
|
|
lines.push(`${prefix} ${alert.message ?? alert.agentSummary ?? '健康变化'}`);
|
|
}
|
|
if (alerts.length > 5) {
|
|
lines.push(`… 另有 ${alerts.length - 5} 条提醒`);
|
|
}
|
|
lines.push('', '回复「知道了」确认已读;确认后才会显示功能菜单。');
|
|
return lines.join('\n');
|
|
}
|
|
|
|
export function isHealthAlertsAckText(text = '') {
|
|
const normalized = String(text ?? '').trim();
|
|
return ['知道了', '已知悉', '确认', 'ok', 'OK', '好'].includes(normalized);
|
|
}
|