itinerary-doctorlisted
Install: claude install-skill redmouthcrow/itinerary-doctor
# 行程体检(itinerary-doctor)
把一份**已经存在的行程**变成一份**能落地的行程**:查时令、查预约、查封路、查每日驾驶强度,
在"机票和部分酒店已经订了"的约束下,算出**该退哪晚、该改期哪晚、该新订哪晚**,
并产出一份可直接转发客户的单文件交互路线图。
## 支持的输入形状(不要求格式统一)
用户拿到的行程形状千奇百怪,`parse_itinerary.py` 会自动识别,并把命中的策略写进输出:
| 输入 | 例子 | 策略 |
|---|---|---|
| 标准/英文/非标准表头表格 | `日期/路线/住宿`、`时间,安排`、`Date,Plan,Stay` | 表头映射 |
| 无表头表格 | `9月25日,抵达乌鲁木齐,全季酒店` | 按列位置猜 |
| 天序号+日期+内容 | `第1天,9月25日,抵达乌鲁木齐,全季酒店` | 按列位置猜 |
| Excel 日期序列号 | 单元格是 `46290` | 自动还原为 2026-09-25 |
| markdown 标题式 | `## Day 3 · 9月27日 🏔 布尔津 → 白哈巴` | 标题式 |
| 散文 / 微信聊天记录 | "9月25号到了乌鲁木齐先住一晚,26号去布尔津……" | 散文式(按日期切片) |
- 日期写法支持:`2026-09-25` / `2026年9月25日` / `9月25日` / `9/25` / `9.25` / `26号`(省略月份自动顺延)/ `第3天` / `Day 3` / `D3` / `第三天`。
- **`第 N 天` 必须配 `--start 2026-09-25`** 才能换算成真实日期。
- **截图 / 照片不能自动处理**:本 skill 不做 OCR,且很多 agent 环境的模型没有视觉能力。
让用户把图里的文字贴成文本(微信长按"提取文字"),或换有视觉能力的 agent 先转成文本。
- 自动判断不对劲时用 `--strategy table|heading|prose` 强制指定。
- 完整支持矩阵与限制见 `references/input-formats.md`;这层由 `tests/test_normalize.py` 锁住。
## 什么时候用
- 用户丢来一份行程表(Excel / 表格 / 截图 / 一段文字)问"这样安排合理吗"
- "9 月底去伊犁看草原值不值得"「国庆自驾北疆怎么排」这类**带具体日期**的行程判断
- 用户说"机票订了 9/25 的、酒店订了这几晚,现在想加一个 X,怎么调"
- 用户要"路线图 / 路书 / 行程海报"
**不要用**于:单纯的酒店比价、机票预订、实时导航、出境签证代办、无日期的泛泛攻略。
## 为什么需要它(不要只凭记忆回答)
行程类问题的错误几乎都来自**过期的实时信息**:缆车停运时刻、餐厅倒闭、限流规则、
季节性封路、节假日调休。公开案例里已经出现"按 AI 建议去了一个不存在的景点"这种事故。
本 skill 的做法是:**把判断建立在一份带来源和核实日期的约束库上,而不是模型记忆上。**
因此流程里"查约束库"这一步**不能跳过**。
## 工作流
```bash
# 0) 环境(零依赖,Python 标准库即可)
ls scripts/
python tests/run_all.py # 可选:全部回归测试(输入/渲染/季节/覆盖度)
# 1) 行程表 → Trip