10 KiB
10 KiB
| 1 | ID | Title | Description | Acceptance | Test_Method | Tools | Dev_Status | Review1_Status | Regression_Status | Files | Dependencies | Notes |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2 | HRWD-0 | 合同建档与边界纠偏 | 建立 HR-WECOM-DIRECTORY-V1 合同,固定以后不接 ERP、人事生命周期与考勤分属 HR 大域下两个子模块、OA 为员工权限审批审计主事实源、企业微信为通讯录入口通知和打卡采集基础设施。 | 1) Issue CSV 校验通过;2) ERP 口径从当前冻结改为未来不接入;3) 人事生命周期和考勤边界写清;4) 不使用企业微信原生审批、不接真实支付、不开放图片 OCR、不导入银行流水。 | 受影响流程:产品边界 -> HRWD 合同 -> 后续实现;验证步骤:python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-05-17_20-00-40-hr-wecom-directory-v1.csv。 | python3|manual | DONE | DONE | DONE | issues/2026-05-17_20-00-40-hr-wecom-directory-v1.csv | [] | 回滚路径:回退本 CSV 和文档口径回写;不涉及运行时。 |
| 3 | HRWD-1 | 现状审计 | 核对现有 employee_lifecycle_v1、员工创建、入职转正调岗离职、账号启停和企业微信绑定能力,确认当前缺口是 OA 驱动企业微信通讯录创建更新禁用。 | 1) 完成现状矩阵;2) 明确已完成、可复用、缺口和外部企微配置项;3) 不误写现有绑定为通讯录自动创建;4) 不打印真实账号敏感信息。 | 受影响流程:员工管理 -> 入离职 -> 企业微信绑定/通讯录缺口;验证步骤:rg -n 'employee_lifecycle_v1|onboarding|offboarding|wecomIdentityBinding|WECOM_CONTACT' server/src client/src docs issues;只读核对 server/src/routes/employees.js、server/src/routes/users.js、server/src/services/integrations。 | rg|manual | DONE | DONE | DONE | server/src/routes/employees.js|server/src/routes/users.js|client/src/pages/PeoplePage.tsx|docs | ["HRWD-0"] | 审计不修改生产数据;只输出脱敏结论。 |
| 4 | HRWD-2 | 企业微信通讯录同步配置 | 新增 hr_wecom_directory_sync_v1 feature flag、仓库外配置 WECOM_CONTACT_SYNC_ENABLED/WECOM_CONTACT_SECRET/WECOM_CONTACT_DEFAULT_DEPARTMENT_ID,并保持默认关闭。 | 1) feature flag key、env gate、seed 默认值和示例 env 完整;2) 缺配置时返回 SKIP/BLOCKED_BY_EXTERNAL_CONFIG;3) 不复用 WECOM_AGENT_SECRET 作为通讯录写权限 Secret;4) 配置不泄露。 | 受影响流程:管理员启用 HR 企微通讯录同步 -> 配置探测 -> 后续创建更新禁用;验证步骤:cd server && npm run prisma:validate;cd server && node --check src/config.js src/services/featureFlags/index.js src/routes/featureFlags.js。 | node|prisma | DONE | DONE | DONE | server/src/config.js|server/src/services/featureFlags/index.js|server/src/routes/featureFlags.js|server/src/scripts/seed-config.js|server/.env.example|deploy/trialrun/.env.example | ["HRWD-1"] | 默认 force_off;回滚路径:删除新增 flag/env 读取和 seed 记录。 |
| 5 | HRWD-3 | 入职闭环与企微创建 | 在 OA 创建员工/入职流程中接入企业微信通讯录创建:配置完整且 flag 开启时创建企微成员并写入绑定;失败不回滚 OA 员工创建,记录可重试同步结果。 | 1) OA 员工创建仍可独立成功;2) 企微创建成功后有 wecom_identity_bindings;3) 企微失败记录同步失败并可重试;4) 日志和响应脱敏手机号、secret、token 和原始 payload。 | 受影响流程:HR 创建员工 -> OA 账号/角色 -> 入职 checklist -> 企微通讯录创建 -> 绑定;验证步骤:cd server && npm test -- tests/unit/routes/users.write.test.js tests/unit/routes/employees.wecomDirectory.test.js。 | npm|node | DONE | DONE | DONE | server/src/routes/users.js|server/src/routes/employees.js|server/src/services/integrations/wecomDirectory.js|server/tests/unit/routes | ["HRWD-2"] | 企业微信 API mock 优先;live 写入必须另有公网/后台配置批准。 |
| 6 | HRWD-4 | 离职闭环与账号禁用 | 完善离职闭环:离职 checklist 完成后禁用 OA 账号、递增 token_version、默认禁用企业微信成员而非删除,并保留绑定和历史审计。 | 1) 离职启动生成 checklist;2) checklist 完成后员工 status=archived 且 token_version 递增;3) 企业微信成员禁用成功或记录失败可重试;4) 绑定关系和历史业务记录保留;5) 存在阻断项时给出可解释提示。 | 受影响流程:HR 发起离职 -> checklist -> 权限回收 -> OA 账号禁用 -> 企微成员禁用;验证步骤:cd server && npm test -- tests/unit/routes/employees.wecomDirectory.test.js tests/unit/routes/users.write.test.js tests/unit/routes/auth.login.test.js。 | npm|node | DONE | DONE | DONE | server/src/routes/employees.js|server/src/services/employeeLifecycle.js|server/src/services/integrations/wecomDirectory.js|server/tests/unit/routes | ["HRWD-3"] | 默认禁用不删除;回滚路径:回退离职钩子,历史数据不删除。 |
| 7 | HRWD-5 | 调岗和资料变更同步 | OA 调岗、部门、主管、职位、手机号、邮箱变化后生成企业微信成员更新;同步失败不回滚 OA 变更,进入可重试记录。 | 1) 调岗不影响历史审批和业务单据;2) 变更成功时企微更新记录为 success;3) 失败时记录 failed/skipped 且 OA 变更保留;4) 管理员可重试。 | 受影响流程:HR 调岗/修改员工资料 -> OA 主数据更新 -> 企微通讯录更新;验证步骤:cd server && npm test -- tests/unit/routes/employees.wecomDirectory.test.js tests/unit/routes/employees.patch.test.js。 | npm|node | DONE | DONE | DONE | server/src/routes/employees.js|server/src/routes/users.js|server/src/services/integrations/wecomDirectory.js | ["HRWD-3"] | 涉及外部系统最终一致性;不做分布式事务。 |
| 8 | HRWD-6 | 同步记录权限审计 | 新增企业微信通讯录同步记录表或等价审计,记录 employeeId、externalUserId、操作、状态、错误码、重试次数和脱敏摘要;限制 HR/管理员查看和重试。 | 1) 普通员工不可查看他人同步状态;2) HR/管理员可查看和重试;3) 审计覆盖创建、更新、禁用、重试;4) 不保存 secret/token/完整 payload。 | 受影响流程:同步失败 -> 管理员查看 -> 重试 -> 审计;验证步骤:cd server && npm run prisma:validate;cd server && npm test -- tests/unit/routes/employees.wecomDirectory.test.js。 | prisma|npm | DONE | DONE | DONE | server/prisma/schema.prisma|server/prisma/migrations/*|server/src/routes/employees.js|server/tests/unit/routes | ["HRWD-2"] | 涉及 Prisma 迁移;回滚路径:回退代码并 drop 新增同步记录表和 flag seed。 |
| 9 | HRWD-7 | 前端人事页面调整 | 在 People 页面展示企业微信状态和同步状态,补齐重试入口;离职确认说明会禁用 OA 账号并尝试禁用企业微信成员;移动端只做查看和轻量入口。 | 1) 员工详情/列表能看到未绑定、已绑定、同步成功、同步失败、配置缺失;2) HR/管理员可重试同步;3) 离职确认文案明确影响;4) PC/移动/企业微信 UA 无布局溢出。 | 受影响流程:管理员打开 People -> 查看员工企微状态 -> 触发重试 -> 发起离职确认;验证步骤:cd client && npm run typecheck && npm run build;cd client && npx playwright test tests/e2e/user-onboarding.spec.ts --workers=1 --reporter=list。 | npm|playwright | DONE | DONE | DONE | client/src/pages/PeoplePage.tsx|client/src/api/employees.ts|client/tests/e2e/user-onboarding.spec.ts | ["HRWD-3","HRWD-4","HRWD-6"] | 页面改动遵循 docs/产品设计规则.md;不新增移动批量管理。 |
| 10 | HRWD-8 | 文档回写部署复检和提交 | 回写现有事实源和手册,完成本地后端/前端/Playwright 回归;本地通过后部署公网并复检员工管理、企业微信入口、移动/企微 UA 和权限边界。 | 1) docs/文档索引、事实源矩阵、人工试运行报告、PRD、企业微信规约和管理员手册已回写;2) Issue 状态按实测回填;3) 本地全测通过后才部署;4) 部署后公网复检通过或记录阻断;5) 中文 commit 引用 HRWD。 | 受影响流程:人事生命周期 -> 企业微信通讯录同步 -> 文档事实源 -> 部署复检;验证步骤:node scripts/qa/audit-docs.mjs --check-registry;git diff --check;set -a && source ~/.hyb-oa/live-smoke.env && set +a && LIVE_SMOKE_BASE_URL=https://oa.hyinda.com bash scripts/qa/run-live-smoke-readiness.sh;git commit -m 'HRWD 实现人事生命周期企微通讯录同步'。 | node|bash|git|playwright | DONE | DONE | DONE | docs/海音达OA-MVP需求规格说明书.md|docs/需求-企业微信基础设施规约.md|docs/管理员手册.md|docs/文档索引.md|docs/文档事实源状态矩阵.md|docs/trialrun/人工试运行报告.md | ["HRWD-7"] | 公网已部署并复检通过;最终报告 artifacts/qa-flow/live-smoke-readiness-20260517-205813/summary.json;企微通讯录配置缺失时 live 重试为 SKIP wecom_contact_sync_disabled;最终 payment_batch_v1=force_on,erp_sync=force_off。 |
| 11 | HRWD-9 | 部署 seed 保护正式 feature flag | 修正 seed-config 功能开关种子逻辑,只创建缺失开关,不覆盖已有正式运行时配置,避免后续部署再次把 payment_batch_v1 等正式 flag 重置为 bootstrap 默认值。 | 1) 已存在 feature flag 不被 seed-config 覆盖;2) 新增缺失 feature flag 仍可 bootstrap 创建;3) 部署后 payment_batch_v1 保持 force_on,erp_sync 保持 force_off;4) 不新增业务 API/schema/UI。 | 受影响流程:部署 -> seed-config -> 正式 feature flag 状态 -> 付款批次常开;验证步骤:cd server && node --check src/scripts/seed-config.js;set -a && source ~/.hyb-oa/live-smoke.env && set +a && SYNC_ENV=0 bash deploy/trialrun/deploy.sh;LIVE_SMOKE_BASE_URL=https://oa.hyinda.com node scripts/qa/check-live-feature-flags.mjs --expect payment_batch_v1=force_on --expect erp_sync=force_off --expect employee_lifecycle_v1=enabled --expect hr_wecom_directory_sync_v1=disabled。 | node|bash | DONE | DONE | DONE | server/src/scripts/seed-config.js | ["HRWD-8"] | 完成:seed-config 改为 create-only 并忽略 P2002 冲突;第二次部署后正式 flag 检查保持 PASS,避免部署重置付款批次正式常开状态。 |