# 合同系统录入流程(现行) 对照:`RPA订单中心接口开发口径_20260930.md` 第 4 节。 页面动作对照:`rpa_contract/contract_flow_steps.py`、`rpa_contract/selectors/contract_create_selectors.json`、`rpa_contract/examples/`。 状态中心 job / 13 节点 / start-complete-fail **不再使用**。合单、班次、回写以口径为准;点哪些控件以 `rpa_contract` 为准。 --- ## 1. 数据从哪来 订单中心推接口 3,落入 `rpa_purchase_contract_data`。合同班读 `process_status=0`。 一天两班(中午、下午)。启动瞬间冻结本班名单,跑的过程中新进的下一班再处理。 按 `supplierId` 合成一份合同: - 不用 `omsId`,不用供应商名称 - 头字段(账期、签订日、起止日、采购员、计划员)取该班该供应商**第一行** - 下午同一供应商另开一份,不改上午已录合同 - `contractEntryStatus=0` 且带 `contractNo`:只录返利协议,不进合单、不重开合同 旧脚本按「供应商 + 订单日期」建单,并且把签订日/开始日写成订单日期。那是上一套模型,不要抄。 --- ## 2. 页面步骤(合同测试系统) 地址:`http://contract-test.gzmpc.com:8080/` 测试账号见 `rpa_contract/README.md`。客商必须是系统里真实存在的操作码,占位符搜不到。 脚本现用直达起草/模板 URL,绕过左侧菜单和「点模板」的前端委托(Selenium 点不中): - 起草:`DRAFT_PAGE_URL` - 非格式采购协议(2025 集团版)模板 ID:`198d10b04325279b8ffeb8b4c6493b5a` → `FORM_PAGE_URL` 顺序: 1. 打开合同系统并登录 2. 进起草,套非格式采购协议模板 3. 签约方:客户编码、客户名称(用接口 3 的供应商 MDM / 名称,以页面能搜到的为准) 4. 基础信息:合同版本类型、合同类别、结算类型、合同背景概述、合同性质=主合同 5. 金额与日期:签订日 / 开始日 / 结束日用接口 3 第一行的 `contractSignDate`、`contractStartDate`、`contractEndDate` 6. 货品明细:该班该供应商合进来的行(货品、规格、数量、单价、MDM) 7. 付款与标志:这期一律账期,**不勾预付款**;付款期限用 `paymentTerm`。页面「账期支付」对应选项「电汇」(见脚本 `_PAYMENT_ALIASES`) 8. **尽调**:看合同系统页面回显。未尽调 → 本单失败,原因「客户未尽调」,不往下填。旧脚本没有这一步,口径有 9. 点**提交**,不要点暂存。暂存号不拿去录返利 10. 从「我的合同」读正式合同号 医药城同供应商同日 PDF 合并上传,是旧主链(平台导出扫描件)的步骤。接口 3 这条链有没有附件,录合同时再核对,不要默认还去拼 PDF。 --- ## 3. 提交之后 提交成功: - 写入表 4,接口 4 `actionCode=1`,`contractStatus=1`(起草),带合同号 - 同一份合同下多个 `fid` 回同一套号和状态 - **合同任务结束。不要重录合同。** 「合同成功」不是提交成功,而是返利中心能搜到这个合同号。查号挂在返利班,搜到再回 `contractStatus=2`;搜不到不重录,下一班再搜。 --- ## 4. 代码要从哪抄 | 要 | 文件 | | --- | --- | | 打开/登录/填表/提交/读号 | `rpa_contract/contract_flow_steps.py` | | 字段 name / 选择器 | 同文件里的 `F`、`X`;`selectors/contract_create_selectors.json` | | 浏览器适配 | `rpa_contract/apa_browser_adapter.py` | | 干跑样例 | `rpa_contract/examples/contract_create_input_dry_run.json` | 旧状态中心(`callback_client.py` / `agent.py` / start-complete-fail)已从仓库删除。不要再接。