快餐店排班主管:周排班表生成器——约束不满足时必须说破,不许静默排一张「看起来可行」的表
你是给快餐店做内部工具的编码代理。请做一个单文件
HTML 工具(HTML、CSS、JS 全部内嵌,无外部依赖、无
网络请求,浏览器双击打开即用),给排班主管生成
周排班表。
输入区:
- 员工表:姓名 / 技能标签(开班、收银、后厨、
出餐、收班,可多选)/ 每周可用时段(按半天
粒度勾选)/ 周工时上限【小时】
- 需求表:时段(半天粒度)× 岗位,各需要几人
- 约束设置(用户可调默认值):
· 连续排班不超过【】小时
· 两个班次之间间隔不少于【】小时
· 每时段至少一名「开班」技能者(可开关)
生成逻辑(页面上要有「方法说明」区):
- 求解优先级硬性排序:技能覆盖 > 时段人数 >
个人周上限 > 连排与间隔偏好——顺序不许被
算法自行调整
- 用可解释的贪心或回溯算法即可,不追求最优,
但每次分配要能说明「为什么是他」:技能匹配、
当周余量最多、已排班最少,三者之一
- 约束冲突时的行为(本工具的核心要求):不许
静默放弃任何约束。冲突时输出「最接近可行的
方案」,并单独列出:哪条约束没满足、差多少
(缺几人 / 超几小时 / 哪个时段没有开班技能)、
建议怎么松(招临时工 / 调需求 / 调可用性)
输出区:
- 周视图:行 = 员工,列 = 时段,格 = 岗位与起止;
底行自动汇总各时段人数与技能覆盖
- 个人视图:每人当周工时、距上限余量、连排情况
- 冲突报告:不满足的约束清单(红底);没有冲突
时显示「全部约束满足」,不是留白
- 打印版式:一页横向,贴墙可用
- 变更对比:手动改一格后重新检查全部约束,并
高亮受影响的其他格
硬性要求:
- 无外部 CDN 与网络请求,数据不出本机
- 至少支持【25】名员工 × 【14】个时段不卡顿
- 有导出(可复制进表格软件的格式)与清空功能
- 不做「智能推荐加班」之类的功能——工具服务于
排班与约束检查,不做人力决策
为什么这样写
「不许静默放宽约束」是整条工具的核心条款。排班工具最大的风险不是排不出来——排不出来人会去想办法——而是排出来一张隐性违反工时或技能约束的表:看起来可行,主管贴上墙,第一天就有人超时、有时段没人会开班。所以冲突时的正确行为被写死:输出最接近的方案,同时把每条没满足的约束、差多少、怎么松全部摊开。宁可要一张「带着缺口声明」的表,也不要一张沉默的表。
约束优先级硬性排序,是因为算法(和人)在冲突时总要牺牲点什么,不排序就会牺牲最容易牺牲的——通常是技能覆盖这种「看起来可以通融」的约束。排序写死:技能覆盖压倒人数,人数压倒个人上限,个人上限压倒连排偏好。主管看懂这个排序,也就看懂了工具在冲突时「牺牲了什么」的逻辑。
「为什么是他」的可解释性要求和备料工具的方法说明同源:排班直接涉及每个人的钱和休息,被问「凭什么是我」是常态。每次分配都能答出「技能匹配 / 余量最多 / 已排最少」,工具才立得住。
最后一刀切掉「智能推荐加班」:排班之上还有人性,工时决策必须留给人做,工具只做算术与检查。这一条划的是工具的权限边界——越界的排班工具第一次「优化」掉的就是员工的信任。
变量
| 变量 | 说明 |
|---|---|
| 员工与需求数据 | 技能标签、可用时段、周上限、各时段岗位需求——工具的全部输入,半天粒度最平衡 |
| 约束默认值 | 连排上限、间隔下限、是否强制开班技能——按本店制度与当地规定设置 |
| 团队规模 | 员工数 × 时段数——快餐店典型规模 25 人 × 14 时段内要不卡顿 |