中医规培生排班表自动生成小助手
Overview
本技能根据「规培生名单 + 规培日期时间段」一键生成可打印的 Excel 排班表,覆盖中医规培生日常药房轮岗与周末业务学习。所有排班规则(住培生标注、日期-星期映射、六班次均衡、周末交替学习、隔周插入名录列)均按固定流程自动执行,确定性、可复现。
触发条件
用户消息同时满足以下两点时启用本技能:
- 出现指令短语:"生成规培生排班表"(或语义等价的"帮我排规培生班""做一份规培排班表"等)。
- 提供(或随后补充)两份必要输入:一份中医规培生名单 与 一段规培日期时间段。
若缺少任一项,先向用户收集,再运行脚本。
需要向用户收集的输入
运行脚本前,确认以下信息齐备;可让用户直接以自然语言给出,再由本技能解析为 JSON:
- 规培生名单:每人一行,姓名即可。需明确指出其中哪些是住培生(住培生名字后自动加"(住)")。
- 若用户未按住/非住区分,主动询问"名单里哪些是住培生?未说明的默认按非住培生处理。"
- 日期时间段:起始日期与结束日期。支持
2026-01-06、2026/1/6、1月6日(需另给年份)等写法。 - 年份(当日期用"M月D日"写法、未含年份时必填)。
- 可选偏好(有默认值,用户未指定则沿用):
- 六个班次名称及轮换顺序(默认见下文)。
- 周末学习书目(默认《中药鉴定学》《中药学》交替)。
- 名录列插入节奏(默认
odd:奇数周之后插入)。
执行流程
按 scripts/generate_schedule.py 的固定流程执行,不要手工拼表:
- 标注住培生:在名单中每位住培生姓名后追加 "(住)"。非住培生保持原样。
- 日期映射星期:将时间段内每一天映射到星期(周一~周日)。例如 2026-01-06 为周二。
- 构建表格结构(Excel):
- 第一列:首行 A1="姓名",其下各行依次填入规培生名(含"(住)")。
- 排班区:第 1 行为日期(如"1月6日"),第 2 行为星期(如"周二"),数据从第 3 行起。
- 周六、周日合并同格:横向合并两列,第 1 行显示"1月12日-1月13日",第 2 行显示"周六-周日"。 - 工作日排班(周一~周五):将六个班次依次、均衡地安排给每位规培生。
- 六个班次(默认轮换顺序):中药房5号窗口加药 → 中药房5号窗口核发 → 中药房9号窗口加药 → 中药房9号窗口核发 → 西成药房 → 中药仓库验收学习。
- 约束:每人班次天数均衡(差 ±1 可接受);同日一人最多一班;同日尽量不同班;同一人同一班次须连续(不可间断)。
- 算法见references/algorithm.md:把全部工作日按日历顺序均分为 6 个连续块,每位规培生按各自轮换偏移认领,天然满足上述全部约束。 - 周末排班:每个周末全体规培生同时学《中药鉴定学》或《中药学》,逐周末交替(首个周末《中药鉴定学》)。周末格内每位规培生均填同一学习内容。
- 隔周插入名录列:每隔一周,在"周末列"与"下一周一列"之间插入一列,首行与第 2 行均写"姓名",其下重排规培生名录(与首列一致)。默认在奇数周(第 1、3、5…周)之后插入;最后一周不插(其后无周一)。
运行方式
脚本依赖 openpyxl。若环境中尚无该库,先安装:
pip install openpyxl
将收集到的输入写成 JSON 配置文件(参考 references/sample_config.json),再执行:
python <skill_dir>/scripts/generate_schedule.py --config config.json --output 排班表.xlsx
参数:
--config:配置 JSON 路径(必填)。--output:输出 xlsx 路径(必填)。--year:可选,覆盖配置中的年份。
JSON 字段:
{
"year": 2026,
"start_date": "2026-01-06",
"end_date": "2026-02-28",
"trainees": [
{"name": "张明", "resident": true},
{"name": "李华"}
],
"shifts": ["中药房5号窗口加药", "中药房5号窗口核发", "中药房9号窗口加药", "中药房9号窗口核发", "西成药房", "中药仓库验收学习"],
"study_subjects": ["《中药鉴定学》", "《中药学》"],
"checkpoint": "odd"
}
checkpoint 取值:"odd"(默认,奇周后插入)/ "even"(偶周后)/ "none"(不插)/ 显式周号数组如 [1,3,5]。
输出
- 一个
.xlsx文件:已设横向、适应一页宽、每页重复表头两行与姓名列、冻结首列与表头,可直接打印。 - 控制台打印摘要(人数、住培生数、日期范围、周数、工作日天数、周末数、插入名录列数)。
- 将生成的 xlsx 通过
present_files交付用户,并简要说明排班规则已满足的要点。
注意事项
- 当规培生人数 ≤ 6 时,同日六班次可做到零重复;人数 > 6 时,因班次仅 6 种,同日必然出现重复,属"尽量不同班"范畴内的理论最小冲突,无需人工干预。
- 时间段跨周末不完整(如首周从周三起、末周止于周五)时,脚本会自动跳过范围外的日期,仅排范围内的工作日与周末。
- 本表为自动化起草,最终排班须经带教老师/药师人工复核后使用。