AutoRpa/资料/PLAN.md

23 KiB
Raw Permalink Blame History

采购主链 RPA 编排与手机待办一期方案

Summary

一期按 RPA执行平台 + Python/MySQL 轻量状态中心 + 企业微信正式应用 + 本地 OCR 落地,覆盖主链 合同扫描件/合同系统 -> 返利中心采购协议 -> M5 采购订单。
目标不是只做一个机器人脚本,而是做成一套业务可见、异常可处理、手机可协同的流程编排系统:

  • 主流程默认尽量全自动运行
  • OCR/映射不确定项转为企业微信手机待办
  • 每个节点状态、耗时、错误原因、处理人都写入状态中心
  • 业务可在手机端完成 查看上下文 / 补录字段 / 继续 / 重试 / 转人工
  • RPA 执行平台只负责系统操作与节点执行,不承载核心状态和业务协同

Key Changes

0. 入池触发与文件规范

一期默认以“共享文件夹入池 + 状态中心建单”作为统一触发方式,不接受 RPA 平台内部自行起单。

  • 合同扫描件、年度协议、批次协议、返利中心导入模板都必须先进入约定共享目录
  • 状态中心负责监听入池目录,或由人工在状态中心页面选择文件后建单
  • RPA 平台只能消费已经建好的 job,不能绕过状态中心直接执行

入池对象至少区分以下几类:

  • 年度协议
  • 批次合同
  • 合同附件/补充页
  • 返利中心细单导入模板

文件命名规则一期建议固定为:

  • 日期_供应商名称_计划员_合同类型
  • 允许补充流水号或附件序号,例如 20260625_国药控股_张三_批次合同_01.pdf

入池校验至少包括:

  • 文件类型是否在允许范围内(PDF/图片/Excel)
  • 是否命中命名规范
  • 是否能识别供应商名称与计划员
  • 同一合同编号/同一业务键是否已存在未完成实例
  • 是否存在多页缺失、重复上传、同名覆盖

入池失败时不得直接丢给 RPA 平台,应由状态中心生成待处理记录:

  • 命名不规范 -> 计划员待办
  • 关键文件缺失 -> 计划员待办
  • 疑似重复入池 -> 提示并阻止新建,必要时转运维或项目负责人确认

1. 总体架构与职责边界

  • RPA 执行平台(影刀 / 艺赛旗 / 其他)

    • 负责登录系统、页面检索、字段填充、模板导入、截图、日志/录屏采集、执行结果回传
    • 每完成一个节点,调用状态中心接口上报节点结果
    • 不直接保存业务主状态,不直接承载人工审批逻辑
  • 轻量状态中心(Python + MySQL)

    • 负责流程实例、节点状态、待办、角色路由、重试控制、日志归档、配置映射、执行平台路由
    • 提供给 RPA 平台的流程启动、节点回调、异常上报、人工处理、继续执行接口
    • 提供给企业微信的消息卡片、待办链接、处理回调接口
  • 本地 OCR 服务

    • 一期默认本地部署,优先按 PaddleOCR 设计
    • 负责从扫描件/PDF 中提取文本和结构化字段
    • 输出带置信度的 JSON,不直接写业务系统
  • 企业微信正式应用

    • 负责个人待办、异常告警、处理入口、节点进度消息
    • 不做主流程编排,只作为移动交互层

1.1 我方自有能力边界

以下能力必须沉淀在“我们自己的状态中心”中,而不是绑定在某一家 RPA 平台内部:

  • 流程主状态与节点状态机
  • 合同入池、判重与幂等控制
  • OCR 结果存档、映射配置、规则版本
  • 手机待办、角色路由、人工处理留痕
  • 成功判定口径、错误码体系、证据归档
  • 多 RPA 平台的统一查询、统一审计和统一对外口径

换句话说,RPA 平台是可替换的“执行手”,状态中心才是我们的“流程主控”和“业务资产沉淀层”。

1.2 执行平台可替换边界

一期支持将底层执行器设计为可切换,但边界要先写死:

  • 可切换的是“执行平台”,不可切换的是状态中心、企业微信协同、业务规则和成功判定口径
  • 允许“按新单切换平台”,也允许“按节点配置平台”
  • 不做“单个节点执行到一半跨平台接力”
  • 老单默认沿用建单时选定的平台,不在执行过程中强行迁移
  • 新平台接入前必须通过统一 POC 验证清单

1.3 候选平台能力判断原则

当前候选执行平台可包括影刀、艺赛旗等,但是否可用于本项目,不能只看厂商宣传页,要按本项目关键动作验证:

  • 目标系统登录与稳定检索
  • 表单填写、弹窗处理、模板导入
  • 文件上传/下载与本地目录交互
  • 截图、日志、录屏留证
  • 自定义 HTTP 回调状态中心

满足上述能力后,才能认为该平台可替代现有执行器。

2. 一期业务主链与节点定义

一期只做以下主链,其他如订单中心分货、招采子系统不纳入一期:

  1. 合同文件入池
  2. OCR 识别与字段抽取
  3. 字段映射与业务校验
  4. 合同系统信息补齐/确认
  5. 返利中心采购协议检索与总单录入
  6. 返利中心细单模板生成与导入
  7. 返利中心结果校验
  8. M5 采购订单创建
  9. M5 保存与收货通知单生成
  10. 流程完成归档

2.1 合同系统前置条件

返利中心与 M5 的自动执行,必须建立在“合同系统已达到可执行状态”的前提上。

一期要明确区分以下几个动作:

  • 合同系统信息补齐
  • 合同系统送审
  • 合同系统审核通过
  • 审核驳回/需补充资料

建议一期按以下边界落地:

  • 机器人可协助录入合同系统字段,并回写录入结果
  • “送审”动作是否由机器人执行,需要业务确认后写死
  • 只有合同处于“已审核/审核通过”状态,才能进入返利中心节点
  • 审核未通过或缺资料,不得继续推进,直接转计划员或采购待办

状态中心中必须记录:

  • 合同系统单号
  • 合同系统当前审核状态
  • 审核通过时间
  • 驳回原因摘要

2.2 一期明确不纳入范围

以下内容虽然在原始资料中提到,但不纳入一期实施:

  • 订单中心分货与销售订单联动
  • 招采子系统医院计划抓取与回传
  • 发货后的一票/二票自动上传
  • 渠道价管理与维护

如后续要做,应单独建二期/三期方案,不在一期需求、排期和验收中混入。

每个节点统一有以下状态:

  • PENDING
  • RUNNING
  • WAITING_USER
  • SUCCESS
  • FAILED_RETRYABLE
  • FAILED_MANUAL
  • CANCELLED

2.3 状态流转规则

节点状态不仅要有枚举,还要有明确迁移规则,避免同一单被重复推进:

  • PENDING -> RUNNING
  • RUNNING -> SUCCESS
  • RUNNING -> WAITING_USER
  • RUNNING -> FAILED_RETRYABLE
  • RUNNING -> FAILED_MANUAL
  • WAITING_USER -> RUNNING
  • WAITING_USER -> CANCELLED
  • WAITING_USER -> FAILED_MANUAL
  • FAILED_RETRYABLE -> RUNNING

补充约束:

  • 同一节点同一时刻只能有一个有效执行上下文
  • 手机端“确认并继续”只能成功推进一次,后续重复提交必须返回幂等结果
  • 节点超时后不能静默停留,必须升级为催办或异常状态
  • CANCELLED 和 FAILED_MANUAL 默认不可自动恢复,只能人工明确重开

每个节点必须记录:

  • 流程单号
  • 合同编号
  • 供应商
  • 当前节点编码
  • 节点开始/结束时间
  • 执行结果
  • 错误码
  • 错误摘要
  • 截图/日志路径
  • 当前处理角色
  • 当前处理人
  • 重试次数

3. 手机待办与角色路由

手机待办默认按角色路由,不是固定发给某个人。

一期角色至少包括:

  • 计划员
  • 采购
  • 质管
  • 运维/机器人管理员

路由规则:

  • OCR/映射不确定 -> 计划员
  • 返利中心录入失败且需业务判断 -> 采购
  • M5 保存失败且提示质管基础数据问题 -> 质管
  • 机器人登录失败、页面结构变化、系统超时 -> 运维
  • 多次重试仍失败 -> 运维 + 当前业务角色

3.1 企业微信一期落地方式

一期建议将企业微信能力落成:

  • 消息通知
  • 模版卡片消息更新
  • H5 处理页/详情页
  • 用户身份识别与回调处理

即:企业微信负责“通知 + 打开处理入口 + 提交处理动作”,状态推进仍由状态中心完成。

说明:

  • 一期文档中的“手机待办”默认指“企业微信消息卡片 + H5 待处理页”的组合能力
  • 不把企业微信原生待办体系作为一期已确认前提,若后续验证可接,再单独扩展
  • 所有按钮动作最终都必须调用状态中心接口,并以状态中心结果为准

企业微信待办支持的动作固定为:

  • 查看详情
  • 补录/修改字段
  • 确认并继续
  • 重新执行当前节点
  • 转人工处理
  • 终止本单

消息内容必须包含:

  • 合同编号
  • 供应商名称
  • 当前节点
  • 错误摘要或待确认原因
  • 已识别关键字段摘要
  • 最近一张错误截图
  • 处理入口链接

3.2 人工处理字段边界

手机端“补录/修改字段”不能放成无限编辑,必须收敛为白名单字段。

一期建议按角色控制:

  • 计划员:合同编号、承付模式、承付参数、计划员归属、合同有效期、OCR 识别结果修正
  • 采购:供应商映射、货品映射、协议单价、返利中心导入模板相关字段
  • 质管:仅处理基础资料维护完成确认,不直接改合同业务字段
  • 运维:只能做重试、转派、失败归档,不修改业务字段值

以下字段若涉及修改,必须记录修改前后值、修改人、修改时间、修改原因:

  • 合同编号
  • 供应商名称/编码
  • 结算方式
  • 承付模式与承付参数
  • 货品编码/数量/单价
  • M5 货源选择

3.3 人性化待办体验

为了提升业务接受度,一期建议把以下体验项明确纳入需求,而不是留到后期“有空再优化”:

  • 人话状态
    • 不只显示节点编码,要显示“系统正在做什么、通常还要多久、下一步会怎样”
  • 错误翻译
    • 除错误码外,必须给出业务能看懂的错误原因和建议动作
  • 为什么发给你
    • 每条待办都说明“当前归你处理的原因”和“本次需要你确认什么”
  • 修改前后对比
    • 补录字段时同时展示 OCR 原值、系统建议值、用户当前填写值
  • 提交后即时回执
    • 用户点击继续/重试后,立即反馈“已受理、预计多久再次执行、不要重复提交”
  • 一屏看完最近证据
    • 待办详情首页直接展示合同编号、供应商、关键字段、最近错误截图、错误摘要
  • 预计耗时提示
    • 关键节点给出大概执行时长,降低业务等待焦虑
  • 高风险动作撤回窗口
    • 对“终止本单”“转人工处理”等动作,建议提供短时间撤回能力

4. OCR 与规则映射策略

一期默认本地 OCR,并预留适配层,后续可切云 OCR,但一期不依赖云能力。

OCR 输出必须是结构化 JSON,至少包含:

  • supplier_name
  • planner_name
  • contract_no
  • settlement_text
  • payment_term_text
  • contract_validity
  • items[]
  • field_confidence{}

映射与校验不在 RPA 平台里硬编码,统一放在状态中心配置表中。配置表至少包括:

  • 供应商映射表
  • 货品映射表
  • 结算方式映射表
  • 承付模式映射表
  • 合同编号规则表
  • 角色路由规则表
  • 执行平台路由规则表

配置治理还需补充:

  • 所有映射配置必须带版本号、生效时间、维护人
  • 每个 job 在开始执行时要绑定一份映射版本快照
  • 重试默认沿用原映射版本,除非人工明确选择“按最新配置重跑”
  • 配置表变更要保留审计记录,不能直接覆盖无痕修改

承付模式映射规则一期采用“规则优先 + 人工兜底”:

  • 精确命中字典表达,直接转系统编码
  • 能识别 N天 的标准表达,拆成 模式代码 + N
  • 无法稳定命中或置信度低于阈值,转 WAITING_USER
  • 禁止在低置信度情况下自动猜测继续录入

5. 状态中心接口与数据实体

重要接口/公共契约如下:

  • POST /api/jobs
    • 创建流程实例,入参为合同文件元数据和发起来源
  • POST /api/jobs/{jobId}/nodes/{nodeCode}/start
    • RPA 平台或调度器上报节点开始
  • POST /api/jobs/{jobId}/nodes/{nodeCode}/complete
    • 上报节点成功,附输出数据
  • POST /api/jobs/{jobId}/nodes/{nodeCode}/fail
    • 上报失败,附错误码、截图、日志、是否可重试
  • POST /api/tasks/{taskId}/submit
    • 手机端提交人工处理结果
  • POST /api/jobs/{jobId}/retry
    • 人工或系统触发重试
  • POST /api/jobs/{jobId}/handoff
    • 转人工或转其他角色
  • GET /api/jobs/{jobId}
    • 查询整单状态与节点轨迹
  • GET /api/tasks/my
    • 查询当前用户手机待办

5.1 幂等与唯一键

状态中心必须承担幂等控制,不能把“是否重复执行”交给具体 RPA 平台临时判断。

至少要定义以下唯一键/幂等键:

  • job 业务唯一键:建议由 合同编号 + 合同类型 + 供应商 + 发起来源 组合生成
  • 入池幂等键:建议由 文件哈希 + 文件名 + 上传时间窗 组合生成
  • 节点回调幂等键:jobId + nodeCode + attemptNo + callbackType
  • 手机待办提交幂等键:taskId + action + submitToken

系统行为建议固定为:

  • 未完成实例存在时,同业务键默认禁止重复建单
  • 允许“重跑当前节点”,但不得覆盖历史节点记录
  • 如需整单重跑,应新建新的 job,并关联原 jobId
  • 历史 job 的 OCR 结果、截图、日志必须可追溯,不得被新单覆盖

核心实体至少包括:

  • job:一份合同的一次全流程实例
  • job_node:流程实例下的节点执行记录
  • user_task:手机待办/人工处理单
  • mapping_config:业务映射配置
  • executor_binding_config:节点与执行平台绑定配置
  • job_artifact:截图、OCR JSON、导入模板、日志文件
  • job_event:状态变更事件流

建议增加的关键字段:

  • job.parent_job_id:整单重跑或克隆来源
  • job.mapping_version:执行时绑定的配置版本
  • job.executor_platform:本单默认执行平台
  • job.source_file_hash:源文件去重标识
  • job_node.attempt_no:节点第几次尝试
  • job_node.executor_platform:本次节点尝试由哪个平台执行
  • job_node.executor_run_id:平台侧任务号/运行号
  • user_task.submit_token:防重复提交令牌
  • job_artifact.artifact_type:OCR JSON、截图、模板、日志等分类

6. 节点执行与重试策略

重试分三类:

  • 系统型自动重试
    • 页面超时、偶发网络异常、系统短暂不可用
    • 默认自动重试 1 到 2 次
  • 业务型人工确认后重试
    • 字段识别不确定、映射缺失、返利中心校验不通过
    • 手机待办确认后重试当前节点
  • 人工接管
    • 连续失败、逻辑分支超出机器人能力、系统规则变化
    • 标记为 FAILED_MANUAL,由人工线下处理,流程保留上下文

必须明确的失败分流:

  • OCR 失败 -> 待办给计划员
  • 合同编号无法匹配 -> 待办给计划员
  • 返利中心模板导入失败 -> 待办给采购
  • M5 因质管基础数据不全无法保存 -> 待办给质管
  • 登录失败/控件定位失败/页面结构变化 -> 待办给运维
  • 平台能力不满足当前节点要求 -> 待办给运维/项目负责人评估是否切换执行平台

6.1 超时与升级策略

除失败分流外,还需要定义“长时间没人处理”与“节点卡住”的升级规则。

建议一期先定简单规则:

  • OCR/映射类待办超过 30 分钟未处理 -> 再次通知当前角色
  • 超过 2 小时未处理 -> 升级通知项目负责人/备岗人员
  • 返利中心/M5 运行中节点超过阈值未回调 -> 标记超时异常并通知运维
  • 夜间非工作时段是否升级,需按业务班次另行配置

所有升级动作都必须进入 job_event 留痕。

7. 业务可见性设计

一期不单独建设复杂 BI 看板,但状态中心必须支持后续扩展。当前可见性分两层:

  • 企业微信消息流
    • 面向业务个人,解决“手机知道发生了什么”
  • 状态中心查询页
    • 面向运维/项目负责人,按合同编号查看节点轨迹、截图、当前责任方、重试记录

查询页至少支持:

  • 按日期/供应商/合同编号/状态筛选
  • 查看当前卡点节点
  • 查看待办归属角色与处理记录
  • 查看 OCR 结果和映射结果
  • 查看返利中心/M5 错误截图与日志摘要

7.1 成功判定与结果回写口径

一期必须明确“节点成功”不是页面点完就算成功,而是拿到对应业务对象与校验结果。

至少要求:

  • 合同系统成功:返回合同系统单号,且能查询到对应状态
  • 返利中心总单成功:返回总单编号,且关键字段与输入一致
  • 返利中心细单导入成功:返回导入行数、失败行数、失败原因摘要
  • M5 成功:返回采购订单号
  • 收货通知单生成成功:返回通知单号

建议状态中心在节点成功回调中强制要求携带:

  • 业务单号
  • 关键字段摘要
  • 成功截图
  • 校验结果

如仅有“操作已提交”但未取得业务编号,应落为中间态或待校验态,不能直接记 SUCCESS。

7.3 多 RPA 切换策略

为了形成长期竞争力,一期方案支持“执行平台可替换”,但切换策略必须保守可控:

  • 切换单位以“新单”或“节点配置”优先,不以“运行中半节点切换”为目标
  • 每个节点先声明所需能力标签,例如 desktop_ui、file_upload、excel_template、http_callback
  • 每个执行平台声明自己支持的能力标签
  • 状态中心根据节点所需能力和平台可用能力决定路由
  • 平台切换前必须通过统一验证清单:登录、检索、模板导入、截图/日志、HTTP 回调

这样做的目的不是追求脚本 100% 通用,而是确保:

  • 业务流程不被单一厂商绑定
  • 状态、待办、规则、证据统一留在我方系统
  • 当成本、授权或稳定性发生变化时,可平滑更换底层执行平台

7.4 面向业务方的竞争价值

多 RPA 可切换的价值,不只是技术选型灵活,更要落实到业务能感受到的收益:

  • 不因单一工具变化而中断业务流程
  • 同一套手机待办、同一套状态查询,不需要业务重新学一套系统
  • 平台替换时,合同轨迹、截图、历史处理记录不会丢
  • 某个平台不稳定时,可逐步把新单切到更稳的平台,业务侧感知更平滑
  • 后续新增流程时,优先复用既有状态中心和手机协同能力,减少重复建设

7.2 证据留存与权限控制

一期虽然不做复杂平台,但必须先把资料、日志和截图的留存规则定下来。

至少要明确:

  • 合同原件、OCR JSON、返利模板、执行截图、运行日志分别存放在哪里
  • 文件目录命名是否按 jobId/节点/时间 归档
  • 保留时长与清理策略
  • 哪些角色可查看合同原件,哪些只能看摘要/脱敏截图
  • 企业微信消息中是否只放缩略图和链接,不直接下发完整合同文件

涉及合同和供应商信息时,建议默认:

  • 手机端只展示必要摘要
  • 完整附件放状态中心受控页面查看
  • 所有下载和查看动作记录审计日志

Test Plan

核心流程场景

  1. 合同文件命名规范、字段完整、OCR 置信度高
    • 预期:全自动跑通到 M5 完成,无人工介入
  2. OCR 成功但承付模式未命中字典
    • 预期:转计划员手机待办,补录后继续执行
  3. 返利中心细单导入模板格式错误
    • 预期:节点失败,通知采购,可修正后重试当前节点
  4. M5 保存时报质管未维护
    • 预期:转质管手机待办,修复后重试
  5. 当前执行平台登录返利中心失败
    • 预期:自动重试后仍失败,转运维待办
  6. 业务在手机端点击“转人工处理”
    • 预期:流程进入 FAILED_MANUAL,保留完整上下文
  7. 同一合同重复发起
    • 预期:状态中心拦截或提示重复实例,避免重复录单
  8. 合同系统未审核通过
    • 预期:流程停在审核前置节点,不进入返利中心
  9. 企业微信待办重复点击提交
    • 预期:只推进一次,其余请求返回幂等结果
  10. 返利中心细单部分导入成功、部分失败
  • 预期:记录成功/失败行明细,转采购判断是否修正后续跑
  1. 入池文件命名不规范或缺页
  • 预期:不启动任何 RPA 平台,直接转计划员待办
  1. 待办长时间未处理
  • 预期:按升级规则再次通知并记录事件
  1. 新单切换到另一执行平台
  • 预期:状态中心仍可统一建单、回调、留痕与查询
  1. 用户提交待办后立即收到受理回执
  • 预期:用户知道系统已接单、无需重复点击
  1. 用户查看待办详情时可直接看懂错误原因
  • 预期:无需再去群里追问“这条待办要我干嘛”

接口与状态场景

  1. 节点开始、成功、失败回调顺序正确
  2. 同一节点重复回调具备幂等处理
  3. 手机待办提交后只能推进一次,避免重复操作
  4. 重试后产生新的节点执行记录,但保留历史失败记录
  5. 企业微信消息与状态中心中的责任人、状态一致
  6. 整单重跑会创建新的 job,并保留原 job 关联
  7. 节点超时后会触发升级通知,不会无限停留在 RUNNING
  8. 不同执行平台回调到状态中心时,状态口径与证据口径保持一致

验收标准

  • 业务能在手机端知道每单当前跑到哪一步
  • 关键不确定项不会被机器人“猜着填”
  • 任何失败都能定位到具体节点、原因、截图和责任角色
  • 一份合同从入池到 M5 完成的轨迹可完整追溯
  • 能区分“本次只是操作提交”与“业务单号已真正生成”
  • 同一合同不会因重复上传或重复点击而生成重复业务结果
  • 不依赖 OpenClaw,也不依赖单一 RPA 厂商内置 OCR 即可完成一期

Assumptions

  • 一期默认只接入一个主执行平台上线,但架构上不与单一平台绑定
  • 影刀、艺赛旗等候选平台是否正式接入,需以项目 POC 验证结果为准
  • OpenClaw 一期不使用
  • 企业微信可申请正式企业应用并支持消息、回调和待办入口
  • 轻量服务技术栈固定为 Python + MySQL
  • OCR 一期默认本地部署,优先按 PaddleOCR 设计
  • 一期范围只覆盖 合同 -> 返利中心 -> M5
  • 映射规则不再依赖 Excel,统一进入状态中心配置表
  • 企业微信一期至少可提供消息卡片、H5 处理入口、身份识别与回调能力
  • 合同扫描件默认来自共享目录或状态中心手工入池,不考虑邮件自动收件作为一期入口
  • 业务目标是“尽量全自动”,但 OCR/映射不确定项必须转手机待办,不做自动猜测