WOUAFIX 收口 OA 与企微用户一致性差异
这个提交包含在:
@@ -48,6 +48,7 @@ DCL7 已删除本文件中 R70-R91 的长流水历史,避免旧环境、旧开
|
||||
- 2026-05-18 WCPC 已完成 WCP1 配置收口复跑:先完成未补配置前远端基线复跑,报告目录 `/tmp/wecom-capability-poc-wcpc-baseline`,结论为 `PAUSE_FOR_CONFIG`;随后按用户要求自动查找并使用既有在职低风险测试号 `SMOKE002/测试员工`(报告只记录 `oa_smoke***`)复跑,只读报告 `/tmp/wecom-capability-poc-wcpc-smoke002/summary.json` 返回 `PASS / GO_TO_HR_MASTER_SYNC`,`nextStageAllowed=true`,`blockingCapabilities=[]`,状态计数为 `CAN_REUSE_NOW=15`、`NEEDS_CONFIG=3`、`NEEDS_API_POC=1`、`KEEP_OA_PRIMARY=1`。本轮不部署、不改业务代码、不持久写服务器 `.env`;下一步允许规划 `wecom_hr_master_sync_v1`,审批模板/实例、回调配置和 HR 写接口仍留后续合同。
|
||||
- 2026-05-18 WHMS 已完成企微 HR 主数据镜像本地实现、部署和受控公网验证:新增 `wecom_hr_master_sync_v1` 默认 `force_off`,实现企业微信通讯录/人事助手读取、dry-run/apply、同步批次/逐员工记录、管理员 API、People 管理卡片和 QA-only runner。WHMSLIVE 部署到 `https://oa.hyinda.com` 并应用 migration `20260518184319_wecom_hr_master_sync_v1`;公网临时 `force_on` 后对 `SMOKE002/测试员工`(脱敏 `oa_smoke***`)执行 dry-run 和显式 userids apply,企微读取链路通过,因企微侧缺手机号、邮箱和部门按 `missing_required_field` 跳过,未写 OA 主数据;普通员工访问同步 API 返回 403;最终 `wecom_hr_master_sync_v1=force_off`。未执行生产真实员工批量 apply,不代表考勤/审批镜像、应急接管、恢复回写或 RuleOps 已完成。
|
||||
- 2026-05-18 WOUA 已完成 OA active 员工 vs 企业微信通讯录 + 人事助手的只读对账 runner、本地门禁、受控部署和公网执行。初始公网报告因旧读取路径返回 `SKIP / BLOCKED_BY_EXTERNAL_CONFIG`;WAPI 固化 Secret 矩阵和 `user/list_id` + 人事助手读取后复跑成功,远端脱敏报告 `/app/artifacts/qa-flow/wecom-oa-user-consistency-20260518T142544Z/summary.json` 结论为 `PASS_WITH_FINDINGS`。当前只读计数:`oaEmployees=13`、`oaActiveEmployees=12`、`oaActiveWithBinding=5`、`wecomProfiles=5`、`matchedActive=5`、`oaActiveMissingInWecom=7`、`inactiveWithBinding=1`、`missingRequiredFields=5`。本轮未修改 OA 或企微用户,未执行真实员工批量 apply,不能据此判定“OA 和企微用户已一致”;下一步应按差异决定 WOUA-FIX 或 WHMS 批量同步窗口。
|
||||
- 2026-05-18 WOUA-FIX 已按用户确认执行受控写入:7 个 OA active 缺企微账号均确认为测试/Smoke 数据并软归档,`oaActiveMissingInWecom` 复检为 0;`T0000` seed 逻辑已修正为存在真实 active admin 时不再复活已归档 fallback 管理员;`SMOKE201` 归档后遗留的 `SMOKE101` 主管和 2 个测试请假待办已转交 `HYD000007`。复检报告 `/app/artifacts/qa-flow/wecom-oa-user-consistency-20260518T161716Z/summary.json`:OA active 5、企微 active 5、匹配 5、OA active 缺企微 0;剩余 `missingRequiredFields=5` 按用户决策先接受不补,`HRWDTEST-20260517214548` 归档绑定保留为审计项。本轮不写企微资料,不执行真实员工 WHMS 批量 apply,不代表考勤/审批镜像可直接开工。
|
||||
|
||||
## 关键证据索引
|
||||
|
||||
@@ -95,6 +96,7 @@ DCL7 已删除本文件中 R70-R91 的长流水历史,避免旧环境、旧开
|
||||
| HR-WECOM-DIRECTORY-V1 | 已收口:人事生命周期与企业微信通讯录同步闭环已部署公网;ERP 改为未来不接入 OA;员工创建/入职/调岗/资料变更/离职可触发企微通讯录创建、更新、禁用并记录同步状态;缺外部配置时公网重试记录 `SKIP wecom_contact_sync_disabled`,不阻断 OA 人事流程;部署 seed 已修正为不覆盖正式 flag | `issues/2026-05-17_20-00-40-hr-wecom-directory-v1.csv`、`server/tests/unit/routes/employees.wecomDirectory.test.js`、`artifacts/qa-flow/live-smoke-readiness-20260517-205813/summary.json`、`docs/需求-企业微信基础设施规约.md` |
|
||||
| HRWD-CONTACT-LIVE-TEST | 已收口:公网企微通讯录真实写入闭环通过;测试员工 `HRWDTEST-20260517214548` 完成 create/update/disable,企微 `errcode=0`,OA 最终 archived/inactive,离职后登录负例、普通员工权限负例和审计动作均通过;最终保留离职/禁用,不删除成员 | `issues/2026-05-17_21-41-43-hrwd-contact-live-test.csv`、`artifacts/qa-flow/hrwd-contact-live-test-20260517T134548Z/summary.json`、`artifacts/qa-flow/live-smoke-readiness-20260517-214632/summary.json` |
|
||||
| WOUA/WAPI | 已收口:OA/企微用户一致性只读审计 runner 已按 WAPI 读取口径复跑;公网报告 `PASS_WITH_FINDINGS`,OA 侧脱敏计数 13/12/5,企微可见 active 5,匹配 5,OA active 缺企微 7,已归档仍有绑定 1,缺必填字段 5;未修改 OA/企微用户,未执行真实员工批量 apply | `issues/2026-05-18_20-45-58-wecom-oa-user-consistency-audit.csv`、`issues/2026-05-18_21-46-41-wecom-api-capability-catalog-runtime-first.csv`、`/app/artifacts/qa-flow/wecom-oa-user-consistency-20260518T142544Z/summary.json` |
|
||||
| WOUA-FIX | 已受控写入并复检:7 个缺企微测试账号软归档,T0000 seed 不再复活,SMOKE201 归档后的测试主管和待办副作用已转交;复检 OA active 5、企微 active 5、匹配 5、OA active 缺企微 0;剩余 5 个企微缺字段先接受不补,1 个归档绑定保留审计 | `issues/2026-05-18_23-45-45-wecom-oa-user-consistency-fix-runtime-ready.csv`、`/app/artifacts/qa-flow/wecom-oa-user-consistency-fix-20260518T160944Z/summary.json`、`/app/artifacts/qa-flow/wecom-oa-user-consistency-20260518T161716Z/summary.json` |
|
||||
|
||||
## 当前门禁
|
||||
|
||||
@@ -151,6 +153,7 @@ DCL7 已删除本文件中 R70-R91 的长流水历史,避免旧环境、旧开
|
||||
| R7EP 公网移动矩阵 | 通过 | `cd client && E2E_BASE_URL=https://oa.hyinda.com npx playwright test tests/e2e/dg7-mobile-information-dedupe.spec.ts --workers=1 --reporter=list`,5 passed |
|
||||
| R7EP 核心业务流 | 分段通过 | 长组合命令在当前工具会话中不稳定中断,不采用不完整 `summary.json` 作为通过证据;采用同一 groups 的可追溯分段结果:`business-flow-20260513-142857/summary.txt` 中 reimbursement/approval/leave/procurement PASS,`business-flow-20260513-145759/summary.txt` 中 approval PASS,`business-flow-20260513-144801/summary.txt` 中 governance PASS |
|
||||
| R7EP 账号角色只读核验 | 通过 | 只读 SQL 证据 `artifacts/qa-flow/r7ep-account-role-readonly-20260513-152121/`;`SMOKE002`、`SMOKE101`、`SMOKE201`、`SMOKE301`、`SMOKE302`、`SMOKE001`、`wangzhiling`、`wangshunli` 均为 `active`;角色、直属主管、企业微信绑定布尔状态已核验;`SMOKE001` 和 `admin` role 当前无 pending 审批任务,财务角色无 admin 混授 |
|
||||
| WOUA-FIX 后账号事实 | 已更新 | 2026-05-18 后,`SMOKE001`、`SMOKE201`、`SMOKE301`、`SMOKE302`、`SMOKE401`、`T0000` 已作为缺企微测试数据软归档;R7EP 账号角色只读核验保留为 2026-05-13 历史证据,不再代表当前可执行测试账号清单。 |
|
||||
| OPS8 最小准备 | 已补文档并通过远端只读检查 | `docs/trialrun/OPS7运维交接Runbook.md` 已补当前部署版本追踪、`SYNC_ENV=0` 口径、备份/回滚占位和 live readiness 归档规则;OPS8-3 远端只读证据 `artifacts/qa-flow/ops8-remote-readonly-20260513-152024/`,Caddy active,compose db/server Up,Prisma migration up to date |
|
||||
| QAF8 覆盖刷新 | 已补文档 | `docs/测试规约与回归门禁.md` 已补当前最小回归组合、本地/公网匿名/带凭据门禁边界、R108/R109 历史专项分类 |
|
||||
| UX8 反馈池 | 阶段性收口 | 本轮未新增 UX8 代码实现;iPhone 12 间距、详情扫读性、财务摘要、移动采购创建和列表卡片反馈继续按真实反馈进入后续项 |
|
||||
|
||||
+10
-11
@@ -76,22 +76,21 @@
|
||||
## 审批与通知
|
||||
|
||||
- 正式审批口径:`majianyong` 是员工可见的直属主管;`wangshunli` 是后台公司负责人,配置为 `ceo + admin`,不配置为普通 `manager`;`admin` 不代表业务审批权。
|
||||
- 试运行验收不使用真实员工日常账号,使用测试替身账号模拟正式组织链路:`SMOKE002 -> SMOKE101 -> SMOKE201 -> SMOKE302/SMOKE301`。
|
||||
- `SMOKE001` 仅作为测试管理员,不具备业务审批权。
|
||||
- WOUA-FIX 后,`SMOKE001`、`SMOKE201`、`SMOKE301`、`SMOKE302`、`SMOKE401`、`T0000` 已作为缺企微测试数据软归档;后续真机或公网试运行不得再把这些账号作为当前执行账号。
|
||||
- 审批链正确性是业务逻辑验收,优先通过 PC 公网网页或自动化证明,不要求所有审批角色绑定企业微信。
|
||||
- 企业微信真机验收只覆盖工作台入口、绑定/免登录、移动布局、待办、详情、PDF 上传入口和通知 deeplink;当前 `oa_smoke_01 -> SMOKE002` 与 `oa_smoke_02 -> SMOKE101` 足够覆盖“提交人 + 审批人”的核心移动体验。
|
||||
- `SMOKE201`、`SMOKE301`、`SMOKE302` 可通过 PC 公网网页验证负责人、财务、财务主管流程,不再作为企业微信原生身份硬门槛。
|
||||
- 负责人、财务、财务主管深层链路需改用当前 active 角色账号或新建带企微绑定的测试账号;旧 `SMOKE201/301/302` 只保留为 2026-05-10 自动化历史证据,不再作为当前验收入口。
|
||||
|
||||
### PC/自动化审批链验收矩阵
|
||||
|
||||
| 验收项 | 验收方式 | 账号角色 | 提交或处理 | 期望结果 | 结果 | 证据位置 |
|
||||
| --- | --- | --- | --- | --- | --- | --- |
|
||||
| 普通低/中额单据 | PC/自动化 | `SMOKE002` / 测试员工 | 提交低/中额单据 | 待办分配给 `SMOKE101` | 通过 | S4 自动化证据 |
|
||||
| 高额/高风险/例外单据 | PC/自动化 | `SMOKE002` / 测试员工 | 提交高额/例外单据 | `SMOKE101 -> SMOKE201 -> SMOKE302/SMOKE301`,以现有金额和财务规则为准 | 通过 | S4 自动化证据 |
|
||||
| 主管本人申请 | PC/自动化 | `SMOKE101` / 测试主管 | `SMOKE101` 提交本人申请 | 待办分配给 `SMOKE201` | 通过 | S4 自动化证据 |
|
||||
| 公司负责人本人申请 | PC/自动化 | `SMOKE201` / 测试负责人 | `SMOKE201` 提交本人申请 | 不允许自审;无非本人兜底时阻断 | 通过 | S4 自动化证据 |
|
||||
| 系统管理员无业务审批权 | PC/自动化 | `SMOKE001` / 测试管理员 | 尝试审批测试单据 | 不允许仅凭 `admin` 审批 | 通过 | S4 自动化证据 |
|
||||
| 财务复核与付款/导出 | PC/自动化 | `SMOKE301` / `SMOKE302` | 处理已批准测试单据 | 按财务与财务主管权限处理 | 自动化已覆盖财务节点;PC 页面体验后续 R6 继续观察 | S4 自动化证据 |
|
||||
| 高额/高风险/例外单据 | PC/自动化 | 当前 active 角色账号 | 提交高额/例外单据 | 按当前负责人、财务和财务主管配置流转 | 需按 WOUA-FIX 后账号重跑 | 后续新证据 |
|
||||
| 主管本人申请 | PC/自动化 | 当前 active 主管账号 | 主管提交本人申请 | 待办分配给非本人上级或明确阻断 | 需按 WOUA-FIX 后账号重跑 | 后续新证据 |
|
||||
| 公司负责人本人申请 | PC/自动化 | 当前 active 负责人账号 | 负责人提交本人申请 | 不允许自审;无非本人兜底时阻断 | 需按 WOUA-FIX 后账号重跑 | 后续新证据 |
|
||||
| 系统管理员无业务审批权 | PC/自动化 | 当前 active admin | 尝试审批测试单据 | 不允许仅凭 `admin` 审批 | 需按 WOUA-FIX 后账号重跑 | 后续新证据 |
|
||||
| 财务复核与付款/导出 | PC/自动化 | 当前 active 财务角色账号 | 处理已批准测试单据 | 按财务与财务主管权限处理 | 需按 WOUA-FIX 后账号重跑 | 后续新证据 |
|
||||
|
||||
### 企业微信/移动体验验收矩阵
|
||||
|
||||
@@ -106,9 +105,9 @@
|
||||
自动化补充证据(用于审批链业务验收):
|
||||
|
||||
- `2026-05-10`:公网 live smoke、真实 OCR 和测试替身审批链已通过;证据目录 `artifacts/qa-flow/live-smoke-readiness-20260510-205136`。
|
||||
- `SMOKE002` 请假待办已分配给 `SMOKE101`;`SMOKE101` 本人请假待办已分配给 `SMOKE201`;`SMOKE201` 本人请假提交被 `no_actionable_approver` 阻断。
|
||||
- `SMOKE001` 仅凭 `admin` 审批业务待办被拒绝,HTTP `403/PERM_002`。
|
||||
- 小额报销经 `SMOKE101` 后进入 `finance` role;大额报销进入 `SMOKE101 -> ceo -> finance_mgr`,由 `SMOKE301/SMOKE302` 测试角色验证。
|
||||
- 2026-05-10 历史证据中:`SMOKE002` 请假待办分配给 `SMOKE101`;`SMOKE101` 本人请假待办分配给 `SMOKE201`;`SMOKE201` 本人请假提交被 `no_actionable_approver` 阻断。
|
||||
- 2026-05-10 历史证据中:`SMOKE001` 仅凭 `admin` 审批业务待办被拒绝,HTTP `403/PERM_002`。
|
||||
- 2026-05-10 历史证据中:小额报销经 `SMOKE101` 后进入 `finance` role;大额报销进入 `SMOKE101 -> ceo -> finance_mgr`,由 `SMOKE301/SMOKE302` 测试角色验证。WOUA-FIX 后这些账号中的缺企微测试账号已归档,后续需用当前 active 角色账号重跑。
|
||||
- 企业微信工作台、OAuth 绑定和提交人/审批人核心移动链路已有 `oa_smoke_01/oa_smoke_02` 真机通过;移动布局、PDF 上传、通知 deeplink 已完成公网自动视觉和真机确认,R5/S5 可按合同回填 `DONE`。
|
||||
- `2026-05-10` 真机补充:原记录为 iPhone 11(iOS 14),用户于 `2026-05-11` 更正实际设备为 iPhone 12 / iOS 14.1;与 Redmi K60(MIUI)企业微信最新版下,`oa_smoke_01 -> SMOKE002`、`oa_smoke_02 -> SMOKE101` 绑定、工作台进入、免登录、提交和审批详情/结果均通过。
|
||||
- `2026-05-10` 阻断:真机发现移动底部导航和报销详情深层页在不同分辨率下存在底部区域不可见或控件挤压;发票上传正式口径改为 PDF-only。本地修复已完成,部署与真机复测完成前,S5/O3/R5 不标 `DONE`。
|
||||
|
||||
在新工单中引用
屏蔽一个用户