Generate a medical information summary for quick access in emergencies, for first aid or medical visits.
Core Features
1. Emergency Information Extraction
Extract the most critical information from the user's health data:
- Severe Allergies: Prioritize extraction of grade 4 (anaphylactic shock) and grade 3 allergies
- Current Medications: Names, dosages, and frequencies of active medications
- Acute Conditions: Medical conditions requiring emergency treatment
- Implants: Pacemakers, stents, etc. (affecting examinations and treatment)
- Emergency Contacts: Family member information for quick contact
2. Information Prioritization
Sort information by medical urgency:
- P0 - Critical Information: Anaphylactic shock, severe drug allergies, life-threatening diseases
- P1 - Important Information: Current medications, chronic diseases, implants
- P2 - General Information: Blood type, age, weight, recent examinations
3. Multi-format Output
Support multiple output formats to suit different scenarios:
- HTML Format: Printable webpage, using Tailwind CSS and Lucide icons (recommended)
- JSON Format: Structured data, convenient for system integration
- Text Format: Concise and readable, suitable for printing and carrying
- PDF Format: Professional printing, suitable for long-term storage
HTML Format (New)
Generate a standalone HTML file, including:
- Tailwind CSS styles (via CDN)
- Lucide icons (via CDN)
- Responsive design
- Print optimization
- Multiple size variants (A4, wallet card, large-print version)
- Automatic card type detection (standard, children, elderly, severe allergies)
How to Use:
# 生成标准卡片
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 # 大字版(老年)
Output files:emergency-cards/emergency-card-{variant}-{YYYY-MM-DD}.html
4. Offline Availability
- Supports mobile saving (photo album, files)
- Supports printing and carrying (wallet, bag)
- Supports cloud backup (optional)
Usage Instructions
Trigger Conditions
Use this skill when users mention the following scenarios:
- ✅ "Generate an emergency medical information card"
- ✅ "I need to travel, how can I quickly provide medical information"
- ✅ "Organize my allergy information into a card"
- ✅ "Emergency first aid information"
- ✅ "Medical visit preparation materials"
- ✅ "Medical information summary"
Execution Steps
Step 1: Read the user's basic data
Read information from the following data sources:
// 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');
Step 2: Extract key information
2.1 Basic Information
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 Severe Allergies
// 过滤出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 Chronic Disease Diagnoses (New)
// 从慢性病管理数据中提取诊断信息
const chronicConditions = [];
// 高血压
try {
const hypertensionData = readFile('data/hypertension-tracker.json');
if (hypertensionData.hypertension_management?.diagnosis_date) {
chronicConditions.push({
condition: '高血压',
diagnosis_date: hypertensionData.hypertension_management.diagnosis_date,
classification: hypertensionData.hypertension_management.classification,
current_bp: hypertensionData.hypertension_management.average_bp,
risk_level: hypertensionData.hypertension_management.cardiovascular_risk?.risk_level
});
}
} catch (e) {
// 文件不存在或读取失败,跳过
}
// 糖尿病
try {
const diabetesData = readFile('data/diabetes-tracker.json');
if (diabetesData.diabetes_management?.diagnosis_date) {
chronicConditions.push({
condition: diabetesData.diabetes_management.type === 'type_1' ? '1型糖尿病' : '2型糖尿病',
diagnosis_date: diabetesData.diabetes_management.diagnosis_date,
duration_years: diabetesData.diabetes_management.duration_years,
hba1c: diabetesData.diabetes_management.hba1c?.history?.[0]?.value,
control_status: diabetesData.diabetes_management.hba1c?.achievement ? '控制良好' : '需改善'
});
}
} catch (e) {
// 文件不存在或读取失败,跳过
}
// COPD
try {
const copdData = readFile('data/copd-tracker.json');
if (copdData.copd_management?.diagnosis_date) {
chronicConditions.push({
condition: '慢阻肺(COPD)',
diagnosis_date: copdData.copd_management.diagnosis_date,
gold_grade: `GOLD ${copdData.copd_management.gold_grade}级`,
cat_score: copdData.copd_management.symptom_assessment?.cat_score?.total_score,
exacerbations_last_year: copdData.copd_management.exacerbations?.last_year
});
}
} catch (e) {
// 文件不存在或读取失败,跳过
}
2.4 Current Medications
// 只包含活跃的药物
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 Medical Conditions
Extract diagnosis information from the discharge summary:
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 Implants
Extract implant information from the surgical records:
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 Recent Radiation Exposure
const recentRadiation = {
total_dose_last_year: calculateTotalDose(radiation.records, 'last_year'),
last_exam: radiation.records[radiation.records.length - 1]
};
Step 3: Generate Information Card
Organize information by priority:
const emergencyCard = {
version: "1.0",
generated_at: new Date().toISOString(),
basic_info: basicInfo,
critical_allergies: criticalAllergies.sort(bySeverityDesc),
current_medications: currentMedications,
medical_conditions: [...medicalConditions, ...chronicConditions], // 合并急症和慢性病
implants: implants,
recent_radiation_exposure: recentRadiation,
disclaimer: "此信息卡仅供参考,不替代专业医疗诊断",
data_source: "my-his个人健康信息系统",
chronic_conditions: chronicConditions // 单独字段便于访问
};
Step 4: Format Output
JSON Format
Directly output structured JSON data.
Text Format
Generate a readable text card:
╔═══════════════════════════════════════════════════════════╗
║ 紧急医疗信息卡 ║
╠═══════════════════════════════════════════════════════════╣
║ 姓名:张三 年龄:35岁 ║
║ 血型:A+ 体重:70kg ║
╠═══════════════════════════════════════════════════════════╣
║ 🆘 严重过敏 ║
║ ─────────────────────────────────────────────────────── ║
║ • 青霉素 - 过敏性休克(4级)🆘 ║
║ 反应:呼吸困难、喉头水肿、意识丧失 ║
╠═══════════════════════════════════════════════════════════╣
║ 💊 当前用药 ║
║ ─────────────────────────────────────────────────────── ║
║ • 氨氯地平 5mg - 每日1次(高血压) ║
║ • 二甲双胍 1000mg - 每日2次(糖尿病) ║
╠═══════════════════════════════════════════════════════════╣
║ 🏥 慢性疾病 ║
║ ─────────────────────────────────────────────────────── ║
║ • 高血压(2023-01-01诊断,1级,控制中) ║
║ 平均血压:132/82 mmHg ║
║ • 2型糖尿病(2022-05-10诊断,HbA1c 6.8%) ║
║ 控制状态:良好 ║
║ • 慢阻肺(2020-03-15诊断,GOLD 2级) ║
║ CAT评分:18分 ║
╠═══════════════════════════════════════════════════════════╣
║ 🏥 其他疾病 ║
║ ─────────────────────────────────────────────────────── ║
║ (其他急症或手术诊断,如有) ║
╠═══════════════════════════════════════════════════════════╣
║ 📿 植入物 ║
║ ─────────────────────────────────────────────────────── ║
║ • 心脏起搏器(2022-06-10植入) ║
║ 医院:XX医院 ║
║ 注意:定期复查,避免MRI检查 ║
╠═══════════════════════════════════════════════════════════╣
║ 📞 紧急联系人 ║
║ ─────────────────────────────────────────────────────── ║
║ • 李四(配偶)- 138****1234 ║
╠═══════════════════════════════════════════════════════════╣
║ ⚠️ 免责声明 ║
║ 此信息卡仅供参考,不替代专业医疗诊断 ║
║ 生成时间:2025-12-31 12:34:56 ║
╚═══════════════════════════════════════════════════════════╝
QR Code Format
Convert JSON data into a QR code image:
const qrCode = generateQRCode(JSON.stringify(emergencyCard));
emergencyCard.qr_code = qrCode;
Step 5: Save File
Save the file according to the format selected by the user:
// JSON格式
saveFile('emergency-card.json', JSON.stringify(emergencyCard, null, 2));
// 文本格式
saveFile('emergency-card.txt', generateTextCard(emergencyCard));
// 二维码格式
saveFile('emergency-card-qr.png', emergencyCard.qr_code);
Step 6: Output Confirmation Information
✅ 紧急医疗信息卡已生成
文件位置:data/emergency-cards/emergency-card-2025-12-31.json
生成时间:2025-12-31 12:34:56
包含信息:
━━━━━━━━━━━━━━━━━━━━━━━━━━
✓ 基础信息(姓名、年龄、血型)
✓ 严重过敏(1项4级过敏)
✓ 当前用药(2种药物)
✓ 医疗状况(2种疾病)
✓ 植入物(1项)
✓ 紧急联系人(1人)
💡 使用建议:
━━━━━━━━━━━━━━━━━━━━━━━━━━
• 将JSON文件保存到手机云盘
• 将二维码保存到手机相册
• 打印文本版随身携带
• 旅行前更新信息
⚠️ 注意事项:
━━━━━━━━━━━━━━━━━━━━━━━━━━
• 此信息卡仅供参考,不替代专业医疗诊断
• 定期更新(建议每3个月或健康信息变化后)
• 如有严重过敏,请随身携带过敏急救卡
Data Sources
Primary Data Sources
- data/profile.json: User basic information, blood type, emergency contacts
- data/allergies.json: Allergy history and severity grading
- data/medications/medications.json: Current medication plan and dosage
Chronic Disease Data Sources (New)
- data/hypertension-tracker.json: Hypertension management data (diagnosis date, grading, blood pressure control, target organ damage, cardiovascular risk)
- data/diabetes-tracker.json: Diabetes management data (type, HbA1c, blood glucose control, complication screening)
- data/copd-tracker.json: COPD management data (GOLD grading, CAT score, history of acute exacerbations, pulmonary function)
Auxiliary Data Sources
- data/radiation-records.json: Recent radiation exposure records
- data/surgical records//*.json**: Surgical implant information
- data/discharge summaries//*.json**: Medical diagnosis information
Optional Data Sources
- data/index.json: Global data index
Safety Principles
Must Follow
- ❌ Do not add medication recommendations (only list current medications)
- ❌ Do not provide diagnostic conclusions (only list known diagnoses)
- ❌ Do not give treatment recommendations (does not replace a doctor)
- ❌ Include a disclaimer (for reference only)
Information Accuracy
- ✅ Only extract recorded information (do not speculate or infer)
- ✅ Indicate the information source and update time
- ✅ Recommend regularly updating information
Privacy Protection
- ✅ Sensitive information can be optionally hidden
- ✅ Partially hide phone numbers (e.g., 138****1234)
- ✅ All data is stored locally only
Error Handling
Missing Data
- Missing allergy data: Output "No allergy history recorded"
- Missing medication data: Output "No current medications recorded"
- Missing implant data: Output "No implants"
File Read Failure
- Unable to read profile.json: Use default values (Name: Not set)
- Unable to read allergies.json: Skip allergy information
- Continue generating other information: Do not interrupt due to a single file failure
QR Code Generation Failed
- Degrade to text format output
- Prompt the user to manually record information
Example Output
For a complete example, please refer to examples.md。
Test Data
The test data files are located in test-data/emergency-example.json。
Format Description
For detailed output format instructions, please refer to formats.md。