--- name: emergency-card description: 生成紧急情况下快速访问的医疗信息摘要卡片。当用户需要旅行、就诊准备、紧急情况或询问"紧急信息"、"医疗卡片"、"急救信息"时使用此技能。提取关键信息(过敏、用药、急症、植入物),支持多格式输出(JSON、文本、二维码),用于急救或快速就医。 --- # 紧急医疗信息卡生成器 生成紧急情况下快速访问的医疗信息摘要,用于急救或就医。 ## 核心功能 ### 1. 紧急信息提取 从用户的健康数据中提取最关键的信息: - **严重过敏**:优先提取4级(过敏性休克)和3级过敏 - **当前用药**:活跃药物的名称、剂量、频率 - **急症情况**:需要紧急处理的医疗状况 - **植入物**:心脏起搏器、支架等(影响检查和治疗) - **紧急联系人**:快速联系的家属信息 ### 2. 信息优先级排序 按照医疗紧急程度对信息排序: 1. **P0 - 危急信息**:过敏性休克、严重药物过敏、危及生命的疾病 2. **P1 - 重要信息**:当前用药、慢性病、植入物 3. **P2 - 一般信息**:血型、年龄、体重、最近检查 ### 3. 多格式输出 支持多种输出格式以适应不同场景: - **HTML格式**:可打印网页,使用Tailwind CSS和Lucide图标(推荐) - **JSON格式**:结构化数据,便于系统集成 - **文本格式**:简洁可读,适合打印携带 - **PDF格式**:专业打印,适合长期保存 #### HTML格式(新增) 生成独立的HTML文件,包含: - Tailwind CSS样式(通过CDN) - Lucide图标(通过CDN) - 响应式设计 - 打印优化 - 多种尺寸变体(A4、钱包卡、大字版) - 自动卡片类型检测(标准、儿童、老年、严重过敏) 使用方式: ```bash # 生成标准卡片 python scripts/generate_emergency_card.py # 指定卡片类型 python scripts/generate_emergency_card.py standard python scripts/generate_emergency_card.py child python scripts/generate_emergency_card.py elderly python scripts/generate_emergency_card.py severe # 指定打印尺寸 python scripts/generate_emergency_card.py standard a4 # A4标准 python scripts/generate_emergency_card.py standard wallet # 钱包卡 python scripts/generate_emergency_card.py standard large # 大字版(老年) ``` 输出文件:`emergency-cards/emergency-card-{variant}-{YYYY-MM-DD}.html` ### 4. 离线可用 - 支持手机保存(相册、文件) - 支持打印携带(钱包、包) - 支持云端备份(可选) ## 使用说明 ### 触发条件 当用户提到以下场景时,使用此技能: - ✅ "生成紧急医疗信息卡" - ✅ "我需要旅行,如何快速提供医疗信息" - ✅ "把我的过敏信息整理成卡片" - ✅ "紧急情况急救信息" - ✅ "就医准备资料" - ✅ "医疗信息摘要" ### 执行步骤 #### 步骤 1: 读取用户基础数据 从以下数据源读取信息: ```javascript // 1. 用户档案 const profile = readFile('data/profile.json'); // 2. 过敏史 const allergies = readFile('data/allergies.json'); // 3. 当前用药 const medications = readFile('data/medications/medications.json'); // 4. 辐射记录 const radiation = readFile('data/radiation-records.json'); // 5. 手术记录(查找植入物) const surgeries = glob('data/手术记录/**/*.json'); // 6. 出院小结(查找急症) const dischargeSummaries = glob('data/出院小结/**/*.json'); ``` #### 步骤 2: 提取关键信息 ##### 2.1 基础信息 ```javascript const basicInfo = { name: profile.basic_info?.name || "未设置", age: calculateAge(profile.basic_info?.birth_date), gender: profile.basic_info?.gender || "未设置", blood_type: profile.basic_info?.blood_type || "未知", weight: `${profile.basic_info?.weight} ${profile.basic_info?.weight_unit}`, height: `${profile.basic_info?.height} ${profile.basic_info?.height_unit}`, bmi: profile.calculated?.bmi, emergency_contacts: profile.emergency_contacts || [] }; ``` ##### 2.2 严重过敏 ```javascript // 过滤出3-4级严重过敏 const criticalAllergies = allergies.allergies .filter(a => a.severity_level >= 3 && a.current_status.status === 'active') .map(a => ({ allergen: a.allergen.name, severity: `过敏${getSeverityLabel(a.severity_level)}(${a.severity_level}级)`, reaction: a.reaction_description, diagnosed_date: a.diagnosis_date })); ``` ##### 2.3 当前用药 ```javascript // 只包含活跃的药物 const currentMedications = medications.medications .filter(m => m.active === true) .map(m => ({ name: m.name, dosage: `${m.dosage.value}${m.dosage.unit}`, frequency: getFrequencyLabel(m.frequency), instructions: m.instructions, warnings: m.warnings || [] })); ``` ##### 2.4 医疗状况 从出院小结中提取诊断信息: ```javascript const medicalConditions = dischargeSummaries .flatMap(ds => { const data = readFile(ds.file_path); return data.diagnoses || []; }) .map(d => ({ condition: d.condition, diagnosis_date: d.date, status: d.status || "随访中" })); ``` ##### 2.5 植入物 从手术记录中提取植入物信息: ```javascript const implants = surgeries .flatMap(s => { const data = readFile(s.file_path); return data.procedure?.implants || []; }) .map(i => ({ type: i.type, implant_date: i.date, hospital: i.hospital, notes: i.notes })); ``` ##### 2.6 近期辐射暴露 ```javascript const recentRadiation = { total_dose_last_year: calculateTotalDose(radiation.records, 'last_year'), last_exam: radiation.records[radiation.records.length - 1] }; ``` #### 步骤 3: 生成信息卡片 按照优先级组织信息: ```javascript const emergencyCard = { version: "1.0", generated_at: new Date().toISOString(), basic_info: basicInfo, critical_allergies: criticalAllergies.sort(bySeverityDesc), current_medications: currentMedications, medical_conditions: medicalConditions, implants: implants, recent_radiation_exposure: recentRadiation, disclaimer: "此信息卡仅供参考,不替代专业医疗诊断", data_source: "my-his个人健康信息系统" }; ``` #### 步骤 4: 格式化输出 ##### JSON格式 直接输出结构化JSON数据。 ##### 文本格式 生成易读的文本卡片: ``` ╔═══════════════════════════════════════════════════════════╗ ║ 紧急医疗信息卡 ║ ╠═══════════════════════════════════════════════════════════╣ ║ 姓名:张三 年龄:35岁 ║ ║ 血型:A+ 体重:70kg ║ ╠═══════════════════════════════════════════════════════════╣ ║ 🆘 严重过敏 ║ ║ ─────────────────────────────────────────────────────── ║ ║ • 青霉素 - 过敏性休克(4级)🆘 ║ ║ 反应:呼吸困难、喉头水肿、意识丧失 ║ ╠═══════════════════════════════════════════════════════════╣ ║ 💊 当前用药 ║ ║ ─────────────────────────────────────────────────────── ║ ║ • 阿司匹林 100mg - 每日1次,心血管预防 ║ ║ • 氨氯地平 5mg - 每日2次,降压治疗 ║ ╠═══════════════════════════════════════════════════════════╣ ║ 🏥 医疗状况 ║ ║ ─────────────────────────────────────────────────────── ║ ║ • 高血压(2023-01-15诊断)- 控制中 ║ ║ • 2型糖尿病(2022-08-20诊断)- 监测中 ║ ╠═══════════════════════════════════════════════════════════╣ ║ 📿 植入物 ║ ║ ─────────────────────────────────────────────────────── ║ ║ • 心脏起搏器(2022-06-10植入) ║ ║ 医院:XX医院 ║ ║ 注意:定期复查,避免MRI检查 ║ ╠═══════════════════════════════════════════════════════════╣ ║ 📞 紧急联系人 ║ ║ ─────────────────────────────────────────────────────── ║ ║ • 李四(配偶)- 138****1234 ║ ╠═══════════════════════════════════════════════════════════╣ ║ ⚠️ 免责声明 ║ ║ 此信息卡仅供参考,不替代专业医疗诊断 ║ ║ 生成时间:2025-12-31 12:34:56 ║ ╚═══════════════════════════════════════════════════════════╝ ``` ##### 二维码格式 将JSON数据转换为二维码图片: ```javascript const qrCode = generateQRCode(JSON.stringify(emergencyCard)); emergencyCard.qr_code = qrCode; ``` #### 步骤 5: 保存文件 根据用户选择的格式保存文件: ```javascript // JSON格式 saveFile('emergency-card.json', JSON.stringify(emergencyCard, null, 2)); // 文本格式 saveFile('emergency-card.txt', generateTextCard(emergencyCard)); // 二维码格式 saveFile('emergency-card-qr.png', emergencyCard.qr_code); ``` #### 步骤 6: 输出确认信息 ``` ✅ 紧急医疗信息卡已生成 文件位置:data/emergency-cards/emergency-card-2025-12-31.json 生成时间:2025-12-31 12:34:56 包含信息: ━━━━━━━━━━━━━━━━━━━━━━━━━━ ✓ 基础信息(姓名、年龄、血型) ✓ 严重过敏(1项4级过敏) ✓ 当前用药(2种药物) ✓ 医疗状况(2种疾病) ✓ 植入物(1项) ✓ 紧急联系人(1人) 💡 使用建议: ━━━━━━━━━━━━━━━━━━━━━━━━━━ • 将JSON文件保存到手机云盘 • 将二维码保存到手机相册 • 打印文本版随身携带 • 旅行前更新信息 ⚠️ 注意事项: ━━━━━━━━━━━━━━━━━━━━━━━━━━ • 此信息卡仅供参考,不替代专业医疗诊断 • 定期更新(建议每3个月或健康信息变化后) • 如有严重过敏,请随身携带过敏急救卡 ``` ## 数据源 ### 主要数据源 - **data/profile.json**:用户基础信息、血型、紧急联系人 - **data/allergies.json**:过敏史和严重程度分级 - **data/medications/medications.json**:当前用药计划和剂量 ### 辅助数据源 - **data/radiation-records.json**:近期辐射暴露记录 - **data/手术记录/**/*.json**:手术植入物信息 - **data/出院小结/**/*.json**:医疗诊断信息 ### 可选数据源 - **data/index.json**:全局数据索引 ## 安全性原则 ### 必须遵循 - ❌ 不添加用药建议(仅列出当前用药) - ❌ 不提供诊断结论(仅列出已知诊断) - ❌ 不给出治疗建议(不替代医生) - ❌ 标注免责声明(仅供参考) ### 信息准确度 - ✅ 仅提取已记录的信息(不推测或推断) - ✅ 标注信息来源和更新时间 - ✅ 建议定期更新信息 ### 隐私保护 - ✅ 敏感信息可选隐藏 - ✅ 电话号码部分隐藏(如:138****1234) - ✅ 所有数据仅保存在本地 ## 错误处理 ### 数据缺失 - **过敏数据缺失**:输出"未记录过敏史" - **用药数据缺失**:输出"未记录当前用药" - **植入物数据缺失**:输出"无植入物" ### 文件读取失败 - **无法读取profile.json**:使用默认值(姓名:未设置) - **无法读取allergies.json**:跳过过敏信息 - **继续生成其他信息**:不因单个文件失败而中断 ### 二维码生成失败 - 降级为文本格式输出 - 提示用户手动记录信息 ## 示例输出 完整示例请参考 [examples.md](examples.md)。 ## 测试数据 测试数据文件位于 [test-data/emergency-example.json](test-data/emergency-example.json)。 ## 格式说明 详细的输出格式说明请参考 [formats.md](formats.md)。