commandby huifer

Medication

管理用药计划和记录用药情况

Installs: 0
Used in: 1 repos
Updated: 0mo ago
$npx ai-builder add command huifer/medication

Installs 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/medication

Details

Type
command
Author
huifer
Slug
huifer/medication
Created
0mo ago