医院药房三班倒排班表生成器
用途
为医院药房(门诊/急诊西药房、住院药房)等需 24 小时不间断值班的科室,按标准工时制(每日 8h、每周 ≤40h、每周至少休 1 天)编制三班倒(正常班/早班/中班/夜班)轮班表,输出含班次定义、4 周排班总表、每日在岗校验、工时统计、年假机制的可打印 HTML。
触发场景
- "帮我排个班/排班表/班表"
- "6 个人三班倒怎么排"
- "药房 24 小时值班排班"
- "夜班轮换 + 夜班后休 2 天"
- "标准工时制、周末双休轮换"
- "白天 N 人、夜班 1 人、夜班不安排年假"
- "固定正常班 + 住院部补位"
核心工作流
1. 确认班次定义与工时折算(关键,先与用户对齐)
参考 references/shift_rules.md 的班次定义表。常见陷阱:用户给出的早班/中班时长常不足 8h(如早班 8:00-12:00 仅 4h、中班 12:00-18:30 仅 6.5h),需按医院惯例合理化以满足 8h 工时:
- 正常班 D:8:30-12:00 / 14:30-18:00,8h(含 1h 午休计入工时)
- 早班 E:延伸至 8:00-16:00(提前 0.5h 开窗 + 下午前段,16:00 交接中班)
- 中班 M:12:00-18:30,8h(含 1.5h 用餐/交接,覆盖午晚高峰且衔接夜班)
- 夜班 N:18:30-次日 8:00 实际 13.5h,按 8h 标准工时折算,超出 5.5h 用"下夜班当日 + 次日连休 2 天"补偿(等效工时平衡,符合标准工时制)
若用户班次时间不同,按"在岗时长 + 用餐/交接/午休计入工时"原则折算到 8h,并在交付物班次定义表中明示折算方法。
2. 确认排班约束
向用户确认(或从需求中提取)以下参数,填入 scripts/schedule_gen.py 顶部配置区:
- 三班轮班人数 N(默认 6)
- 轮换周期 weeks(默认 4 周)
- 每周夜班次数(=7,每天 1 人)
- 夜班后休几天(默认 2 天:下夜班当日 + 次日)
- 固定正常班人员及休息日(默认:周一二三五上班、周四固定休、周末轮换 1 天)
- 住院部补位人员及补位日(默认:2 人,周四轮换补固定班缺勤)
- 白天在岗需求(工作日 4 人、周末 3 人为默认;按实际窗口数调整)
- 周末双休要求(默认:月内每人 1-2 次轮换)
3. 运行生成脚本
执行 scripts/schedule_gen.py(Python 3,纯标准库无需安装依赖)。脚本流程:
- 夜班循环轮换(P1→P2→…→PN,每天 1 人)
- 夜班后休班推算(下夜班日 + 次日,共 2 天)
- 白班人员 = N - 夜班 1 - 休班 2(每天 3 人)
- 白班 E/M/D 贪心均衡分配(每人累计次数最少者优先,3 人角色不重复)
- 固定正常班 + 住院部补位按配置注入
- 每日在岗人数校验(工作日 4 / 周末 3 / 夜班 1)
- 4 周工时 + 夜班次数 + 周末双休统计
- 输出 HTML(班次定义 / 排班总表 / 在岗校验 / 工时统计 / 周工时拆分 / 年假机制 / 排班规则七节)
cd <工作目录>
C:/Users/58163/.workbuddy/binaries/python/versions/3.13.12/python.exe \
C:/Users/58163/.workbuddy/skills/pharmacy-shift-scheduling/scripts/schedule_gen.py
脚本顶部 OUT_PATH 默认输出到当前工作目录 outputs/,可改。
4. 校验与交付
- 确认脚本输出
在岗校验全部达标: True(若 False,说明白天在岗不足,需调白班或住院部补位) - 向用户呈现 HTML(
present_files),可打印转 PDF - 在文字回复中如实说明工时区间、夜班次数、双休分布,以及任何结构性约束(见下)
必须如实告知的结构性约束
参考 references/shift_rules.md 详解。简述:
-
N 人轮 7 夜班/周 + 夜班后休 2 天,当 N=6 时每周必有 1 人轮 2 次夜班,4 周内夜班次数 4-5 次/人不等,工时 144-160h(周均 36-40h,均 ≤40h 合规)。不可强求每人每周严格 40h,应说明这是结构性约束,建议 8 周长周期轮换使月均均衡。
-
周末双休:周末双休只能靠"周五夜班 → 休周六日"产生。4 周仅 4 个周五夜班名额,N=6 时必有 2 人本月无周末双休。不可谎称每人都有双休,应标注本月未轮到的 2 人,并说明第 5-8 周优先补全。
-
4 周截断边界效应:月初/月末夜班人员工时略高/低,属正常。连续排班每月衔接,2-3 月内工时趋均。
-
年假填补:每天三班有 2-3 人夜班后休班,可抽调顶替上正常/早/中班者的年假空缺;夜班原则上不安排年假。
禁止事项
- 不得在未校验"每日在岗达标"前交付班表
- 不得隐瞒夜班工时折算(必须明示夜班实际时长与折算方法)
- 不得对结构性工时差异做虚假"均衡"声明(如实呈现 144-160h 区间)
- 不得把早班/中班不足 8h 的时间段直接当 8h 工时排,必须合理化延伸或明示折算
参数定制
用户需求变化时,改 scripts/schedule_gen.py 顶部配置区(STAFF 列表、DAYS、班次时间 SHIFT_DEF、固定班函数 a_shift、住院部函数 hos_shift、白天在岗需求 need_day)。核心算法(夜班循环、休班、贪心白班、校验、工时)通用,无需改。