Installs: 0
Used in: 1 repos
Updated: 0mo ago
$
npx ai-builder add command huifer/medicationInstalls to .claude/commands/medication.md
# 用药记录管理
管理药物和用药计划,记录每日用药情况,追踪药物依从性。
## 操作类型
### 1. 添加药物 - `add`
添加新药物及其用药计划。
**参数说明:**
- `info`: 药物信息(必填),使用自然语言描述
**示例:**
```
/medication add 阿司匹林 100mg 每天1次 早餐后服用
/medication add 氨氯地平 5mg 每天早晚各1次
/medication add 二甲双胍 500mg 每天3次 餐后服用
/medication add 维生素D 1000IU 每周1次
```
**支持的描述格式:**
- 药物名称 + 剂量 + 频率 + 用药时间
- 频率关键词:每天、每日、每周、隔天、按需
- 时间关键词:早餐前、早餐后、午餐前、午餐后、晚餐前、晚餐后、睡前、早晚各一次等
### 2. 记录用药 - `log`
记录实际用药情况。
**参数说明:**
- `info`: 用药记录(必填),使用自然语言描述
**示例:**
```
/medication log 已服用 阿司匹林
/medication log 阿司匹林 已服
/medication log 忘记服用 氨氯地平
/medication log 氨氯地平 漏服
/medication log 阿司匹林 早上8点已服
```
**自动识别:**
- ✅ 已服用、已服、服了、吃了 - 正常用药
- ❌ 忘记、漏服、未服 - 漏服记录
- ⏰ 计划 - 预定提醒
### 3. 查看药物列表 - `list`
查看所有已添加的药物及用药计划。
**示例:**
```
/medication list
```
### 4. 查看用药历史 - `history`
查看用药记录历史。
**示例:**
```
/medication history
/medication history today
/medication history 2025-12-31
/medication history week
```
### 5. 查看用药统计 - `status`
查看用药依从性统计。
**示例:**
```
/medication status
/medication status today
/medication status week
/medication status month
```
## 执行步骤
### 添加药物 (add)
#### 1. 解析药物信息
从自然语言中提取:
- **药物名称**:通用名或商品名
- **剂量**:数值 + 单位(mg、g、ml、IU、片、粒等)
- **频率**:每天次数、每周次数等
- **用药时间**:具体的服药时间点
- **特殊说明**:餐前、餐后、睡前等
#### 2. 生成用药计划
**核心规则:schedule 数组必须为每周的每一天(1-7)明确生成用药计划记录**
**频率映射规则:**
| 用户输入 | 频率类型 | schedule 记录数 | 生成规则 |
|---------|---------|----------------|---------|
| 每天1次、每日1次 | daily | 7条 | 每天1条,周一至周日 |
| 每天2次、每日2次、早晚各一次 | daily | 14条 | 每天2条,周一至周日 |
| 每天3次、每日3次、一日三次 | daily | 21条 | 每天3条,周一至周日 |
| 每周1次 | weekly | 1条 | 仅指定星期几 |
| 隔天1次 | every_other_day | 4条 | 周一、三、五、日 或 二、四、六 |
| 按需 | as_needed | 0条 | 无固定计划 |
**schedule 生成算法:**
```javascript
// 伪代码示例
function generateSchedule(frequency, times, timeSlots) {
const schedule = [];
if (frequency === 'daily') {
// 每天 N 次:为每周7天每天生成 N 条记录
for (let weekday = 1; weekday <= 7; weekday++) {
for (const timeSlot of timeSlots) {
schedule.push({
weekday: weekday,
time: timeSlot.time,
timing_label: timeSlot.label,
dose: {
value: timeSlot.dose.value,
unit: timeSlot.dose.unit
}
});
}
}
} else if (frequency === 'weekly') {
// 每周一次:仅生成1条记录(默认周一,可通过用户输入指定)
schedule.push({
weekday: 1, // 或用户指定的星期几
time: timeSlots[0].time,
timing_label: timeSlots[0].label,
dose: {
value: timeSlots[0].dose.value,
unit: timeSlots[0].dose.unit
}
});
} else if (frequency === 'every_other_day') {
// 隔天一次:生成4条记录(1,3,5,7 或 2,4,6)
const days = [1, 3, 5, 7]; // 或 [2, 4, 6]
for (const weekday of days) {
schedule.push({
weekday: weekday,
time: timeSlots[0].time,
timing_label: timeSlots[0].label,
dose: {
value: timeSlots[0].dose.value,
unit: timeSlots[0].dose.unit
}
});
}
}
return schedule;
}
```
**生成示例:**
**每天1次:**
```
输入:每天1次 早餐后
生成:7条记录
- 周一 08:00 早餐后
- 周二 08:00 早餐后
- 周三 08:00 早餐后
- 周四 08:00 早餐后
- 周五 08:00 早餐后
- 周六 08:00 早餐后
- 周日 08:00 早餐后
```
**每天2次:**
```
输入:每天2次 早晚各一次
生成:14条记录
- 周一 08:00 早晨
- 周一 20:00 晚上
- 周二 08:00 早晨
- 周二 20:00 晚上
- ... (继续至周日)
```
**每天3次:**
```
输入:每天3次 三餐后
生成:21条记录
- 周一 08:00 早餐后
- 周一 12:30 午餐后
- 周一 18:30 晚餐后
- 周二 08:00 早餐后
- ... (继续至周日)
```
**时间映射规则:**
| 用户输入 | 标准时间 | 备注 |
|---------|---------|------|
| 早餐前 | 07:00 | 可在个人设置中调整 |
| 早餐后 | 08:00 | 可在个人设置中调整 |
| 午餐前 | 11:30 | 可在个人设置中调整 |
| 午餐后 | 12:30 | 可在个人设置中调整 |
| 晚餐前 | 17:30 | 可在个人设置中调整 |
| 晚餐后 | 18:30 | 可在个人设置中调整 |
| 睡前 | 21:00 | 可在个人设置中调整 |
| 早晚 | 08:00, 20:00 | 两次服药 |
#### 3. 检查药物过敏
**重要:在保存药物信息之前,必须检查用户是否存在相关过敏。**
**检查流程:**
1. **解析药物类别**:从药物名称识别其所属药物家族
2. **读取过敏记录**:检查 `data/allergies.json` 中的过敏记录
3. **匹配过敏原**:检查药物或其类别是否在过敏列表中
4. **显示警示**:如果发现潜在过敏,显示警示信息并要求确认
**常见药物家族映射:**
| 药物类别 | 包含药物 |
|---------|---------|
| 青霉素类 | 青霉素、阿莫西林、氨苄西林、美洛西林、哌拉西林等 |
| 头孢菌素类 | 头孢唑林、头孢克肟、头孢曲松、头孢呋辛、头孢他啶等 |
| 磺胺类 | 磺胺甲噁唑、磺胺嘧啶、磺胺二甲嘧啶等 |
| 四环素类 | 四环素、多西环素、米诺环素等 |
| 氨基糖苷类 | 庆大霉素、阿米卡星、链霉素等 |
| 大环内酯类 | 红霉素、阿奇霉素、克拉霉素等 |
| 碘造影剂 | 碘海醇、碘帕醇、碘佛醇等 |
| 非甾体抗炎药 | 阿司匹林、布洛芬、双氯芬酸钠、塞来昔布等 |
**过敏检查逻辑:**
```javascript
// 伪代码示例
function checkDrugAllergy(drugName) {
// 1. 读取过敏记录
const allergies = loadAllergies('data/allergies.json');
// 2. 过滤出活跃的药物过敏
const drugAllergies = allergies.allergies.filter(a =>
a.allergen.type === 'drug' &&
a.current_status.status === 'active'
);
// 3. 检查直接匹配(药物名称完全相同)
const directMatch = drugAllergies.find(a =>
a.allergen.name === drugName ||
a.allergen.synonyms.includes(drugName)
);
if (directMatch) {
return {
hasAllergy: true,
allergy: directMatch,
matchType: 'direct'
};
}
// 4. 检查药物家族匹配
const drugFamily = getDrugFamily(drugName);
if (drugFamily) {
const familyMatch = drugAllergies.find(a =>
drugFamily.allergens.includes(a.allergen.name)
);
if (familyMatch) {
return {
hasAllergy: true,
allergy: familyMatch,
matchType: 'family',
familyName: drugFamily.name
};
}
}
return { hasAllergy: false };
}
```
**警示输出格式:**
```
⚠️ 过敏警示
检测到您可能对以下药物过敏:
• 青霉素 - 严重过敏(3级)
添加的药物:阿莫西林(属于青霉素类)
过敏反应:皮疹、呼吸困难
建议:
━━━━━━━━━━━━━━━━━━━━━━━━━━
1. 如确认不过敏,可继续添加
2. 如不确定,建议咨询医生或药师
3. 请仔细核对药物成分
4. 考虑进行过敏原检测确认
是否继续添加该药物?
A. 继续添加(我确认不过敏)
B. 取消添加
```
**特别警示(过敏性休克):**
如果检测到过敏性休克级别的过敏,使用更强的警示:
```
🚨 严重过敏警示
检测到您对该药物有过敏性休克史!
• 青霉素 - 过敏性休克(4级)🆘
添加的药物:阿莫西林(属于青霉素类)
过敏反应:呼吸困难、喉头水肿、意识丧失
━━━━━━━━━━━━━━━━━━━━━━━━━━
⚠️ 警告:过敏性休克可能危及生命!
强烈建议:
━━━━━━━━━━━━━━━━━━━━━━━━━━
1. 立即停止添加该药物
2. 咨询医生或药师
3. 绝对不可冒险使用
是否继续?
A. 强行继续(不推荐)
B. 取消添加(推荐)
```
**处理流程:**
- 用户选择 A:继续添加药物,保存药物信息
- 用户选择 B:取消添加,不保存药物信息
#### 4. 检查孕期药物安全
**重要:在保存药物信息之前,检查用户是否处于孕期,以及药物在孕期的安全性。**
**检查流程:**
1. **检查孕期状态**:读取 `data/pregnancy-tracker.json` 检查是否有活跃孕期
2. **查询药物妊娠分级**:从药物数据库查询药物的妊娠分级(A/B/C/D/X)
3. **显示警示**:如药物为D/X类或存在孕期禁忌,显示警示信息
**妊娠期药物分类(FDA):**
| 分类 | 描述 | 风险 | 定义 |
|------|------|------|------|
| A | 安全 | 最低 | 对照研究显示无风险 |
| B | 相对安全 | 低 | 动物研究无风险,人类无对照研究 |
| C | 谨慎使用 | 中 | 动物研究有风险,人类缺乏研究 |
| D | 禁用(获益>风险) | 高 | 有风险证据,但在某些情况下可能使用 |
| X | 绝对禁忌 | 极高 | 禁用于孕期或可能怀孕的女性 |
**常见药物妊娠分级:**
| 药物类别 | 药物示例 | 分级 | 孕期使用 |
|---------|---------|------|---------|
| **解热镇痛药** |
| 对乙酰氨基酚 | Tylenol | B | ✅ 安全(首选) |
| 阿司匹林 | Aspirin | C/D | ⚠️ 谨慎(小剂量可用) |
| 布洛芬 | Ibuprofen | B/D | ⚠️ 孕晚期禁用 |
| 双氯芬酸 | Diclofenac | B/D | ⚠️ 孕晚期禁用 |
| **抗生素** |
| 青霉素类 | 阿莫西林 | B | ✅ 相对安全 |
| 头孢菌素类 | 头孢克肟 | B | ✅ 相对安全 |
| 红霉素 | Erythromycin | B | ✅ 相对安全 |
| 克林霉素 | Clindamycin | B | ✅ 相对安全 |
| 四环素类 | 多西环素 | D | ❌ 禁用(影响胎儿骨骼/牙齿) |
| 氟喹诺酮类 | 左氧氟沙星 | C | ⚠️ 避免使用 |
| **心血管药** |
| 降压药 | 拉贝洛尔 | C | ✅ 可用(孕期常用) |
| 降压药 | 甲基多巴 | B | ✅ 可用 |
| 降压药 | ACEI/ARB | C/D | ❌ 禁用(致畸) |
| **抗凝药** |
| 华法林 | Warfarin | D/X | ❌ 禁用(致畸) |
| 肝素 | Heparin | B | ✅ 可用 |
| **抗抑郁药** |
| SSRI类 | 舍曲林 | C | ⚠️ 权衡利弊 |
| SSRI类 | 帕罗西汀 | D | ⚠️ 孕晚期避免 |
| **抗组胺药** |
| 氯雷他定 | Claritin | B | ✅ 相对安全 |
| 西替利嗪 | Zyrtec | B | ✅ 相对安全 |
| **维生素/补充剂** |
| 叶酸 | Folic Acid | A | ✅ 推荐补充 |
| 维生素D | Vitamin D | A/B | ✅ 安全(适量) |
| 维生素A | Vitamin A | A/X | ⚠️ 大剂量X类 |
| 铁 | Iron | C/B | ✅ 孕中晚期推荐 |
**孕期安全检查逻辑:**
```javascript
// 伪代码示例
function checkPregnancySafety(drugName) {
// 1. 检查是否处于孕期
const pregnancy = loadPregnancy('data/pregnancy-tracker.json');
if (!pregnancy.current_pregnancy) {
return { is_pregnant: false };
}
const gestationalWeek = pregnancy.current_pregnancy.current_week;
const trimester = pregnancy.current_pregnancy.current_trimester;
// 2. 查询药物妊娠分级
const pregnancyCategory = getDrugPregnancyCategory(drugName);
// 3. 根据分级和孕周评估风险
if (pregnancyCategory === 'X') {
return {
is_pregnant: true,
pregnancyCategory: 'X',
risk: 'contraindicated',
recommendation: 'do_not_use',
message: '此药物禁用于孕期'
};
}
if (pregnancyCategory === 'D') {
return {
is_pregnant: true,
pregnancyCategory: 'D',
risk: 'high',
recommendation: 'consult_doctor',
message: '此药物孕期风险高,必须在医生指导下使用'
};
}
if (pregnancyCategory === 'C') {
return {
is_pregnant: true,
pregnancyCategory: 'C',
risk: 'moderate',
recommendation: 'use_with_caution',
message: '此药物孕期应谨慎使用,权衡利弊'
};
}
// A类或B类
return {
is_pregnant: true,
pregnancyCategory: pregnancyCategory,
risk: 'low',
recommendation: 'generally_safe',
message: '此药物孕期相对安全'
};
}
```
**警示输出格式(X类 - 绝对禁忌):**
```
🚨 孕期药物安全警示
检测到您正处于孕期!
━━━━━━━━━━━━━━━━━━━━━━━━━━
当前孕周:12周(孕早期)
添加的药物:异维A酸
妊娠分级:X类(绝对禁忌)
风险说明:
━━━━━━━━━━━━━━━━━━━━━━━━━━
X类药物已证实对胎儿有致畸作用,
禁用于孕期或可能怀孕的女性。
异维A酸风险:
━━━━━━━━━━━━━━━━━━━━━━━━━━
• 严重出生缺陷(颅面部、心脏、胸腺)
• 中枢神经系统异常
• 流产风险增加
⚠️ 禁止使用!
━━━━━━━━━━━━━━━━━━━━━━━━━━
严禁在孕期使用异维A酸及其类似药物。
建议:
━━━━━━━━━━━━━━━━━━━━━━━━━━
❌ 立即停止添加此药物
❌ 如正在使用,立即停用并就医
❌ 请咨询皮肤科医生,寻找替代方案
❌ 如已服用,请立即咨询产检医生,
进行必要的产前诊断
是否继续?
━━━━━━━━━━━━━━━━━━━━━━━━━━
A. 取消添加(强烈推荐)
B. 我已咨询医生,仍要添加(不推荐)
⚠️ 重要提示:
本系统提示基于医学指南,最终用药
请务必遵循产检医生的专业建议!
```
**警示输出格式(D类 - 高风险):**
```
⚠️ 孕期药物安全警示
检测到您正处于孕期!
━━━━━━━━━━━━━━━━━━━━━━━━━━
当前孕周:28周(孕晚期)
添加的药物:ACEI(如依那普利)
妊娠分级:D类
风险说明:
━━━━━━━━━━━━━━━━━━━━━━━━━━
D类药物有对胎儿造成危害的证据,
但在某些情况下(如对孕妇的益处),
可能经医生评估后谨慎使用。
ACEI风险:
━━━━━━━━━━━━━━━━━━━━━━━━━━
• 胎儿肾功能损伤
• 羊水过少
• 胎儿生长受限
• 新生儿肾脏异常
⚠️ 需要医生评估!
━━━━━━━━━━━━━━━━━━━━━━━━━━
ACEI类药物通常禁用于孕期,
除非经医生评估母体获益大于风险。
建议:
━━━━━━━━━━━━━━━━━━━━━━━━━━
🏥 立即咨询产检医生
❌ 未经医生允许,不要使用
❌ 医生可能会建议更换为孕期
更安全的降压药(如拉贝洛尔)
是否继续?
━━━━━━━━━━━━━━━━━━━━━━━━━━
A. 取消添加(推荐)
B. 医生已评估,继续使用
⚠️ 重要提示:
请务必在产检医生指导下使用此类药物!
```
**警示输出格式(C类 - 中等风险):**
```
⚠️ 孕期药物安全提示
检测到您正处于孕期!
━━━━━━━━━━━━━━━━━━━━━━━━━━
当前孕周:20周(孕中期)
添加的药物:氟康唑
妊娠分级:C类
风险说明:
━━━━━━━━━━━━━━━━━━━━━━━━━━
C类药物:动物研究显示有风险,
但人类缺乏对照研究。
需权衡母体获益与潜在风险。
氟康唑风险:
━━━━━━━━━━━━━━━━━━━━━━━━━━
• 动物研究显示在高剂量下有风险
• 人类数据有限
• 单次低剂量风险可能较低
• 长期或高剂量风险较高
建议:
━━━━━━━━━━━━━━━━━━━━━━━━━━
✅ 在医生指导下使用
✅ 权衡治疗需要与潜在风险
✅ 使用最低有效剂量
✅ 尽量缩短用药时间
是否继续?
━━━━━━━━━━━━━━━━━━━━━━━━━━
A. 医生已评估,继续使用
B. 取消添加,咨询医生
C. 查看更多信息
⚠️ 提示:
如不确定,请先咨询医生或药师。
```
**安全输出格式(A/B类 - 相对安全):**
```
✅ 孕期药物安全检查
检测到您正处于孕期!
━━━━━━━━━━━━━━━━━━━━━━━━━━
当前孕周:16周(孕中期)
添加的药物:青霉素V钾
妊娠分级:B类
安全评估:
━━━━━━━━━━━━━━━━━━━━━━━━━━
此药物孕期相对安全 ✅
青霉素类抗生素:
━━━━━━━━━━━━━━━━━━━━━━━━━━
• B类药物:动物研究无风险
• 人类使用多年,安全性良好
• 孕期感染治疗的首选药物之一
建议:
━━━━━━━━━━━━━━━━━━━━━━━━━━
✅ 可按医嘱使用
✅ 严格按照医生处方剂量
✅ 完成整个疗程
✅ 如有不良反应及时就医
💡 提示:
━━━━━━━━━━━━━━━━━━━━━━━━━━
虽然是相对安全的药物,
但仍需在医生指导下使用。
```
**特殊时期提示(孕早期/孕晚期):**
```
📅 孕期特别提示
当前孕周:12周(孕早期)
━━━━━━━━━━━━━━━━━━━━━━━━━━
器官发育期 - 最敏感的时期
⚠️ 孕早期特别注意:
━━━━━━━━━━━━━━━━━━━━━━━━━━
孕早期(1-13周)是胎儿器官发育关键期,
对外界因素最为敏感。
✅ 推荐的相对安全药物:
━━━━━━━━━━━━━━━━━━━━━━━━━━
• 发热/疼痛:对乙酰氨基酚(B类)
• 抗生素:青霉素类、头孢菌素类(B类)
• 过敏:氯雷他定、西替利嗪(B类)
❌ 应避免的药物:
━━━━━━━━━━━━━━━━━━━━━━━━━━
• 四环素类(影响骨骼/牙齿)
• 氟喹诺酮类(影响软骨)
• ACEI/ARB类(致畸)
• 华法林(致畸)
• 异维A酸(严重致畸)
💡 提示:
━━━━━━━━━━━━━━━━━━━━━━━━━━
孕早期用药需特别谨慎,
所有用药请先咨询产检医生!
```
**处理流程:**
- X/D类药物:默认取消添加,需用户确认"医生已评估"
- C类药物:显示风险信息,用户选择
- A/B类药物:提示相对安全,但仍需医生指导
#### 5. 检查药物相互作用
**重要:在保存药物信息之前,检查与当前用药的相互作用。**
**检查流程:**
1. **加载当前用药**:从 `data/medications/medications.json` 读取所有活跃药物(`active: true`)
2. **执行相互作用检测**:
- 药物-药物相互作用检测
- 药物-疾病冲突检测
- 药物剂量冲突检测
- 药物-食物相互作用检测
3. **汇总结果**:生成相互作用报告
4. **显示警示**:按严重程度分级显示
**检测逻辑:**
**4.1 药物-药物相互作用**
```javascript
// 伪代码示例
function checkDrugDrugInteractions(newDrug, currentMedications) {
const interactions = [];
// 遍历当前所有药物
for (const medication of currentMedications) {
// 查找数据库中的相互作用规则
const rule = findInteractionInDB(newDrug.name, medication.name);
if (rule) {
interactions.push({
type: 'drug_drug',
drug1: newDrug.name,
drug2: medication.name,
rule: rule
});
}
}
// 按严重程度排序(X > D > C > B > A)
return interactions.sort((a, b) => b.rule.severity.level_code - a.rule.severity.level_code);
}
```
**4.2 药物-疾病冲突**
从 `data/profile.json` 读取用户疾病史,检查药物是否与疾病禁忌。
**4.3 药物剂量冲突**
检查剂量是否超过最大日剂量,考虑年龄和肾功能调整。
**4.4 药物-食物相互作用**
从 `diet` 命令读取近期饮食记录,检查药物与食物的相互作用。
**警示输出格式:**
```
🔍 药物相互作用检查
检测到 2 条潜在相互作用:
━━━━━━━━━━━━━━━━━━━━━━━━━━
🆘 绝对禁忌 (X类)
• 华法林 + 阿司匹林
当前用药:华法林 5mg
添加药物:阿司匹林 100mg
风险:显著增加出血风险
机制:阿司匹林可增强华法林的抗凝作用
建议:
━━━━━━━━━━━━━━━━━━━━━━━━━━
🚫 避免合用,除非有明确适应症且在医生监测下
⚠️ 如必须合用,需密切监测凝血功能
👁️ 患者应观察出血迹象(瘀斑、牙龈出血、黑便等)
━━━━━━━━━━━━━━━━━━━━━━━━━━
🟠 相对禁忌 (C类)
• 华法林 + 富含维生素K的食物
当前用药:华法林 5mg
饮食记录:近期经常食用菠菜、西兰花
风险:降低华法林抗凝效果
机制:维生素K是凝血因子合成所需的辅因子
建议:
━━━━━━━━━━━━━━━━━━━━━━━━━━
🥗 保持维生素K摄入量稳定
📊 避免饮食中维生素K含量剧烈波动
🩺 如增加绿色蔬菜摄入,需告知医生
━━━━━━━━━━━━━━━━━━━━━━━━━━
是否继续添加该药物?
A. 我已了解风险,继续添加(需医生确认)
B. 取消添加,咨询医生
C. 查看更多详细信息
```
**处理流程:**
- 用户选择 A:继续添加药物,保存药物信息
- 用户选择 B:取消添加,不保存药物信息
- 用户选择 C:显示完整的相互作用详情
**无相互作用时:**
```
✅ 药物相互作用检查
━━━━━━━━━━━━━━━━━━━━━━━━━━
未检测到与当前用药的相互作用
检查结果:
• ✅ 无药物-药物相互作用
• ✅ 无药物-疾病冲突
• ✅ 无剂量问题
• ✅ 无饮食冲突
该药物可安全添加
```
**保存警示标记:**
如果用户选择继续添加但存在严重相互作用(D类或X类),在药物记录中添加警示标签:
```json
{
"id": "med_20251231123456789",
"name": "阿司匹林",
"warnings": [
{
"type": "drug_interaction",
"severity": "X",
"description": "与华法林存在绝对禁忌",
"date_identified": "2025-12-31T12:34:56.789Z"
}
],
"active": true,
...
}
```
#### 5. 保存药物信息
**文件路径格式:**
`data/medications/medications.json`
**JSON 数据结构:**
```json
{
"medications": [
{
"id": "med_20251231123456789",
"name": "阿司匹林",
"generic_name": "阿司匹林",
"dosage": {
"value": 100,
"unit": "mg"
},
"frequency": {
"type": "daily",
"times_per_day": 1,
"interval_days": 1
},
"schedule": [
{
"weekday": 1,
"time": "08:00",
"timing_label": "早餐后",
"dose": {
"value": 100,
"unit": "mg"
}
},
{
"weekday": 2,
"time": "08:00",
"timing_label": "早餐后",
"dose": {
"value": 100,
"unit": "mg"
}
},
{
"weekday": 3,
"time": "08:00",
"timing_label": "早餐后",
"dose": {
"value": 100,
"unit": "mg"
}
},
{
"weekday": 4,
"time": "08:00",
"timing_label": "早餐后",
"dose": {
"value": 100,
"unit": "mg"
}
},
{
"weekday": 5,
"time": "08:00",
"timing_label": "早餐后",
"dose": {
"value": 100,
"unit": "mg"
}
},
{
"weekday": 6,
"time": "08:00",
"timing_label": "早餐后",
"dose": {
"value": 100,
"unit": "mg"
}
},
{
"weekday": 7,
"time": "08:00",
"timing_label": "早餐后",
"dose": {
"value": 100,
"unit": "mg"
}
}
],
"instructions": "早餐后服用",
"notes": "",
"active": true,
"created_at": "2025-12-31T12:34:56.789Z",
"last_updated": "2025-12-31T12:34:56.789Z"
}
]
}
```
**多剂量示例(每天2次):**
```json
{
"id": "med_20251231123456790",
"name": "氨氯地平",
"dosage": {
"value": 5,
"unit": "mg"
},
"frequency": {
"type": "daily",
"times_per_day": 2,
"interval_days": 1
},
"schedule": [
{
"weekday": 1,
"time": "08:00",
"timing_label": "早晨",
"dose": {
"value": 5,
"unit": "mg"
}
},
{
"weekday": 1,
"time": "20:00",
"timing_label": "晚上",
"dose": {
"value": 5,
"unit": "mg"
}
},
{
"weekday": 2,
"time": "08:00",
"timing_label": "早晨",
"dose": {
"value": 5,
"unit": "mg"
}
},
{
"weekday": 2,
"time": "20:00",
"timing_label": "晚上",
"dose": {
"value": 5,
"unit": "mg"
}
},
{
"weekday": 3,
"time": "08:00",
"timing_label": "早晨",
"dose": {
"value": 5,
"unit": "mg"
}
},
{
"weekday": 3,
"time": "20:00",
"timing_label": "晚上",
"dose": {
"value": 5,
"unit": "mg"
}
}
... (继续至星期日,共14条记录)
],
"instructions": "早晚各服用一次",
"active": true,
"created_at": "2025-12-31T12:34:56.789Z",
"last_updated": "2025-12-31T12:34:56.789Z"
}
```
**每周一次示例:**
```json
{
"id": "med_20251231123456791",
"name": "维生素D",
"dosage": {
"value": 1000,
"unit": "IU"
},
"frequency": {
"type": "weekly",
"times_per_day": 1,
"interval_days": 7
},
"schedule": [
{
"weekday": 1,
"time": "08:00",
"timing_label": "周一早晨",
"dose": {
"value": 1000,
"unit": "IU"
}
}
],
"instructions": "每周一早晨服用",
"active": true,
"created_at": "2025-12-31T12:34:56.789Z",
"last_updated": "2025-12-31T12:34:56.789Z"
}
```
**隔天一次示例:**
```json
{
"id": "med_20251231123456792",
"name": "某种药物",
"dosage": {
"value": 50,
"unit": "mg"
},
"frequency": {
"type": "every_other_day",
"times_per_day": 1,
"interval_days": 2
},
"schedule": [
{
"weekday": 1,
"time": "08:00",
"timing_label": "早晨",
"dose": {
"value": 50,
"unit": "mg"
}
},
{
"weekday": 3,
"time": "08:00",
"timing_label": "早晨",
"dose": {
"value": 50,
"unit": "mg"
}
},
{
"weekday": 5,
"time": "08:00",
"timing_label": "早晨",
"dose": {
"value": 50,
"unit": "mg"
}
},
{
"weekday": 7,
"time": "08:00",
"timing_label": "早晨",
"dose": {
"value": 50,
"unit": "mg"
}
}
],
"instructions": "隔天服用(周一、三、五、日)",
"active": true,
"created_at": "2025-12-31T12:34:56.789Z",
"last_updated": "2025-12-31T12:34:56.789Z"
}
```
#### 5. 输出确认
```
✅ 药物已添加
药物信息:
━━━━━━━━━━━━━━━━━━━━━━━━━━
药物名称:阿司匹林
单次剂量:100 mg
用药频率:每天 1 次
用药计划:
━━━━━━━━━━━━━━━━━━━━━━━━━━
☀️ 早餐后 (08:00) - 100 mg
说明:早餐后服用
━━━━━━━━━━━━━━━━━━━━━━━━━━
💡 提示:使用 /medication log 已服用 阿司匹林 来记录用药
```
### 记录用药 (log)
#### 1. 识别用药状态
从自然语言中识别:
- **正常服用**:已服用、已服、服了、吃了、用了
- **漏服**:忘记、漏服、未服、没吃、没用
- **时间信息**:今天、昨天、具体时间(早上8点、下午2点等)
#### 2. 保存用药记录
**文件路径格式:**
`data/medication-logs/YYYY-MM/YYYY-MM-DD.json`
**JSON 数据结构:**
```json
{
"date": "2025-12-31",
"logs": [
{
"id": "log_20251231080000001",
"medication_id": "med_20251231123456789",
"medication_name": "阿司匹林",
"scheduled_time": "08:00",
"actual_time": "2025-12-31T08:15:00",
"status": "taken",
"dose": {
"value": 100,
"unit": "mg"
},
"notes": "",
"created_at": "2025-12-31T08:15:00.000Z"
}
]
}
```
**漏服记录示例:**
```json
{
"id": "log_20251231200000002",
"medication_id": "med_20251231123456790",
"medication_name": "氨氯地平",
"scheduled_time": "20:00",
"actual_time": null,
"status": "missed",
"dose": {
"value": 5,
"unit": "mg"
},
"notes": "忘记服用",
"created_at": "2025-12-31T22:00:00.000Z"
}
```
**状态值:**
- `taken`: 已服用
- `missed`: 漏服
- `skipped`: 跳过(医嘱停用)
- `delayed`: 延迟服用
#### 3. 输出确认
**正常用药:**
```
✅ 用药记录已添加
药物:阿司匹林 100 mg
计划时间:08:00 (早餐后)
实际时间:今天 08:15
状态:✅ 已服用
```
**漏服记录:**
```
⚠️ 漏服记录已添加
药物:氨氯地平 5 mg
计划时间:20:00 (晚上)
状态:❌ 漏服
💡 建议:如距原计划时间不足2小时,可立即补服。如已超过2小时,跳过本次剂量,按原计划继续用药。
```
### 查看药物列表 (list)
**输出格式:**
```
💊 我的药物列表
当前用药(3种):
━━━━━━━━━━━━━━━━━━━━━━━━━━
1. 阿司匹林 - 100 mg
━━━━━━━━━━━━━━━━━━━━━━━━━━
每天 1 次,早餐后服用
用药计划(每周7次):
周一 08:00 (早餐后) - 100 mg
周二 08:00 (早餐后) - 100 mg
周三 08:00 (早餐后) - 100 mg
周四 08:00 (早餐后) - 100 mg
周五 08:00 (早餐后) - 100 mg
周六 08:00 (早餐后) - 100 mg
周日 08:00 (早餐后) - 100 mg
2. 氨氯地平 - 5 mg
━━━━━━━━━━━━━━━━━━━━━━━━━━
每天 2 次,早晚服用
用药计划(每周14次):
周一 08:00 (早晨) - 5 mg
周一 20:00 (晚上) - 5 mg
周二 08:00 (早晨) - 5 mg
周二 20:00 (晚上) - 5 mg
... (周三至周日相同)
3. 二甲双胍 - 500 mg
━━━━━━━━━━━━━━━━━━━━━━━━━━
每天 3 次,餐后服用
用药计划(每周21次):
周一 08:00 (早餐后) - 500 mg
周一 12:30 (午餐后) - 500 mg
周一 18:30 (晚餐后) - 500 mg
周二 08:00 (早餐后) - 500 mg
周二 12:30 (午餐后) - 500 mg
周二 18:30 (晚餐后) - 500 mg
... (周三至周日相同)
已停用(1种):
━━━━━━━━━━━━━━━━━━━━━━━━━━
• 维生素C (2025-12-15停用)
```
### 查看用药历史 (history)
**今日历史输出格式:**
```
📋 今日用药记录
2025年12月31日
━━━━━━━━━━━━━━━━━━━━━━━━━━
✅ 阿司匹林 100 mg
━━━━━━━━━━━━━━━━━━━━━━━━━━
计划:08:00 (早餐后)
实际:08:15 ✅
✅ 氨氯地平 5 mg
━━━━━━━━━━━━━━━━━━━━━━━━━━
计划:08:00 (早晨)
实际:08:10 ✅
⏰ 二甲双胍 500 mg
━━━━━━━━━━━━━━━━━━━━━━━━━━
计划:12:30 (午餐后)
状态:待服用
✅ 氨氯地平 5 mg
━━━━━━━━━━━━━━━━━━━━━━━━━━
计划:20:00 (晚上)
实际:20:05 ✅
━━━━━━━━━━━━━━━━━━━━━━━━━━
今日计划:4 次
已服用:3 次
待服用:1 次
漏服:0 次
```
**本周历史输出格式:**
```
📋 本周用药记录
2025-12-25 至 2025-12-31
━━━━━━━━━━━━━━━━━━━━━━━━━━
阿司匹林 100 mg (每天1次)
━━━━━━━━━━━━━━━━━━━━━━━━━━
✅ ✅ ✅ ✅ ✅ ✅ ⏰
依从性:85.7% (6/7)
氨氯地平 5 mg (每天2次)
━━━━━━━━━━━━━━━━━━━━━━━━━━
✅✅ ✅✅ ❌⏰ ✅✅ ✅✅ ✅✅ ✅⏰
依从性:78.6% (11/14)
图例:✅已服用 ❌漏服 ⏰待服用
```
### 查看用药统计 (status)
**输出格式:**
```
📊 用药依从性统计
统计周期:本周 (2025-12-25 至 2025-12-31)
━━━━━━━━━━━━━━━━━━━━━━━━━━
总体情况:
━━━━━━━━━━━━━━━━━━━━━━━━━━
计划用药次数:28 次
实际服用次数:24 次
漏服次数:3 次
待服用:1 次
依从性:85.7% ✅
━━━━━━━━━━━━━━━━━━━━━━━━━━
分药物统计:
━━━━━━━━━━━━━━━━━━━━━━━━━━
阿司匹林 100 mg
━━━━━━━━━━━━━━━━━━━━━━━━━━
计划:7 次 | 已服:6 次 | 漏服:0 次
依从性:100% ✅
本周表现:优秀
氨氯地平 5 mg
━━━━━━━━━━━━━━━━━━━━━━━━━━
计划:14 次 | 已服:11 次 | 漏服:2 次
依从性:78.6% ⚠️
本周表现:良好,还需改进
二甲双胍 500 mg
━━━━━━━━━━━━━━━━━━━━━━━━━━
计划:7 次 | 已服:7 次 | 漏服:0 次
依从性:100% ✅
本周表现:优秀
依从性评价:
━━━━━━━━━━━━━━━━━━━━━━━━━━
✅ 优秀:≥ 90% (2种药物)
⚠️ 良好:70-89% (1种药物)
❌ 需改进:< 70% (0种药物)
💡 建议:
━━━━━━━━━━━━━━━━━━━━━━━━━━
• 氨氯地平漏服2次,建议设置用药提醒
• 早餐时段药物依从性较好
• 晚间药物偶有漏服,建议睡前准备
月度趋势:
━━━━━━━━━━━━━━━━━━━━━━━━━━
第1周:82.1%
第2周:87.5%
第3周:89.3%
本周:85.7%
趋势:📈 稳步提升
```
## 智能识别规则
### 药物名称识别
**常见药物类别示例:**
- 降压药:氨氯地平、硝苯地平、厄贝沙坦等
- 降糖药:二甲双胍、格列美脲、胰岛素等
- 心血管药:阿司匹林、氯吡格雷、他汀类等
- 维生素类:维生素D、维生素B族、维生素C等
- 补充剂:钙片、鱼油、益生菌等
### 剂量识别
**支持的单位:**
- 重量单位:mg、g、μg(微克)
- 容量单位:ml、L
- 国际单位:IU
- 计数单位:片、粒、包、袋、支、瓶、滴
**提取规则:**
- 数字 + 单位:100mg、5ml、2片、1粒
- 中文数字:一片、两粒、三包
### 频率识别
| 用户输入 | 标准化 | 次数/天 |
|---------|--------|---------|
| 每天1次、每日1次、一天1次 | daily | 1 |
| 每天2次、每日2次、一日两次、早晚各一次 | daily | 2 |
| 每天3次、每日3次、一日三次、三餐后 | daily | 3 |
| 每天4次、每日4次、一日四次 | daily | 4 |
| 每周1次、每周一次 | weekly | 0.14 |
| 每周2次、每周两次 | weekly | 0.29 |
| 隔天1次、隔日一次 | every_other_day | 0.5 |
| 按需服用、必要时 | as_needed | 0 |
### 时间识别
| 用户输入 | 标准时间 | 时段 |
|---------|---------|------|
| 早餐前、早饭前、晨起 | 07:00 | 早晨 |
| 早餐后、早饭后、饭后(早餐) | 08:00 | 早晨 |
| 午餐前、午饭前 | 11:30 | 中午 |
| 午餐后、午饭后 | 12:30 | 中午 |
| 晚餐前、晚饭前 | 17:30 | 晚上 |
| 晚餐后、晚饭后 | 18:30 | 晚上 |
| 睡前、临睡前 | 21:00 | 夜间 |
| 起床后、晨起 | 07:00 | 早晨 |
| 早晨、早上 | 08:00 | 早晨 |
| 中午、下午 | 12:00 | 中午 |
| 晚上、夜间 | 20:00 | 晚上 |
### 用药状态识别
**已服用关键词:**
- 已服用、已服、服了、吃了、用了、已用药
- 完成、已完成、按时服了
**漏服关键词:**
- 忘记、漏服、未服、没吃、没用、忘记吃
- 错过、没按时
## 数据结构更新
在全局索引 `data/index.json` 中添加:
```json
{
"medications": [
{
"id": "med_20251231123456789",
"name": "阿司匹林",
"dosage_value": 100,
"dosage_unit": "mg",
"frequency_type": "daily",
"file_path": "data/medications/medications.json",
"active": true,
"created_at": "2025-12-31T12:34:56.789Z"
}
],
"medication_logs": [
{
"id": "log_20251231080000001",
"date": "2025-12-31",
"medication_id": "med_20251231123456789",
"medication_name": "阿司匹林",
"status": "taken",
"file_path": "data/medication-logs/2025-12/2025-12-31.json"
}
]
}
```
## 用药依从性计算
**依从性百分比 = (实际服用次数 / 计划服用次数) × 100%**
**依从性等级:**
- ✅ **优秀**:≥ 90%
- ⚠️ **良好**:70% - 89%
- ❌ **需改进**:< 70%
**注意:**
- 待服用状态不计入统计
- 医嘱停用的不计入漏服
- 按需用药不计算依从性
## 漏服处理建议
**漏服处理规则:**
1. **发现及时(< 计划时间2小时)**
- 建议立即补服
- 记录为"延迟服用"状态
2. **发现较晚(≥ 计划时间2小时)**
- 一般建议跳过本次剂量
- 按原计划继续下次用药
- 记录为"漏服"状态
3. **特殊药物需遵医嘱**
- 某些药物(如口服避孕药)有特殊漏服处理规则
- 建议咨询医生或药师
## 注意事项
- 本系统仅供个人用药记录,不能替代专业医疗建议
- 添加药物前请确认药物名称、剂量准确无误
- 如有疑问,请咨询医生或药师
- 定期整理药物列表,停用已结束的药物
- 所有数据仅保存在本地
- 重要药物请与医生分享用药记录
## 示例用法
```
# 添加每日一次的药物
/medication add 阿司匹林 100mg 每天1次 早餐后
# 添加每日两次的药物
/medication add 氨氯地平 5mg 每天早晚各一次
# 添加每日三次的药物
/medication add 二甲双胍 500mg 每天3次 餐后服用
# 添加每周一次的药物
/medication add 维生素D 1000IU 每周1次
# 记录已用药
/medication log 已服用 阿司匹林
/medication log 阿司匹林 已服
# 记录漏服
/medication log 忘记服用 氨氯地平
/medication log 氨氯地平 漏服
# 查看药物列表
/medication list
# 查看今日用药历史
/medication history today
# 查看本周统计
/medication status week
```
## 错误处理
- **药物信息为空**: "请提供药物信息,例如:/medication add 阿司匹林 100mg 每天1次"
- **药物已存在**: "该药物已存在,如需修改请先删除原药物"
- **无法识别剂量**: "无法识别剂量信息,请确认包含剂量和单位(如:100mg)"
- **无法识别频率**: "无法识别用药频率,请明确说明每天或每周服用几次"
- **无记录**: "暂无用药记录"
- **药物不存在**: "未找到该药物,请先添加药物"
- **存储失败**: "保存记录失败,请检查存储空间"Quick Install
$
npx ai-builder add command huifer/medicationDetails
- Type
- command
- Author
- huifer
- Slug
- huifer/medication
- Created
- 0mo ago