加班餐 · 规则配置 PRD v2.3
打开配套原型

0. 文档说明


1. 功能总览

一句话:给每个客户配一条加班餐规则,系统按规则定时去客户的考勤平台拉打卡/补卡数据,判定谁加班了,自动发券或充值,并可选发站内信通知。

1.1 模块关系

规则配置页(本 PRD)
   │ 写入规则
   ▼
规则表 ──► 定时任务调度器(按「触发任务」配置的时间点触发)
              │ 1. 按客户选的平台,拉取该平台的考勤数据
              │ 2. 按「加班判定」过滤
              │ 3. 按「考勤日期+员工」去重
              │ 4. 按「补贴配置」发放
              │ 5. 按「通知配置」发站内信
              ▼
        悠饭现有能力
        ├─ 优惠券系统(发券)
        ├─ 员工月补账户(充值)
        ├─ 员工钱包账户(充值)
        ├─ 站内信(通知 / 强推)
        └─ 法定日历(工作日判定)

1.2 关键约束(全局,不可配置)

约束说明
一客户一规则同一 companyId 只能存在 1 条规则
一客户一平台一个客户只会使用一个考勤平台,不存在多平台并存
防重复发放同一员工同一考勤日期,无论打卡/补卡触发多少次,只发放 1 次
每人独立发券不允许"内容相同则合并",必须每人一张独立券
发放记录不新建页面复用悠饭现有的「优惠券列表页 / 员工钱包充值记录页 / 员工月补充值记录页」
平台凭证不在此处录入凭证由系统其他位置统一维护,规则里只选平台类型

2. 权限

接入悠饭现有权限体系,不新建权限模型。

权限类型控制内容
页面权限控制谁能进入「运营工具-加班餐」页面。无权限则不显示菜单入口
操作权限控制 查看 / 新建 / 编辑 / 启用停用 / 删除 五个动作

权限不足时的表现:


3. 规则列表页

原型要点:筛选条(4 项 + 重置靠右)→ 工具条(「新建规则」+ 汇总)→ 规则表格 → 分页。

3.1 筛选条

筛选为实时生效:任一筛选项变更(含清空),列表立即过滤并回到第 1 页。

控件类型说明
「客户名称」可搜索下拉框输入关键字过滤;选项取当前账号资源权限下的客户简称
「考勤平台」下拉单选全部 / 飞书 / 企业微信 / 钉钉
「补贴形式」下拉单选全部 / 发优惠券 / 充值月补 / 充值钱包
「启用状态」下拉单选全部 / 已启用 / 未启用
「重置」按钮靠右;点击清空全部筛选项并立即恢复全量(回到第 1 页)

3.2 汇总条

文案:共 X 条规则,其中 Y 条已启用(X、Y 橙色高亮)。随筛选结果实时变化。

3.3 表格列

宽度内容
序号50跨页连续(第 2 页第 1 条 = 11)
客户名称弹性(min 140)超长省略 + tooltip
考勤平台100彩色标签(飞书蓝 / 企微绿 / 钉钉橙)
补贴形式100发优惠券 / 充值月补 / 充值钱包
金额(元)90右对齐,红色加粗 ¥30.00
触发任务90N 条
下班窗口13021:00 ~ 04:00
创建时间150yyyy-MM-dd HH:mm
启用状态90开关
操作130查看 / 编辑 / 删除(文字按钮,删除红色),固定右列

3.4 交互


4. 规则配置页(新建 / 编辑)

原型要点:独立页面(非弹窗)。顶部「返回」+ 标题;五张卡片:基础信息 / 触发任务 / 加班判定 / 补贴配置 / 通知配置;底部「取消 / 保存规则」吸底常显。

4.1 基础信息

控件类型状态/规则
「客户名称」可搜索下拉框(必填)新建可改;编辑时只读不可改。列表获取当前账号资源权限下的客户简称;若该客户已有规则,新建时提示并拦截
「考勤平台」单选按钮组(必填)飞书 / 企业微信 / 钉钉。切换平台时清空已勾选的排除状态

平台说明文案:平台接口凭证由系统统一维护,此处仅选择客户使用的考勤平台

4.2 触发任务

一行 = 一条触发任务 = 一个定时任务。

控件规则
执行时间时间选择器每天 HH:mm 执行。禁选 11:30-13:00、17:30-19:00(餐段高峰期):选择器置灰 + 保存校验双保险
查询内容下拉单选打卡记录 / 补卡记录 / 全部记录
查询范围数字输入最近 N 天,1~90
预览只读文本每天 xx:xx 执行 / 查询最近 x 天的 xx 记录
删除图标按钮仅剩 1 条时置灰

4.3 加班判定

控件类型状态/规则
防重复发放橙色提示条(固定,不可关闭)同一员工在同一天内,无论触发多少次(打卡或补卡),系统都只发放一次补贴,按「考勤日期 + 员工」去重
「下班时间窗口」两个时间选择器(必填支持跨天,21:00 ~ 04:00 = 当日 21:00 后至次日 04:00 前
「加班总时长」开关 + 数字输入默认关(不限制)。开启后设「不低于 N 小时」,0.5~12,步长 0.5
「累计工时」开关 + 数字输入默认关。开启后设「不低于 N 小时」,1~16,步长 0.5
「工作日类型」开关 + 单选按钮组默认关(不区分)。开启后单选:工作日 / 周末 / 法定节假日 / 任意。判定读取悠饭系统现有法定日历
「排除状态」多选勾选框选项随考勤平台切换;员工被识别为勾选状态即不发放

下班窗口解释文案:下班时间窗口:员工当日最后一次下班打卡时间落在此时间范围内,即视为加班。支持跨天窗口,如 21:00 ~ 04:00 表示当日 21:00 后至次日 04:00 前下班均计入。

工作日类型解释文案:工作日 / 周末 / 法定节假日的判定读取悠饭系统的法定日历。

排除状态说明文案:仅排除勾选的状态(多选)。同一员工只要被识别为这些状态(含迟到/早退/旷工等考勤异常),就不再发放当日补贴。

各平台排除状态选项

平台选项
飞书出差 / 请假 / 外出 / 补卡申请中 / 补卡(事后补录)/ 外勤打卡
企业微信请假 / 补卡 / 出差 / 外出 / 审批打卡 / 外勤
钉钉补卡 / 早退 / 迟到 / 严重迟到 / 旷工 / 未打卡 / 出差 / 请假 / 外出

钉钉额外提示条:钉钉考勤接口不直接返回出差/请假/外出,需通过审批流程关联判定。下方"出差/请假/外出"项由系统自动调用审批接口实现,勾选效果与其他平台一致。

4.4 补贴配置

控件类型状态/规则
「补贴形式」单选按钮组(必填)发优惠券 / 充值月补 / 充值钱包,三选一
「补贴金额」数字输入(必填)范围 0.01~500 元,精度 2 位;发券时单位「元 / 张」,充值时「元 / 人 / 次」

选择「发优惠券」时展开:

控件类型状态/规则
「餐段」多选勾选框(必填不限 / 早餐 / 午餐 / 晚餐 / 下午茶 / 宵夜。勾「不限」自动清空其他;勾其他自动取消「不限」
「券有效期」数字输入1~24 个月,默认 6
「商家范围」单选按钮组不限 / 指定门店
「指定门店」多选搜索框仅当商家范围 = 指定门店时显示 内可选内容为该客户的商家库商家列表

选择「充值月补」/「充值钱包」时展开:

控件内容
「补贴金额」元 / 人 / 次
「账户说明」月补:橙色标签 月补账户 · 当月有效,次月自动清零;钱包:绿色标签 钱包账户 · 长期有效,不清零

提示:每人独立发券,不合并(现有券功能只能按券停用,合并会导致停一张影响多名员工)

4.5 通知配置

控件类型状态/规则
「通知开关」开关默认关。关时右侧显示 不发通知(员工自行查看账户/券)
「通知内容」文本域仅开关打开时显示。支持变量占位符,上限 200 字
「强推通知」开关仅通知开关打开时显示

4.6 底部操作栏

「取消」(返回不保存)/ 「保存规则」(橙色)。滚动时始终可见。


5. 控件状态 × 联动矩阵

这是本文档的核心表,请对照实现。

#控件取值状态模块内联动跨模块 / 后续流程联动校验与提示
1客户名称保存拦截请选择客户名称
1客户名称已选(新建)保存时校验该客户是否已存在规则该客户已存在加班餐规则
1客户名称已选(编辑)控件只读置灰
2考勤平台飞书排除状态选项切换为飞书 6 项定时任务对接飞书平台数据
2考勤平台企业微信排除状态切换为企微 6 项对接企微平台数据
2考勤平台钉钉排除状态切换为钉钉 9 项 + 显示审批关联提示条对接钉钉平台数据(排除状态需读审批数据)
2考勤平台发生切换(任一→另一)清空已勾选的排除状态无提示,直接清空
3触发任务·执行时间11:30-13:00 / 17:30-19:00时间选择器该时段置灰保存拦截触发任务时间 HH:mm 处于餐段高峰期,请调整
3触发任务·执行时间其他时间生成对应 cron 表达式
3触发任务·执行时间保存拦截请完善所有触发任务的时间
3触发任务·查询内容打卡记录预览文案更新执行时只查打卡接口
3触发任务·查询内容补卡记录预览文案更新执行时只查补卡接口
3触发任务·查询内容全部记录预览文案更新执行时打卡 + 补卡接口都查
3触发任务·查询范围1~90预览文案更新查询天数作为数据拉取范围。平台硬限制:企微单次最多查 30 天、钉钉单次最多查 7 天、钉钉查不了 180 天前的数据超出平台可查范围时技术侧记录日志(配置上限 90 天,正常不触发)
3触发任务行与本表其他行三项完全相同整行红色高亮 + 行内提示保存拦截与第 N 条任务重复,不允许保存
3触发任务行仅剩 1 条删除按钮置灰
4下班时间窗口未填保存拦截请设置下班时间窗口
4下班时间窗口开始 > 结束(如 21:00~04:00)判定为跨天窗口,次日凌晨下班计入当日
4下班时间窗口开始 < 结束(如 18:00~23:00)判定为当日窗口
5加班总时长显示 不限制时长,隐藏数字输入判定流程跳过该条件
5加班总时长显示 不低于 [N] 小时(当日加班持续的时长)判定流程增加该条件,不满足不发0.5~12
6累计工时显示 不限制,隐藏输入判定流程跳过
6累计工时显示 不低于 [N] 小时(当日累计总工时,含正常上班时长)判定流程增加该条件1~16,步长 0.5
7工作日类型显示 不区分工作日类型,隐藏单选组判定流程跳过
7工作日类型开 + 工作日调法定日历,非工作日剔除
7工作日类型开 + 周末调法定日历,非周末剔除
7工作日类型开 + 法定节假日调法定日历,非节假日剔除
7工作日类型开 + 任意不区分,全部纳入
8排除状态未勾任何项不排除任何人
8排除状态勾中 N 项命任一项即剔除
9补贴形式发优惠券展开券子表单(餐段/有效期/商家范围);隐藏账户说明标签发放时调优惠券系统,写「优惠券列表页」
9补贴形式充值月补隐藏券子表单;显示橙色账户标签发放时调月补充值接口,写「员工月补充值记录页」
9补贴形式充值钱包隐藏券子表单;显示绿色账户标签发放时调钱包充值接口,写「员工钱包充值记录页」
9补贴形式发生切换子表单整体切换,金额保留不清空
10餐段勾「不限」自动清空早/午/晚/下午茶券在所有餐段可用
10餐段勾其他任一项自动取消「不限」券仅在勾选餐段可用
10餐段全不勾保存拦截请选择餐段
11商家范围不限隐藏「指定门店」选择器券全门店通用
11商家范围指定门店显示「指定门店」多选搜索框(必填)券仅限指定门店使用未选门店时保存拦截
12通知开关隐藏「通知内容」「强推通知」发放后不发站内信
12通知开关显示「通知内容」「强推通知」发放后发站内信
12通知开关开→关隐藏两个子控件(内容保留不清除,再次打开仍在)
13强推通知普通站内信
13强推通知站内信置顶强推,员工进入订餐系统首屏可见
14列表·启用开关点击开关先视觉还原,弹确认框确认:真正改状态 + 定时任务启停;取消:保持原值见第 7 节文案
15列表·查看点击打开只读详情弹窗弹窗内「编辑」可跳编辑页
16列表·删除点击弹确认框确认:删规则 + 停所有定时任务见第 7 节文案

6. 规则详情弹窗

列表页「查看」打开,只读展示五个分区,底部「关闭 / 编辑」。

展示内容:

分区展示项
基础信息客户名称、考勤平台、启用状态、创建时间(规则创建时间)
触发任务每行:每天 HH:mm 执行 · 查询最近 N 天的 XXX 记录
加班判定下班时间窗口、加班总时长(或「不限制」)、累计工时(或「不限制」)、工作日类型(或「不区分」)、排除状态(标签组,无则显示「无」)
补贴配置补贴形式、补贴金额;发券时追加:餐段、券有效期、商家范围(+ 门店列表);充值时追加:账户说明标签
通知配置通知开关(启用/未启用)、通知内容原文、强推(是/否)

「编辑」按钮:跳转编辑页并回填该条数据(无编辑权限时隐藏)。


7. 二次确认弹窗(启用 / 停用 / 删除)

三套弹窗结构一致:标题 + 主问句(客户名橙色加粗)+ 影响说明块 + 「取消 / 确认」按钮。

7.1 启用

标题启用规则

主文案确认启用客户「悠星网络」的加班餐规则?

说明块(蓝色 info 样式):

启用后:
① 系统将按配置的触发任务自动执行查询
② 符合加班判定的员工将自动收到补贴
③ 建议先与客户确认规则配置无误再启用

按钮:取消 / 确认启用(橙色)

7.2 停用

标题停用规则

主文案确认停用客户「悠星网络」的加班餐规则?

说明块(黄色 warning 样式):

停用后:
① 该规则的所有触发任务将不再执行
② 未来满足条件的员工不再发放加班餐补贴
③ 已发放的券/月补/钱包金额不受影响,员工可继续使用
④ 规则配置仍保留,可在列表中重新启用

按钮:取消 / 确认停用(橙色)

7.3 删除

标题删除规则

主文案确认删除客户「悠星网络」的加班餐规则?

说明块(黄色 warning 样式):

影响范围:
① 该规则的所有触发任务将立即停用
② 未来触发时该客户全员不再发放加班餐
③ 已发出但未消费的优惠券将保留(按券设置过期失效)
④ 已充值到月补/钱包的金额不会被撤回
⑤ 删除后不可恢复,请确认。(红色)

按钮:取消 / 确认删除(danger 红色)


8. 校验规则清单

8.1 前端校验(保存时逐条,命中即报错并滚动定位)

#校验项错误提示
1客户名称非空请选择客户名称
2客户唯一性(仅新建)该客户已存在加班餐规则
3考勤平台已选请选择考勤平台
4触发任务至少 1 条且时间非空请完善所有触发任务的时间
5触发时间不落在 11:30-13:00 / 17:30-19:00触发任务时间 HH:mm 处于餐段高峰期,请调整
6触发任务无重复(时间+内容+范围三项全同)第 M 条与第 N 条触发任务重复
7下班时间窗口已填请设置下班时间窗口
8加班总时长开启时数值在 0.5~12加班总时长需在 0.5 ~ 12 小时之间
9累计工时开启时数值在 1~16累计工时需在 1 ~ 16 小时之间
10工作日类型开启时已单选请选择工作日类型
11补贴形式已选请选择补贴形式
12补贴金额在 0.01 ~ 500 元之间补贴金额需在 0.01 ~ 500 元之间
13发券时餐段至少勾 1 项请选择餐段
14券有效期在 1~24券有效期需在 1 ~ 24 个月之间
15商家范围=指定门店时门店非空请选择指定门店
16通知开启时通知内容非空,且 ≤ 200 字请填写通知内容
17触发时间晚于下班窗口结束时间触发时间需晚于下班窗口结束,避免漏发

8.2 后端校验(保存接口必须重复校验,不能只信前端)


9. 系统执行与发放流程(业务视角)

本章描述规则启用后,系统自动执行的完整业务闭环。只定义每一步"做什么、什么结果",具体实现方式由技术侧决定。

9.1 触发

9.2 单次执行流程(六步闭环)

① 拉取考勤数据
   按客户所选平台拉取,内容和范围按「触发任务」配置(打卡 / 补卡 / 全部,最近 N 天)
② 排除人员
   命中「排除状态」的员工剔除
③ 加班判定
   已开启的判定条件需同时满足:下班窗口、加班总时长、累计工时、工作日类型
④ 防重复
   同一员工同一考勤日期,只发放一次(打卡、补卡、多次触发都不重复发)
⑤ 发放
   按补贴形式发放:发优惠券 / 充值月补 / 充值钱包,并记录发放结果
⑥ 通知
   通知开关打开时发站内信;强推开关决定是否置顶

9.3 关键业务规则

规则说明
跨天窗口归属下班窗口跨天时(如 21:00 ~ 04:00),次日凌晨下班计入前一考勤日
补卡补发补卡任务拉到历史日期记录时,按防重复规则处理:已发放过则跳过,未发放且符合判定的正常补发
停用的影响停用后触发任务不再执行,但已发放的券 / 月补 / 钱包不受影响,员工可继续使用
删除的影响已发出未消费的券按券有效期自然失效;已充值金额不撤回(文案见第 7 节确认弹窗)
发放记录复用现有「优惠券列表页 / 员工月补充值记录页 / 员工钱包充值记录页」,本功能不新建页面(标识规范见 9.4)

9.4 发放记录标识规范

发放记录复用现有页面、不新建。为保证对账时能一眼区分"这条是加班餐发的",三种记录按下表写入标识信息。

发放形式记录位置标识字段内容格式示例
发优惠券优惠券列表页优惠券名称加班餐·{考勤日期YYYY-MM-DD}·{员工姓名}加班餐·2026-09-13·张三
充值月补员工月补充值记录页备注加班餐·{考勤日期YYYY-MM-DD}加班餐·2026-09-13
充值钱包员工钱包充值记录页备注加班餐·{考勤日期YYYY-MM-DD}加班餐·2026-09-13

格式说明:

9.5 异常与兜底(业务口径)

场景口径告警
考勤平台数据拉取失败自动重试;仍失败则触发告警机器人发送至研发中心群,不影响下一次执行严重·立即
部分员工数据失败只影响该部分员工,其余正常发放;失败名单留档供人工核对一般·汇总
发放失败(发券 / 充值)自动重试数次;仍失败则记录失败名单并触发告警,是否补发、如何补发由人工自行决定,系统不承载补发流程严重·立即
平台凭证失效刷新后仍不可用则停止本次执行严重·立即
任务执行超时超过设定阈值即中止,并保留已处理进度严重·立即
通知发送失败不影响发放结果,仅记录日志一般·汇总
某天无数据(如休息日)正常结束不告警
连续多天执行失败同一规则连续 2 天失败,人工介入排查严重·立即

9.6 失败告警(机器人推送研发中心群)

发放链路上的失败都必须触发告警机器人推送到研发中心群,不允许静默失败。

告警场景与级别

场景触发条件级别是否影响发放
考勤数据拉取失败重试后仍失败严重是(该考勤日无法发放)
平台凭证失效刷新后仍不可用严重
发放失败(发券 / 充值)自动重试耗尽严重是(该员工本次未发放)
任务执行超时超过阈值严重
连续多天执行失败同一规则连续 2 天失败严重
部分员工数据失败存在失败名单一般否(其余正常发放)
站内信通知发送失败通知发不出去一般否(不影响发放)

消息逻辑

消息模板

【加班餐-执行告警】
级别:严重 / 一般
客户:{客户名称}
规则:{规则ID}
考勤日期:{YYYY-MM-DD}
失败类型:{失败类型}
失败原因:{平台返回错误信息或异常描述}
影响范围:{受影响员工数 / 全部}
发生时间:{YYYY-MM-DD HH:mm:ss}
处理建议:{按失败类型映射的固定建议,见下表}

处理建议对照表

「处理建议」不是自由填写,而是按失败类型映射的固定文案,变量只取告警上下文已有的值(如平台名称),保证同类告警的提示一致、收到的人照着就能做。

失败类型处理建议(告警消息中展示)
考勤数据拉取失败确认 {平台} 接口状态与调用频率,排除后重跑该考勤日任务
平台凭证失效联系客户管理员在 {平台} 后台重新授权,凭证恢复后重跑本次任务
发放失败(发券 / 充值)到对应记录页(9.4)核对发放结果,人工判断是否需要补发
任务执行超时排查耗时环节(员工量 / 接口响应),进度已保留,重跑从断点继续
连续多天执行失败非单次抖动,需排查根因;排查期间可先暂停该规则
部分员工数据失败核对员工身份映射(离职 / 工号变更 / 未入职),修正后重跑
通知发送失败排查消息通道,发放结果不受影响
边界:处理建议只负责"告诉人下一步该看什么、做什么"。是否补发、怎么补发,由人工用现有功能自行处理,不在本功能范围内——系统不做补发流程,也不在告警中替人下结论(如"已转人工")。

示例

示例 1|考勤数据拉取失败(严重)

【加班餐-执行告警】
级别:严重
客户:悠星网络
规则:R20260901001
考勤日期:2026-09-13
失败类型:考勤数据拉取失败
失败原因:企业微信接口返回 45009(接口调用超过频率限制)
影响范围:全部 328 人未发放
发生时间:2026-09-14 04:32:15
处理建议:确认企业微信接口状态与调用频率,排除后重跑该考勤日任务

示例 2|发放失败(钱包充值)(严重)

【加班餐-执行告警】
级别:严重
客户:悠星网络
规则:R20260901001
考勤日期:2026-09-13
失败类型:发放失败(充值钱包)
失败原因:钱包充值接口连续 3 次超时
影响范围:2 人未发放:张三(1001)、李四(1002)
发生时间:2026-09-14 04:35:02
处理建议:到「员工钱包充值记录页」核对发放结果,人工判断是否需要补发

示例 3|部分员工数据失败(一般,汇总)

【加班餐-执行告警】
级别:一般
客户:悠星网络
规则:R20260901001
考勤日期:2026-09-13
失败类型:部分员工考勤数据缺失
失败原因:5 名员工在考勤平台查无记录(可能离职或工号变更)
影响范围:5 人未发放(其余 323 人已正常发放)
发生时间:2026-09-14 04:33:40
处理建议:核对 5 名员工的身份映射(离职 / 工号变更 / 未入职),修正后重跑

示例 4|恢复通知

【加班餐-执行恢复】
客户:悠星网络
规则:R20260901001
考勤日期:2026-09-13
恢复类型:考勤数据拉取失败(已恢复)
恢复时间:2026-09-14 04:40:11
结果:328 人已全部发放完成