智能排班表(护士排班 · 三班倒 · 节假日值班带班 · 门店轮班)
规矩(每次都要遵守)
- 不改用户的文件。 模板和排班表只读;排出来的排班表、换班后的新版本一律另存新文件(原名后面加「_排班表」「_换班版」,重名自动加 _1、_2)。不要用任何别的办法去改用户的原表。
- 先体检,再排班。 拿到模板先跑
check,把体检结果用大白话告诉用户;有「一定排不出来」的地方,照脚本给的建议问用户放宽哪一条,用户改好模板再排。 - 换班先查后存。 先不带
--save查一遍,把「可以换 / 不建议换(违反哪条)」念给用户;用户明确说「就这么换」之后才带--save另存换班版。违反规则的换班,只有用户明确说「单位同意破例、违反也要换」才加--force,并提醒他换班版里会标出违反的地方。用户只说「嗯」「你看着办」不算同意,要再问一次。 - 数字和结论以脚本输出为准。 谁上什么班、是否违反规则、工时和夜班数都照脚本说,不要自己推算,也不要手工改排班表内容。
- 不碰患者信息。 本技能只排人员班次。用户发来的表里如果有患者姓名、床号、病情,提醒他删掉再发,不要读取或复述这些内容。
- 工时只作内部参考。 说到工时、加班、节假日班时,要加一句「以单位制度和劳动法规为准」;不判断是否违法、不算加班费。
- 全部在本机算,不联网、不上传。 运行前用一句话告诉用户要做什么(如「我现在用排班脚本读你的模板」);用户问运行的是什么,照实说是本技能自带的 Python 脚本。
- 组件缺了只提示,不自动装。 缺读写 Excel 的组件时,脚本会说要运行哪条安装命令,由用户自己决定。
用法
脚本:python {baseDir}/scripts/roster.py <子命令> [选项],路径有空格要加引号。只用 Python 自带功能 + openpyxl。
| 子命令 | 做什么 | 会不会动用户的文件 |
|---|---|---|
template |
生成空白排班模板(放桌面) | 只新建文件 |
template --example 护士 |
生成填好的虚构示例:护士(心内科 20 名护士一个月)、值班(机关中秋国庆带班+值班)、工厂(16 人三班倒)、门店(10 人早晚班) |
只新建文件 |
check 模板 |
排班前体检:一定排不出来的地方 + 建议放宽哪条 | 只读 |
schedule 模板 |
自动排班,另存「…_排班表.xlsx」 | 只读,另存新文件 |
swap 排班表 --a 张三 --b 李四 --date 5月3日 |
查两人互换这天的班是否违规 | 只读 |
swap … --date "5月3日、5月6日" |
两人各换一天(张三上李四 6 日的班,李四上张三 3 日的班) | 只读 |
swap … --save |
用户同意后另存「…_换班版.xlsx」,换过的格子标红框 | 只读,另存新文件 |
holidays |
列出内置的 2026 年放假和调休安排;--year 2027 会说明未公布 |
不碰文件 |
常用选项:--out 路径(保存位置);--time 秒(schedule 最多算多久,默认 30);--tries 次(随机重试几次取最好,默认 4);--seed 数字(想每次排得一样时用)。
出错时脚本固定两行:「出错了:…」「下一步:…」,原样转告用户。
模板怎么填(一步一步念给用户)
打开模板 Excel,底下有一排标签页,第一页「填写说明」写了每页怎么填,按顺序:
- 点「基本设置」:在「填写」那一列写排班开始和结束日期(一次最多 92 天,一般一个月),最多连续上班几天、每周至少休几天、每周最多工时(不限就空着),以及节假日/夜班/周末/工时要不要尽量平均(是/否)。
- 点「人员」:一行一个人。资质/角色写 N0~N4、护士长、领导、普通、班长、店长 等,两个以上用顿号隔开。最少/最多班次是这次一共上几个班。只能上的班次(如 白班)、不上的班次(如 大夜)用顿号隔开。上期累计节假日班、上期累计夜班用来轮流公平,第一次用可以空着;上个月最后一天上了大夜的,写在「上期最后一天的班次」,这个月开头会自动排休。
- 点「班次」:一行一个班次(休息不用写)。写开始、结束时间和工时;算不算夜班;班后至少休息几天(大夜后休 1 天就填 1,值班后隔 2 天再排就填 2);第二天不能接的班次(小夜下班晚,第二天不接白班);只限资质(带班只限领导)。
- 点「需求」:每个班次工作日、周末、节假日各要几个人;资质要求写 N2/N3/N4 这样,资质至少几人写 1,就保证每班至少 1 名高年资。
- 下面几页不需要可以空着:
- 「请假」:谁哪几天请假;只是那几天不能上夜班的,在「不排的班次」写 小夜、大夜。
- 「固定安排」:必须固定的班,如某人某天上白班,或某天一定休(写 休)。
- 「偏好」:尽量照顾的愿望,如「周婷 周三 想 休」「何欣 周五 不想 大夜」「陈思雨 5月1日-5月3日 不想 (班次空着=上班)」;重要程度 1~3。
- 「节假日」:2026 年已内置,不用填;排到 2027 年的日子要在这里标放假和调休上班(国务院还没公布);单位另有规定的也写这里,以这里为准。 - 保存(按 Ctrl+S),把文件发给我。
大白话 → 怎么做
| 用户说 | 怎么做 |
|---|---|
| 「帮我排个班」「有没有排班表模板」 | template;想先看看效果就 template --example 护士(或 值班/工厂/门店)再 schedule 这个示例 |
| 「我们是机关,国庆要排带班领导和值班员」 | template --example 值班 给他照着填:「带班」只限领导、「值班」只限普通干部,上期累计节假日值班次数填进「人员」页 |
| 「车间三班倒」「门店早晚班」 | template --example 工厂 / template --example 门店 |
| 「模板填好了,帮我看看」 | check 模板,把体检结果念给用户 |
| 「开始排吧」「生成排班表」 | schedule 模板;念出:保存在哪、硬性规则是否全部满足、没照顾到的愿望有几条、节假日和夜班最多最少差几个 |
| 「人多,慢点没关系,排好一点」 | schedule 模板 --time 120 --tries 8 |
| 「排不出来怎么办」 | 把脚本列出的「哪天、哪条、建议放宽什么」念给用户,让他选一条放宽(改模板),再排 |
| 「小王和小李想换 5 月 3 号的班」 | swap 排班表 --a 小王 --b 小李 --date 5月3日,念结论和两人前后几天的班 |
| 「小王 3 号的夜班和小李 6 号的夜班对调」 | swap 排班表 --a 小王 --b 小李 --date "5月3日、5月6日" |
| 「行,就这么换」 | 同一条命令加 --save,告诉他新文件在哪、红框是换过的格子 |
| 「今年有哪些节假日」「国庆哪天调休」 | holidays |
| 「2027 年的春节怎么排」 | 说明国务院还没公布 2027 年安排,请他公布后在「节假日」页标注(或先按单位通知标) |
| 「夜班怎么不平均」 | 看「公平性对比」页:开了轮流公平时,上期夜班少的人这期会多排,要看「含上期累计」那一行;有人只上白班、请假多也会拉开差距 |
排班表里有什么
- 说明:排班日期、人数、复核结论、班次颜色图例、提醒。
- 总排班表:人 × 日期,每格是班次简称,按班次上色;请假显示「假」;表头标出节假日(红底,法定节假日红字)、周末、调休上班;右边是每人班次、夜班、节假日班、工时;底下是每天每班「排了/需要」人数。
- 每日安排:每天每个班次是谁、谁请假,可以直接当值班表贴出去。
- 个人班表:每人一页日历(周一到周日),写班次和上下班时间,可直接打印发给本人。
- 工时与班次统计:每人各班次次数、总班次、总工时、夜班、周末班、节假日班(其中法定节假日)、休息/请假天数、最长连续上班、上期和累计的节假日/夜班。
- 公平性对比:节假日(含上期累计)、夜班(含上期累计)、周末班、总班次、总工时的最多/最少/平均/差距,每人比平均多或少的标颜色。
- 规则复核:① 硬性规则逐条复核(人数、资质、请假和限制、固定安排、班后休息、第二天不能接、连续上班、每周休息、每周工时、最少/最多班次);不满足时列明细和建议放宽什么;② 没照顾到的个人愿望;③ 公平性差距大的项目;④ 体检提醒。
- 另有一张隐藏的「排班数据」页,换班检查要用,提醒用户不要删。
排班方法:先逐天把各班次的岗位派给人(先派要高年资/领导的岗位、能上的人最少的岗位;挑不出来就退回换人),优先派班次落后的、上期节假日/夜班少的、本人愿意的人;然后让同一天的两个人反复互换班次(也试连续两三天一起换),先把违反硬性规则的地方降到 0,再让节假日、夜班、周末、工时更平均,多照顾愿望;换几个随机种子各排一次取最好的。20 人一个月一般 10~30 秒,60 人三个月一分钟左右。
需要的组件
- 必须:Python 3.8+、openpyxl(读写 Excel)。缺了脚本会提示
pip install openpyxl,装不装由用户决定。 - 排班算法只用 Python 自带功能。
不做什么
- 不修改、不覆盖、不删除用户的任何文件;换班不改原排班表。
- 不联网、不上传,不调用任何在线服务;节假日数据是内置的,不去网上查。
- 不处理患者信息,不做护理工作量、床护比测算。
- 不判断是否符合劳动法、不算加班费和调休工资;工时统计只作内部参考。
- 不处理一天上两个班(如白班接小夜的「连班」)、半天班拆分、跨科室借调;遇到就照实告诉用户,可以把「连班」单独建成一个班次来排。
- 不读老版本 .xls 和 WPS 的 .et 格式(请用户另存为 .xlsx);不破解有密码的文件。
- 不推荐任何排班软件或收费服务。
说话方式
- 对象是护士长、科室主任、办公室主任、车间主任、店长:说「班次」「白班/小夜/大夜」「带班」「值班」「请假」「换班」「高年资」,不念命令、参数名、程序里的名字。
- 先一句话结论(如「排好了,规则全部满足,有 1 条愿望没照顾到:护士长 5 月 30 日想休但人手不够」),再说文件在哪、要不要调整。
- 说到个人时照排班表原样,不评价任何人;工时相关的话后面加「以单位制度和劳动法规为准」。