commandby huifer

Cycle

女性健康周期追踪和症状管理

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

Installs to .claude/commands/cycle.md

# 女性健康周期追踪

追踪月经周期、PMS症状、排卵期预测,提供个性化健康洞察。

## 操作类型

### 1. 记录周期开始 - `start`

记录月经开始日期,自动计算预测日期。

**参数说明:**
- `description`: 周期描述(可选),自然语言描述
- `date`: 开始日期(可选),格式 YYYY-MM-DD,默认为今天

**示例:**
```
/cycle start 今天来月经了
/cycle start 2025-12-28
/cycle start 这个月28号
/cycle start 记录月经开始 12月28日 腹痛
```

**执行步骤:**

#### 1. 解析输入

从自然语言中提取:
- **日期信息**:今天/指定日期
- **症状关键词**:腹痛、腰酸、头痛等
- **流量描述**:量很大、正常、量少等

#### 2. 验证输入

**检查项:**
- 日期不能是未来日期
- 如果有未结束的周期,提示先结束
- 验证日期格式

**错误处理:**
```
⚠️ 检测到未结束的周期

当前周期:2025年11月28日开始
提示:请先使用 /cycle end 结束当前周期
```

#### 3. 创建周期记录

**生成 cycle_id**:`cycle_YYYYMMDD`
- 示例:`cycle_20251228`

**周期数据结构:**
```json
{
  "cycle_id": "cycle_20251228",
  "period_start": "2025-12-28",
  "period_end": null,
  "cycle_length": null,
  "period_length": null,
  "flow_pattern": {},
  "pms_symptoms": {
    "start_date": null,
    "symptoms": {}
  },
  "daily_logs": [],
  "ovulation_date": null,
  "predictions": {},
  "notes": "",
  "created_at": "2025-12-28T08:00:00.000Z",
  "completed": false
}
```

#### 4. 计算预测日期

**算法:**

1. **获取历史周期数据**:从 `cycle-tracker.json` 读取已完成的周期
2. **计算平均周期长度**:使用最近6个周期
3. **预测下次月经**:`period_start + average_cycle_length`
4. **预测排卵日期**:`next_period - 14 days`
5. **计算易孕期**:`ovulation_date - 5 days` 至 `ovulation_date + 1 day`

**默认值(无历史数据):**
- 平均周期长度:28天
- 平均经期长度:5天
- 排卵日期:下次月经前14天

#### 5. 更新数据文件

**文件 1**:`data/cycle-tracker.json`
```json
{
  "cycles": [
    // ... 添加新周期到数组
  ],
  "current_cycle": {
    "period_start": "2025-12-28",
    "period_end": null,
    "cycle_length": null,
    "predicted_ovulation": "2026-01-11",
    "predicted_next_period": "2026-01-25",
    "days_since_start": 0
  },
  "statistics": {
    // ... 更新统计数据
  },
  "predictions": {
    "next_period": "2026-01-25",
    "ovulation_date": "2026-01-11",
    "fertile_window_start": "2026-01-06",
    "fertile_window_end": "2026-01-12",
    "confidence": "low"
  }
}
```

**文件 2**:`data/周期记录/YYYY-MM/YYYY-MM-DD_周期记录.json`
```json
{
  "id": "cycle_20251228",
  "period_start": "2025-12-28",
  "period_end": null,
  "created_at": "2025-12-28T08:00:00.000Z",
  "initial_symptoms": ["腹痛"],
  "daily_logs": [],
  "metadata": {
    "completed": false
  }
}
```

#### 6. 输出确认

```
✅ 周期记录已创建

周期信息:
━━━━━━━━━━━━━━━━━━━━━━━━━━
本次月经开始:2025年12月28日

预测信息:
━━━━━━━━━━━━━━━━━━━━━━━━━━
预计下次月经:2026年1月25日
预计排卵日期:2026年1月11日
易孕期:1月6日 - 1月12日

当前状态:
━━━━━━━━━━━━━━━━━━━━━━━━━━
周期第:1天
阶段:月经期

预测可信度:基础(基于医学平均值28天)
━━━━━━━━━━━━━━━━━━━━━━━━━━
💡 提示:继续记录周期数据,预测将越来越准确

数据已保存至:data/周期记录/2025-12/2025-12-28_周期记录.json

⚠️ 重要声明:
本系统仅供周期追踪和健康参考,不能替代专业医疗建议。
如遇月经周期突然变得不规律、经量异常增多或严重痛经等情况,请及时就医。
```

---

### 2. 记录周期结束 - `end`

记录月经结束日期,完成周期统计。

**参数说明:**
- `date`: 结束日期(可选),格式 YYYY-MM-DD,默认为今天

**示例:**
```
/cycle end 今天结束了
/cycle end 2026-01-01
/cycle end 1月1日结束
```

**执行步骤:**

#### 1. 验证当前周期

**检查项:**
- 是否存在活跃周期
- 结束日期必须在开始日期之后
- 结束日期不能是未来日期

#### 2. 计算周期数据

**经期长度**:`end_date - start_date + 1`

**周期长度**:
- 如果有上一个周期:`current_start - previous_start`
- 如果没有:使用用户设置的平均值

**流量模式**:从 daily_logs 汇总

#### 3. 完成周期记录

**更新周期数据:**
```json
{
  "cycle_id": "cycle_20251228",
  "period_start": "2025-12-28",
  "period_end": "2026-01-01",
  "cycle_length": 28,
  "period_length": 5,
  "completed": true,
  "last_updated": "2026-01-01T20:00:00.000Z"
}
```

#### 4. 更新统计数据

**重新计算:**
- 平均周期长度(最近6个周期)
- 平均经期长度
- 周期规律度评分
- 常见症状统计

**规律度计算:**
```javascript
function calculateRegularityScore(cycles) {
  const lengths = cycles.map(c => c.cycle_length);
  const avg = lengths.reduce((a, b) => a + b, 0) / lengths.length;
  const variance = lengths.reduce((a, b) =>
    a + Math.pow(b - avg, 2), 0) / lengths.length;
  const stdDev = Math.sqrt(variance);
  const score = Math.max(0, 1 - (stdDev / 7));

  return {
    score: Math.round(score * 100) / 100,
    stdDev: Math.round(stdDev * 10) / 10,
    average: Math.round(avg * 10) / 10
  };
}
```

#### 5. 重置当前周期

```json
{
  "current_cycle": null
}
```

#### 6. 输出确认

```
✅ 周期已完成

周期统计:
━━━━━━━━━━━━━━━━━━━━━━━━━━
开始日期:2025年12月28日
结束日期:2026年1月1日
经期长度:5天
周期长度:28天

流量模式:
━━━━━━━━━━━━━━━━━━━━━━━━━━
第1天:大量
第2天:大量
第3天:中等
第4天:少量
第5天:少量

累计统计(基于6个周期):
━━━━━━━━━━━━━━━━━━━━━━━━━━
平均周期长度:28.5天
平均经期长度:5.2天
周期规律度:92% (非常规律) ✅

下次预测:
━━━━━━━━━━━━━━━━━━━━━━━━━━
预计下次月经:2026年1月26日
预计排卵日期:2026年1月12日
易孕期:1月7日 - 1月13日

预测可信度:高 ✅
━━━━━━━━━━━━━━━━━━━━━━━━━━

数据已归档至:data/周期记录/2025-12/2025-12-28_周期记录.json
```

---

### 3. 记录每日日志 - `log`

记录每日流量、症状、情绪等详细信息。

**参数说明:**
- `description`: 日志内容(必填),自然语言描述
- `date`: 日志日期(可选),格式 YYYY-MM-DD,默认为今天

**示例:**
```
/cycle log 今天量很大 腹痛
/cycle log 第二天 中等量 乳房胀痛 情绪低落
/cycle log 经前头痛 经期前3天
/cycle log 流量少 腰酸 乏力
```

**执行步骤:**

#### 1. 解析日志内容

**提取信息:**

**流量强度识别:**
| 关键词 | 强度级别 |
|--------|---------|
| 极多、非常多、特别多、量大 | very_heavy (5) |
| 大、很多、量很大 | heavy (4) |
| 中等、正常、一般 | medium (3) |
| 少、量少、不多 | light (2) |
| 极少、点滴、几乎不用 | spotting (1) |

**症状识别:**
- **常见症状**:腹痛、腰酸、头痛、乳房胀痛、情绪波动、乏力、腹胀、腹泻、便秘等
- **情绪状态**:正常、低落、焦虑、易怒、烦躁、平静等
- **能量水平**:高、中、低

#### 2. 确定周期阶段

**阶段划分:**
- **menstrual** (月经期): 第1-5天
- **follicular** (卵泡期): 第6-13天
- **ovulation** (排卵期): 第14-16天
- **luteal** (黄体期): 第17-28天

**计算规则:**
```javascript
function getCyclePhase(dayNumber, cycleLength) {
  if (dayNumber <= 5) return 'menstrual';
  if (dayNumber <= 13) return 'follicular';
  if (dayNumber <= 16) return 'ovulation';
  return 'luteal';
}
```

#### 3. 创建日志记录

**数据结构:**
```json
{
  "id": "log_20251228001",
  "date": "2025-12-28",
  "cycle_day": 1,
  "phase": "menstrual",
  "flow": {
    "intensity": "heavy",
    "description": "量很大"
  },
  "symptoms": ["腹痛", "腰酸"],
  "mood": "低落",
  "energy_level": "low",
  "medication_taken": [],
  "notes": "",
  "created_at": "2025-12-28T20:00:00.000Z"
}
```

#### 4. 更新周期数据

**更新 flow_pattern:**
```json
{
  "flow_pattern": {
    "day_1": "heavy",
    "day_2": "medium",
    ...
  }
}
```

**更新 daily_logs 数组**

#### 5. 集成症状记录(可选)

**创建 `/symptom` 记录:**
```json
// data/症状记录/2025-12/2025-12-28_腹痛.json
{
  "cycle_context": {
    "related": true,
    "cycle_id": "cycle_20251228",
    "phase": "menstrual",
    "cycle_day": 1
  }
}
```

#### 6. 输出确认

```
✅ 每日日志已记录

日志信息:
━━━━━━━━━━━━━━━━━━━━━━━━━━
日期:2025年12月28日
周期第:1天
阶段:月经期

流量:大量 (4级)
症状:腹痛、腰酸
情绪:低落
能量:低

周期进度:
━━━━━━━━━━━━━━━━━━━━━━━━━━
本次周期第 1/5 天(预计)
距离排卵:还有 13 天
距离下次月经:还有 27 天

💡 提示:
经期腹痛常见,建议注意保暖、避免剧烈运动。如疼痛严重可咨询医生。

数据已保存至:data/周期记录/2025-12/2025-12-28_周期记录.json
```

---

### 4. 排卵期预测 - `predict`

显示排卵期预测和易孕期信息。

**参数说明:**
- `mode`: 预测模式(可选),如"备孕模式"

**示例:**
```
/cycle predict
/cycle predict 备孕模式
/cycle predict 下次排卵期
```

**执行步骤:**

#### 1. 读取周期数据

**检查是否有足够的周期数据:**
- < 3个周期:低可信度
- 3-5个周期:中等可信度
- 6-11个周期:高可信度
- ≥12个周期:非常高可信度

#### 2. 计算预测

**算法:**

1. **平均周期长度**:`average(recent 6 cycles)`
2. **下次月经**:`last_period_start + average_cycle_length`
3. **排卵日期**:`next_period - 14 days`
4. **易孕期**:`ovulation - 5 days` 至 `ovulation + 1 day`

#### 3. 计算可信度

**可信度评估:**
| 周期数 | 规律度 | 可信度 |
|--------|--------|--------|
| < 3 | 任何 | 低 |
| 3-5 | ≥0.6 | 中等 |
| 6-11 | ≥0.8 | 高 |
| ≥12 | ≥0.9 | 非常高 |

#### 4. 输出预测

**标准输出:**
```
🔮 排卵期预测

基于最近6个周期数据:
━━━━━━━━━━━━━━━━━━━━━━━━━━
平均周期长度:28.5天
平均经期长度:5.2天
周期规律度:92% (非常规律)

预测结果:
━━━━━━━━━━━━━━━━━━━━━━━━━━
下次月经:2026年1月25日
排卵日期:2026年1月11日
易孕期开始:2026年1月6日
易孕期结束:2026年1月12日

当前状态:
━━━━━━━━━━━━━━━━━━━━━━━━━━
今天:2025年12月31日
距离排卵:还有 11 天
距离下次月经:还有 25 天
当前阶段:卵泡期

可信度:高 ✅
━━━━━━━━━━━━━━━━━━━━━━━━━━

备孕建议:
━━━━━━━━━━━━━━━━━━━━━━━━━━
• 易孕期每天同房可提高受孕几率
• 建议在排卵日前2天至排卵日后1天同房
• 保持健康生活方式,补充叶酸
• 避免烟酒,减少咖啡因摄入
```

**备孕模式输出:**
```
🔮 排卵期预测(备孕模式)

基于最近6个周期数据:
━━━━━━━━━━━━━━━━━━━━━━━━━━
平均周期长度:28.5天
周期规律度:92% (非常规律)
可信度:高 ✅

排卵预测:
━━━━━━━━━━━━━━━━━━━━━━━━━━
预计排卵日期:2026年1月11日

易孕期详细日程:
━━━━━━━━━━━━━━━━━━━━━━━━━━
1月6日(易孕第1天):受孕概率 10%
1月7日(易孕第2天):受孕概率 15%
1月8日(易孕第3天):受孕概率 20%
1月9日(易孕第4天):受孕概率 25%
1月10日(易孕第5天):受孕概率 30%
1月11日(排卵日):受孕概率 35% ⭐
1月12日(易孕第7天):受孕概率 15%

最佳受孕窗口:
━━━━━━━━━━━━━━━━━━━━━━━━━━
1月9日 - 1月11日(排卵前2天至排卵日)

备孕建议:
━━━━━━━━━━━━━━━━━━━━━━━━━━
✅ 提前3个月补充叶酸(400-800μg/天)
✅ 易孕期保持适度频繁的同房频率
✅ 同房后躺卧15-30分钟
✅ 保持健康体重和规律作息
✅ 避免高温环境和剧烈运动

⚠️ 注意事项:
━━━━━━━━━━━━━━━━━━━━━━━━━━
• 备孕超过12个月未成功,建议咨询医生
• 年龄≥35岁,备孕超过6个月建议就医
• 周期不规律可能影响排卵预测准确性

当前距离排卵期还有 11 天
建议从1月6日开始增加同房频率
```

---

### 5. 查看历史 - `history`

查看周期历史记录。

**参数说明:**
- `count`: 显示数量(可选),默认显示最近6个周期

**示例:**
```
/cycle history
/cycle history 6
/cycle history 12
```

**执行步骤:**

#### 1. 读取周期数据

#### 2. 格式化输出

```
📋 周期历史记录

最近6个周期:
━━━━━━━━━━━━━━━━━━━━━━━━━━

1. 2025年12月28日 - 2026年1月1日
   ━━━━━━━━━━━━━━━━━━━━━━━━━━
   经期长度:5天
   周期长度:28天
   主要症状:腹痛、腰酸
   流量模式:大-大-中-少-少

2. 2025年11月30日 - 12月4日
   ━━━━━━━━━━━━━━━━━━━━━━━━━━
   经期长度:5天
   周期长度:28天
   主要症状:乳房胀痛、头痛
   流量模式:大-大-中-中-少

3. 2025年11月2日 - 11月6日
   ━━━━━━━━━━━━━━━━━━━━━━━━━━
   经期长度:5天
   周期长度:29天
   主要症状:腹痛、乏力
   流量模式:大-中-中-少-少

... (继续显示)

统计摘要:
━━━━━━━━━━━━━━━━━━━━━━━━━━
平均周期长度:28.5天
平均经期长度:5.2天
最短周期:27天 | 最长周期:31天
规律度评分:92% (非常规律)
```

---

### 6. 分析模式 - `analyze`

分析症状模式和周期趋势。

**示例:**
```
/cycle analyze
```

**执行步骤:**

#### 1. 分析症状模式

**统计各阶段症状:**
- 计算每个症状在各阶段的出现频率
- 识别高频症状(≥60%)

#### 2. 分析流量模式

**汇总流量数据:**
- 每天平均流量强度
- 识别流量高峰日

#### 3. 生成健康洞察

**基于数据分析生成建议**

#### 4. 输出分析

```
📊 周期模式分析

周期统计:
━━━━━━━━━━━━━━━━━━━━━━━━━━
已追踪周期:6个
平均周期长度:28.5天
平均经期长度:5.2天
周期范围:27-31天
规律度评分:92% (非常规律) ✅

症状模式分析:
━━━━━━━━━━━━━━━━━━━━━━━━━━

黄体期症状(经期前一周):
  • 乳房胀痛 - 83% (5/6周期) 🔥
  • 情绪波动 - 67% (4/6周期) 🔥
  • 头痛 - 50% (3/6周期)
  • 腹胀 - 33% (2/6周期)

月经期症状:
  • 腹痛 - 100% (6/6周期) 🔥
  • 腰酸 - 67% (4/6周期) 🔥
  • 乏力 - 50% (3/6周期)
  • 腹胀 - 33% (2/6周期)

卵泡期症状(经期后一周):
  • 无明显症状

流量模式分析:
━━━━━━━━━━━━━━━━━━━━━━━━━━
第1天:大量 (4.2/5) - 流量高峰日
第2天:大量 (4.0/5)
第3天:中等 (3.1/5)
第4天:少量 (2.3/5)
第5天:少量 (2.0/5)

健康洞察:
━━━━━━━━━━━━━━━━━━━━━━━━━━
✅ 周期非常规律,易于预测
✅ 经期长度正常(5天左右)
✅ PMS症状较轻,主要表现为乳房胀痛和情绪波动
✅ 流量模式正常,前2天量较大后逐渐减少

⚠️ 需要关注:
━━━━━━━━━━━━━━━━━━━━━━━━━━
• 头痛多在经前2-3天出现(50%周期),可考虑提前预防
• 腹痛在月经期100%出现,建议注意保暖和休息

个性化建议:
━━━━━━━━━━━━━━━━━━━━━━━━━━
1. 经前一周:
   • 减少咖啡因和盐分摄入,缓解乳房胀痛
   • 规律作息,适度运动,改善情绪波动
   • 提前准备止痛药物(如需要)

2. 月经期:
   • 注意保暖,避免受凉
   • 充分休息,避免剧烈运动
   • 温热饮食,缓解腹痛

3. 经期后:
   • 补充富含铁的食物(红肉、菠菜等)
   • 保持健康生活方式

⚠️ 重要声明:
本系统仅供周期追踪和健康参考,不能替代专业医疗建议。
如症状加重或出现异常,请及时就医。
```

---

### 7. 当前状态 - `status`

显示当前周期状态。

**示例:**
```
/cycle status
```

**执行步骤:**

#### 1. 读取当前周期

#### 2. 计算当前状态

**周期天数**:`today - period_start + 1`

**当前阶段**:根据周期天数判断

#### 3. 输出状态

**有活跃周期时:**
```
📍 当前周期状态

当前周期:
━━━━━━━━━━━━━━━━━━━━━━━━━━
开始日期:2025年12月28日
当前日期:2025年12月31日
周期第:4天
阶段:月经期

今日预测:
━━━━━━━━━━━━━━━━━━━━━━━━━━
预计经期结束:2026年1月1日(还有2天)
预计排卵日期:2026年1月11日(还有11天)
预计下次月经:2026年1月25日(还有25天)

近期记录:
━━━━━━━━━━━━━━━━━━━━━━━━━━
12-28: 大量,腹痛、腰酸
12-29: 大量,腹痛
12-30: 中等,乏力
12-31: 中等,无特殊症状

本次周期症状总结:
━━━━━━━━━━━━━━━━━━━━━━━━━━
最常见:腹痛 (3/4天)
次要症状:腰酸、乏力
情绪:正常为主,1天低落
```

**无活跃周期时:**
```
📍 当前周期状态

当前无活跃周期
━━━━━━━━━━━━━━━━━━━━━━━━━━

最近周期:2025年11月30日 - 12月4日

下次预测:
━━━━━━━━━━━━━━━━━━━━━━━━━━
预计下次月经:2025年12月28日(还有3天)
预计排卵日期:2025年12月14日
易孕期:12月9日 - 12月15日

💡 提示:
接近预计月经日期,注意身体变化。
月经开始后可使用 /cycle start 记录。
```

---

### 8. 配置设置 - `settings`

配置个人设置。

**参数说明:**
- `setting`: 设置项(格式:key=value)

**示例:**
```
/cycle settings cycle-length=28
/cycle settings period-length=5
/cycle settings pregnancy-planning=true
/cycle settings help
```

**支持的设置项:**

| 设置项 | 说明 | 默认值 |
|--------|------|--------|
| cycle-length | 平均周期长度(天) | 28 |
| period-length | 平均经期长度(天) | 5 |
| pregnancy-planning | 备孕模式(true/false) | false |

**执行步骤:**

#### 1. 解析设置项

#### 2. 验证设置值

**cycle-length**:21-40天
**period-length**:2-10天

#### 3. 更新设置

```json
{
  "user_settings": {
    "average_cycle_length": 28,
    "average_period_length": 5,
    "pregnancy_planning": true
  }
}
```

#### 4. 输出确认

```
✅ 设置已更新

当前设置:
━━━━━━━━━━━━━━━━━━━━━━━━━━
平均周期长度:28天
平均经期长度:5天
备孕模式:开启 ✅

💡 提示:
备孕模式已开启,预测信息将包含备孕相关建议。
```

**显示所有设置:**
```
📝 当前设置

周期设置:
━━━━━━━━━━━━━━━━━━━━━━━━━━
平均周期长度:28天
平均经期长度:5天

模式设置:
━━━━━━━━━━━━━━━━━━━━━━━━━━
备孕模式:关闭

提示:
━━━━━━━━━━━━━━━━━━━━━━━━━━
使用 /cycle settings key=value 来修改设置
支持的设置项:
  • cycle-length=N (平均周期长度,21-40天)
  • period-length=N (平均经期长度,2-10天)
  • pregnancy-planning=true/false (备孕模式)
```

## 数据结构

### 主文件:data/cycle-tracker.json

```json
{
  "created_at": "2025-12-31T12:00:00.000Z",
  "last_updated": "2025-12-31T12:00:00.000Z",
  "user_settings": {
    "average_cycle_length": 28,
    "average_period_length": 5,
    "pregnancy_planning": false
  },
  "cycles": [
    {
      "cycle_id": "cycle_20251228",
      "period_start": "2025-12-28",
      "period_end": "2026-01-01",
      "cycle_length": 28,
      "period_length": 5,
      "flow_pattern": {
        "day_1": "heavy",
        "day_2": "heavy",
        "day_3": "medium",
        "day_4": "light",
        "day_5": "light"
      },
      "pms_symptoms": {
        "start_date": "2025-12-24",
        "symptoms": {
          "-4 days": ["头痛", "乳房胀痛"],
          "-3 days": ["情绪波动"]
        }
      },
      "daily_logs": [
        {
          "id": "log_20251228001",
          "date": "2025-12-28",
          "cycle_day": 1,
          "phase": "menstrual",
          "flow": {
            "intensity": "heavy",
            "description": "量很大"
          },
          "symptoms": ["腹痛", "腰酸"],
          "mood": "低落",
          "energy_level": "low",
          "medication_taken": [],
          "notes": "",
          "created_at": "2025-12-28T20:00:00.000Z"
        }
      ],
      "ovulation_date": "2026-01-12",
      "predictions": {},
      "notes": "",
      "created_at": "2025-12-28T08:00:00.000Z",
      "completed": true
    }
  ],
  "current_cycle": {
    "period_start": "2026-01-26",
    "period_end": null,
    "cycle_length": null,
    "predicted_ovulation": "2026-02-09",
    "days_since_start": 3
  },
  "statistics": {
    "total_cycles_tracked": 6,
    "average_cycle_length": 28.5,
    "cycle_length_range": [27, 31],
    "average_period_length": 5.2,
    "most_common_symptoms": {
      "luteal": ["乳房胀痛", "情绪波动"],
      "menstrual": ["腹痛", "腰酸"]
    },
    "regularity_score": 0.92
  },
  "predictions": {
    "next_period": "2026-02-23",
    "next_period_confidence": "high",
    "fertile_window_start": "2026-02-07",
    "fertile_window_end": "2026-02-12",
    "ovulation_date": "2026-02-09",
    "prediction_confidence": 0.87
  }
}
```

### 周期记录文件:data/周期记录/YYYY-MM/YYYY-MM-DD_周期记录.json

```json
{
  "id": "cycle_20251228",
  "period_start": "2025-12-28",
  "period_end": "2026-01-01",
  "cycle_length": 28,
  "period_length": 5,

  "daily_logs": [
    {
      "id": "log_20251228001",
      "date": "2025-12-28",
      "cycle_day": 1,
      "phase": "menstrual",
      "flow": {
        "intensity": "heavy",
        "description": "量很大,需要频繁更换"
      },
      "symptoms": ["腹痛", "腰酸", "乏力"],
      "mood": "低落",
      "energy_level": "low",
      "medication_taken": ["布洛芬"],
      "notes": ""
    }
  ],

  "pms_symptoms": {
    "start_date": "2025-12-24",
    "symptoms": {
      "-4 days": ["头痛", "乳房胀痛"],
      "-3 days": ["情绪波动", "食欲增加"],
      "-2 days": ["腹胀", "疲劳"],
      "-1 day": ["腹痛", "腰酸"]
    }
  },

  "ovulation_indicators": {
    "detected": false,
    "method": null,
    "date": null,
    "notes": ""
  },

  "metadata": {
    "created_at": "2025-12-28T08:00:00.000Z",
    "last_updated": "2026-01-01T20:00:00.000Z",
    "completed": true,
    "data_quality": "high"
  }
}
```

## 流量强度标准

| 级别 | 英文 | 中文 | 描述 |
|-----|------|------|------|
| 1 | spotting | 极少 | 几乎不需要护垫 |
| 2 | light | 少量 | 需要护垫,少量 |
| 3 | medium | 中等 | 正常量,需要卫生巾 |
| 4 | heavy | 大量 | 需要频繁更换 |
| 5 | very_heavy | 极多 | 需要夜间防护,可能影响活动 |

## 智能识别规则

### 流量强度识别

**大量 (heavy, 4级):**
- 关键词:大、很多、量很大、流量大、超多

**极多 (very_heavy, 5级):**
- 关键词:极大、特别多、非常多、巨多、严重

**中等 (medium, 3级):**
- 关键词:中等、正常、一般、还可以、标准

**少量 (light, 2级):**
- 关键词:少、量少、不多、小

**极少 (spotting, 1级):**
- 关键词:极少、点滴、一点点、几乎不用、几乎没有

### 症状识别

**常见症状列表:**
- **疼痛类**:腹痛、腰酸、头痛、乳房胀痛、关节痛
- **消化类**:腹胀、腹泻、便秘、恶心、食欲变化
- **情绪类**:情绪波动、易怒、焦虑、低落、烦躁
- **能量类**:乏力、疲劳、精力不足、嗜睡
- **其他**:失眠、皮肤变化、体重变化

### 情绪状态识别

**积极状态**:开心、愉快、平静、正常
**消极状态**:低落、焦虑、易怒、烦躁、抑郁
**中性状态**:一般、正常、还好

### 能量水平识别

**高能量**:精力充沛、有活力、好
**中能量**:正常、一般、还可以
**低能量**:乏力、疲劳、累、没精神

## 算法实现

### 周期长度计算

```javascript
function calculateAverageCycleLength(cycles) {
  if (cycles.length < 2) {
    return {
      average: 28,
      stdDev: 0,
      regularityScore: 0,
      confidence: 'low'
    };
  }

  // 使用最近6个周期
  const recentCycles = cycles.slice(-6).filter(c => c.completed);

  if (recentCycles.length === 0) {
    return { average: 28, stdDev: 0, regularityScore: 0, confidence: 'low' };
  }

  const lengths = recentCycles.map(c => c.cycle_length);
  const avg = lengths.reduce((a, b) => a + b, 0) / lengths.length;
  const variance = lengths.reduce((a, b) =>
    a + Math.pow(b - avg, 2), 0) / lengths.length;
  const stdDev = Math.sqrt(variance);
  const regularityScore = Math.max(0, 1 - (stdDev / 7));

  let confidence;
  if (recentCycles.length >= 12 && regularityScore >= 0.9) {
    confidence = 'very_high';
  } else if (recentCycles.length >= 6 && regularityScore >= 0.8) {
    confidence = 'high';
  } else if (recentCycles.length >= 3 && regularityScore >= 0.6) {
    confidence = 'medium';
  } else {
    confidence = 'low';
  }

  return {
    average: Math.round(avg * 10) / 10,
    stdDev: Math.round(stdDev * 10) / 10,
    regularityScore: Math.round(regularityScore * 100) / 100,
    confidence,
    sampleSize: recentCycles.length
  };
}
```

### 排卵期预测

```javascript
function predictOvulation(lastPeriodStart, cycleLength) {
  const nextPeriod = addDays(lastPeriodStart, cycleLength);
  const ovulationDate = subtractDays(nextPeriod, 14);
  const fertileWindowStart = subtractDays(ovulationDate, 5);
  const fertileWindowEnd = addDays(ovulationDate, 1);

  return {
    ovulationDate,
    fertileWindowStart,
    fertileWindowEnd,
    nextPeriod
  };
}

function addDays(date, days) {
  const result = new Date(date);
  result.setDate(result.getDate() + days);
  return result.toISOString().split('T')[0];
}

function subtractDays(date, days) {
  return addDays(date, -days);
}
```

### 规律度评估

```javascript
function getRegularityLabel(score) {
  if (score >= 0.9) return { label: '非常规律', emoji: '✅' };
  if (score >= 0.8) return { label: '规律', emoji: '✅' };
  if (score >= 0.6) return { label: '较规律', emoji: '⚠️' };
  if (score >= 0.4) return { label: '不太规律', emoji: '⚠️' };
  return { label: '不规律', emoji: '❌' };
}
```

## 与其他命令的集成

### 与 /symptom 集成

**自动创建症状记录:**

当使用 `/cycle log` 记录症状时,自动在 `/symptom` 中创建记录并添加周期上下文。

**cycle_context 字段:**
```json
{
  "cycle_context": {
    "related": true,
    "cycle_id": "cycle_20251228",
    "phase": "menstrual",
    "cycle_day": 1,
    "days_before_period": 0
  }
}
```

### 与 /medication 集成

**记录经期用药:**

当记录服用止痛药等药物时,添加周期上下文。

**cycle_context 字段:**
```json
{
  "cycle_context": {
    "related": true,
    "reason": "经期腹痛",
    "phase": "menstrual",
    "cycle_day": 1
  }
}
```

### 与 /report 集成

**周期健康章节:**

在综合健康报告中添加周期数据可视化,包括:
- 周期规律性折线图
- 症状分布饼图
- 流量模式柱状图
- 统计摘要卡片

## 数据结构更新

在全局索引 `data/index.json` 中添加:

```json
{
  "cycle_records": [
    {
      "id": "cycle_20251228",
      "period_start": "2025-12-28",
      "period_end": "2026-01-01",
      "cycle_length": 28,
      "file_path": "周期记录/2025-12/2025-12-28_周期记录.json"
    }
  ],
  "cycle_statistics": {
    "total_cycles": 6,
    "average_cycle_length": 28.5,
    "regularity_score": 0.92,
    "last_updated": "2025-12-31"
  }
}
```

## 错误处理

### 常见错误场景

| 场景 | 错误消息 | 建议 |
|------|---------|------|
| 缺少action参数 | 请指定操作类型<br>使用 /cycle help 查看帮助 | 显示用法示例 |
| 日期格式错误 | 日期格式错误,请使用 YYYY-MM-DD 格式 | 提供正确格式示例 |
| 无周期数据 | 暂无周期数据<br>请先使用 /cycle start 开始记录 | 引导开始记录 |
| 未结束周期冲突 | 检测到未结束的周期<br>请先使用 /cycle end 结束当前周期 | 提示先结束 |
| 未来日期 | 不能记录未来日期<br>请检查日期输入 | 验证当前日期 |
| 周期过于不规律 | 周期不规律(标准差>7天)<br>预测可能有较大误差,建议咨询医生 | 提供就医建议 |
| 设置值超出范围 | cycle-length 应在 21-40 天之间 | 提供有效范围 |

## 注意事项

- 本系统仅供周期追踪和健康参考,不能替代专业医疗建议
- 所有数据仅保存在本地,确保隐私安全
- 预测准确性随周期数据增加而提高
- 周期不规律时,建议结合其他方法(体温监测、排卵试纸)提高准确性
- 备孕超过12个月未成功,建议咨询医生
- 如有异常症状(严重痛经、经量过多、周期突然不规律等),请及时就医

## 示例用法

```
# 记录月经开始
/cycle start 今天来月经了

# 记录每日日志
/cycle log 今天量很大 腹痛
/cycle log 第二天 中等量 腰酸
/cycle log 经前头痛 经期前3天

# 记录月经结束
/cycle end 今天结束了

# 查看排卵期预测
/cycle predict
/cycle predict 备孕模式

# 查看当前状态
/cycle status

# 查看历史记录
/cycle history

# 分析模式
/cycle analyze

# 配置设置
/cycle settings cycle-length=29
/cycle settings pregnancy-planning=true
```

## 医学声明

**每次重要输出必须包含:**

```
⚠️ 重要声明

本系统仅供周期追踪和健康参考,不能替代专业医疗建议。

如遇以下情况,请及时就医:
━━━━━━━━━━━━━━━━━━━━━━━━━━
• 月经周期突然变得不规律(之前规律)
• 经量异常增多或经期延长(>7天)
• 严重痛经影响日常生活
• 非经期阴道出血
• 备孕超过12个月未成功
• 年龄≥35岁备孕超过6个月未成功
• 其他异常症状或疑虑

所有数据仅保存在本地,确保隐私安全。
```

Quick Install

$npx ai-builder add command huifer/cycle

Details

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