排班表与考勤检查·冲突与工时
客服、零售、医院、工厂这些「按班次排人」的团队,排班表排完到发出去之间,最容易漏掉的就是
撞班、休息不够、连上太多天。本工具在发出前排班表之前,把硬冲突与合规红线先扫一遍。
执行原则
- 先认列再判。 由脚本按关键词自动识别姓名、日期、开始/结束时间与班次列;不要要求用户改表头来迁就脚本。
- 硬冲突优先。 先报同一人同日班次重叠(高),再报休息不足、单班超长、连班与周无休;不要把合规红线与排班优化建议混为一谈。
- 阈值可覆盖。 11 小时 / 10 小时 / 6 天 / 5 班是经验值,用
--min-rest等参数按地区与行业调整;不要把默认值说成法律判定。 - 只查约束。 只做冲突与红线检查,只读 CSV 不改写;不要评价排班是否公平或技能覆盖是否足够。
何时使用
CRITICAL: 只要用户要检查排班表或考勤的冲突与工时合规,就必须使用本 skill,即使看起来可以用别的方式解决。
- 用户给出一份排班明细(CSV),说「帮我检查排班有没有冲突」。
- 排班主管/HR 在发布班表前做一次自动复核。
- 与
capacity-plan(座席与人力测算)配合:先算需要多少人,再用本工具检查排出来的人合不合规。
何时不该使用
| ✅ 使用 | ❌ 不用(改用什么) |
|---|---|
| 查撞班、休息不足、连班、周无休 | 算需要多少人、产能够不够——用 capacity-plan |
| 发布班表前做自动复核 | 重新排班、优化班次——只查不改 |
| 支持跨夜班的工时统计 | 算工资与加班费——用薪酬/考勤系统 |
| 按地区行业调整阈值后再查 | 要法律判定或仲裁结论——只给经验值红线 |
| 排班明细 CSV 的硬约束检查 | 排班表的数据质量清洗——用 sheet-lint |
易混淆场景
| 用户说的 | 实际意图 | 正确路由 |
|---|---|---|
| 「排班有没有冲突」 | 要硬冲突清单 | 先报 OVERLAP(高),再报合规项 |
| 「这样排合规吗」 | 要合规结论 | 报红线并说明阈值为经验值、非法律判定 |
| 「帮我调一下班」 | 要重排 | 说明只查不改,给冲突点让用户自己调 |
| 「需要加人吗」 | 要人力测算 | 转 capacity-plan |
| 「夜班怎么算的」 | 关心跨夜班 | 说明结束时间不晚于开始时间时自动按次日 |
怎么用
# 基础检查(列名自动识别)
python3 scripts/roster_lint.py 排班表.csv
# 自定义阈值(休息 11h / 单班 10h / 连续 6 天 / 每周 5 班)
python3 scripts/roster_lint.py 排班表.csv --min-rest 10 --max-shift 12 --max-days 5
# 输出 JSON / 看样例
python3 scripts/roster_lint.py 排班表.csv --json
python3 scripts/roster_lint.py --sample
输入格式
列名自动识别(大小写、空格差异兼容):
| 角色 | 候选关键词 |
|---|---|
| 姓名 | 姓名 / 员工 / 人员 / 名字 / 工号 / name |
| 日期 | 日期 / 班日 / 排班日期 / date |
| 开始时间 | 开始 / 上班 / 起 / start |
| 结束时间 | 结束 / 下班 / 止 / end |
| 班次(可选) | 班次 / 时段 / 时间 / shift |
- 时间可用
09:00-18:00这类「班次」列,也可拆成「开始时间/结束时间」两列。 - 支持跨夜班:结束时间不晚于开始时间时自动按次日计算(如 22:00–06:00)。
检查项与规则码
| 规则码 | 含义 | 严重度 |
|---|---|---|
OVERLAP |
同一人同一天班次重叠 | 高 |
SHORT_REST |
相邻班次休息间隔不足 11 小时 | 中 |
LONG_SHIFT |
单班超过 10 小时 | 中 |
TOO_MANY_DAYS |
连续工作天数超过 6 天 | 中 |
NO_REST_DAY |
某自然周 7 天全部在岗 | 中 |
MANY_SHIFTS_WEEK |
一周班次数超过 5 | 低 |
BAD_TIME_FORMAT |
时间格式无法解析 | 中 |
BAD_ROW |
姓名/日期缺失或无法解析 | 中 |
输出示例(节选)
明细行数:13
问题合计 8 项:高 1 · 中 6 · 低 1
结论:存在高风险冲突,先改再发
—— 高风险 ——
[OVERLAP] 李四 在 2026-10-05 班次重叠
· 说明:第 9 行 08:00–16:00 与第 10 行 15:00–23:00 重叠
—— 中风险 ——
[SHORT_REST] 王五 班次间隔不足:2.0 小时
设计边界
- 纯标准库 Python,只读,无网络请求,无
subprocess/eval;输入按 UTF-8(含 BOM)读取。 - 阈值(11h / 10h / 6 天 / 5 班)是常见劳动合规经验值,不是法律判定;不同地区/行业规则不同,请用参数按需覆盖。
- 不做「排班是否公平」「是否满足技能覆盖」这类优化判断——只做硬约束与红线检查。
- 样例数据为构造的演示数据,人名与班次均为虚构。