# 采购主链 RPA 一期 · 实施与验收规范 > 用途:把《三方会审版需求文档》和《设计文档》落成**开发能照着做、验收能照着勾**的执行手册。 > 读者:①Trae(写上层状态中心代码) ②艺赛旗 iS-RPA 开发(搭下层页面流程) ③业务方(按业务验收标准确认) ④项目负责人(你,通盘把控)。 > 语言:全中文。术语见文末《名词表》。 --- ## 第一部分 · 总览:这套系统到底怎么分工 ### 1.1 上下两层(务必先分清) 整套系统是**上下两层**,由**两个不同工具**实现,不要混为一谈: ``` ┌──────────────────────────────────────────────────────────┐ │ 上层:状态中心(大脑) ← Trae 写后台+网页代码 │ │ · 决定每一单现在该走哪一步、出错派给谁 │ │ · 存 job 状态 / 对码结果 / 证据 / 业务编号 │ │ · 【步骤树状图界面】就在这层,是网页,业务打开就能看进度 │ │ · 不亲自去点任何外部系统的页面 │ └───────────────────────────▲──────────────────────────────┘ │ HTTP 接口:下命令(派节点) / 收回执(成功/失败) │ 传的都是 JSON,不共享数据库 ┌───────────────────────────┴──────────────────────────────┐ │ 下层:艺赛旗 iS-RPA(手脚) ← 在艺赛旗设计器里可视化编排 │ │ · 真正去点 医药城/合同系统/返利中心/M5 的页面 │ │ · 是"搭流程",不是"录视频";能处理 M5 桌面客户端 │ │ · 每个动作做完,HTTP 回调状态中心报结果 │ └────────────────────────────────────────────────────────────┘ ``` > 澄清你最初的困惑:**不是人去录视频**。是两拨代码活——Trae 写状态中心(网页+后台),艺赛旗里搭 RPA 流程。步骤树状图是 Trae 做出来的**网页界面**,实时显示每单进度,不是 RPA 录出来的东西。 ### 1.2 谁做什么(职责边界) | 工作 | 归谁 | 产物 | | --- | --- | --- | | 数据库建表、状态机、对码引擎、幂等去重 | Trae | 后台服务 | | 派发节点、接收回调、判断下一步 | Trae | API | | 待办网页、步骤树状图、整单查询页 | Trae | 前端网页 | | 企业微信推送、H5 待办确认 | Trae | 集成 | | 登录各系统、导出Excel、建单、上传PDF、录入M5 | 艺赛旗 | RPA流程包 | | 页面动作做完回调状态中心 | 艺赛旗 | HTTP回调 | | OCR 识别线下手工单 | 独立OCR服务(本地) | 字段JSON | | 按业务验收标准确认每步对不对 | 业务方 | 验收签字 | ### 1.3 一次完整流程 = 一个 job **一个 job = 同一供应商 + 同一订单日期 + 同一来源 的一批订单 = 一条合同。** job 从①走到⑥,每一步是一个"节点",节点做完才走下一个。 --- ## 第二部分 · 一页地图(贴在最显眼处) ``` ════════════════════════════════════════════════════════════════════ 采购主链 RPA 一期 · 一页导读 以销定采:先在京东/阿里卖货 → 反向采购 → 把每天手工采购链自动化 ════════════════════════════════════════════════════════════════════ 【主链六段】 ▓=RPA干 ░=人干 ⊙=RPA等 谁干 停了怎么办 ┌──────────────────────────────────────────────┐ │ ① 导订单 登录平台→选前一天→导出Excel │ ▓▓▓ 登录失败→自动重试→运维 │ 医药城:合同要合并PDF上传 │ │ 小药药:年度协议,不传合同 │ │ 线下单:图片走OCR (~100份/月) │ ├──────────────────────────────────────────────┤ │ ② 产品对码 ★核心难点★ │ ▓▓▓ 单条命中不了 │ 平台药名→[通用名+批准文号+规格+厂家]→M5货品 │ ░ →这条挂起转人工 │ ②b 没采过的品种→M5新增货源 │ →整批继续 ├──────────────────────────────────────────────┤ │ ③ 合同建单 选模板→改签约日=订单日 │ ▓▓▓ 合同禁掉失效 │ 医药城:同供应商同日合同合并成1个PDF上传 │ →邮件通知采购 │ ┌送审→等半小时→出【合同编号】🔑 │ ⊙ (建议轮询别死等) ├──────────────────────────────────────────────┤ │ ④ 返利中心 用【合同编号】查总单→填→导细单 │ ▓▓▓ 重复编码 │ 细单备注必填【订单号】特定补偿必填0 │ ░ →挂起,整批继续 │ ┌送审 ⭐决定成败⭐ 不做则M5品种跳不出来 │ ▓▓▓ 不送审→硬阻断 ├──────────────────────────────────────────────┤ │ ⑤ M5建采购单(1055) 选正常保管账,备注填订单号 │ ▓▓▓ 质管资料缺失 │ 结算/发票/接收方式=返利中心已下发,不用填 │ →停!转人工,不等质管 │ ★★录完就停,不点保存★★ │ ░ (②阶段其实已能预警) ├──────────────────────────────────────────────┤ │ ⑥ 收尾 检查→保存→签订→生成收货通知单 │ ░→▓ — │ ⚠不可逆:签订后改不了,一期人工把关 │ (准确率OK后交RPA) └──────────────────────────────────────────────┘ ════════════════════════════════════════════════════════════════════ 【两把钥匙:五系统无API,全靠RPA搬,靠这两个值接力】 🔑货品ID/编码(②产出) ─贯穿─► ③④⑤ 填明细都用它 🔑合同编号(③产出) ─► ④按合同号查总单→送审 ─► ⑤M5能带出协议 反直觉:卡M5的送审在【返利中心】,不在合同系统 🧵订单号(①产出,只追溯): 返利备注→物流软件看 │ M5备注→结算勾对账看 ════════════════════════════════════════════════════════════════════ 【停点分类:停住不蠢,分不清"整批停/单条挂起"才蠢】 A.该停·业务拍板 M5质管缺失→停转人工不等质管;不可逆保存签订→留给人 B.单条挂起别拖累 对码不上/返利重复编码→这条转人工,整批继续 C.可以更聪明 等审批→轮询别死等;网页卡顿→自动重试1-2次再报警 ════════════════════════════════════════════════════════════════════ ``` --- ## 第三部分 · 步骤树状图长什么样(Trae 要做的网页界面) 这是状态中心的核心界面,业务打开就知道每单跑到哪、卡在哪。 ``` 📋 Job: YYC-亿昊药业-20260804 状态: ⏸ 等待人工处理 ──────────────────────────────────────────────────────────── ✅ ① 导订单 ORDER_FETCH 导出12单 22:01 12秒 [看证据] ✅ ② 产品对码 PRODUCT_MATCH 对码 10/12 ⚠ 22:01 3秒 └─ ⏸ 2条未命中,等计划员选择 [去处理→] ⬜ ②b 货源新增 SOURCE_ADD — ⬜ ③ 合同建单 CONTRACT_CREATE — ⬜ ④ 返利总单 REBATE_HEADER — ⬜ ④ 返利细单 REBATE_IMPORT — ⬜ ④ 返利送审 REBATE_SUBMIT — ⬜ ⑤ M5建单 M5_CREATE_ORDER — ⬜ ⑥ 人工保存签订 — ⬜ ⑥ 生成收货通知单 — ──────────────────────────────────────────────────────────── 🔑合同编号: — 🔑返利总单号: — 🧵订单号: ZQD...(共12个) 图标说明: ✅完成 ⏸等人处理 ❌失败 🔄重试中 ⬜未开始 ──────────────────────────────────────────────────────────── [重跑本单] [转人工] [查看完整事件流] [导出证据包] ``` **界面验收标准(给 Trae)**: - [ ] 能列出该 job 全部节点及状态(用上面10个节点)。 - [ ] 每个已完成节点显示:完成时间、耗时、关键结果摘要、证据链接。 - [ ] 等人处理的节点有醒目标识 + "去处理"按钮跳到待办页。 - [ ] 顶部三把钥匙(合同编号/返利总单号/订单号)实时回填。 - [ ] 失败节点显示错误码 + 人话原因 + 截图。 - [ ] 列表能按状态筛选(全部/进行中/等人/失败/完成)。 --- ## 第四部分 · 逐节点执行手册(核心) > 读法:每个节点四块—— > ①**节点信息**(谁干、前置、进出什么); > ②**页面操作步骤**(给艺赛旗,一步一动作,能照着搭); > ③**验收标准**分两栏——**代码验收**(给 Trae/艺赛旗,机器能自检)+**业务验收**(给业务方,人能对着勾); > ④**失败与去向**(停了怎么办,派给谁)。 > > 术语:complete=节点成功回调;fail=节点失败回调;挂起=这一条转人工、整批继续;硬阻断=整个 job 停。 --- ### 节点① ORDER_FETCH · 订单获取 | 项 | 内容 | | --- | --- | | 执行方 | 艺赛旗 iS-RPA | | 前置条件 | 平台账号可登录;job 已建(来源+日期已定) | | 输入 | 来源类型(医药城/小药药)、订单日期(默认前一天) | | 输出 | 订单明细 Excel、订单号列表、供应商列表 | **页面操作步骤(给艺赛旗)**: 1. 打开对应平台登录页,输入账号密码,登录。 2. 进入"我的订单 / 订单管理"。 3. 选择日期 = 前一天(或状态中心下发的指定日期)。 4. 【待确认】按订单状态过滤(只取"待收货"还是含其他,等业务拍板)。 5. 点"导出订单明细",等待下载完成。 6. 把下载的 Excel 存到证据目录,截图当前页面。 7. HTTP 回调 complete,带 Excel 路径 + 解析出的订单号列表 + 供应商列表。 **输出示例(回调 complete)**: ```json { "attemptNo": 1, "executorRunId": "YD-RUN-001", "artifacts": [{ "artifactType": "SOURCE_EXCEL", "storagePath": "/data/jobs/.../orders.xls" }], "summary": { "orderCount": 12, "supplierList": ["重庆亿昊药业有限公司"], "orderNoList": ["ZQD202608041850483308"] } } ``` **验收标准** | 代码验收(机器自检) | 业务验收(人对着勾) | | --- | --- | | [ ] 登录成功,进到订单列表页 | [ ] 导出的单量 = 业务当天实际下单量,不多不少 | | [ ] 日期筛选值 = 目标日期 | [ ] 供应商名、订单号与平台页面一致 | | [ ] Excel 成功下载且非空 | [ ] 选的日期就是"前一天",没选错 | | [ ] 订单号/供应商已解析入 order_item | [ ] 抽查一单:品名/规格/数量与平台一致 | | [ ] 证据目录有 Excel + 截图 | | **失败与去向** | 情况 | errorCode | 可重试 | 去向 | | --- | --- | --- | --- | | 登录失败/验证码 | SYS_LOGIN_FAIL | 是(1-2次) | 仍失败→运维OPS | | 页面卡顿/超时 | SYS_PAGE_TIMEOUT | 是(1-2次) | 仍失败→运维OPS | | 导出按钮找不到(改版) | UI_ELEMENT_NOT_FOUND | 否 | 运维OPS | | 当天无订单 | — | — | 正常结束,job 标记"空单" | --- ### 节点①b OCR_EXTRACT · 线下手工单识别(仅线下单) | 项 | 内容 | | --- | --- | | 执行方 | 独立 OCR 服务(本地优先) + 艺赛旗取件 | | 前置条件 | 线下供应商发来的开单截图/PDF 已入证据目录 | | 输入 | 图片/PDF 文件 | | 输出 | 结构化字段 JSON(品名/规格/厂家/批准文号/数量/单价/供应商)+ 置信度 | **页面操作步骤**: 1. 读取线下单图片/PDF。 2. 调 OCR 服务,拿回字段 + 每字段置信度。 3. 低于阈值或缺关键字段 → 标记转人工。 4. 识别结果写入 order_item(与线上同结构),进入对码。 5. 回调 complete,带识别 JSON 与置信度。 **验收标准** | 代码验收 | 业务验收 | | --- | --- | | [ ] 每字段带置信度 | [ ] 抽查:识别的品名/规格/数量与原图一致 | | [ ] 低置信度/缺字段 → 建人工待办 | [ ] 人工能看到原图,方便核对 | | [ ] 识别结果结构与线上订单一致 | [ ] 识别错的能改,改完能继续 | **失败与去向** | 情况 | errorCode | 可重试 | 去向 | | --- | --- | --- | --- | | 图片模糊/识别失败 | BIZ_OCR_LOW_CONF | 否 | 计划员PLANNER 看原图人工录 | | OCR 服务不可用 | SYS_OCR_DOWN | 是 | 仍失败→运维OPS | > ⚠️ 一期最大卡点:线上 OCR 涉信息安全,须法务+数据中心批;否则本地部署。此节点部署方式**待确认**。 --- ### 节点② PRODUCT_MATCH · 产品对码 ★核心难点★ | 项 | 内容 | | --- | --- | | 执行方 | 状态中心(Trae 内部算,不点页面) | | 前置条件 | order_item 已入库;对码表 mapping_config(PRODUCT) 已加载 | | 输入 | 每行订单的:通用名/批准文号/规格/厂家 | | 输出 | 每行 match_status(EXACT/FUZZY/MULTI/NONE) + 货品ID/编码;未命中清单 | **处理步骤(给 Trae)**: 1. 每行做规范化(去空格、全半角、规格标准化,如 15×2↔30片、干一瓶↔×1瓶)。 2. 拼四要素键:通用名+批准文号+规格+厂家。 3. 精确命中对码表 → EXACT,回填货品ID/编码/基本单位。 4. 规格/厂家容错命中 → FUZZY,标记待复核。 5. 同商品名多规格 → MULTI,生成一对多候选,建人工待办。 6. 无命中 → NONE,建人工待办。 7. 全 EXACT/已确认 → 放行进③;有 MULTI/NONE → job 转 WAITING_USER。 **验收标准** | 代码验收 | 业务验收 | | --- | --- | | [ ] 每行都有明确 match_status | [ ] 命中的货品ID确实是这个药(抽查) | | [ ] EXACT 行回填了货品ID+编码+单位 | [ ] 一对多候选是"同一个药的不同规格写法",不是乱配 | | [ ] MULTI 行有候选列表供 H5 选 | [ ] 未命中的能在页面上一对多选择/新增 | | [ ] 命中率有统计数字 | [ ] 人工确认后,下次同款能自动命中(累积迭代) | | [ ] 人工确认结果回写对码表(新版本号) | [ ] 进口药英文厂家名能容错匹配 | **失败与去向** | 情况 | errorCode | 可重试 | 去向 | | --- | --- | --- | --- | | 一对多 | BIZ_MATCH_MULTI | 否 | 该条挂起→计划员选候选;整批继续 | | 无命中 | BIZ_MATCH_NONE | 否 | 该条挂起→计划员人工匹配/新增;整批继续 | > 关键:未命中是**单条挂起**,不停整批。计划员处理完这条,继续跑其余。 --- ### 节点②b SOURCE_ADD · 货源新增 | 项 | 内容 | | --- | --- | | 执行方 | 业务在 M5 手工新增(状态中心只通知) | | 前置条件 | 对码命中了货品,但该供应商从未采过该品种 | | 输入 | 供应商 + 货品 | | 输出 | 货源建好的确认 | **步骤**: 1. 状态中心判断"该供应商×该货品"无货源记录。 2. 推企业微信待办给业务:去 M5 新增货源。 3. 业务新增完,在待办点"已完成"。 4. job 恢复继续。 **验收标准** | 代码验收 | 业务验收 | | --- | --- | | [ ] 能识别缺货源并建待办 | [ ] 通知内容说清楚是哪个供应商+哪个品种 | | [ ] 业务确认后能继续 | [ ] 新增货源后 M5 里能查到 | **失败与去向**:缺货源→通知业务→业务新增→继续。不阻断其余可跑节点。 --- ### 节点③ CONTRACT_CREATE · 合同建单 | 项 | 内容 | | --- | --- | | 执行方 | 艺赛旗 iS-RPA | | 前置条件 | 对码全部通过;供应商对照表已加载 | | 输入 | 供应商、订单日期、货品明细、模板类型 | | 输出 | 🔑合同编号、合同状态、模板类型 | **页面操作步骤(给艺赛旗)**: 1. 登录合同系统 `contract.gzmpc.com`。 2. 按供应商对照表判断模板:格式(默认)/非格式(承兑)。 3. 可复制历史合同再改(业务现行做法)。 4. 填基础信息;**改签约日期/合同开始日期 = 订单日期**(硬约束)。 5. 填货品明细(操作码/货品编码、名称、国药准字、规格、单位、数量)。 6. 填付款信息(必填:付款方式、天数)。 7. **医药城分支**:下载平台购销合同,同供应商同日**合并成一个PDF**上传(先合并,否则第二份覆盖第一份)。 8. **小药药分支**:格式合同,跳过合同证文上传。 9. 汇总金额,提交送审。 10. 回调 complete,带合同编号。 **验收标准** | 代码验收 | 业务验收 | | --- | --- | | [ ] 模板选择与对照表一致 | [ ] 签约日期 = 订单日期,没填成今天 | | [ ] 签约日期字段 = 订单日期 | [ ] 医药城:PDF 是同供应商同日全部合并的一份 | | [ ] 医药城已上传合并PDF且未被覆盖 | [ ] 小药药:确实没传合同证文 | | [ ] 小药药未走上传分支 | [ ] 合同金额/品种/数量与订单一致 | | [ ] 回传了合同编号 | [ ] 承兑供应商用的是非格式模板 | **失败与去向** | 情况 | errorCode | 可重试 | 去向 | | --- | --- | --- | --- | | 供应商合同禁掉/失效 | BIZ_CONTRACT_DISABLED | 否 | 邮件通知采购(可多人)重新禁掉;该单挂起 | | PDF 合并能力不支持 | CAP_PDF_MERGE_UNSUPPORTED | 否 | 换平台/运维OPS | | 页面改版找不到元素 | UI_ELEMENT_NOT_FOUND | 否 | 运维OPS | --- ### 节点④ CONTRACT_APPROVE_WAIT · 等合同审批 | 项 | 内容 | | --- | --- | | 执行方 | 状态中心(定时器)+ 艺赛旗查状态 | | 前置条件 | 合同已送审 | | 输入 | 合同编号 | | 输出 | 审批通过确认 | **步骤**: 1. 送审后启动定时器(约半小时)。 2. 到点后艺赛旗登录查审批状态(**建议轮询,别死等**)。 3. 已通过→放行进④返利;未通过→继续等并重查;超阈值→升级运维。 **验收标准** | 代码验收 | 业务验收 | | --- | --- | | [ ] 有定时/轮询机制,不是硬睡死等 | [ ] 只有审批"真的通过"了才进下一步 | | [ ] 未通过会重查,不误判 | [ ] 卡太久会有人被通知去催 | | [ ] 超阈值升级 OPS | | > 注意:未审批完也会生成合同编号,但**必须审批完才导入返利中心**。 **失败与去向**:超时未审完→保持等待并重查;超阈值→运维/催办。 --- ### 节点⑤ REBATE_HEADER · 返利中心总单 | 项 | 内容 | | --- | --- | | 执行方 | 艺赛旗 iS-RPA | | 前置条件 | 合同审批通过,拿到🔑合同编号 | | 输入 | 合同编号 | | 输出 | 返利中心总单号 | **页面操作步骤**: 1. 登录返利中心 `flgzmpc.com`。 2. 进"采购协议管理"。 3. 按**合同编号**查对应总单。 4. 总单信息空白,填必填项、勾必选项,保存。 5. 回调 complete,带总单号。 **验收标准** | 代码验收 | 业务验收 | | --- | --- | | [ ] 按合同号查到了对应总单 | [ ] 总单必填项都填了,能保存成功 | | [ ] 必填项无遗漏 | [ ] 查出来的总单确实对应这份合同 | | [ ] 回传总单号 | | **失败与去向**:查不到总单/必填缺失→运维或采购核查。 --- ### 节点⑥ REBATE_IMPORT · 返利细单导入 | 项 | 内容 | | --- | --- | | 执行方 | 艺赛旗 iS-RPA | | 前置条件 | 总单已建 | | 输入 | 对码结果、数量、单价、订单号 | | 输出 | 导入成功/失败行 | **页面操作步骤**: 1. 下载细单模板。 2. 填字段:操作码/货品编码、数量、单价、税率、承付方式、参数、细单开始时间(=订单时间)、失效日期、结算方式、**特定补偿=0**、**细单备注=订单号**、货源信息。 3. 上传导入。 4. 读取成功/失败行及原因。 5. 回调 complete,带成功/失败计数。 **验收标准** | 代码验收 | 业务验收 | | --- | --- | | [ ] 特定补偿字段 = 0 | [ ] 细单备注确实填了订单号(物流部要看) | | [ ] 细单备注 = 订单号 | [ ] 数量/单价与订单一致 | | [ ] 细单开始时间 = 订单时间 | [ ] 导入的品种数 = 应导数 | | [ ] 成功/失败行有明细回传 | [ ] 失败行原因能看懂 | **失败与去向** | 情况 | errorCode | 可重试 | 去向 | | --- | --- | --- | --- | | 存在重复编码(订单已做过) | REBATE_DUP_CODE | 否 | 该单挂起→采购;整批继续(重建总单规则**待确认**) | --- ### 节点⑦ REBATE_SUBMIT · 返利送审 ⭐决定成败⭐ | 项 | 内容 | | --- | --- | | 执行方 | 艺赛旗 iS-RPA | | 前置条件 | 细单导入成功 | | 输入 | 总单 | | 输出 | 送审完成(自动审批通过) | **页面操作步骤**: 1. 在返利中心对该总单点"提交送审"。 2. 送审即自动审批通过(合同前端已审过一遍)。 3. 回调 complete。 **验收标准** | 代码验收 | 业务验收 | | --- | --- | | [ ] 确认送审动作已执行且成功 | [ ] 送审后,M5 里能带出这个协议(关键验证) | | [ ] 未送审绝不放行进 M5 | [ ] 没漏送审的单 | **失败与去向**:未送审→**硬阻断**(不送审 M5 带不出品种,整个 job 停在此)。 > ⭐反直觉核心:卡 M5 的送审在**返利中心**,不在合同系统。这一步不做,后面全废。 --- ### 节点⑧ M5_CREATE_ORDER · M5 建采购单(1055) | 项 | 内容 | | --- | --- | | 执行方 | 艺赛旗 iS-RPA(处理 M5 桌面客户端) | | 前置条件 | 返利已送审 | | 输入 | 货品明细、数量、订单号 | | 输出 | M5 采购单(**录入待保存,不点保存**) | **页面操作步骤**: 1. M5 采购订单管理 1055 → 新增。 2. 选保管账 = 正常保管账(默认,只有一个)。 3. 日期:若隔天做,改成前一天签约日期。 4. **备注填订单号**(给采购结算勾对账用)。 5. 新增细单,选品种(返利已送审的才带得出)。 6. 选对应数量(协议累计采购量为0说明没用过)。 7. 结算/接收方式/发票 = 返利中心已下发自动带入,**不填**。 8. **★录完就停,不点保存★**。 9. 回调 complete,标记"M5待保存"。 **验收标准** | 代码验收 | 业务验收 | | --- | --- | | [ ] 保管账 = 正常保管账 | [ ] 品种/数量与订单、返利协议一致 | | [ ] 备注 = 订单号 | [ ] 备注订单号填对了(结算要看) | | [ ] 结算/接收/发票未手工填(用带入值) | [ ] 确认停在"待保存",没被自动保存 | | [ ] **未触发保存动作** | [ ] 隔天做的,签约日期改成了前一天 | **失败与去向** | 情况 | errorCode | 可重试 | 去向 | | --- | --- | --- | --- | | 质管资料缺失(供应商年报过期等) | M5_QC_MISSING | **否** | **停止→FAILED_MANUAL,转人工手工做,不等质管** | > ⚠️ 硬规则:质管缺失**不重试、不等质管**(RPA 晚上跑,质管不会半夜维护)。直接转人工。 --- ### 节点⑨ M5_MANUAL_CONFIRM · 人工检查→保存→签订 | 项 | 内容 | | --- | --- | | 执行方 | 一期=人工(可配开关,阶段二转 RPA) | | 前置条件 | M5 已录入待保存 | | 输入 | 待保存采购单 | | 输出 | 已保存、已签订 | **步骤**: 1. 状态中心推待办给计划员:去检查。 2. 计划员核对数量等 → 点保存 → 签订。 3. 在待办确认已完成。 **验收标准** | 代码验收 | 业务验收 | | --- | --- | | [ ] auto_save_enabled 一期=0(人工) | [ ] 数量核对无误才保存 | | [ ] 开关可切换,便于阶段二放开 | [ ] 保存/签订后不可逆,确认无误 | | [ ] 人工确认动作有留痕 | [ ] 错的能在保存前改掉 | > 不可逆:保存/签订后改不了,一期人工把关。 --- ### 节点⑩ M5_RECEIPT_NOTICE · 生成收货通知单 | 项 | 内容 | | --- | --- | | 执行方 | 一期=人工(可配开关) | | 前置条件 | 已签订 | | 输入 | 已签订采购单 | | 输出 | 收货通知单号 | **步骤**:签订后点"生成收货通知单",采购合同流转结束。 **验收标准** | 代码验收 | 业务验收 | | --- | --- | | [ ] 收货通知单号已生成并回写 | [ ] 供应商/货品/数量与采购单一致 | | [ ] 与 M5 单号关联落库 | [ ] 通知单号能查到 | --- ### 节点⑪ ARCHIVE_JOB · 归档 | 项 | 内容 | | --- | --- | | 执行方 | 状态中心 | | 前置条件 | 全链完成 | | 输入 | 各业务编号 | | 输出 | 完整编号链 + 证据包 | **步骤**:把订单号→合同编号→返利总单号→M5单号→收货通知单号全部落库,证据(Excel/PDF/截图/日志/人工记录)归档。 **验收标准** | 代码验收 | 业务验收 | | --- | --- | | [ ] 五个业务编号全部落库可查 | [ ] 拿任一编号能追到整条链 | | [ ] 证据包完整可导出 | [ ] 抽查证据能还原当时操作 | --- ## 第五部分 · 你还没想到的事(容易漏,先摆到桌面) > 这些不是需求,是"做的时候一定会撞上、现在不定后面返工"的坑。按优先级分档。 ### 5.1 必须先拍板(不定就没法开工) | # | 事项 | 为什么重要 | 建议 | | --- | --- | --- | --- | | 1 | **OCR 信息安全** | 线上OCR公司可能不批,决定 OCR_EXTRACT 部署方式 | 拉法务+数据中心+业务三方会;倾向本地部署 | | 2 | **各系统账号** | RPA 要登录5个系统,得有专用账号 | 要生产+测试账号;确认能否多开、会不会挤下线 | | 3 | **M5 是桌面客户端还是网页** | 决定艺赛旗怎么接(桌面自动化 vs 浏览器) | 让业务确认;艺赛旗能处理桌面,但要提前验证 | | 4 | **订单状态过滤** | 只取"待收货"还是含其他,取错会多做/漏做 | 业务给明确状态清单 | | 5 | **对码表/供应商对照表/计划员表/邮箱** | 缺了对码、判模板、派单、发通知都做不了 | 业务限时提供,格式先对齐 | ### 5.2 并发与调度(晚上批量跑必踩) - [ ] **一台 RPA 机同时只能开一个 M5?** 65~75单/天,串行够不够跑完一晚?要不要多机。 - [ ] **登录态互斥**:同账号多处登录会不会把前一个踢下线。 - [ ] **一个 job 卡住,别堵住后面的 job**:队列要能跳过挂起的、继续跑能跑的。 - [ ] **定时触发时间**:几点跑?跑前一天订单,那"前一天"按几点切界。 - [ ] **半小时等审批期间**,RPA 机是空等还是去干别的 job(建议轮询+切换,别占着机器空等)。 ### 5.3 数据与幂等(重复跑会出乱子) - [ ] **重复触发/重跑**:同一天同供应商重跑,会不会在合同/返利/M5 建重复单。执行前必须先检索已有单号。 - [ ] **加单/拆单**:父订单号怎么关联,加单要重做协议——一期先记录转人工(**待确认**)。 - [ ] **返利重复编码**重建总单的完整规则(会议被打断没讲完,**待确认**)。 - [ ] **金额/数量精度**:单价小数位、合计对不对得上,别因四舍五入差分。 - [ ] **同名不同药**:对码四要素里任一不同就是不同药,别被商品名骗了。 ### 5.4 异常与回滚(错了怎么收场) - [ ] **保存/签订不可逆**:一期靠人工把关。切自动前必须有准确率报告(阶段二判据要定量)。 - [ ] **中途失败的半成品**:合同建了但返利没做,这单状态怎么标、下次怎么接着做。 - [ ] **RPA 跑一半崩了**:节点要能从断点续,attempt_no+1,不覆盖历史。 - [ ] **页面改版**:5个系统任一改版,元素定位就失效。要有 UI_ 类告警,快速通知运维。 - [ ] **误操作防线**:M5 阶段一严禁自动点保存(auto_save_enabled=0 是硬默认)。 ### 5.5 验收与上线(别一次全上) - [ ] **单来源先跑通**:建议先医药城一个来源端到端,再加小药药、线下。 - [ ] **准确率统计**:对码命中率、各节点成功率要有数字,支撑"何时转全自动"。 - [ ] **证据可回溯**:每单能导出证据包(Excel/PDF/截图/日志),出问题能复盘。 - [ ] **权限可见性**:合同/OCR 证据按角色可见,敏感文件脱敏标记。 - [ ] **联调顺序**:状态中心单独跑通→假OCR假RPA打通全链→接真对码→接企业微信H5→接真RPA(先医药城)→返利/M5端到端。 ### 5.6 安全底线(别裸奔) - [ ] 状态中心所有写接口必须鉴权(内部 Bearer / RPA X-Agent-Token / H5 企业微信换JWT)。 - [ ] 回调接口必须校验 token + 幂等键,**禁止无认证暴露**。 - [ ] 账号密码不写死在流程里,走密钥管理。 --- ## 名词表 | 词 | 意思 | | --- | --- | | 状态中心 | 自研的编排+审计中台(Trae 写的后台+网页),大脑 | | 艺赛旗 iS-RPA | 下层 RPA 工具,真正去点各系统页面,手脚 | | job | 一次完整流程实例 = 同供应商+同订单日期+同来源 = 一条合同 | | 节点 | 流程里的一步(如 ORDER_FETCH),做完才走下一个 | | 对码 | 把平台药名匹配到 M5 货品ID/编码(四要素:通用名+批准文号+规格+厂家) | | 挂起 | 单条转人工,整批继续跑 | | 硬阻断 | 整个 job 停住 | | 待保存 | M5 录完但不点保存,一期留给人工检查 | | 三把钥匙 | 🔑货品编码 / 🔑合同编号 / 🧵订单号,系统间靠这三个值接力 |