WAPC2 实现企微审批只读 POC

这个提交包含在:
2026-05-19 10:07:10 +08:00
父节点 d02442606c
当前提交 08987ba921
共修改 15 个文件,包含 1389 行新增和 44 行删除
+2
查看文件
@@ -53,6 +53,7 @@ DCL7 已删除本文件中 R70-R91 的长流水历史,避免旧环境、旧开
- 2026-05-19 WRA1 修正 WRV1 运行验收门禁并完成公网复跑:`WECOM_CHECKIN_SYNC_ENABLED` 保留为正式考勤同步批次开关,但 QA-only 打卡短窗口读取显式使用 `requireSyncEnabled=false` 做只读探测,不再把同步开关未启用误判为运行主链路阻断。远端报告 `/app/artifacts/qa-flow/wecom-runtime-ready-20260518T180506Z/summary.json` 结论为 `PASS_WITH_CONFIG_GAPS`:入口/OAuth、Secret 矩阵、OA active 绑定、通讯录、人事助手、消息 dry-run 和打卡只读链路均通过,打卡读取记录 `readable_sync_disabled`;审批模板、测试 `sp_no` 和真实回调继续为 `NEEDS_CONFIG`。未发送真实消息,未写 OA/企微用户资料。
- 2026-05-19 WMSG1 完成企微应用消息实发与 Deeplink 真机验证:使用现有 `check:wecom-runtime-ready` runner,在远端容器内仅对单次命令设置 `WECOM_RUNTIME_TEST_SEND=1`,向管理员本人对应 OA 员工号 `HYD000006` 发送一条脱敏运行就绪消息。第一次按 `wangshunli` 参数执行未命中 OA `employee_no`,`recipientCount=0` 且未实际发出;随后按 `HYD000006` 重跑成功,报告 `/app/artifacts/qa-flow/wecom-runtime-ready-20260518T234431Z/summary.json` 显示 `checks.message.status=OK`、`code=wecom_app_sent`、`errcode=0`、`recipientCount=1`、收件企微前缀 `WangShun***`。用户确认企业微信可收到“OA 运行就绪检查”,点击“打开 OA”后可进入 OA 通知页面,结论 `PASS_MESSAGE_DELIVERY_CONFIRMED`。本轮不补企微资料、不配置审批模板/`sp_no`/真实回调、不进入深度镜像。
- 2026-05-19 WAPC1 完成企微审批配置准备清单回写:WMSG1 只证明消息和 Deeplink 可用,不放行 `wecom_attendance_approval_mirror_v1`。本轮固化首批模板为请假、补卡、外出、加班;每个模板需准备模板 ID、适用范围、字段项、审批人规则、可见范围和所属自建应用权限;低风险测试 `sp_no` 不得包含采购、合同、报销、发票、银行回单或高敏附件;真实回调 Token/EncodingAESKey 只允许保存在部署环境,不写入文档或 Issue。后续 POC 需验证模板详情、审批详情、回调验签/解密/幂等、重试语义和补偿拉取。本轮不改业务代码、不部署、不接真实回调、不调用企微写接口。
- 2026-05-19 WAPC2 新增企微审批模板与低风险 `sp_no` 只读 POC:新增 `server/src/scripts/check-wecom-approval-poc.js` / `npm run check:wecom-approval-poc` 和只读集成服务,范围先锁定请假、补卡;固定 `WECOM_AGENT_SECRET` 调用 `POST /cgi-bin/oa/gettemplatedetail` 与 `POST /cgi-bin/oa/getapprovaldetail`,报告只输出脱敏模板 ID/`sp_no` 前缀、字段类型计数、审批节点计数和错误分类。本地 focused vitest 已覆盖 Secret 固定选择、无 fallback、缺配置、API 错误分类和脱敏输出。已以 `SYNC_ENV=0` 部署并远端执行 live 只读 POC,报告 `/app/artifacts/qa-flow/wecom-approval-poc-20260519T020429Z/summary.json` 结论为 `PARTIAL_APPROVAL_POC_NEEDS_CONFIG`:远端 `WECOM_AGENT_SECRET` 可用,但缺请假/补卡模板 ID 和两条低风险 `sp_no`;未伪造成 PASS。本轮不接真实回调、不调用企微写接口、不写 OA/企微数据、不进入深度镜像。
## 关键证据索引
@@ -104,6 +105,7 @@ DCL7 已删除本文件中 R70-R91 的长流水历史,避免旧环境、旧开
| WRV1 | 已部署并公网只读验证:`check-wecom-runtime-ready` 返回 `SKIP/BLOCKED_BY_EXTERNAL_CONFIG`,阻断点为 `WECOM_CHECKIN_SYNC_ENABLED=true` 未启用;入口/OAuth、Secret 矩阵、OA active 绑定、通讯录、人事助手和消息 dry-run 已通过;审批模板、测试 `sp_no`、真实回调缺口记为 `NEEDS_CONFIG`,不放行深度镜像 | `issues/2026-05-19_01-10-32-wecom-runtime-ready-v1.csv`、`server/src/scripts/check-wecom-runtime-ready.js`、`/app/artifacts/qa-flow/wecom-runtime-ready-20260518T173402Z/summary.json` |
| WMSG1 | 已完成:企微应用消息真实发送和 Deeplink 真机确认通过;报告 `checks.message.status=OK`、`errcode=0`、`recipientCount=1`,用户确认收到消息并可点击进入 OA 通知页面 | `issues/2026-05-19_07-41-37-wecom-message-live-verify-v1.csv`、`/app/artifacts/qa-flow/wecom-runtime-ready-20260518T234431Z/summary.json` |
| WAPC1 | 已完成:企微审批配置准备清单已回写;首批模板为请假、补卡、外出、加班;低风险 `sp_no`、真实回调和后续 POC 准入项已固定;不代表审批镜像或回调接收已实现 | `issues/2026-05-19_08-44-58-wecom-approval-config-prep-v1.csv`、`docs/企微优先开发路线图.md`、`docs/企微API能力目录.md` |
| WAPC2 | 已部署并公网只读复跑:新增请假/补卡模板详情和低风险审批详情 QA-only 只读 POC runner;远端 Secret 矩阵 OK,因缺请假/补卡模板 ID 和两条低风险 `sp_no` 返回 `PARTIAL_APPROVAL_POC_NEEDS_CONFIG`;不代表真实回调或审批镜像已实现 | `issues/2026-05-19_09-34-16-wecom-approval-template-spno-poc-v1.csv`、`server/src/scripts/check-wecom-approval-poc.js`、`server/src/services/integrations/wecomApproval.js`、`/app/artifacts/qa-flow/wecom-approval-poc-20260519T020429Z/summary.json` |
## 当前门禁