管理系统的审批流:会签、加签、撤回与智能体代办的四个设计点
管理系统的审批流:会签、加签、撤回与智能体代办的四个设计点

一套采购审批,流程图三天就画完了。上线两周,业务群里开始出现另一类问题:「这张单子帮我加个财务总监的签」「已经批过的单子能不能撤回改金额」「王经理离职了,卡在他那里的单子怎么办」「同一张单子两个人同时点了同意,怎么走了两遍」。这些问题没有一个是画图能解决的。

审批流看着是把线连起来,实际是把组织规则写成一套可执行的状态机:谁在什么条件下、以什么身份、对哪条数据、做了什么动作,做完之后数据变成什么状态,能不能回退,回退到哪一步。图画得再漂亮,这五件事没定义,系统上线后就要靠人补。

这篇文章只讲管理系统的审批流设计,不讨论 OA 选型,也不讨论智能体能不能替代审批人。文中引用的标准与法规写明出处;具体节点、金额阈值与审批层级要按客户组织与制度确定,不套用统一模板。

一、先分清四个对象,不要把它们塞进一张表

审批流出问题,很多时候是因为四个对象被混成了一个「流程配置」页面。

表单。这次申请的内容——金额、供应商、合同号、附件。表单字段决定条件分支,也决定审批人怎么解析。金额写的是含税还是不含税、合同号是不是必填,都会影响后面的判断。

流程定义。节点顺序、分支条件、每个节点的审批人规则、会签方式、超时策略。它是模板,不是某一张单子。模板改了,已经发起的单子不应该跟着变。

流程实例。某一张单子发起后生成的那一条运行记录。它必须记住自己用的是哪个版本的流程定义、发起时解析出来的审批人是谁、每一个节点的进入和离开时间。

审批动作。同意、驳回、撤回、转办、加签、催办。每个动作改变的是实例的状态,不是流程定义。把动作做成按钮很容易,把每个动作的语义定清楚很难。

把这四层分开,后面很多问题才有地方放。比如「流程改了,在途单怎么办」是实例与定义的关系;「两个人同时点同意」是动作的并发控制;「离职了审批人是谁」是解析规则与兜底。四层混在一起,开发只能把所有规则写进一段又长又难改的判断里。

二、五个卡点,通常在上线后才暴露

1. 流程定义一改,在途单跟着变

常见的做法是把流程配置存在数据库里,运行时按最新配置走。结果是:采购制度改了一版,昨天发起的单子今天突然多出一个节点,或者原来要过的财务节点消失了。审批人看到的是「怎么和我发起时不一样」,发起人看到的是「怎么又要重新批一遍」。

正确做法是发起时冻结。实例保存流程定义版本号、节点快照和审批人解析结果;在途单按发起时的版本跑完,新单子用新版本。需要强制迁移的,单独做迁移工具,并记录迁移人、迁移时间和影响范围。冻结不是把数据复制一份就完了,还要让旧版本的节点在处理待办时仍能被正确解释。

2. 会签只写了「多人审批」,没写怎么算通过

会签至少有三件事要定:参与人怎么来、通过条件是什么、有人不表态怎么办。参与人可以是固定角色、部门负责人、表单里指定的几个人;通过条件可以是全票、按比例、或者出现一票否决就终止;不表态可以视为弃权、超时提醒,或者到期按规则处理。

如果需求里只写「财务部会签」,开发只能猜:三个人里两个人同意算不算过?财务总监没点算不算?把人加进来又撤掉,算不算已经表态?这些猜法上线后一定会被业务推翻。

3. 撤回、驳回、重提混着用

三个动作在页面上都像「把单子退回去」,语义完全不同。撤回是发起人把还没被处理的单子收回来;驳回是审批人认为内容不成立,退给发起人或者指定的前序节点;重提是修改后再次提交。三者对应的数据变化、通知对象、审批记录保留方式都不一样。

更麻烦的是「已经有人批过还能不能撤回」。有的企业允许,有的不允许;允许时是原单继续跑,还是作废后新开一张。这个规则不在需求阶段定死,开发只能按自己的理解写,最后变成每个项目一套,运维也说不清。

4. 审批人写成了具体的人

流程配置里直接选「张三」,当时能跑,三个月后张三调岗,单子就卡住。审批人应该写规则:发起人的部门负责人、申请金额对应级别的总经理、表单里选定的项目负责人、某个角色下的全部或指定一人。规则要能回答「解析不到人怎么办」,而不是等到上线后由管理员手工改单。

5. 代理、离职、超时没有兜底

审批人请假、离职、长期出差,是流程运维的日常。代理要有时效和范围,不能永久接管;离职要触发待办转移;超时要能提醒、升级,必要时转给兜底人。自动通过要谨慎,只适合金额小、风险低、规则明确的节点,并且要留下「为什么自动通过」的记录。

这些规则听起来琐碎,但它们决定了流程在真实组织里能不能跑满一年。演示环境里审批人永远在线,生产环境里审批人会休假、会调岗、会忘记点。

三、四个设计点:会签加签、撤回重提、审批人解析、版本冻结

1. 会签与加签:通过条件要能写成测试用例

会签不是「多个人审批」这么一句话。落地时要拆成四个字段:参与人集合、通过条件、否决条件、超时处理。参与人集合可以来自角色、部门、表单字段或者指定人;通过条件要明确是全票、过半、按人数比例,还是按权重;否决条件要明确是一票否决还是达到某个比例才终止;超时处理要明确是提醒、升级、转办还是自动弃权。

加签分前加签和后加签:前加签是在当前审批人之前插入一个节点,后加签是在当前节点之后、下一节点之前插入。加签会改变后续的审批顺序,因此要记录加签人、被加签人、加签位置和原因。加签不是转办,原审批人仍然保留在记录里;转办则是把当前待办交给另一个人,原审批人退出当前节点。

这些规则写成文字容易含糊,写成测试用例就清楚了:三个人会签,两人同意一人未表态,实例应该停在哪个状态;加签后原审批人还能不能看到待办;一票否决后其他审批人的待办是否自动关闭。用例跑不通,说明规则还没定完。

2. 撤回与重提:先定「已经批过」的边界

撤回的边界要写进需求:只允许撤回自己发起、且还没有任何审批人处理的单子;只要有人处理过,就只能走「终止并新开」或者「退回发起人修改后重提」,不能悄悄把已审批记录抹掉。终止要保留原单和全部审批记录,新开的单子关联原单号,方便对账。

重提也要区分两种情况:原单继续跑,还是生成新版本。原单继续跑适合只改附件、不改金额的场景;生成新版本适合金额、供应商、合同条款发生变化的场景。两种做法在审计上的含义不同,不能由开发临时决定。

下面这张表把五个常用动作的语义放在一起,需求评审时可以直接对照。表格里「是否可逆」一列经常被忽略,但它决定了要不要保留历史版本。

动作 谁能做 什么时候能做 数据变化 记录要求
同意 当前节点审批人 实例审批中,且该节点待处理 推进到下一节点或结束 人、身份、时间、意见、附件
驳回 当前节点审批人 实例审批中,且该节点待处理 回到发起人或指定前序节点 保留已产生的审批记录,不删除
撤回 发起人 尚无审批人处理,或制度允许的范围 终止或回到草稿,生成新版本 撤回原因、时间、原单号
转办 当前节点审批人 该节点待处理 审批人变更,原审批人退出 转办人、接收人、原因、时间
加签 当前审批人或流程管理员 该节点待处理,且制度允许 在当前节点前或后插入新节点 加签人、被加签人、位置、原因

3. 审批人解析:把「找谁」做成一个可替换的解析器

审批人不要直接存人名,要存解析规则。常见的五类规则是:指定人、角色、部门负责人、发起人上级、表单字段指定人。每一类都要有明确的解析时机——是发起时解析一次,还是每个节点进入时再解析。发起时解析适合固定审批人,节点进入时解析适合按当前组织实时取负责人。

解析失败要有兜底链:先按规则逐级上溯,比如部门负责人找不到就找上级部门负责人;仍然找不到,转给配置的兜底人或者流程管理员;兜底也为空,流程不能静默卡住,要生成一条待处理的异常任务,并通知发起人。解析过程要留痕,记录用了哪条规则、命中了谁、为什么落到兜底。

这块做成统一的解析器,后面加「按项目组」「按区域」「按金额区间」都只是新增一类规则,不用改流程引擎。反过来,如果每个节点都写一段取人代码,组织一调整就要改很多地方。

4. 版本冻结:新单用新版,老单跑完

流程定义的每次发布都要有版本号,实例发起时记录版本号并冻结节点、审批人规则和表单校验规则。修改流程只影响新发起的实例;在途实例继续按冻结的快照执行。需要升级在途实例时,走单独的迁移流程:先列出受影响的实例、当前节点、迁移后的节点,再由流程管理员确认,迁移记录进入审计日志。

这套做法会增加一点存储和查询成本,但能避免「改一次流程,所有在途单重新审批」这种事故。对于审批周期长的场景,比如合同、用印、付款,这个成本是值得的。

四、技术实现:状态机、快照、幂等与审计

状态机与审批解耦。单据状态由业务状态机管理:草稿、审批中、已通过、已驳回、已撤回、已作废。审批节点只是状态迁移的守卫,不直接改业务状态。这样同一张单子可以先走审批、再走付款、再走归档,审批流换了,业务状态仍然清楚。

实例快照。发起时保存流程版本、节点列表、审批人解析结果、表单关键字段。快照不是日志,它是运行时的依据;日志是事后回放的证据,两者都要有。

并发与幂等。同一节点多个审批人同时操作,或者用户连续点击两次提交,都会导致重复推进。做法是给实例加版本号,审批动作携带版本号做乐观锁;同时给每个动作生成幂等键,键由实例、节点、审批人、动作和客户端请求号组成。重复请求返回次结果,不重复推进,也不重复写审计。

通知与超时。提醒、升级、自动转办由服务端定时任务驱动,不靠前端计时,也不把「消息已发送」当成「审批已处理」。通知失败要重试并记录,超时规则要能按节点配置,而不是全局一个值。

审计留痕。每次动作记录:谁(本人、代理人还是智能体)、以什么身份、什么时间、从哪个入口、对哪条数据、做了什么、变更前后的值。代理要标明代,智能体要标来源。审计表按追加写,不提供修改和删除接口。

电子签名的边界。系统里的「同意」按钮是内部审批记录,不等同于法律意义上的电子签名。需要法律效力的合同、授权书,要按《电子签名法》第十三条、第十四条评估是否满足可靠电子签名条件,接入合规的电子签平台,并把签署结果回写到审批记录。内部审批与对外签署是两条链,不要用一条链代替。

五、智能体代办:能做什么,不能做什么

智能体接进审批流,价值不在「替人点同意」,而在把发起和催办这两头的重复动作接过去。边界划清楚,反而更容易落地。

可以做的三件事。一是起草:按模板填单、带出历史同类单据、检查附件和必填字段,生成一张待人工确认的草稿。二是查询:查制度、查额度、查同类单的处理结果,回答「这张单现在卡在谁那里」。三是催办与摘要:按待办列表提醒审批人,汇总卡点,给出「还差哪几个节点」的说明。

不建议做的三件事。代替审批人点同意或驳回;修改已经产生的审批记录;绕过会签、加签或超时规则。审批是有责任的判断,责任在人,智能体可以准备材料、给出建议,但不能替人承担签字后果。

接入方式。起草时以发起人身份调用,权限不超过发起人本人;需要跨系统查询时,用单独登记的服务账号,只授予必要的只读范围,不与人的账号混用;工具集只暴露读取接口和「创建草稿」,不暴露审批接口。智能体生成的草稿、建议和调用记录要单独标记,人工确认后再进入审批流。

审计要能回答三个问题。这条建议是谁在什么时间、基于哪些数据生成的;它调用了哪些接口、返回了什么;人工最终改了什么、为什么改。三个问题答不上来,智能体在审批场景里就只能停在演示。

六、交付物与验收

审批流项目结束时,交付的不应该只是一套能点的页面。下面六份材料决定了上线后能不能维护:流程清单与状态机图;审批矩阵(节点、审批人解析规则、会签条件、超时与兜底);流程版本与迁移方案;异常与越权用例集;审计日志字段说明;运维手册(代理、离职、超时、流程变更)。

验收指标按周可记录,不用「流程顺畅」这类无法验证的说法。可以看六项:审批用例通过率;流程改版后在途实例不受影响的比例;审批人解析成功率(含兜底命中);重复提交不重复推进的验证结果;审批记录能否回放到具体单据;各节点平均处理时长。指标用来发现卡点,不作为对客户的承诺。

七、边界与成本

不是所有审批都值得上系统。低频、单人、没有留痕要求的确认,用邮件或一张登记表就够;流程越复杂,配置、培训和运维成本越高。建议先跑三到五条主流程,比如采购、付款、合同、用印、请假,跑顺了再扩。

组织治理是前提。组织架构天天变、岗位职责说不清、代理人随意指定,再好的流程引擎也只能把混乱固化下来。上线前至少要把审批人规则、代理规则和离职交接规则定下来,否则系统只是把线下的等待搬到了线上。

涉及个人信息、财务数据与合同文本的审批,还要按《个人信息保护法》的最小必要原则和安全措施要求处理;具体合规义务由客户法务确认,本文不构成法律意见。

八、常见问题

能不能完全照现在的纸质流程做?

可以照着做,但要先区分「必须保留的控制点」和「历史习惯」。纸质流程里常有重复签字、并行补签、先办后补的动作,直接搬进系统会把等待时间放大。建议先把控制点列出来,再决定哪些合并、哪些保留。

流程改了,在途的单子怎么办?

默认按发起时的版本跑完,新单用新版本。需要统一升级的,走迁移工具,列出受影响实例并由管理员确认。不要用「运行时读最新配置」的做法,否则在途单会在审批人不知情的情况下变节点。

审批人离职或长期出差怎么办?

代理要有有效期和授权范围,离职触发待办转移,超时按节点规则升级或转兜底人。代理期间产生的审批记录要标明代,事后能查清是谁以谁的身份做的。

智能体能不能直接审批?

不建议。智能体可以做起草、查询、催办和摘要,审批动作留给有责任的人。确需自动处理的,只放在低风险、规则明确、可回滚的节点,并保留人工复核入口。

能不能设置超时自动通过?

只适合金额小、风险低、制度明确允许的节点,并且要记录自动通过的依据、时间和规则版本。合同、付款、用印这类节点不建议自动通过,超时应该升级给上级或兜底人,而不是默认放行。

附:口径与来源

· OMG《Business Process Model and Notation (BPMN) 2.0》,规范编号 formal/2011-01-03,2011 年发布;2013 年成为 ISO/IEC 19510:2013。本文只用它说明流程建模与执行语义的分层,具体引擎实现按选型确定。

· W. M. P. van der Aalst 等《Workflow Patterns》,Distributed and Parallel Databases 14(1):5–51,2003 年。会签、并行分支、同步汇合等控制结构的讨论,参考了这套模式分类。

· OWASP Top 10:2025,A01「失效的访问控制」、A09「安全日志和告警失效」。审批接口的越权与审计缺口,按这两类的检查思路设计用例。

· OWASP Application Security Verification Standard(ASVS)5.0,2025 年 5 月发布,共 17 章、约 350 条要求。访问控制与日志要求在服务端实现,前端隐藏不作为权限依据。

· NIST SP 800-53 Rev.5,AC-2 账户管理、AC-3 访问执行、AC-6 最小权限。用于说明审批账号、代理账号与服务账号的权限边界。

· 《中华人民共和国电子签名法》(2019 年修正)第十三条、第十四条:可靠的电子签名需满足专有、可控、改动可发现等条件,并与手写签名或盖章具有同等法律效力。内部审批点击不等同于可靠电子签名。

· 《中华人民共和国个人信息保护法》第六条、第五十一条:处理个人信息应具有明确、合理的目的,限于实现处理目的的最小范围,并采取相应的安全措施。审批数据涉及个人信息时按此评估。