DCL7 精简文档并统一中文口径
这个提交包含在:
@@ -1,11 +0,0 @@
|
||||
"ID","Flow","Trigger","CurrentFeedback","AutoRefresh","TerminalStates","FailureReason","RetryEntry","IndustryBenchmark","Risk","SuggestedIssue","Notes"
|
||||
"AUX-01","报销详情发票识别","员工上传 PDF/图片发票","上传成功后显示单一识别状态,识别完成后自动添加;事件流失败时轮询兜底","fetch-stream/SSE + 3s 轮询兜底","已添加、识别失败、重复、已用于报销","通过 availabilityMessage 展示业务原因","失败发票可重新识别或人工修正","合思/分贝通/每刻均强调票据识别、验真、查重和电子档案","真实腾讯 OCR 耗时和公网链路仍需 live smoke 证据","保留 H10 live OCR gate","本轮已作为主链路优化"
|
||||
"AUX-02","票据中心发票验真","财务或有权限用户触发验真","详情页显示验真记录,pending 时轮询记录列表","React Query 轮询 pending 验真记录","通过、失败、异常","展示 provider 返回的 resultMessage 或 errorMessage","失败记录可重试验真","国内费控系统通常把识别、验真、查重作为连续可追踪流程","普通员工不应看到过多 provider 细节;财务侧可保留","新增验真 UX 断言 Issue","不在本轮改业务代码"
|
||||
"AUX-03","支付批次执行","财务创建、复核并执行付款批次","批次页显示状态和操作结果 toast","依赖页面 refetch 和 focused regression","待复核、已复核、执行中、已执行、失败","失败路径由批次路由和回归脚本覆盖","失败后按批次状态重新处理","分贝通/合思强调企业支付、对账、归档闭环","执行中长耗时缺少实时进度和失败明细聚合","新增支付批次执行进度 Issue","需防 maker-checker 权限回归"
|
||||
"AUX-04","ERP 凭证/主数据同步","付款、报销或主数据变更后进入 outbox","管理页和预览可查看 pending outbox","当前以后台 job 和页面刷新为主","pending、sent、failed、dead-letter","outbox 错误摘要可查","管理端可 retry outbox","同类系统强调 OA/HRM/ERP 连接和三流合一","普通业务页对同步中/同步失败提示较弱","新增 ERP 同步状态外显 Issue","外部 ERP live 回执仍是专项"
|
||||
"AUX-05","用户/主数据导入","管理员上传导入文件","导入接口返回成功/失败摘要","通常一次 HTTP 完成;批量大时缺少任务化反馈","完成、部分失败、失败","行级错误摘要","修正文件后重新导入","国内 OA 常见批量导入需行级错误与可下载失败清单","大批量导入可能阻塞且反馈不连续","新增导入任务化与错误清单 Issue","需先盘点现有导入入口"
|
||||
"AUX-06","审批处理与移动离线队列","审批人在 PC/移动端通过、驳回、转交","操作后 toast 和列表刷新;移动离线队列有回放机制","页面 refetch;离线队列恢复后重放","已处理、待处理、失败、冲突","权限/状态冲突显示错误","失败后重新提交操作","国内 OA 强调移动审批效率和全程留痕","多人并发和代理审批 live 证据不足","新增审批并发与代理 live smoke Issue","不在本轮改 workflow 状态机"
|
||||
"AUX-07","附件材料上传","报销草稿或驳回状态上传附件","显示上传结果和附件列表","上传完成后 refetch 详情","已上传、失败、已删除","上传失败显示错误","重新选择文件上传","行业实践区分发票凭证和附件材料","移动弱网下缺分片/重试进度;PDF 与图片入口需清楚","新增附件弱网与视觉断言 Issue","需保持附件不参与发票识别和查重"
|
||||
"AUX-08","通知与 IM 投递","审批、报销状态变化或系统消息触发","站内通知列表显示未读;外部 IM 依赖配置","前端查询通知;外部投递后台处理","未读、已读、投递失败","后台日志或 outbox 错误","管理端/脚本重试","国内 OA 强调消息可达和待办闭环","真实企业微信消息投递证据不足","新增 IM 投递 live smoke Issue","真实企业微信登录由人工验收"
|
||||
"AUX-09","预算/费用标准预检","提交报销或采购前触发预检","页面展示预算、标准和风险提示","多为提交前即时计算","通过、提示、阻断","以业务文案展示不合规原因","修改明细后重新预检","费控最佳实践强调事前管控","普通用户对阻断原因和修改建议仍可增强","新增提交前预检解释 Issue","不顺手改当前费用规则"
|
||||
"AUX-10","公网 live smoke 与发布门禁","部署后执行公网 ready、资源扫描、OCR 样本和网页 smoke","脚本输出 pass 或明确 SKIP 缺项","命令式检查,不依赖页面自动刷新","通过、失败、跳过","缺账号/缺样本/公网异常","补齐环境变量后重跑","上线前必须保留真实链路证据","缺账号或样本时容易误以为已覆盖真实链路","保留 H10 发布门禁","本轮脚本已加入 pending OCR 扫描"
|
||||
|
@@ -1,17 +0,0 @@
|
||||
"Domain","Tier","Routes","Primary_Roles","Env_Gates","Feature_Flags","Coverage_Status","Evidence","Validated_Flows","Gaps","Next_Action"
|
||||
"__DOC_STATUS__","meta","N/A","N/A","N/A","N/A","historical_reference","docs/文档索引.md|docs/文档事实源状态矩阵.md|docs/trialrun/manual-trialrun-report.md","本 CSV 是历史证据 / QA 参考,不代表 2026-05-12 当前状态。R6/PC6/PA6/FL6/AP6/RI6/LP6/ME6/QG6/DG7/MIA7 后的当前状态以最新 Issue CSV 和文档索引为准。","历史条目中的公网仍需、待执行、缺口等表述需按当时日期理解。","不要单独使用本 CSV 决定当前门禁或新需求;先读最新 Issue CSV。"
|
||||
"认证与 Portal 导航","must_cover","/login|/portal|主/管/备导航","employee|manager|admin","APP_ORIGIN|COOKIE_SECURE|PORTAL_HOME_ENABLED|WECOM_ENTRY_ENABLED","portal_home_v1|wecom_entry_v1","done","artifacts/r69/acceptance-report.md|docs/trialrun/manual-trialrun-report.md|client/tests/e2e/login-portal-ux.spec.ts|client/tests/e2e/wecom-entry.spec.ts|client/tests/e2e/manual/r70-trialrun-assist.spec.ts","登录、Portal 首屏、员工/经理/管理员导航分组、普通浏览器与企微 WebView CTA 提示均有自动化或人工证据。","真实企微 OAuth 绑定与回跳未做端到端;HTTPS 部署态 cookie 行为未在本轮验证。","保持主链路 done;真实企微与 HTTPS 转 A5 外部专项。"
|
||||
"请假与审批","must_cover","/leave-requests|/workflow/tasks","employee|manager|admin","none","leave_holiday_calendar","done","artifacts/r69/acceptance-report.md|docs/trialrun/manual-trialrun-report.md|client/tests/e2e/leave-flow.spec.ts|client/tests/e2e/workflow-quick-approve.spec.ts|client/tests/e2e/leave-team-calendar.spec.ts","请假草稿、提交、撤回、经理快捷审批、团队日历权限边界与经理部门视角已自动化并在 R70 人工复测通过。","多审批人链路、代理审批、真实并发多人协同未在 trialrun 轮次验证。","维持 done;多人协同与代理审批并入 A5 或后续专项。"
|
||||
"报销、票据中心与 OCR","must_cover","/reimbursements|/reimbursements/:id|/invoice-pool","employee|manager|finance|admin","OCR_PROVIDER|TENCENT_SECRET_ID|TENCENT_SECRET_KEY|PAYMENT_BATCH_ENABLED|ERP_SYNC_ENABLED","invoice_verification|payment_batch_v1|erp_sync","done","docs/trialrun/manual-trialrun-report.md|artifacts/r70/live-ocr-batch-report.md|issues/2026-04-29_08-39-22-r76-external-trialrun-closeout.csv|issues/2026-04-29_09-19-07-r77-ocr-pdf-first.csv|issues/2026-04-29_10-14-27-r78-reimbursement-payment-tail.csv|client/tests/e2e/reimbursement-workflow-progress.spec.ts|client/tests/e2e/invoice-ocr-flow.spec.ts|client/tests/e2e/reimbursement-payment-batch-flow.spec.ts|client/tests/e2e/manual/live-invoice-ocr.spec.ts|client/tests/e2e/manual/live-invoice-ocr-batch.spec.ts|server/scripts/regression-payment-batches.sh","报销提交后审批进度、票据中心缺字段修正、上传后自动 OCR 进入可绑定、绑定后提交已自动化;R70 人工链路也通过。R77 已在干净本地 trialrun DB 上用真实 PDF 发票跑通 `上传 -> OCR -> available`。R78 已补 employee->manager->finance->finance_mgr->payment batch->execute->reimbursement paid->invoice archived->ERP preview pending outbox focused regression。","真实 ERP 投递回执、高风险两轮复核、大额或混合付款批次仍未进入本轮本地试运行;腾讯 OCR 凭证仍依赖旧项目运行时注入。","维持 done;真实 ERP 与高风险付款转外部/专项回归,PDF 转图片 fallback 仅在新增票样兼容性问题出现时再评估。"
|
||||
"周报与待办","must_cover","/weekly-reports|/todos","employee|manager","WEEKLY_REPORT_ENABLED|TODO_BOARD_ENABLED","weekly_report_v1|todo_board_v1","done","artifacts/r70/auto-trialrun-deep-report.md|docs/trialrun/manual-trialrun-report.md|client/tests/e2e/weekly-todo-flow.spec.ts|client/tests/e2e/manual/r70-trialrun-deep-assist.spec.ts","周报保存、生成待办、提交周报、完成待办闭环已自动化且在真实 trialrun 数据上复核通过。","经理侧未提交周报聚合与催办策略未单独验证。","维持 done;如进入管理场景增强,再补经理视角聚合。"
|
||||
"公告、搜索与通知","must_cover","/announcements|/notifications|全局搜索","employee|manager|admin","ANNOUNCEMENTS_ENABLED|GLOBAL_SEARCH_ENABLED","announcements_v1|global_search_v1","done","artifacts/r70/auto-trialrun-deep-report.md|docs/trialrun/manual-trialrun-report.md|client/tests/e2e/announcements-presence.spec.ts|client/tests/e2e/global-search.spec.ts|client/tests/e2e/manual/r70-trialrun-deep-assist.spec.ts|client/tests/e2e/r75-automation-gap-fill.spec.ts","公告发布、员工可见、Portal 汇总、真实搜索命中公告并跳转,以及通知中心未读筛选、单条已读、全部已读与待办跳转均有自动化或人工证据。","无当前试运行阻断缺口;真实外发渠道投递与通知渠道配置验证另见系统治理和外部环境项。","站内通知维持 done;外发渠道留在 A5/治理专项。"
|
||||
"团队状态与考勤","must_cover","/team|/attendance","employee|manager|admin","PRESENCE_BOARD_ENABLED|ATTENDANCE_ENABLED","presence_board_v1|attendance_v1","done","docs/trialrun/manual-trialrun-report.md|client/tests/e2e/announcements-presence.spec.ts|issues/2026-04-09_r59-attendance-clockin.csv|client/tests/e2e/r75-automation-gap-fill.spec.ts","团队状态更新、Portal 汇总、经理查看团队状态,以及员工今日上班/下班打卡、月视图记录、管理员团队考勤补卡最小链路均已验证。","排班、节假日豁免、跨日班次等复杂考勤规则未做专项回归,但不构成本轮 trialrun 阻断。","维持 done;复杂考勤规则按需要独立专项。"
|
||||
"人员、组织、生命周期与绩效","must_cover","/people|/organization|/people/:employeeId|/performance","admin|manager|employee","EMPLOYEE_LIFECYCLE_ENABLED","employee_lifecycle_v1","partial_done","docs/trialrun/manual-trialrun-report.md|issues/2026-03-21_12-10-00-r14-people-lifecycle.csv|issues/2026-03-29_r46-performance-review.csv|issues/2026-03-28_17-12-07-r40-profile-edit-and-people-export.csv|client/tests/e2e/r75-automation-gap-fill.spec.ts","管理员已人工打开人员管理与组织架构;当前 trialrun 已新增‘创建临时员工 -> 发起入职 -> 转正’轻量 happy path,生命周期、档案、导出、绩效权限边界仍保留历史 QA 与回归证据。","离职/资产交接完整链路、员工自助档案修改和直属上级绩效评分未在本轮重验。","lifecycle 基线已补齐;离职交接与绩效真实操作留后续 focused regression。"
|
||||
"项目、合同台账与涉密边界","must_cover","/projects|/projects/:projectId|/contracts-registry","manager|admin|project roles","PROJECT_DOMAIN_ENABLED|PROJECT_LINKING_ENABLED|PROJECT_COMMUNICATION_LOG_ENABLED|PROJECT_CLOSURE_CHECKLIST_ENABLED|CONFIDENTIAL_DOC_REFS_ENABLED","project_domain_v1|project_linking_v1|project_communication_log_v1|project_closure_checklist_v1|confidential_doc_refs_v1","partial","docs/trialrun/manual-trialrun-report.md|client/tests/e2e/project-workbench.spec.ts|client/tests/e2e/confidential-boundary.spec.ts|client/tests/e2e/manual/r70-trialrun-assist.spec.ts","项目工作台沟通回填、收口面板、Portal 摘要、涉密搜索边界已自动化;经理人工确认项目入口可理解。","合同台账页面本轮只验证入口,没有当前 trialrun 下的浏览/编辑证据;真实项目创建与成员协同未重跑。","A4 可补项目详情与合同台账只读 smoke;重交互保持后置。"
|
||||
"采购","enabled_admin","/purchase-requests","employee|manager|finance","none","none","partial_done","artifacts/r69/acceptance-report.md|client/tests/e2e/procurement-flow.spec.ts|issues/2026-03-24_17-00-26-r33-3-transaction-timeout-tail-cleanup.csv","员工提单、经理审批、财务归档链路已自动化通过,且事务超时问题已收口。","未进入 R70 人工试运行,当前 trialrun DB 下没有业务体验反馈。","若采购进入试运行范围,先补一次人工 happy path;否则保留自动化证据即可。"
|
||||
"资产与盘点","enabled_admin","/assets|/inventory-checks|/mobile/assets/scan","employee|asset admin","none","none","partial_done","artifacts/r69/acceptance-report.md|client/tests/e2e/assets-flow.spec.ts|issues/2026-03-24_17-00-26-r33-3-transaction-timeout-tail-cleanup.csv","资产建卡、领用归还、调拨、盘点主链路已自动化通过。","未进入 R70 人工试运行;移动扫描真实设备与摄像头场景未验证。","保持自动化证据;真实移动扫描转 A5 或独立移动专项。"
|
||||
"差旅与移动审批","enabled_admin","/travel-requests|/mobile/approvals|/mobile/capture","employee|manager|finance","WECOM_ENTRY_ENABLED","wecom_entry_v1","partial_done","artifacts/r69/acceptance-report.md|client/tests/e2e/travel-payment-flow.spec.ts|client/tests/e2e/travel-reconciliation-flow.spec.ts|client/tests/e2e/mobile-approvals-offline.spec.ts|docs/trialrun/manual-trialrun-report.md","差旅申请、审批、支付、绑票、对账批次,以及移动审批 deep link 离线重放都有自动化证据;R70 人工仅确认移动入口可理解。","真实 IM deep link、真实移动设备 PDF 上传、多人并发审批未验证。","保留自动化为主;真实设备和 IM 深链并入 A5。"
|
||||
"预算、支付批次与 AP 运营","optional","/budgets|/payment-batches|/ap-operations","finance|admin","BUDGET_PRECHECK_ENABLED|PAYMENT_BATCH_ENABLED|ERP_SYNC_ENABLED","budget_precheck_v1|payment_batch_v1|erp_sync","partial_done","issues/2026-03-29_08-07-14-p25-lite-budget-ap.csv|issues/2026-04-06_r52-ap-operations.csv|issues/2026-04-29_10-14-27-r78-reimbursement-payment-tail.csv|client/tests/e2e/reimbursement-payment-batch-flow.spec.ts|server/scripts/regression-payment-batches.sh","支付批次 maker-checker、AP 待付款快捷复核、finance 执行报销付款批次,以及 reimbursement paid 后 ERP preview pending outbox 已在本地 focused regression 跑通;历史 budget/AP 视图与 review 证据仍保留。","预算预检页面级联动、高风险两轮复核、大额批次与非报销实体付款未在本轮 focused local 回归中重跑。","若财务域继续扩大试运行,再补 budget precheck 与高风险二次复核专项;当前 payment batch/AP happy path 已具备本地回归证据。"
|
||||
"ERP 集成与切换控制台","external","/system/integrations/erp|/system/cutover","integration admin|system.settings","ERP_SYNC_ENABLED|CUTOVER_CONSOLE_ENABLED","erp_sync|cutover_console_v1","partial_external","issues/2026-03-08_14-10-53-p19-erp-1-l5-masterdata-journal-bridge.csv|issues/2026-03-21_11-10-00-p29-replacement-readiness-refresh.csv|client/tests/e2e/live-smoke.spec.ts","ERP 管理页、mock/http 回归和只读 live smoke 有历史证据。","当前本地 trialrun 没有真实 ERP 出入站或 cutover 操作验证。","仅在外部环境专项下执行,不进入默认 trialrun gate。"
|
||||
"系统治理、功能开关与审计","enabled_admin","/system/workspace|/system/settings|/system/feature-flags|/system/workflow-definitions|/audit-logs|/system/notification-channels","admin","WORKFLOW_DEFINITION_ADMIN_ENABLED","workflow_definition_admin_v1","partial_done","docs/trialrun/manual-trialrun-report.md|client/tests/e2e/settings-governance.spec.ts|client/tests/e2e/live-smoke.spec.ts|server/src/scripts/smoke-trialrun-runtime.js|client/tests/e2e/r75-automation-gap-fill.spec.ts|issues/2026-05-05_20-01-18-r90-r91-trialrun-closeout.csv","工作区设置、系统设置、功能开关、审计日志打开与导航边界有自动化和人工证据;R74 本地门禁已检查 workspace/flag/navigation 基线,R75 已补功能开关备注保存并恢复写路径。R80 已把 `wecom_entry_v1` 从 `force_off` 调整为 `inherit`,R90 已把旧公网诊断从当前事实中剥离。","流程定义、通知渠道、工作区其他写操作和审计留痕写入效果仍未在当前 trialrun 做完整专项;公网 `announcements_v1` / `global_search_v1` 仍需在 live smoke 中重新核对。","保留 partial_done;R90/R91 先收口公网 feature flag 与 live smoke,再补通知渠道与流程定义写路径。"
|
||||
"企微、HTTPS、部署态与并发","external","/login(企微入口)|部署运行时|多账号并发","all roles","APP_ORIGIN|COOKIE_SECURE|WECOM_*|PUBLIC_SECURITY_HARDENING_ENABLED","wecom_entry_v1|public_security_hardening_v1","partial_done","deploy/trialrun/runbook.md|client/tests/e2e/wecom-entry.spec.ts|client/tests/e2e/live-smoke.spec.ts|client/tests/e2e/r89-mobile-login-navigation.spec.ts|server/src/scripts/smoke-trialrun-runtime.js|issues/2026-05-04_16-47-46-r80-live-wecom-enablement.csv|issues/2026-05-04_20-53-39-r82-wecom-userid-compatibility.csv|issues/2026-05-04_23-36-10-r83-r86-user-onboarding-simplify.csv|issues/2026-05-05_14-01-13-r87-wecom-session-hint.csv|issues/2026-05-05_14-12-50-r88-wecom-device-fingerprint.csv|issues/2026-05-05_17-35-00-r89-mobile-login-ux.csv|issues/2026-05-05_20-01-18-r90-r91-trialrun-closeout.csv","本地/只读 smoke、env contract、导航/入口提示与 local runtime gate 已就绪;`https://oa.hyinda.com/ready` 已通过只读探活。R80 已启用公网企微 env 与 `wecom_entry_v1=inherit`;R82-R88 已修复真实 UserId 兼容、首次绑定、会话提示与设备指纹;R89 已完成本地移动登录与导航自动化。","历史缺口:当时公网仍需部署最新 R89/R90 并用真实手机企业微信复核 `/mobile` 落点;该表述不代表当前公网状态。HTTPS cookie secure、独立 smoke 账号 live smoke 和多用户并发协同也需按最新 Issue CSV 判断。","企微不再按外部阻塞处理;R90/R91 当时继续推进公网最新版本部署、`returnTo=/mobile`、live smoke、备份恢复和并发专项。"
|
||||
|
@@ -1,147 +0,0 @@
|
||||
# R4 部署预检记录(2026-05-10)
|
||||
|
||||
**文档状态**:R4 预检、D3 同步与 D4 只读复检证据。
|
||||
**执行范围**:`issues/2026-05-10_12-39-37-release-readiness-live-smoke.csv` 的 R4,以及 `issues/2026-05-10_13-20-38-deployment-version-sync-governance.csv` 的 D1-D5。
|
||||
**当前结论**:`DONE`。D3 已用既有部署脚本同步 release candidate,D4 只读复检通过;R5 因缺真实公网账号和 OCR 样票仍保持 `TODO/SKIP`。
|
||||
|
||||
## 1. 初始 R4 边界
|
||||
|
||||
- 初始 R4 只读预检未部署。
|
||||
- 初始 R4 未修改远端 `.env`。
|
||||
- 初始 R4 未执行 migration、seed、备份创建、服务重启或生产数据写入。
|
||||
- 本轮未读取、打印、提交真实密码、JWT secret、企业微信 secret、腾讯 OCR secret 或数据库连接串明文。
|
||||
- 企业微信真机、公网真实账号登录和真实 OCR 样票验证仍属于 R5;本轮只停留在 readiness 检查。
|
||||
|
||||
## 2. 版本口径
|
||||
|
||||
| 项目 | 结果 |
|
||||
| --- | --- |
|
||||
| 部署准备最新提交 | `2bab4e5 R3 完成权限直连审计` |
|
||||
| 业务运行时代码基线 | `537e608 A8 完成首轮主线总回归门禁` |
|
||||
| `537e608..2bab4e5` 差异 | 仅包含测试、文档和 Issue CSV;不包含业务运行时代码变更 |
|
||||
| 远端目录 | `/opt/hyb-oa-trialrun` 存在 |
|
||||
| 远端版本来源 | 远端不是 git 工作树,无法用 `git rev-parse` 直接确认版本 |
|
||||
|
||||
初始关键运行时文件哈希抽查结果:
|
||||
|
||||
| 文件 | 结论 |
|
||||
| --- | --- |
|
||||
| `server/src/services/workspaceSettings.js` | `BLOCKED`:远端与 `537e608/2bab4e5` 不一致 |
|
||||
| `client/src/components/navigation/NavLinks.tsx` | `BLOCKED`:远端与 `537e608/2bab4e5` 不一致 |
|
||||
| `server/src/routes/workflow.js` | `BLOCKED`:远端与 `537e608/2bab4e5` 不一致 |
|
||||
| `server/src/routes/reimbursements.js` | 一致 |
|
||||
| `server/src/routes/invoicePool.js` | 一致 |
|
||||
| `server/src/routes/wecomAuth.js` | 一致 |
|
||||
| `server/src/routes/leave.js` | 一致 |
|
||||
| `server/src/routes/purchaseRequests.js` | 一致 |
|
||||
| `server/src/routes/contractsRegistry.js` | 一致 |
|
||||
| `server/src/routes/projects.js` | 一致 |
|
||||
|
||||
初始判定:远端当时可运行,但不能宣称已经是本轮 release candidate。由于不一致文件覆盖审批中心和权限导航护栏,按 R4 规则停止在预检阶段,并拆分部署版本同步治理 Issue。
|
||||
|
||||
## 3. 本地只读检查
|
||||
|
||||
| 检查项 | 结果 |
|
||||
| --- | --- |
|
||||
| `git status --short` | R4 开始前干净 |
|
||||
| `git log --oneline -5` | 最新提交为 `2bab4e5`,其后为 `60adbcf`、`537e608`、`a18d477`、`d6ee25f` |
|
||||
| `node deploy/trialrun/validate-env-contract.js` | PASS;检查服务 `server/worker/init`,`config.js` env 键数 121,`.env.example` env 键数 135 |
|
||||
| `node scripts/qa/check-live-smoke-env.mjs` | public `/ready` 为 200;企业微信 config 为 ready;`liveSmokeReady=false`;`liveOcrReady=false` |
|
||||
| live smoke 缺项 | 缺 `LIVE_SMOKE_ADMIN_IDENTIFIER/PASSWORD`、`LIVE_SMOKE_EMPLOYEE_IDENTIFIER/PASSWORD`、OCR live 登录或样票环境变量 |
|
||||
| `node scripts/qa/check-public-bundle-copy.mjs https://oa.hyinda.com` | scanned=54,focused=4,findings=0 |
|
||||
| Issue CSV 校验 | 通过 |
|
||||
| 公网 `/ready` | 200,`data.ok=true` |
|
||||
| 公网企业微信 config | 200;响应字段不包含 `secret`;`enabled/entryEnabled/oauthEnabled=true` |
|
||||
|
||||
## 4. 远端只读检查
|
||||
|
||||
| 检查项 | 结果 |
|
||||
| --- | --- |
|
||||
| SSH 用户 | `[email protected]` 可连接 |
|
||||
| 服务器 | `VM-0-13-debian` |
|
||||
| 部署目录 | `/opt/hyb-oa-trialrun` 存在 |
|
||||
| git 工作树 | `no`;当前部署方式仍按 rsync 文件树判断 |
|
||||
| compose 文件 | `deploy/trialrun/docker-compose.yml` 存在 |
|
||||
| env 文件 | `deploy/trialrun/.env` 存在 |
|
||||
| compose 工具 | `docker-compose 1.29.2` |
|
||||
| 容器状态 | `hyb-oa-trialrun-server` Up;`hyb-oa-trialrun-db` Up 且 healthy |
|
||||
| 远端本机 `/ready` | `http://127.0.0.1:3000/ready` 返回 200 |
|
||||
| Prisma migrate status | 46 migrations found;`Database schema is up to date!` |
|
||||
| 备份目录 | `deploy/trialrun/backups` 存在 |
|
||||
| 最近备份 | 2026-05-06 有 DB dump 和 storage tar;2026-05-05 有 DB dump、storage tar 和 feature flags CSV |
|
||||
| 文件存储目录 | `deploy/trialrun/data/storage` 存在 |
|
||||
| 最近 server 日志摘要 | 抽样只看到 `/ready` 和企业微信 config 探活请求;未见迁移 drift 或服务启动失败摘要 |
|
||||
|
||||
远端环境变量只做存在性、布尔值和非空长度检查,未打印 secret 明文:
|
||||
|
||||
| 范围 | 结果 |
|
||||
| --- | --- |
|
||||
| 基础域名与安全 | `APP_ORIGIN=https://oa.hyinda.com`,`COOKIE_SECURE=true`,`PUBLIC_SECURITY_HARDENING_ENABLED=true` |
|
||||
| 运行与存储 | `OCR_PROVIDER=tencent`,`STORAGE_DRIVER=local`,`JOB_DRIVER=pgboss`,`SERVE_CLIENT_DIST=true` |
|
||||
| 企业微信 | `WECOM_ENABLED/WECOM_ENTRY_ENABLED/WECOM_OAUTH_ENABLED=true`;`WECOM_CORP_ID/WECOM_AGENT_ID/WECOM_AGENT_SECRET` 非空 |
|
||||
| OCR | `TENCENT_SECRET_ID/TENCENT_SECRET_KEY/TENCENT_OCR_REGION` 非空 |
|
||||
| 核心 secret | `JWT_SECRET/POSTGRES_PASSWORD/DATABASE_URL/FIELD_ENCRYPTION_KEY` 非空 |
|
||||
|
||||
## 5. Caddy 只读检查
|
||||
|
||||
| 检查项 | 结果 |
|
||||
| --- | --- |
|
||||
| SSH 用户 | `[email protected]` 可连接 |
|
||||
| Caddy systemd | `active` 且 `enabled` |
|
||||
| Caddy 配置校验 | `Valid configuration` |
|
||||
| OA 站点块 | `/etc/caddy/Caddyfile` 包含 `oa.hyinda.com` |
|
||||
| 反代目标 | `/etc/caddy/Caddyfile` 包含 `reverse_proxy 127.0.0.1:3000` |
|
||||
| 443 监听 | `caddy` 正在监听 `*:443` |
|
||||
|
||||
## 6. 初始 R4 判定
|
||||
|
||||
初始 R4 未通过,保持 `DOING/TODO/TODO`,原因是远端运行时代码与本轮 release candidate 不一致,且远端不是 git 工作树,无法用提交号直接证明当前运行版本。
|
||||
|
||||
不一致不应在 R4 内通过远端手工修补解决。建议下一步先审批并执行部署版本同步治理:
|
||||
|
||||
- 确认同步目标仍为 `2bab4e5`,运行时代码基线仍为 `537e608`。
|
||||
- 部署前复核备份和回滚路径。
|
||||
- 使用既有 `deploy/trialrun/deploy.sh` 或批准后的等效流程同步远端文件树、构建并执行部署脚本内置 smoke。
|
||||
- 部署后重新执行 R4 只读预检;通过后才进入 R5 live smoke。
|
||||
|
||||
## 7. 初始 SKIP 与禁止项
|
||||
|
||||
- `SKIP`:真实公网账号登录,原因是缺 `LIVE_SMOKE_*`。
|
||||
- `SKIP`:真实 OCR 样票,原因是缺 OCR live 文件或目录环境变量。
|
||||
- `SKIP`:企业微信手机真机,原因是 R5 才执行。
|
||||
- 初始 R4 内禁止继续部署、重启、迁移、修改 `.env` 或写生产数据。
|
||||
|
||||
## 8. D1-D2 后续复核(2026-05-10)
|
||||
|
||||
执行合同:`issues/2026-05-10_13-20-38-deployment-version-sync-governance.csv`。
|
||||
|
||||
| 项目 | 结果 |
|
||||
| --- | --- |
|
||||
| D1 版本差异复核 | `DONE`:`537e608..2bab4e5` 仍仅包含测试、文档和 Issue CSV,不包含业务运行时代码变更 |
|
||||
| D1 远端哈希复核 | 与 R4 一致:`workspaceSettings.js`、`NavLinks.tsx`、`workflow.js` 未对齐,其余抽查运行时文件一致 |
|
||||
| D1 结论 | 同步目标仍固定为 `2bab4e5`;业务运行时代码基线仍为 `537e608`;不采用远端手工补丁 |
|
||||
| D2 备份目录 | 远端 `deploy/trialrun/backups` 存在 |
|
||||
| D2 最近备份 | 2026-05-10 13:43 已创建 `hyb-oa-db-20260510_134340.dump`(2691566 bytes)和 `hyb-oa-storage-20260510_134341.tar.gz`(2610057 bytes) |
|
||||
| D2 回滚路径 | runbook 已包含 DB/storage 备份、恢复、仅代码回滚和 DB 回滚步骤 |
|
||||
| D2 结论 | `DONE`:部署前新近备份已创建;当时 D3 仍需用户单独批准,后续执行结果见第 9 节 |
|
||||
|
||||
D3 受控同步 release candidate 后续已执行,结果见第 9 节。R5 live smoke 仍保持 `TODO/SKIP`。
|
||||
|
||||
## 9. D3-D5 发布同步与复检(2026-05-10)
|
||||
|
||||
执行合同:`issues/2026-05-10_13-20-38-deployment-version-sync-governance.csv`。
|
||||
|
||||
| 项目 | 结果 |
|
||||
| --- | --- |
|
||||
| D3 部署同步 | `DONE`:执行 `bash deploy/trialrun/deploy.sh` 成功 |
|
||||
| 环境同步 | `SYNC_ENV=0`,未覆盖远端 `.env` |
|
||||
| 部署脚本门禁 | env contract、rsync、容器重建、init、Prisma migrate status、`/ready`、external deps smoke、runtime smoke、公网 bundle 文案扫描均完成 |
|
||||
| 远端关键文件哈希 | `workspaceSettings.js`、`NavLinks.tsx`、`workflow.js` 及其他抽查运行时文件已与本地一致 |
|
||||
| 远端服务 | `hyb-oa-trialrun-server` 与 `hyb-oa-trialrun-db` 运行中,DB healthy,本机 `/ready` 返回 200 |
|
||||
| Prisma migration | 46 migrations found;`Database schema is up to date!` |
|
||||
| Caddy | `active/enabled`,配置有效,`oa.hyinda.com` 反代到 `127.0.0.1:3000`,443 监听正常 |
|
||||
| 企业微信 config | 公网接口 200,`enabled/entryEnabled/oauthEnabled=true`,响应不包含 secret |
|
||||
| 公网资源扫描 | `node scripts/qa/check-public-bundle-copy.mjs https://oa.hyinda.com`:scanned=54,focused=4,findings=0 |
|
||||
| R5 readiness | `liveSmokeReady=false`、`liveOcrReady=false`;缺 `LIVE_SMOKE_*` 与 OCR live 文件或目录 |
|
||||
|
||||
R4 已可回填 `DONE/DONE/DONE`。R5 真实公网账号、企业微信真机和真实 OCR 样票验证仍未执行,不能宣称通过。
|
||||
@@ -1,52 +0,0 @@
|
||||
# 国内 OA 与费控系统最佳实践对照
|
||||
|
||||
**文档状态**:外部最佳实践调研快照和历史归档参考,不是当前需求事实源。
|
||||
快照日期:2026-05-08;公开来源二次复核:2026-05-09
|
||||
**不得误读**:本文只用于解释当时对国内 OA、费控和企业微信入口的调研判断;当前实现范围以 [海音达OA-MVP需求规格说明书](../海音达OA-MVP需求规格说明书.md)、模块规约和最新 `issues/*.csv` 为准。
|
||||
|
||||
## 调研来源
|
||||
|
||||
- 合思(原易快报)官网:强调从申请、消费、报销、对账、记账、归档、报表的全流程数字化,覆盖商旅、用车、餐饮、办公采购等场景,并把发票识别验真、合规透明、可追踪作为核心能力。来源:<https://www.hosecloud.com/index.html>
|
||||
- 分贝通官网:首页与费用管理产品页强调全流程费控、全场景支付、事前管控、OCR 识别、自动验真、查重、电子档案、三流合一和 OA/HRM/CRM/ERP 连接。来源:<https://www.fenbeitong.com/>、<https://www.fenbeitong.com/product.php>
|
||||
- 每刻科技官网:强调多行业费用管理、AI/OCR 票据识别、智能审核、知识库/制度问答、海外票据识别和合规效率。来源:<https://www.maycur.com/>
|
||||
- 企业微信第三方应用文档:工作台应用应从企业微信直接进入 H5 页面,第三方网页授权通过 OAuth code 获取成员身份,回调与 state 需要明确校验。来源:<https://wdk-docs.github.io/wework-docs/>、<https://wdk-docs.github.io/wework-docs/server/>
|
||||
|
||||
## 可迁移最佳实践
|
||||
|
||||
1. **移动端优先入口**
|
||||
- 企业微信工作台进入后应直接落到移动工作台,不应出现 PC 壳、桌面表格或侧边栏。
|
||||
- 深链要保留目标页面,例如审批待办、票据上传、报销详情。
|
||||
|
||||
2. **报销从“填单”转向“票据驱动”**
|
||||
- 员工上传发票后,应尽快看到“上传成功、识别中、可添加、识别失败、重复/已使用”的状态变化。
|
||||
- 识别失败或重复时,应给出业务语言原因和下一步动作,不应只显示系统码。
|
||||
|
||||
3. **事前规则与事后审计并行**
|
||||
- 费用标准、预算、审批规则应在提交前预检。
|
||||
- 财务复核、例外放行、付款、归档应全程留痕。
|
||||
|
||||
4. **三流合一与电子档案**
|
||||
- 报销单、发票、附件、审批记录、付款批次、ERP 凭证应能互相追溯。
|
||||
- 普通员工侧只看业务文案;财务/管理员侧才出现更细的状态、差错和审计信息。
|
||||
|
||||
5. **自动化验收要覆盖“体验事实”**
|
||||
- 仅验证接口成功不够,还要验证页面文案、状态变化、移动布局、文件选择行为、错误提示和视觉溢出。
|
||||
- 真实 OCR、真实企业微信 OAuth、真机文件选择属于上线前必须有证据的 live smoke。
|
||||
|
||||
## hyb-oa 当前判断
|
||||
|
||||
| 领域 | 当前合理点 | 主要差距 | 优化优先级 |
|
||||
| --- | --- | --- | --- |
|
||||
| 企业微信入口 | 已有 `/mobile`、OAuth config、移动底部导航和公网入口配置 | 真机企业微信 OAuth + 真实账号回跳证据不足;仍需防 PC 页面误入 | P0 |
|
||||
| 报销与票据 | 已支持报销、PDF 发票上传、OCR、绑定、解绑、查重、付款批次 | OCR 真实耗时、状态变化和失败提示需要 live 证据;票据入口需确认 PDF-only 在企业微信文件选择器中可用 | P0 |
|
||||
| 费用规则 | 已有费用类型、审批规则、预算预检、支付批次 | 普通用户流程还需更强的提交前解释和异常引导 | P1 |
|
||||
| 审批 | PC/移动审批和离线队列已有自动化 | 多人并发、代理审批、真实企业微信 deep link 还缺 live 证据 | P1 |
|
||||
| 电子档案 | 发票、附件、审批、付款、ERP preview 已有链路 | 财务视角归档检索、合同/发票/付款跨域追溯仍偏分散 | P1 |
|
||||
| 全局治理 | 已有 feature matrix、coverage matrix、Issue CSV、回归脚本 | 缺项目级覆盖扫描、全页面视觉巡检和统一 release gate | P0 |
|
||||
|
||||
## 下一步落地策略
|
||||
|
||||
1. 先把现有流程和测试覆盖机器化,避免继续靠人工记忆判断是否“一一核查”。
|
||||
2. 将已知问题固化成静态扫描与 Playwright 断言,包括原始码值、内部术语、移动 PC 化、PDF capture 错误、横向溢出。
|
||||
3. 把真实 OCR、真实企业微信、真机测试作为 live readiness,不具备条件时输出 skipped 和缺项清单。
|
||||
4. 发布前统一执行 project-wide release gate;只有部署和公网检查通过后,才通知可以测试。
|
||||
@@ -1,412 +0,0 @@
|
||||
# R70 人工业务试运行报告
|
||||
|
||||
**文档状态**:历史人工试运行快照,不代表当前公网部署状态。
|
||||
日期:2026-04-28
|
||||
**当前用途**:追溯 R70-R81 期间本地、公网、企微、OCR 等验证证据,并保留 R6 之后批次的追加收口记录。
|
||||
**不得误读**:文中的 `force_off`、公网 `.env`、企微启用状态和开放问题均为当时记录;当前状态应以最新 Issue CSV、部署报告、live smoke 结果、[`docs/文档索引.md`](../文档索引.md) 和 [`docs/文档事实源状态矩阵.md`](../文档事实源状态矩阵.md) 为准。
|
||||
|
||||
## DOCG7 文档事实源治理(2026-05-12)
|
||||
|
||||
DOCG7 用于治理文档口径,不改业务代码、不部署公网、不关闭 `ME6-3`。本轮明确:R6 已通过;PC6、PA6、FL6、AP6、RI6、LP6、ME6 自动化、QG6、DG7/MRF7 和 MIA7 已完成相应收口;MIF7 是下一批移动整改合同但仍为 TODO;R7/OPS7/DOC7 是准备材料,不代表真实 R7 已启动或已上线。后续读取历史矩阵、旧 runbook 或旧 trialrun 记录时,应优先按 `docs/文档索引.md` 和 `docs/文档事实源状态矩阵.md` 判断是否仍能指导当前开发。
|
||||
|
||||
## R6 小范围试运行记录(历史模板 + 已执行记录)
|
||||
|
||||
本节源自 `issues/2026-05-11_10-23-41-r6-small-trialrun-prep.csv` 的执行模板,后续已追加 R6、PS6 和 R6 后批次的真实收口记录。阅读时以表内最新“当前门禁/当前代码基线”和后续收口段落为准,不要把早期模板措辞当作当前未启动状态。
|
||||
|
||||
### R6 基线
|
||||
|
||||
| 项目 | 记录 |
|
||||
| --- | --- |
|
||||
| 公网地址 | `https://oa.hyinda.com` |
|
||||
| 当前门禁 | R5 已 `DONE/DONE/DONE`;R6 首轮小范围试运行已完成;R6-ISSUE-003 采购提交阻断已热修、部署并复跑通过;PC6/PA6/FL6/AP6/RI6/LP6 后续优化已完成;ME6 自动化、部署和公网视觉复检已完成,`ME6-3` 代表性企业微信真机抽查因设备不便暂缓;QG6 非业务 QA 治理已完成但不替代真机 |
|
||||
| 当前代码基线 | DG7/MRF7 移动信息架构与展示去重治理已部署到 `https://oa.hyinda.com`,并完成 `/ready`、public bundle、live smoke readiness、公网移动视觉矩阵复检;`ME6-3` 代表性企业微信真机抽查仍待用户确认 |
|
||||
| 试运行窗口 | `2026-05-12 14:00-17:00 Asia/Shanghai`;若现场无法执行,顺延到 `2026-05-13 14:00-17:00 Asia/Shanghai` |
|
||||
| 回滚联系人 | `wangshunli` |
|
||||
| 问题登记负责人 | `wangshunli` |
|
||||
| 当前候选配置 | 员工 `SMOKE002`;经理/审批人 `SMOKE101`;管理员/拍板人 `wangshunli`;财务 `wangzhiling` |
|
||||
| 允许范围 | 报销、请假、采购、审批、企业微信入口/通知、财务付款/导出 |
|
||||
| 禁止扩展 | 预算、ERP、AI、完整差旅、复杂 BPM、审批设计器、新组织规则 |
|
||||
|
||||
### R6 非真机自动验证(BV6,真机暂停期间)
|
||||
|
||||
本节对应 `issues/2026-05-11_13-58-30-r6-non-device-business-verification.csv`。设备暂不在身边时,只记录 PC、公网、自动化和模拟视口证据;不启动 R6,不关闭 `RS6-7/UI6-6/R6-ISSUE-001`。
|
||||
|
||||
| 项目 | 结果 | 证据位置 / 备注 |
|
||||
| --- | --- | --- |
|
||||
| 基线 | 通过 | 本地基线 `cee04d5`;R6 未启动;`RS6-7` 与 `UI6-6` 继续保持 `DONE/DONE/TODO`;`R6-ISSUE-001` 继续 `open/PAUSED` |
|
||||
| 公网健康与 live smoke | 通过 | `check-live-smoke-env --strict` 通过;`run-live-smoke-readiness.sh` 通过;报告 `artifacts/qa-flow/live-smoke-readiness-20260511-135958`;公网 bundle `findings=0`;live OCR 返回重复票据的可解释终态 |
|
||||
| 企业微信个人应用消息 | 通过 | 只读查询确认 `R5-WECOM-APP-PERSONAL` 为 `enabled=true`、`mode=wecom_app_message`;旧 `R50-MOCK-007334` 为 `enabled=false`;mock 不作为 R6 通知验收依据 |
|
||||
| 业务自动化 | 通过 | `approval/leave/procurement` 本地隔离业务流通过,报告 `artifacts/qa-flow/business-flow-20260511-140942`;公网 live smoke 通过;`reimbursement` 组已在 `R6-ISSUE-002` 对齐测试口径后通过,报告 `artifacts/qa-flow/business-flow-20260511-161344` |
|
||||
| 财务链路 | 通过 / 真实候选账号已创建 | `server/scripts/regression-payment-batches.sh` 通过,`paymentBatches` 单测 3 passed;只读查询确认 `SMOKE301/SMOKE302` 为 active 测试财务账号;WZ6 已创建 `wangzhiling`,状态 `active`,角色 `employee,finance` |
|
||||
| PC 与移动模拟视觉 | 通过 | R105 公网视觉 4 passed;移动响应式矩阵 9 passed;截图汇总到 `output/playwright/r6-non-device-business-verification/` |
|
||||
| 真机门禁 | 暂停 | iPhone 12 / iOS 14.1 / 企业微信 与 Redmi K60 企业微信真实触控、入口和布局体验仍需人工确认;自动视觉不替代真机验收 |
|
||||
|
||||
### R6 人员与角色
|
||||
|
||||
| 用户 | 角色 | 入口 | 设备 | 负责流程 | 结果 | 备注 |
|
||||
| --- | --- | --- | --- | --- | --- | --- |
|
||||
| `SMOKE002` | 员工 / 提交人 | PC / 企业微信 / 手机浏览器 | iPhone 12 / iOS 14.1 / Redmi K60 | 报销、请假、采购提交 | 通过 | 已自动辅助提交报销、请假和采购;报销、请假通过;PS6 热修后采购复跑通过。用户口径为 `smkoe02/smoke02`,按既有账号统一记录为 `SMOKE002` |
|
||||
| `SMOKE101` | 经理 / 审批人 | PC / 企业微信 / 手机浏览器 | iPhone 12 / iOS 14.1 / Redmi K60 | 审批待办、退回或驳回 | 通过 | 已处理报销、请假和采购待办并通过;审批人可以是经理;不使用 admin 解释审批权 |
|
||||
| `wangshunli` | 管理员 / 回滚联系人 / 试运行拍板人 / 问题登记负责人 | PC | 管理员 PC | 管理后台、配置核对、试运行决策、问题分级和回滚拍板 | 已辅助执行 | 已用于试运行前账号、基础资料和问题登记辅助;不作为本轮普通业务审批人;财务由 `wangzhiling` 承担 |
|
||||
| `wangzhiling` | 财务 | PC / 手机浏览器 | Redmi K60 | 财务复核、付款标记、导出 | 通过 | 首次登录已完成改密,账号只读核验为 `active`、角色 `employee,finance`、未锁定;已完成报销财务复核和付款标记。采购首轮只验证提交、审批和历史查看,未扩财务后处理。姓名和手机号后续可由管理员按真实信息更新,不写入仓库 |
|
||||
|
||||
### R6 流程执行矩阵
|
||||
|
||||
| 流程 | 操作路径 | 期望结果 | 执行人 | 结果 | 证据位置 |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| 报销 | 员工提交报销 -> 上传 PDF 发票或附件 -> 提交审批 -> 审批人处理 -> 财务复核或付款标记 | 状态、审批历史、通知和财务动作一致 | `SMOKE002` / `SMOKE101` / `wangzhiling` | 通过 | 2026-05-12 自动辅助执行:`BX-20260512-0011`,id `fd89f7db-9b33-4364-b329-53f406ab38ee`,金额 `188.88`,终态 `paid`;经理任务 `41ef7694-6a0d-4229-ab4e-c85392fe3708`,财务任务 `dbc20c92-51ac-494f-9fe1-b9271bc91ac2`;不提交敏感截图 |
|
||||
| 请假 | 员工提交请假 -> 审批人处理 -> 员工查看状态 | 待办、历史和团队状态一致 | `SMOKE002` / `SMOKE101` | 通过 | 2026-05-12 自动辅助执行:id `639acec8-bbfc-462c-bc3b-eaaa70e72153`,开始日期 `2026-07-28`,终态 `approved`;经理任务 `d9230348-2059-4dca-97f7-107621b0d40b` |
|
||||
| 采购 | 员工提交采购 -> 审批人处理 -> 查看审批历史 | 采购状态和审批中心一致 | `SMOKE002` / `SMOKE101` | 通过 | 初次执行采购 id `ab69db11-87e3-48b0-8a8a-43324d1c70e5` 曾因 `budgetPrecheckGate is not defined` 阻断;PS6 热修部署后复跑通过:`CG-20260512-0001`,id `538c3c92-edce-4c28-bcdd-9bb8065c1d0e`,经理任务 `6d3cf41c-2a44-4bc3-9245-db6383fabdf0`,终态 `approved`,缺预算池按 legacy warn 返回 `missing_budget_pool`,无 500 |
|
||||
| 企业微信通知 | 待办产生 -> 审批人收到个人应用消息 -> 点击回 OA | 消息可达且 deeplink 回移动审批或详情 | `SMOKE101` / `oa_smoke_02` | 通过 | 报销经理待办、报销通过、报销付款、请假通过等绑定用户通知记录为 `wecom_app_sent`;PS6 采购经理待办任务 `6d3cf41c-2a44-4bc3-9245-db6383fabdf0` delivery=`wecom_app_sent`、errcode=`0`;分配给财务角色时因 `wangzhiling` 尚未绑定企业微信,记录 `wecom_app_no_bound_recipients`,财务本轮以 PC 为主,不作为阻断 |
|
||||
| 财务付款/导出 | 财务处理已通过单据 -> 标记付款或导出 | 权限、状态和审计记录正确 | `wangzhiling` | 通过 | `wangzhiling` 已完成登录改密和报销付款标记;采购未进入财务节点;不导出敏感数据到仓库 |
|
||||
|
||||
### R6 问题登记
|
||||
|
||||
| ID | 级别 | 角色 | 入口/设备 | 流程 | 复现步骤 | 当前处理 | 负责人 | 状态 | 关联 Issue |
|
||||
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
|
||||
| R6-ISSUE-001 | 阻断 | 审批人 / 员工 | iPhone 12 / iOS 14.1 / 企业微信 WebView | 移动底部导航、审批入口、首页快捷卡 | 旧记录误写为 iPhone 11;用户更正为 iPhone 12 / iOS 14.1。真机截图显示首页快捷卡和底部 Tab 的字体图标漂移、重影、挤压,底部“审批”体验不稳定;自动化 Chromium UA 截图与真实 iOS 企业微信 WebView 存在差异 | 已关闭:WCM6/MME6 已部署公网并完成自动复检,移动核心图标改 SVG,补企业微信 WebView viewport/字号/safe-area,底部角标独立定位,`/mobile/me` 图文槽位和卡片顶边完成自适应收口;用户确认“看过了,可以没问题”。后续若出现移动回归,另建新 Issue 处理。 | Codex | closed | `issues/2026-05-11_20-38-33-r6-wecom-mobile-rendering-hardening.csv`; `issues/2026-05-11_22-42-11-r6-mobile-me-adaptive-visual-polish.csv`; `issues/2026-05-11_23-26-00-r6-mobile-unified-design-rollout.csv` |
|
||||
| R6-ISSUE-002 | 一般 | 自动化 / 员工与财务测试账号 | 本地隔离 E2E / PC | 报销审批进度、报销支付批次 | `BUSINESS_FLOW_GROUPS=reimbursement bash scripts/qa/run-business-flow-gates.sh local` 中 2 条用例曾失败,失败点为 Playwright 查找旧导航入口 `票据中心`;当前正式员工路径应从报销详情添加 PDF 发票 | 已关闭:测试已改为报销详情页“添加发票”路径,不恢复普通员工“票据中心”入口;支付批次用例同步按业务编号定位待办,并按金额选择财务或财务主管二级审批;报销业务流 gate 10 passed、1 skipped | Codex | closed | `issues/2026-05-11_15-50-00-r6-reimbursement-e2e-nav-alignment.csv` |
|
||||
| R6-ISSUE-003 | 阻断 | 员工 / 审批人 | 公网 PC / 自动化 API | 采购提交 | R6-4 中员工创建采购草稿后提交,`POST /api/purchase-requests/:id/submit` 返回 500;服务端日志定位到 `server/src/routes/purchaseRequests.js:1617`:`ReferenceError: budgetPrecheckGate is not defined`;该问题导致采购无法进入审批,采购主链路无法完成 R6 | 已关闭:PS6 已修复采购提交事务中 `budgetPrecheckGate` 未定义问题,本地采购业务流通过,公网已部署 `a8b7351`;复跑 `CG-20260512-0001` 成功提交并由 `SMOKE101` 审批通过,企业微信个人应用消息 delivery=`wecom_app_sent`、errcode=`0` | Codex | closed | `issues/2026-05-12_01-12-20-r6-purchase-submit-budget-precheck-hotfix.csv` |
|
||||
|
||||
MME6 补充(2026-05-11):针对用户补充的 iPhone 12 / iOS 14.1 图文贴近与 iPhone 14 / iOS 16.2 卡片顶边观感,已把 `/mobile/me` 改为固定头像/图标槽 + `minmax(0, 1fr)` 文字槽,移动卡片顶边装饰线仅在 `/mobile` 作用域禁用,并将该规则写入产品设计规约。本地 `client typecheck`、`client build`、WCM6 视觉专项 8 passed、R5/R6/R124 移动相关回归 10 passed;部署后 `/ready` 正常、public bundle `findings=0`、live smoke readiness PASS、真实 OCR 样票返回重复发票可解释终态且测试通过,公网 WCM6 视觉专项 8 passed,报告 `artifacts/qa-flow/live-smoke-readiness-20260511-230918`。用户已确认当前设计可接受,`R6-ISSUE-001` 关闭;MUD6 继续把该设计推广到所有专用 `/mobile` 页面。
|
||||
|
||||
MUD6 收口(2026-05-11):已将 MME6 槽位自适应方案推广到专用 `/mobile` 路由:移动首页、审批、报销列表、报销详情、我的、个人设置、通知、票据上传、请假和资产扫码。通用移动样式固定图标/头像槽、`minmax(0, 1fr)` 文本槽、`clamp()` 间距、`mobile-card`、移动列表卡片、空状态和深层页吸底操作;业务角色差异继续按权限裁剪入口和动作,不拆多套 UI。本地 `client typecheck`、`client build`、MUD6 全移动页视觉专项 7 passed、WCM6/RS6/R124 回归 16 passed;已部署到 `https://oa.hyinda.com`,`/ready` 正常、public bundle `findings=0`、live smoke readiness PASS、真实 OCR 样票为重复发票可解释终态且通过,公网 MUD6 视觉专项 7 passed,报告 `artifacts/qa-flow/live-smoke-readiness-20260511-235918`。R6-3 可恢复执行试运行前检查,建议仍抽查 iPhone 12 / iOS 14、iPhone 14 / iOS 16.2、Redmi K60 的企业微信首页、审批、报销详情、我的和通知。
|
||||
|
||||
R6-3 试运行前自动检查(2026-05-12):公网 `/ready` 正常;public bundle 扫描 `scanned=54 focused=4 findings=0`;`check-live-smoke-env --strict` 通过,`liveSmokeReady=true`、`liveOcrReady=true`;`LIVE_SMOKE_BASE_URL=https://oa.hyinda.com bash scripts/qa/run-live-smoke-readiness.sh` 通过,公网 live smoke `3 passed`,真实 OCR 样票返回“该发票已用于报销,不能重复添加”的可解释终态,报告 `artifacts/qa-flow/live-smoke-readiness-20260512-001722`。只读查询确认通知渠道 `R5-WECOM-APP-PERSONAL` 为 `enabled=true`、`mode=wecom_app_message`,旧 `R50-MOCK-007334` 为 `enabled=false`;远端容器 `hyb-oa-trialrun-db` healthy、`hyb-oa-trialrun-server` running,Prisma migration status 为 up to date;最近可追溯备份为 `hyb-oa-db-20260510_134340.dump` 与 `hyb-oa-storage-20260510_134341.tar.gz`。WZ6 已通过现有管理员 API 创建真实财务候选账号 `wangzhiling`,只读核验为 `active` 且角色 `employee,finance`,创建动作有 `SYSTEM_USER_CREATED` 审计;一次性密码仅写入仓库外 `~/.hyb-oa/wangzhiling-onetime.env`。因此 R6-3 已完成,R6-4 可在试运行窗口内按清单执行;主 R6 仍保持 `TODO`,直到真实流程执行、问题登记和每日收口完成。
|
||||
|
||||
级别定义:
|
||||
|
||||
- 阻断:权限泄漏、付款状态错乱、企业微信入口不可用、审批主流程无法继续、真实 OCR 大面积失败。
|
||||
- 严重:主流程可绕行但影响试运行可信度,需当天判断修复、降级或暂停。
|
||||
- 一般:不阻断流程,进入后续修复 Issue。
|
||||
- 体验建议:文案、布局、效率和易用性建议,进入后续体验优化批次。
|
||||
|
||||
### R6 每日收口
|
||||
|
||||
| 日期 | 执行范围 | 新增问题 | 阻断数 | 严重数 | 结论 | 决策人 |
|
||||
| --- | --- | --- | --- | --- | --- | --- |
|
||||
| 2026-05-12 | R6-4 自动辅助小范围流程:报销、请假、采购、财务付款、企业微信通知审计 | `R6-ISSUE-003` 采购提交后端 500 | 1 | 0 | 暂停采购流程,先修复后继续;报销、请假、财务付款证据保留 | `wangshunli` |
|
||||
| 2026-05-12 | PS6 热修部署后恢复 R6-4:采购提交、审批、历史查看、企业微信通知审计 | 无新增问题;`R6-ISSUE-003` 已关闭 | 0 | 0 | R6 首轮小范围试运行通过;进入后续 PC/移动/审批效率/财务台账优化 Issue | `wangshunli` |
|
||||
|
||||
### R6 结论(2026-05-12)
|
||||
|
||||
R6 首轮小范围试运行通过。已验证报销、请假、采购、审批、企业微信个人应用消息、移动入口既有门禁和财务付款主链路;采购提交阻断已通过 PS6 热修关闭。R6 通过不等于全面正式上线,下一批按独立 Issue 推进 PC 信息架构、移动二轮体验、审批催办/超时、审批效率摘要和财务台账增强。
|
||||
|
||||
AP6 收口(2026-05-12):审批效率 v1 已完成并部署。代码提交 `72e38db` 增加审批催办、超时提醒 job 和待办效率摘要,状态回填提交 `2d87c36` 记录部署验收;公网 `/ready` 正常,public bundle `findings=0`,live smoke readiness 通过,报告 `artifacts/qa-flow/live-smoke-readiness-20260512-104535`。AP6 v1 固定为:申请人/提交人可通过 `POST /api/workflow/tasks/:taskId/remind` 催办本人 pending 审批,24 小时同一任务最多 1 次;`GET /api/workflow/tasks/summary` 返回待办和超时聚合;`job:workflow-overdue-reminders` 只提醒 pending 待办,不改变审批状态。AP6 后已按计划进入 RI6。
|
||||
|
||||
RI6 收口(2026-05-12):报销票据体验完善已完成并部署。PC/移动报销详情统一复用发票状态文案和下一步提示,普通员工继续从报销详情添加 PDF 发票,不恢复“票据中心/发票池”主入口;移动可添加发票显示明确“可添加”状态,识别失败、重复、已归档或已报销进入可解释终态。本地 `client typecheck/build`、`check-ui-design-rules --strict`、R111/R125 专项 4 passed、R109 移动专项 1 passed、`BUSINESS_FLOW_GROUPS=reimbursement` 10 passed / 1 skipped;已部署到 `https://oa.hyinda.com`,公网 `/ready` 正常,public bundle `findings=0`,live smoke readiness 通过,报告 `artifacts/qa-flow/live-smoke-readiness-20260512-120138`。RI6 后已按计划进入 LP6 并完成收口;R7 尚未启动,需在 LP6/ME6 至少完成一轮后另建合同。
|
||||
|
||||
LP6 收口(2026-05-12):请假采购体验完善已完成并部署。请假 PC/移动记录增加状态下一步提示、当前审批节点、最近审批动作和退回/驳回意见;请假附件上传改为中文自定义控件。采购列表和详情优先展示业务编号或标题,不再把 UUID 作为主展示;缺预算池 warning 改为“未匹配预算池,已按当前试运行规则继续进入审批/请管理员补充预算配置”的用户可理解提示;采购详情补审批记录分区和附件用途/下载留痕说明。后端未新增 API、未改 Prisma schema,仅在既有请假/采购响应中补充 `pendingWorkflow` 与 `approvalHistory`。
|
||||
|
||||
LP6 本地验证:`leave-flow.spec.ts`、`leave-team-calendar.spec.ts`、`procurement-flow.spec.ts`、`workflow-quick-approve.spec.ts` 共 8 passed;`permission-direct-access.spec.ts -g "PA6 请假和采购自审"` 1 passed,确认请假/采购自审和 admin-only 业务审批仍由服务端拒绝;`BUSINESS_FLOW_GROUPS=leave,procurement bash scripts/qa/run-business-flow-gates.sh local` 在临时库通过,报告 `artifacts/qa-flow/business-flow-20260512-124643`;`server prisma:validate`、`node --check src/routes/leave.js`、`node --check src/routes/purchaseRequests.js`、`client typecheck/build`、`check-ui-design-rules --strict`、`git diff --check` 均通过。视觉证据输出到 `output/playwright/lp6-leave-procurement-polish/`,覆盖 PC 1440x960 请假/采购/审批与移动 390x844 请假/审批,均无横向溢出、无可见原生文件控件、无 `Choose File` 文案、无 console error。已部署到 `https://oa.hyinda.com`,公网 `/ready` 正常,public bundle `findings=0`,live smoke readiness 通过,报告 `artifacts/qa-flow/live-smoke-readiness-20260512-125740`;本地未提供完整 live smoke 凭据和真实 OCR 样票,脚本按规则跳过网页 live smoke 与真实 OCR,不影响 LP6 请假采购体验验收。下一批默认进入 ME6 移动二轮体验;R7 仍需在 LP6/ME6 至少完成一轮后另建合同。
|
||||
|
||||
ME6 自动化与部署收口(2026-05-12):移动二轮体验小修已完成。修复点限定在专用 `/mobile` 路由体验稳定性:移动首页对 AP6 审批效率摘要响应增加缺省容错,请假记录对旧数据缺少 `approvalHistory` 时不再渲染崩溃;历史移动视觉专项补齐 `/api/workflow/tasks/summary` mock,并将统一移动矩阵截图目录支持切换到 `output/playwright/r6-mobile-experience-second-pass/`。本地 `client typecheck`、`client build`、`check-ui-design-rules --strict` 通过;ME6 移动矩阵 7 passed,覆盖 320/360/375/390/393/414/430px、企业微信 iOS UA、企业微信 Android UA 和普通移动 UA;R5 真机反馈移动专项 2 passed,RS6 移动响应式专项 7 passed,WCM6 企业微信多手机专项 8 passed,R124 移动入口矩阵 1 passed。已部署到 `https://oa.hyinda.com`,公网 `/ready` 正常,public bundle `findings=0`,live smoke readiness PASS,报告 `artifacts/qa-flow/live-smoke-readiness-20260512-135035`;缺少完整 live smoke 凭据和真实 OCR 样票时,脚本按规则跳过网页 live smoke 与真实 OCR。公网 ME6 移动视觉矩阵 7 passed,截图输出到 `output/playwright/r6-mobile-experience-second-pass-live/`。ME6-3 真机抽查仍待用户确认:iPhone 12 iOS14 企业微信、iPhone 14 iOS16.2 企业微信、Redmi K60 企业微信的首页、审批、报销详情、我的、通知和请假;敏感截图不提交仓库。ND9 之后允许先做 QG6 非业务治理和 R7 草案材料,但不能把这些工作当成真机替代,也不能直接启动真实 R7。
|
||||
|
||||
ND9 非真机延续(2026-05-12):用户反馈当前不方便做代表性企业微信真机抽查,因此 `ME6-3` 继续保持 `TODO`,不得伪造完成或用自动化替代。后续可先执行 QG6 QA 治理、R7 草案、运维交接和培训材料等不依赖真机的工作;这些工作不得改变业务规则、审批链、PDF-only、企业微信通知通道或财务规则。R7 真实扩大试运行仍需用户确认最终人员、窗口,并补足 ME6 真机门禁或明确接受该风险。
|
||||
|
||||
QG6 QA 治理收口(2026-05-12):非真机阶段 QA 治理升级已完成并部署。`check-ui-design-rules.mjs` 已增强 UUID 主展示、内部术语、英文上传、移动桌面表格和 PC 壳扫描,新增 `--self-test` 和白名单说明;PC 审批详情不再展示任务 UUID 或 workflow instance UUID。新增 `scripts/qa/run-visual-matrix.sh` 固定视觉矩阵,项目级视觉报告支持 issue-id、baseURL、commit 和状态字段;`run-business-flow-gates.sh` 与 `run-live-smoke-readiness.sh` 输出统一 `summary.json`。本地 `client typecheck/build`、`server prisma:validate`、`check-ui-design-rules --self-test/--strict` 通过;QG6 本地视觉矩阵 8 passed,报告 `artifacts/qa-flow/qg6-qa-governance-upgrade-visual-matrix-20260512-172418`,业务流 `reimbursement,leave,procurement` 全部通过,报告 `artifacts/qa-flow/business-flow-20260512-172944`。已部署到 `https://oa.hyinda.com`,公网 `/ready` 正常,public bundle `findings=0`,live smoke readiness PASS,报告 `artifacts/qa-flow/live-smoke-readiness-20260512-174055`;公网移动视觉矩阵 7 passed,报告 `artifacts/qa-flow/qg6-qa-governance-upgrade-visual-matrix-20260512-174055`。`ME6-3` 代表性企业微信真机抽查仍为 TODO,QG6 不替代真机验收;下一步只允许 R7 草案、OPS7/DOC7 材料等非真机准备,真实 R7 仍需用户确认人员、窗口和风险接受。
|
||||
|
||||
R7/OPS7/DOC7 非真机准备(2026-05-12):已创建 `issues/2026-05-12_17-49-03-r7-expanded-trialrun-prep-ops-doc-materials.csv`。R7 草案见 `docs/trialrun/r7-expanded-trialrun-prep.md`,只固定范围、角色占位、门禁、问题分级、每日收口和退出标准;`R7E-1..R7E-3` 继续保持 `TODO`,真实 R7 未启动。OPS7 运维交接 Runbook 见 `docs/trialrun/ops7-runbook.md`,只记录部署、回滚、备份恢复、账号交接、live readiness 和企业微信通知检查清单,不执行生产配置变更或数据库恢复。DOC7 用户手册与 FAQ 见 `docs/trialrun/r7-user-guide-and-faq.md`,只描述当前已实现的报销、请假、采购、审批、企业微信入口和财务台账能力,不承诺预算、ERP、AI、完整差旅、复杂 BPM 或审批设计器。`ME6-3` 真机门禁仍未关闭;R7 真实启动仍需用户确认最终人员、窗口,并补足真机门禁或明确接受风险。
|
||||
|
||||
DG7/MRF7 移动信息架构与展示去重治理收口(2026-05-12):已根据 iPhone 12、iPhone 14 和 Redmi K60 企业微信真机反馈建立首页/审批/通知/业务卡片去重规约,并完成移动端实现与部署。员工底部“审批”入口改为“进度”视角,展示我发起的报销、请假、采购进度且不显示审批动作;审批人仍使用“审批”视角。首页只保留一处待处理摘要,首页通知不再重复完整待办;底部审批角标移到图标右上外侧,不覆盖图标或文字。审批详情改为 `/mobile/approvals/:taskId` Push 页并隐藏底部 Tab;通知中心卡片整体可点,先标记已读再直达报销、请假、采购或审批移动详情;采购和请假通知不再回首页或新建表单。PC/移动卡片展示引入共享业务主标识工具,同一卡片不重复业务编号或状态;`check-ui-design-rules.mjs` 已增加重复业务编号扫描规则。验证结果:`client typecheck/build`、`check-ui-design-rules --self-test/--strict`、DG7 专项 3 passed、WCM6 11 passed、R124/R6 响应式/MUD6 15 passed。已执行 `bash deploy/trialrun/deploy.sh`,公网 `/ready` 正常,public bundle `findings=0`,live smoke readiness PASS,报告 `artifacts/qa-flow/live-smoke-readiness-20260512-205559`;公网移动视觉矩阵 7 passed,报告 `artifacts/qa-flow/dg7-mobile-information-dedupe-governance-visual-matrix-20260512-205634`。因当前无法做完整三机复测,`ME6-3` 继续保持 TODO,不用本轮自动化替代真机门禁。
|
||||
|
||||
MIA7 移动信息架构、视觉与流程审查(2026-05-12):用户完成一轮 iPhone12/iPhone14/Redmi 企业微信真机抽查后,确认上一轮硬问题基本关闭,但发现首页、常用入口、待处理摘要、进度、通知、详情返回和角色首页仍存在信息架构层面的重复与不一致。已基于 `9da0ca9`、现有移动截图、页面源码和公开同类产品原则创建 `issues/2026-05-12_21-48-39-mobile-ia-visual-flow-review.csv`,并输出审查报告 `docs/trialrun/mobile-ia-visual-flow-review.md`。本轮只做标准和问题登记:已把 MIA7 移动工作台、进度、通知、详情壳和返回语义写入 `docs/product-design-rules.md`,并新建后续整改合同 `issues/2026-05-12_21-48-40-mobile-ia-flow-remediation.csv`。MIA7 结论不代表问题已修复;MIF7 仍为 TODO,`ME6-3` 真机门禁仍保持待确认。
|
||||
|
||||
## 结论
|
||||
|
||||
R70 初次试运行暂停项已在 2026-04-28 的 R71 定向修复后关闭。基于本地环境复测,经理团队日历与员工报销缺票提示/发票上传绑定提交链路均已通过,可恢复下一轮本地人工试运行。
|
||||
|
||||
## 执行环境
|
||||
|
||||
- 环境 URL:`http://192.168.123.7:3000`
|
||||
- 分支/提交:`2bce9c9 + local R71 working tree`
|
||||
- 浏览器:`Firefox (Playwright CLI)`
|
||||
- 执行人:`Codex Playwright 辅助复核`
|
||||
- 执行时间:`2026-04-28 17:22 - 19:11 CST`
|
||||
- 数据库:`hyb_oa_manual_trialrun_20260428172231`
|
||||
|
||||
## 角色结果
|
||||
|
||||
员工路径:
|
||||
|
||||
- 执行人:`Codex Playwright 辅助复核`
|
||||
- 结论:Portal、请假、周报、待办、搜索、公告、移动入口主路径可达;R71 后报销缺票提示清晰,上传/绑定发票后可提交进入审批中。
|
||||
- 阻断问题:无。
|
||||
- 备注:员工请假提交成功,经理已审批通过;周报转待办并完成闭环通过;报销复测使用单据 `4931211b-34b4-43b8-9e9f-917569d47c33` 和发票 `北京悦海堂餐饮管理有限公司_发票金额1683.00元.pdf`,提交后单号为 `BX-20260428-0001`。
|
||||
|
||||
经理路径:
|
||||
|
||||
- 执行人:`Codex Playwright 辅助复核`
|
||||
- 结论:Portal 管理视角、待我处理快捷审批、团队状态、项目入口与请假团队日历均可用。
|
||||
- 阻断问题:无。
|
||||
- 备注:经理已对员工请假单完成一次“通过”审批,审批后待办列表刷新正常;R71 复测中团队日历成功显示 `2026-04-27 ~ 2026-05-03` 窗口及员工 `2026-04-29` 年假记录。
|
||||
|
||||
管理员路径:
|
||||
|
||||
- 执行人:`Codex Playwright 辅助复核`
|
||||
- 结论:主要管理入口可见且页面可达,未发现阻断问题。
|
||||
- 阻断问题:无。
|
||||
- 备注:人员管理、组织架构、系统设置、功能开关、审计日志均可打开并加载;审计日志可看到最近登录留痕。
|
||||
|
||||
## 问题汇总
|
||||
|
||||
- 当前开放问题:P0/P1/P2/P3 均为 0。
|
||||
- 已闭环问题:`R70-001`、`R70-002` 已通过 R71 定向修复与人工复测关闭。
|
||||
|
||||
详细问题见 `artifacts/r70/issue-log.csv`。
|
||||
|
||||
## R71 处理结果
|
||||
|
||||
- P1 修复:server manager 角色已补齐 `leave.view_all`,reviewer 复核确认未扩成 `leave.manage`,经理团队日历路径复测通过。
|
||||
- P2 修复:前端已在提交前提示“需先绑定至少 1 张发票”,并为 `bound_invoice_required` 增加可理解中文文案。
|
||||
- 联动修复:人工复核中补修 `/api/invoice-pool/upload` 的 multipart 文件流挂起问题,上传 -> 绑定 -> 提交报销链路已通过。
|
||||
- 技术遗留:client build 仍有 chunk 循环与大 chunk 警告,建议独立进入 R72 技术优化项,不阻断本地人工试运行。
|
||||
|
||||
## 风险
|
||||
|
||||
- 人工试运行依赖参与者真实操作,自动化通过不等于业务体验通过。
|
||||
- 当前结论基于本地临时库、HTTP 本地地址和 Firefox 浏览器复核,不代表企业微信接入、HTTPS 和多用户并发场景都已验证。
|
||||
- 若发现 workflow、权限、状态机、审批规则、迁移相关问题,必须单独 review 后再修复。
|
||||
|
||||
## R73 本地辅助复核补充
|
||||
|
||||
- 真实腾讯 OCR:已通过 `client/tests/e2e/manual/live-invoice-ocr.spec.ts` 本地辅助复核,测试票据为 `/home/shunli/Projects/hyb-oa/artifacts/北京悦海堂餐饮管理有限公司_发票金额1683.00元.pdf`。
|
||||
- 运行方式:server 进程在本地 `3001` 端口以运行时注入方式加载旧项目本地腾讯配置;密钥未写入本仓库 `server/.env`。
|
||||
- 自动巡检:`client/tests/e2e/manual/r70-trialrun-assist.spec.ts` 在补齐本地运行时开关后,员工 / 经理 / 管理员 10 个辅助步骤全部通过。
|
||||
- 环境结论:本地试运行如果出现 Portal、周报、公告、团队、人员管理等入口缺失,先检查 server 运行时 `*_ENABLED` 开关是否齐全;本次已确认数据库开关与工作区配置本身无异常。
|
||||
|
||||
## R74 自动化压榨补充
|
||||
|
||||
- 本地门禁:`server/src/scripts/smoke-trialrun-runtime.js` 已支持 `TRIALRUN_RUNTIME_MODE=local`,并在本地 HTTP 口径下校验 env、feature flag、workspace setting 与导航基线,通过。
|
||||
- 深层真实业务辅助回归:`client/tests/e2e/manual/r70-trialrun-deep-assist.spec.ts` 已通过,覆盖:
|
||||
- 周报保存 -> 生成待办 -> 提交 -> 完成待办
|
||||
- 公告发布 -> 员工可见 -> 团队状态更新 -> Portal 汇总可见
|
||||
- 真实全局搜索命中公告并跳转
|
||||
- 批量真实腾讯 OCR 辅助回归:`client/tests/e2e/manual/live-invoice-ocr-batch.spec.ts` 已落地并在干净本地 trialrun DB `hyb_oa_manual_trialrun_20260429093000` 上完成真实 PDF 发票成功识别,结果已回填到 `artifacts/r70/live-ocr-batch-report.md`。
|
||||
- 当前 OCR 环境结论:旧项目 `/home/shunli/shenzhou-business-suite/.env` 中一组腾讯凭证已在当前应用链路验证可用;R77 已补齐 PDF 模式下的 `IsPdf=true` / `PdfPageNumber=1` 调用与返回字段归一化,OCR 识别主链路已闭环,不再存在先前的鉴权/解码失败阻塞。
|
||||
|
||||
## R77 OCR 收口补充
|
||||
|
||||
- 复测时间:`2026-04-29 09:51 - 09:54 CST`
|
||||
- 自动化环境:`http://127.0.0.1:3001`
|
||||
- 自动化数据库:`hyb_oa_manual_trialrun_20260429093000`
|
||||
- 腾讯配置来源:旧项目 `/home/shunli/shenzhou-business-suite/.env`,仅运行时注入,未写回本仓库。
|
||||
- 复测命令:
|
||||
- `cd client && PLAYWRIGHT_MANUAL=1 PLAYWRIGHT_OCR_LIVE=1 PLAYWRIGHT_OCR_LIVE_FILE=/home/shunli/Projects/hyb-oa/artifacts/北京悦海堂餐饮管理有限公司_发票金额1683.00元.pdf E2E_BASE_URL=http://127.0.0.1:3001 npx playwright test tests/e2e/manual/live-invoice-ocr.spec.ts --workers=1 --reporter=list`
|
||||
- `cd client && PLAYWRIGHT_MANUAL=1 PLAYWRIGHT_OCR_LIVE=1 PLAYWRIGHT_OCR_LIVE_BATCH=1 PLAYWRIGHT_OCR_LIVE_FILE=/home/shunli/Projects/hyb-oa/artifacts/北京悦海堂餐饮管理有限公司_发票金额1683.00元.pdf E2E_BASE_URL=http://127.0.0.1:3001 npx playwright test tests/e2e/manual/live-invoice-ocr-batch.spec.ts --workers=1 --reporter=list`
|
||||
- 结果:
|
||||
- 单张 live OCR:`1 passed (26.2s)`。
|
||||
- batch live OCR:`1 passed (14.1s)`,runner 正常退出。
|
||||
- 最新 batch 票据结果:`fb29cdd8-0c10-4254-8feb-d3c3c1be86c3`,销售方 `北京悦海堂餐饮管理有限公司`,总金额 `1683.00`,状态 `available`。
|
||||
- 试运行结论:
|
||||
- 员工侧报销 / 票据中心 / OCR 主链路 `上传 -> OCR -> available -> 绑定 -> 提交报销` 已具备本地试运行条件。
|
||||
- 本轮仍未覆盖真实企微 OAuth、HTTPS cookie secure、多角色并发协同、真实 ERP 外发回执,以及高风险二次复核;这些项继续保留在外部或后续 focused regression。
|
||||
|
||||
## R78 财务支付尾链 focused regression
|
||||
|
||||
- 回归时间:`2026-04-29 10:37 - 10:52 CST`
|
||||
- 自动化环境:`http://127.0.0.1:3002`
|
||||
- 自动化数据库:`hyb_oa_manual_trialrun_20260429093000`
|
||||
- 本地 focused 开关:
|
||||
- 运行时 env:`PAYMENT_BATCH_ENABLED=true`、`ERP_SYNC_ENABLED=true`
|
||||
- DB feature flag:通过 `TRIALRUN_EXTRA_FORCE_ON_FLAGS='payment_batch_v1 erp_sync'` 重复执行 `seed:trialrun` 显式打开,仅用于本地 focused 财务回归,不改变默认 trialrun 上线建议。
|
||||
- 回归命令:
|
||||
- `cd server && ./scripts/regression-payment-batches.sh`
|
||||
- `cd client && E2E_BASE_URL=http://127.0.0.1:3002 npx playwright test tests/e2e/reimbursement-payment-batch-flow.spec.ts --workers=1 --reporter=list`
|
||||
- 结果:
|
||||
- server focused regression:`3 passed`
|
||||
- Playwright focused E2E:`1 passed (58.0s)`
|
||||
- 已验证链路:
|
||||
- employee:创建空白报销 -> 上传 mock 票据 -> 绑定 -> 提交
|
||||
- manager / finance:完成两级审批
|
||||
- finance:创建 reimbursement payment batch,并在复核后执行
|
||||
- finance_mgr:在 AP 工作台完成快捷复核
|
||||
- execute 后:`payment batch = executed`、`reimbursement = paid`、`invoice = archived`
|
||||
- ERP preview:可见最新 `pending` outbox
|
||||
- reviewer 结论:
|
||||
- `paymentBatches` 复核路由仍拦截 maker 自审;低风险批次维持 `finance_mgr` 复核、`finance` 执行的边界。
|
||||
- 失败路径单测确认不会错误归档已绑定发票,也不会误入 ERP / 通知 follow-up。
|
||||
- `PaymentBatchesPage` 与 `ApOperationsPage` 没有新增越权入口,按钮仍按 `payment.batch.manage` 与 `risk.review.manage` 分离。
|
||||
|
||||
## R79 公网部署只读巡检
|
||||
|
||||
- 巡检时间:`2026-05-04 13:04 - 13:16 CST`
|
||||
- 公网地址:`https://oa.hyinda.com`
|
||||
- 服务器:`118.89.77.218`
|
||||
- SSH 结论:`deploy` / `root` 可免密登录;`shunli` 当前不可免密登录。
|
||||
- 反向代理:`caddy` active,`/etc/caddy/Caddyfile` 已包含 `oa.hyinda.com -> reverse_proxy 127.0.0.1:3000`。
|
||||
- 部署目录:`/opt/hyb-oa-trialrun`
|
||||
- 部署形态:远端目录不是 git 工作树;当前推荐从本地执行 `deploy/trialrun/deploy.sh`,通过 `rsync` 同步。
|
||||
- 容器编排:服务器当前使用 `docker-compose 1.29.2`,不是 `docker compose`。
|
||||
- 公网探活:
|
||||
- `https://oa.hyinda.com/ready`:`HTTP/2 200`
|
||||
- `https://oa.hyinda.com`:`HTTP/2 200`
|
||||
- 当前公网 `.env`:
|
||||
- `APP_ORIGIN=https://oa.hyinda.com`
|
||||
- `COOKIE_SECURE=true`
|
||||
- `PUBLIC_SECURITY_HARDENING_ENABLED=true`
|
||||
- `WECOM_ENABLED=false`
|
||||
- `WECOM_ENTRY_ENABLED=false`
|
||||
- `WECOM_OAUTH_ENABLED=false`
|
||||
- `OCR_PROVIDER=mock`
|
||||
- 当前公网数据库只读核查:
|
||||
- `workspace_settings.profile = small_team_internal`
|
||||
- `portal_home_v1 = force_on`
|
||||
- `announcements_v1 = force_off`
|
||||
- `global_search_v1 = force_off`
|
||||
- `wecom_entry_v1 = force_off`
|
||||
- 远端 smoke 结果:
|
||||
- `smoke-external-deps.js`:通过,但其通过前提是“企微入口未启用 + OCR 使用 mock provider”。
|
||||
- `smoke-trialrun-runtime.js`:失败,当前阻塞点为 `announcements_v1 => enabled=false reason=flag_force_off envEnabled=true`。
|
||||
- 结论:
|
||||
- 公网 HTTPS 与容器服务本身已通。
|
||||
- 当前还不能把公网部署态视为“外部试运行闭环完成”。
|
||||
- 下一步最小阻塞清单是:独立 smoke 账号、企微后台配置、以及公网 feature flag 基线修正后重跑 live smoke。
|
||||
|
||||
## R80 企微公网启用与只读验收
|
||||
|
||||
- 执行时间:`2026-05-04 16:47 - 17:03 CST`
|
||||
- 服务器动作:
|
||||
- 已把企微校验文件挂到 `https://oa.hyinda.com/WW_verify_StBYfdlboMaIoRRE.txt`
|
||||
- 已在远端 `/opt/hyb-oa-trialrun/deploy/trialrun/.env` 启用:
|
||||
- `WECOM_ENABLED=true`
|
||||
- `WECOM_ENTRY_ENABLED=true`
|
||||
- `WECOM_OAUTH_ENABLED=true`
|
||||
- `WECOM_CORP_ID` / `WECOM_AGENT_ID` / `WECOM_AGENT_SECRET`
|
||||
- `WECOM_REDIRECT_URI=https://oa.hyinda.com/api/auth/wecom/callback`
|
||||
- `WECOM_ALLOWED_RETURN_HOSTS=oa.hyinda.com`
|
||||
- 已把数据库 `wecom_entry_v1` 从 `force_off` 调整为 `inherit`
|
||||
- 已使用 `docker-compose -f deploy/trialrun/docker-compose.yml --env-file deploy/trialrun/.env up -d --no-deps --force-recreate server` 重建公网 server 容器
|
||||
- curl 验证结果:
|
||||
- `GET /api/auth/wecom/config`:`status=ready`、`entryEnabled=true`、`oauthEnabled=true`
|
||||
- `GET /api/auth/wecom/login?returnTo=%2Fportal`:`HTTP 302`
|
||||
- `Location` 已包含:
|
||||
- `appid=ww6b98ab55e5e8d341`
|
||||
- `agentid=1000002`
|
||||
- `redirect_uri=https://oa.hyinda.com/api/auth/wecom/callback`
|
||||
- Playwright 只读验证:
|
||||
- 登录页已展示“使用企业微信进入工作台”
|
||||
- 浏览器实际请求 `/api/auth/wecom/config` 返回 `200`
|
||||
- 点击按钮后,页面跳转到 `open.weixin.qq.com/...#wechat_redirect`
|
||||
- 桌面浏览器页面提示“请在企业微信客户端打开链接”,符合企微 OAuth 预期
|
||||
- 截图产物:`output/playwright/2026-05-04-wecom-login-page.png`
|
||||
- 当前剩余人工动作:
|
||||
- 必须由你本人使用真实企业微信客户端完成首次进入
|
||||
- 若首次回到 `/login?wecom=unbound`,需先用 OA 账号密码登录并在“个人设置”完成绑定
|
||||
- 绑定成功后,再次从企业微信工作台进入 OA,才算真实企微登录闭环完成
|
||||
- 当前结论:
|
||||
- 服务器侧企微入口、OAuth 跳转、域名校验文件、HTTPS 回调地址均已就绪
|
||||
- 自动化已压到浏览器跳转层;剩余未完成项只剩“真实企微客户端首次绑定闭环”
|
||||
|
||||
## R81 企微回调身份诊断部署
|
||||
|
||||
- 时间:`2026-05-04 17:50 - 17:56 CST`
|
||||
- 背景:
|
||||
- 真实手机企业微信进入 OA 时,服务端收到 `/api/auth/wecom/callback` 回调
|
||||
- 当前失败表现为:`AUTH_003 / missing_user_id`
|
||||
- 你已确认当前企微账号是企业内部成员
|
||||
- 本轮动作:
|
||||
- 为 `missing_user_id` 分支补充最小安全诊断日志
|
||||
- 补 1 条单测覆盖“仅有 OpenId、没有 UserId”场景
|
||||
- 本地校验通过后,已重建公网 `server` 容器
|
||||
- 本地验证结果:
|
||||
- `cd server && node --check src/routes/wecomAuth.js`:通过
|
||||
- `cd server && npm test -- tests/unit/routes/wecomAuth.test.js`:`7 passed`
|
||||
- `cd server && npm run prisma:validate`:通过
|
||||
- 远端验证结果:
|
||||
- `https://oa.hyinda.com/ready`:正常
|
||||
- `https://oa.hyinda.com/api/auth/wecom/config`:`status=ready`
|
||||
- `https://oa.hyinda.com/api/auth/wecom/login?returnTo=%2Fportal`:`302` 到企业微信 OAuth
|
||||
- 当前状态:
|
||||
- 服务器已具备取证能力
|
||||
- 待你用手机企业微信再复现 1 次,我再根据日志判断下一步应是“错误提示优化”还是“绑定模型调整”
|
||||
|
||||
## R83-R86 用户开通与首次绑定收口
|
||||
|
||||
- 时间:`2026-05-04 23:36 - 23:58 CST`
|
||||
- 本轮本地实现:
|
||||
- 单个新建用户改为系统自动生成员工号,不再要求管理员手工输入工号。
|
||||
- 单个新建用户改为后端生成一次性口令,并在成功态只展示一次。
|
||||
- 新用户首次登录后继续沿用强制改密闭环。
|
||||
- 企业微信未绑定回退登录时,服务端已保留短时待绑定上下文,并在账号密码登录成功后自动补绑定。
|
||||
- 本轮新增自动化结果:
|
||||
- `cd server && npm test -- tests/unit/routes/auth.login.test.js tests/unit/routes/wecomAuth.test.js tests/unit/routes/users.write.test.js`
|
||||
- `11 passed`
|
||||
- `cd client && E2E_BASE_URL=http://127.0.0.1:3100 npx playwright test tests/e2e/user-onboarding.spec.ts tests/e2e/wecom-first-bind.spec.ts --workers=1 --reporter=list`
|
||||
- `3 passed`
|
||||
- 自动化已验证链路:
|
||||
- 管理员创建用户 -> 系统返回员工号与一次性口令
|
||||
- 新用户首次登录 -> 强制修改密码 -> 进入 Portal
|
||||
- 企业微信未绑定 -> 回退密码登录 -> 继续进入目标页
|
||||
- 仍需真实人工复核:
|
||||
- 将本轮代码部署到目标环境后,用真实手机企业微信完成 1 次首次进入,确认真实 OAuth 回调、cookie 与企业身份环境下也能自动完成首次绑定闭环。
|
||||
|
||||
## R89 登录与移动端 UX 收口
|
||||
|
||||
- 时间:`2026-05-05`
|
||||
- 本地自动化环境:`http://127.0.0.1:5173`
|
||||
- 本轮实现结果:
|
||||
- `/mobile` 路由在手机端隐藏桌面 Topbar,使用底部四入口:`首页 / 审批 / 票据 / 我的`。
|
||||
- 普通小屏非 `/mobile` 页面保留顶部菜单抽屉作为兜底,并修复抽屉定位导致的点不开问题。
|
||||
- 移动首页调整为“今天”优先,首屏展示审批待办、未读通知和高频动作。
|
||||
- “我的”页承接低频入口、个人设置、完整员工档案、管理入口和退出登录。
|
||||
- 移动审批和票据上传的主按钮改为更适合手机的触控目标。
|
||||
- 自动化结果:
|
||||
- `cd client && E2E_BASE_URL=http://127.0.0.1:5173 npx playwright test tests/e2e/r89-mobile-login-navigation.spec.ts --workers=1 --reporter=list`
|
||||
- `3 passed`
|
||||
- `cd client && npm run typecheck`
|
||||
- 通过
|
||||
- `cd client && npm run build`
|
||||
- 通过;仍保留既有 Vite circular chunk 警告。
|
||||
- 当前结论:
|
||||
- 本地自动化已覆盖登录极简、企微移动入口、移动底部导航、移动审批、票据上传、“我的/更多”和小屏菜单抽屉。
|
||||
- 真实公网手机企微仍需人工打开一次,确认企业微信真实容器内的 OAuth、cookie 与默认 `/mobile` 落点。
|
||||
|
||||
## R90/R91 事实源与公网入口收口启动
|
||||
|
||||
- 时间:`2026-05-05 20:01 CST`
|
||||
- 本轮执行合同:
|
||||
- `issues/2026-05-05_20-01-18-r90-r91-trialrun-closeout.csv`
|
||||
- 已确认的公网只读状态:
|
||||
- `GET https://oa.hyinda.com/ready`:通过
|
||||
- `GET https://oa.hyinda.com/api/auth/wecom/config`:`status=ready`、`entryEnabled=true`、`oauthEnabled=true`
|
||||
- `GET https://oa.hyinda.com/api/auth/wecom/login?returnTo=%2Fmobile`:`HTTP 302` 到企业微信 OAuth,state 中 `returnTo=/mobile`
|
||||
- 远端 `root` 与 `deploy` 均可 SSH 到 `/opt/hyb-oa-trialrun`;`hyb-oa-trialrun-server` 与 `hyb-oa-trialrun-db` 正常运行
|
||||
- 本轮调整方向:
|
||||
- 文档与检查清单统一改为企业微信手机入口默认 `/mobile`
|
||||
- 服务端企微默认 `defaultReturnTo` 也改为 `/mobile`,避免后台配置或直链未带 `returnTo` 时回到桌面 Portal
|
||||
- 桌面浏览器和账号密码登录仍由前端运行时显式进入 `/portal`
|
||||
- 当前仍需收口:
|
||||
- 部署 R89/R90 最新代码到公网后,再用真实手机企业微信打开一次应用,确认已绑定账号直接进入 `/mobile`
|
||||
- 用既有测试账号或 smoke 账号跑公网 live smoke,不使用真实业务账号
|
||||
|
||||
## R91 公网部署、live smoke 与备份恢复
|
||||
|
||||
- 时间:`2026-05-05 20:13 - 20:24 CST`
|
||||
- 本轮部署:
|
||||
- 已执行 `bash deploy/trialrun/deploy.sh`
|
||||
- 远端已重建 `hyb-oa-trialrun-server`
|
||||
- 前端 build 通过;仍保留既有 Vite circular chunk 警告
|
||||
- `smoke-external-deps.js`:通过,当前 OCR 仍为 `mock provider`
|
||||
- 企微移动入口复核:
|
||||
- `GET https://oa.hyinda.com/api/auth/wecom/config`:`loginUrl=/api/auth/wecom/login?returnTo=%2Fmobile`、`defaultReturnTo=/mobile`
|
||||
- `GET https://oa.hyinda.com/api/auth/wecom/login`:`HTTP 302` 到企业微信 OAuth,state 中 `returnTo=/mobile`
|
||||
- Playwright 使用 iPhone + 企业微信 UA 打开公网 `/login`:主 CTA 可见,点击后请求 `/api/auth/wecom/login?returnTo=%2Fmobile` 并跳转 `open.weixin.qq.com`
|
||||
- 截图:`output/playwright/r91-public-mobile-wecom-login.png`
|
||||
- Runtime smoke:
|
||||
- 首次手动补跑发现 `global_search_v1` 仍为 `force_off`
|
||||
- 已备份远端 feature flag 状态:`/opt/hyb-oa-trialrun/deploy/trialrun/backups/feature-flags-r91-before-20260505-2018.csv`
|
||||
- 已将 trialrun 必需的 11 个 `force_off` flag 改为 `inherit`
|
||||
- 再次执行 `docker-compose ... exec -T server node src/scripts/smoke-trialrun-runtime.js`:通过
|
||||
- Live smoke:
|
||||
- 已确认远端存在 `SMOKE001` / `SMOKE002` 独立账号
|
||||
- 已在本次会话内重置 smoke 账号随机密码用于自动化;密码未写入 git、不打印
|
||||
- `LIVE_EXPECT_WECOM_STATUS=ready bash scripts/qa/run-web-gates.sh smoke-live`:`3 passed`
|
||||
- 备份与恢复演练:
|
||||
- DB 备份:`/opt/hyb-oa-trialrun/deploy/trialrun/backups/hyb-oa-db-20260505_202239.dump`
|
||||
- Storage 备份:`/opt/hyb-oa-trialrun/deploy/trialrun/backups/hyb-oa-storage-20260505_202241.tar.gz`
|
||||
- DB 恢复演练:已恢复到临时库 `hyb_oa_restore_check`,确认 `public` schema 下 96 张表,随后删除临时库
|
||||
- Storage 恢复演练:已恢复到 `/tmp/hyb-oa-storage-restore-check-20260505_202241`,确认可解包,随后清理临时目录
|
||||
- 演练后 `GET https://oa.hyinda.com/ready`:通过
|
||||
- 当前仍需人工完成:
|
||||
- 用真实手机企业微信从工作台打开 OA 应用一次,确认已绑定账号直接进入 `/mobile`
|
||||
@@ -1,12 +0,0 @@
|
||||
Domain,Tier,Primary_Roles,PC_Routes,Mobile_WeCom_Routes,Server_Routes,Main_Flow,Exception_Flow,Permission_Flow,Current_Coverage,Known_Gaps,Best_Practice_Delta,Next_Action
|
||||
"__DOC_STATUS__","meta","N/A","N/A","N/A","N/A","本 CSV 是历史证据 / QA 参考,不代表 2026-05-12 当前状态。R6/PC6/PA6/FL6/AP6/RI6/LP6/ME6/QG6/DG7/MIA7 后的当前流程以最新 Issue CSV、文档索引和手工试运行报告为准。","历史缺口按当时日期理解,不自动生成当前需求。","当前权限和状态以服务端实现与最新 PA6/后续 Issue 为准。","historical_reference","可能包含已过期的公网仍需、待执行或真机缺口描述。","用于追溯流程覆盖,不替代当前 PRD 或门禁。","先读最新 Issue CSV 再决定下一步。"
|
||||
"认证与企业微信入口","P0","employee|manager|admin","/login|/portal|/settings/profile","/mobile|/mobile/me|/mobile/profile","server/src/routes/auth.js|server/src/routes/wecomAuth.js|server/src/routes/me.js","账号登录或企微 OAuth 进入工作台,按设备落到 PC Portal 或移动工作台。","未绑定、会话过期、OAuth 回跳失败、密码错误、首次登录改密。","普通员工仅看个人入口;管理员看系统入口;企业微信回跳只允许安全 returnTo。","login-portal-ux.spec.ts|wecom-entry.spec.ts|wecom-first-bind.spec.ts|r89-mobile-login-navigation.spec.ts|live-smoke.spec.ts","真实企业微信 OAuth 和真机回跳仍需 live smoke;HTTPS cookie 行为缺最终证据。","国内企业微信应用最佳实践要求工作台直达 H5 移动体验,不能露出 PC 壳。","B3/B5:视觉巡检防 PC 壳;live readiness 检查真实账号。"
|
||||
"报销与票据 OCR","P0","employee|manager|finance|finance_mgr|admin","/reimbursements|/reimbursements/:id|/invoice-pool|/payment-batches|/ap-operations","/mobile/reimbursements|/mobile/reimbursements/:id|/mobile/capture","server/src/routes/reimbursements.js|server/src/routes/invoicePool.js|server/src/routes/paymentBatches.js|server/src/routes/apOperations.js","员工建草稿、加明细、上传发票、OCR 识别、添加到报销、提交审批、财务付款归档。","OCR 超时/失败、重复发票、已绑定/已报销、删除后重传、缺金额无法自动明细、付款失败。","员工只看自己的报销和业务文案;经理审批;财务复核付款;管理员配置。","reimbursement-workflow-progress.spec.ts|invoice-ocr-flow.spec.ts|reimbursement-payment-batch-flow.spec.ts|r111-invoice-reimbursement-guard.spec.ts|r125-invoice-reupload-after-delete.spec.ts|regression-dedup.sh","真实腾讯 OCR 耗时和公网文件上传链路需要样本;移动 PDF 选择需真机证据。","合思/分贝通/每刻均强调票据识别、验真、查重、电子档案和状态可追溯。","B3/B5/B7:视觉和文案门禁、真实 OCR readiness、发布门禁。"
|
||||
"审批中心","P0","manager|finance|finance_mgr|admin","/workflow/tasks|/workflow/tasks/:taskId","/mobile/approvals","server/src/routes/workflow.js|server/src/routes/workflowDefinitions.js","审批人查看待办,审批/驳回/退回/转交,申请人查看进度。","任务已处理、权限不足、并发审批、离线审批重放冲突。","只有当前审批人可处理;管理员可治理流程定义;普通员工只看相关单据进度。","workflow-quick-approve.spec.ts|mobile-approvals-offline.spec.ts|r111-invoice-reimbursement-guard.spec.ts","代理审批、多人并发、真实企业微信 deep link 证据不足。","同类系统强调审批全程留痕、风险提示和移动处理效率。","B4/B5:业务流门禁聚合;live smoke 覆盖移动 deep link。"
|
||||
"请假与考勤","P1","employee|manager|admin","/leave-requests|/attendance|/team","/mobile/leave","server/src/routes/leave.js|server/src/routes/leave-types.js|server/src/routes/attendance.js|server/src/routes/presence.js","员工提交请假、经理审批、团队日历/考勤状态更新。","余额不足、附件缺失、节假日/跨日、撤回、补卡。","员工看本人;经理看团队;管理员配置假期和考勤规则。","leave-flow.spec.ts|leave-team-calendar.spec.ts|announcements-presence.spec.ts|r75-automation-gap-fill.spec.ts","复杂排班、跨日班次和真实移动附件未专项重验。","国内 OA 常规要求移动提交、审批联动团队视图。","B4:纳入业务流门禁;B3:移动视觉巡检。"
|
||||
"周报、待办、公告与通知","P1","employee|manager|admin","/weekly-reports|/todos|/announcements|/notifications","/mobile/notifications","server/src/routes/weeklyReports.js|server/src/routes/todos.js|server/src/routes/announcements.js|server/src/routes/notifications.js","员工写周报、生成待办、公告触达、通知已读。","未提交提醒、通知跳转失效、公告权限错误。","管理员发布公告;员工只看可见公告;经理看团队周报汇总。","weekly-todo-flow.spec.ts|announcements-presence.spec.ts|global-search.spec.ts|r75-automation-gap-fill.spec.ts","外发渠道、催办策略和真实消息投递缺专项证据。","同类系统强调制度与知识库同步、通知可追踪。","B4:纳入业务流门禁;后续可补渠道 live smoke。"
|
||||
"人员、组织、HR 与绩效","P1","employee|manager|hr|admin","/people|/people/:employeeId|/people/stats|/organization|/payroll|/performance","/mobile/me|/mobile/profile","server/src/routes/employees.js|server/src/routes/departments.js|server/src/routes/payroll.js|server/src/routes/performance.js","管理员维护人员组织,员工完善档案,经理/HR 查看统计与绩效。","入职/转正/离职、隐私字段缺失、导出、权限越界。","员工看本人;经理看团队;HR/管理员看管理页面。","user-onboarding.spec.ts|r75-automation-gap-fill.spec.ts","离职资产交接、绩效真实评分、敏感字段脱敏证据不足。","国内 OA/HR 常规要求组织数据作为审批和权限事实源。","B2/B4:覆盖扫描标出缺口,业务门禁先跑现有用例。"
|
||||
"项目、合同与涉密边界","P1","manager|project_role|admin","/projects|/projects/:projectId|/contracts-registry","/mobile","server/src/routes/projects.js|server/src/routes/contractsRegistry.js|server/src/routes/confidentialDocRefs.js","项目创建、成员协作、沟通记录、合同台账、涉密引用边界。","项目权限不足、涉密文档不可见、合同缺关联。","项目成员和管理员分级可见;涉密内容最小暴露。","project-workbench.spec.ts|confidential-boundary.spec.ts","真实项目创建协同和合同台账编辑证据不足。","费控最佳实践强调申请/合同/发票/付款互相追溯。","B4:纳入项目与合同只读/写入门禁。"
|
||||
"采购、预算、差旅与对公付款","P1","employee|manager|finance|admin","/purchase-requests|/budgets|/travel-requests|/payment-batches|/ap-operations","/mobile/approvals|/mobile/capture","server/src/routes/purchaseRequests.js|server/src/routes/budgets.js|server/src/routes/travelRequests.js|server/src/routes/travelOrders.js|server/src/routes/travelReconciliation.js|server/src/routes/paymentBatches.js","采购/差旅申请、预算预检、审批、支付、对账和归档。","预算不足、审批拒绝、对账差异、付款异常、票据不匹配。","员工创建;经理审批;财务付款和对账;管理员配置规则。","procurement-flow.spec.ts|travel-payment-flow.spec.ts|travel-reconciliation-flow.spec.ts|reimbursement-payment-batch-flow.spec.ts","高风险两轮复核、大额批次、真实 ERP/银行回执缺证据。","分贝通/合思强调事前管控、企业支付、三流合一和报表分析。","B4/B7:聚合现有业务流,live 外部回执保持 skipped。"
|
||||
"资产与移动盘点","P1","employee|asset_admin|admin","/assets|/inventory-checks","/mobile/assets/scan","server/src/routes/assets.js|server/src/routes/assetMovements.js|server/src/routes/inventoryChecks.js","资产建卡、领用归还、调拨、盘点,移动端扫码盘点。","扫码失败、离线队列、盘点冲突、权限不足。","员工看本人资产;资产管理员管理台账和盘点。","assets-flow.spec.ts","真实摄像头扫码和真机离线恢复缺证据。","移动端应优先真实设备验证摄像头和文件权限。","B3/B5:视觉与真机清单覆盖。"
|
||||
"系统治理、审计与发布","P0","admin|system_operator","/system/workspace|/system/settings|/system/feature-flags|/system/workflow-definitions|/audit-logs|/system/cutover|/system/integrations/erp","/mobile/me","server/src/routes/systemWorkspace.js|server/src/routes/featureFlags.js|server/src/routes/audit.js|server/src/routes/cutover.js|server/src/routes/integrations.js","管理员配置工作区、功能开关、流程定义、审计、切换和集成。","配置漂移、开关 force_off、迁移漂移、外部依赖不可用、发布失败。","仅系统权限可见;普通用户页面不得出现内部码值或调试文案。","settings-governance.spec.ts|live-smoke.spec.ts|smoke-trialrun-runtime.js|check-ui-design-rules.mjs","缺项目级 coverage scan、全页面视觉巡检和统一 release gate。","成熟系统需要可审计、可回滚、可持续回归的发布链路。","B2/B3/B6/B7:补齐覆盖扫描、视觉巡检、漂移诊断和发布门禁。"
|
||||
|
@@ -0,0 +1,49 @@
|
||||
# 人工试运行报告
|
||||
|
||||
**文档状态**:当前试运行证据摘要。
|
||||
**适用时间**:DCL7 之后。
|
||||
|
||||
DCL7 已删除本文件中 R70-R91 的长流水历史,避免旧环境、旧开关和旧公网状态误导当前工作。历史全文可通过 git 恢复:`git show 5da05eb:docs/trialrun/人工试运行报告.md`。
|
||||
|
||||
## 当前结论
|
||||
|
||||
- R6 首轮小范围试运行已通过;范围是报销、请假、采购、审批、企业微信入口/通知、财务付款/导出。
|
||||
- PC6、PA6、FL6、AP6、RI6、LP6、ME6 自动化、QG6、DG7/MRF7、MIA7 已完成相应收口。
|
||||
- `ME6-3` 代表性企业微信真机门禁仍待确认,不能用自动化、公网视觉矩阵或 QG6 替代。
|
||||
- MIF7 是下一批移动信息架构整改合同,当前仍为 TODO。
|
||||
- R7/OPS7/DOC7 是准备材料;真实 R7 未启动,需用户确认人员、窗口、回滚联系人、问题登记负责人和真机风险状态。
|
||||
|
||||
## 关键证据索引
|
||||
|
||||
| 批次 | 当前状态 | 证据入口 |
|
||||
| --- | --- | --- |
|
||||
| R6 | 已通过 | `issues/2026-05-11_10-23-41-r6-small-trialrun-prep.csv` |
|
||||
| PS6 | 采购提交阻断已修复 | `issues/2026-05-12_01-12-20-r6-purchase-submit-budget-precheck-hotfix.csv` |
|
||||
| PC6 | PC 工作台与审批信息架构已完成 | `issues/2026-05-12_01-40-00-r6-pc-workbench-ia-polish.csv` |
|
||||
| PA6 | 权限与审计回归已完成 | `issues/2026-05-12_01-46-00-r6-permission-audit-regression.csv` |
|
||||
| FL6 | 财务台账/导出增强已完成 | `issues/2026-05-12_01-43-00-r6-finance-ledger-export-v1.csv` |
|
||||
| AP6 | 审批催办、超时提醒和效率摘要已完成 | `issues/2026-05-12_01-42-00-r6-approval-productivity-v1.csv` |
|
||||
| RI6 | 报销票据体验已完成 | `issues/2026-05-12_01-44-00-r6-reimbursement-invoice-polish-v1.csv` |
|
||||
| LP6 | 请假采购体验已完成 | `issues/2026-05-12_01-45-00-r6-leave-procurement-polish-v1.csv` |
|
||||
| ME6 | 自动化和公网视觉已完成,真机门禁未关闭 | `issues/2026-05-12_01-41-00-r6-mobile-experience-second-pass.csv` |
|
||||
| QG6 | QA 治理已完成 | `issues/2026-05-12_01-47-00-r6-qa-governance-upgrade.csv` |
|
||||
| MIA7 | 移动信息架构审查已完成 | `issues/2026-05-12_21-48-39-mobile-ia-visual-flow-review.csv` |
|
||||
| MIF7 | 后续整改合同,仍为 TODO | `issues/2026-05-12_21-48-40-mobile-ia-flow-remediation.csv` |
|
||||
|
||||
## 当前门禁
|
||||
|
||||
| 门禁 | 状态 | 说明 |
|
||||
| --- | --- | --- |
|
||||
| 公网地址 | 可用 | `https://oa.hyinda.com` |
|
||||
| `/ready` | 最近相关批次均通过 | 具体时间看对应 Issue CSV 和部署报告 |
|
||||
| 企业微信个人应用消息 | 正式通知通道 | 企业微信只做入口、身份、消息和 deeplink |
|
||||
| `ME6-3` 真机抽查 | 未关闭 | iPhone 12/iOS14、iPhone 14/iOS16.2、Redmi K60 企业微信仍需代表性复测或用户明确接受风险 |
|
||||
| R7 真实执行 | 未启动 | 草案不等于启动 |
|
||||
|
||||
## 历史恢复
|
||||
|
||||
需要追溯 R70-R91 的详细流水时,使用:
|
||||
|
||||
```bash
|
||||
git show 5da05eb:docs/trialrun/人工试运行报告.md
|
||||
```
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
**文档状态**:当前操作手册,用于部署后公网、企业微信入口和真实 OCR 条件复核。
|
||||
|
||||
发布候选证据、权限直连审计、部署预检和小范围试运行顺序,以 [`release-readiness-checklist.md`](release-readiness-checklist.md) 为准;本文只列 live smoke 和真实 OCR 的执行条件。
|
||||
发布候选证据、权限直连审计、部署预检和小范围试运行顺序,以 [`发布试运行准备清单.md`](发布试运行准备清单.md) 为准;本文只列 live smoke 和真实 OCR 的执行条件。
|
||||
|
||||
## 必需环境变量
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
|
||||
| 范围 | 证据 | 结论 |
|
||||
| --- | --- | --- |
|
||||
| A1 代码差距盘点 | `644852f A1 完成MVP主线代码差距盘点` | 已确认复用现有能力,不从零重写 |
|
||||
| A1 代码盘点 | `644852f A1 完成MVP主线代码盘点` | 已确认复用现有能力,不从零重写 |
|
||||
| A2 统一审批中心 | `d871a40`、`f8c99c8`、`28be209` | PC/移动审批、状态展示和本地回归已闭环 |
|
||||
| A3 报销/发票/OCR | `e79d252 A3 收口报销发票 OCR 主链路` | mock OCR、查重、主流程和视觉验证已通过 |
|
||||
| A4 企业微信入口/通知 | `86451b3 A4 收口企业微信入口与通知回 OA` | 自动化入口和通知 deeplink 已收口,真机留到 live smoke |
|
||||
@@ -78,7 +78,7 @@ node scripts/qa/check-live-smoke-env.mjs
|
||||
|
||||
如发现服务端权限缺口,必须停止部署并拆独立修复 Issue;不得用前端隐藏临时绕过。
|
||||
|
||||
R3 审计执行记录见 [`permission-direct-access-audit.md`](permission-direct-access-audit.md)。2026-05-10 本地自动化直连审计已通过,未发现权限泄漏;R4/D3/D4 记录见 [`deployment-preflight-2026-05-10.md`](deployment-preflight-2026-05-10.md),当前远端运行时代码已对齐 release candidate。
|
||||
R3 审计执行记录见 [`权限直连审计记录.md`](权限直连审计记录.md)。2026-05-10 本地自动化直连审计已通过,未发现权限泄漏;R4/D3/D4 旧部署预检长记录已在 DCL7 中从当前树移除,如需审计可从 `5da05eb` 的 git 历史恢复查看。
|
||||
|
||||
## 5. 部署预检
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
|
||||
## 当前标准
|
||||
|
||||
后续 MIF7 整改按 `docs/product-design-rules.md` 的 MIA7 标准执行:
|
||||
后续 MIF7 整改按 `docs/产品设计规则.md` 的 MIA7 标准执行:
|
||||
|
||||
- 底部导航只承载一级模块,首页常用只放快捷动作,不重复底部 Tab。
|
||||
- 首页待处理最多一张轻摘要,不同时堆总数、三宫格、列表、状态标签和入口按钮。
|
||||
@@ -0,0 +1,5 @@
|
||||
"Domain","Tier","Routes","Primary_Roles","Env_Gates","Feature_Flags","Coverage_Status","Evidence","Validated_Flows","Gaps","Next_Action"
|
||||
"__DOC_STATUS__","meta","N/A","N/A","N/A","N/A","current_summary","docs/文档索引.md|docs/文档事实源状态矩阵.md|docs/trialrun/人工试运行报告.md","DCL7 后保留的轻量覆盖摘要。历史长表可通过 5da05eb 的 git 历史恢复。","历史缺口不代表当前待办。","当前门禁以最新 Issue CSV 为准。"
|
||||
"报销请假采购审批","current","/reimbursements|/leave-requests|/purchase-requests|/workflow/tasks","employee|manager|finance","N/A","N/A","done","issues/R6|RI6|LP6|AP6","报销、请假、采购、审批主链路已在 R6 后批次收口。","ME6-3 真机仍待确认。","进入 MIF7 前先做移动整改。"
|
||||
"移动与企业微信","current","/mobile|/mobile/approvals|/mobile/reimbursements|/mobile/notifications","employee|manager|finance","WECOM_*","wecom_entry_v1","partial_done","issues/ME6|DG7|MIA7","自动化和公网视觉通过,真机代表设备未关闭。","iPhone12/iPhone14/Redmi K60 企业微信仍需复测或风险接受。","MIF7 继续整改移动 IA。"
|
||||
"财务与导出","current","/ap-operations|/payment-batches","finance","N/A","payment_batch_v1","done","issues/FL6|PA6","财务台账、导出、权限和审计已完成一轮。","R7 真实财务用户扩大试运行未启动。","R7 前按草案确认人员和窗口。"
|
||||
|
@@ -0,0 +1,6 @@
|
||||
Domain,Tier,Primary_Roles,PC_Routes,Mobile_WeCom_Routes,Server_Routes,Main_Flow,Exception_Flow,Permission_Flow,Current_Coverage,Known_Gaps,Best_Practice_Delta,Next_Action
|
||||
"认证与企业微信入口","P0","employee|manager|finance|admin","/login|/portal|/settings/profile","/mobile|/mobile/me","server/src/routes/auth.js|server/src/routes/wecomAuth.js|server/src/routes/me.js","账号登录或企业微信进入 OA,按设备进入 PC 或移动工作台。","未绑定、会话过期、OAuth 回跳失败。","员工看个人入口,管理员看系统入口。","wecom-entry|live-smoke|ME6 automation","ME6-3 真机门禁未关闭。","企业微信只做入口、身份、消息和 deeplink。","MIF7 后再做代表性真机复测。"
|
||||
"报销与票据","P0","employee|manager|finance","/reimbursements|/reimbursements/:id|/ap-operations","/mobile/reimbursements|/mobile/reimbursements/:id","server/src/routes/reimbursements.js|server/src/routes/invoicePool.js|server/src/routes/apOperations.js","员工建报销、加发票/附件、提交审批、财务复核或付款状态展示。","识别失败、重复票据、已归档、缺附件。","员工看本人,审批人处理分配任务,财务看财务范围。","RI6|FL6|PA6","R7 真实扩大试运行未启动。","移动轻任务,PC 高密度复核。","MIF7 统一详情壳和返回语义。"
|
||||
"请假与采购","P0","employee|manager","/leave-requests|/purchase-requests|/workflow/tasks","/mobile/leave|/mobile/approvals","server/src/routes/leave.js|server/src/routes/purchaseRequests.js|server/src/routes/workflow.js","员工提交,请假/采购进入审批,审批人处理,员工看进度。","退回/驳回、缺预算池 warning、附件缺失。","自审和 admin-only 业务审批由服务端拒绝。","LP6|PS6|PA6","采购复杂预算、供应商准入、ERP 不在当前范围。","状态和审批历史一致。","MIF7 优化移动进度分组。"
|
||||
"通知与审批效率","P0","employee|manager","/notifications|/workflow/tasks","/mobile/notifications|/mobile/approvals","server/src/routes/notifications.js|server/src/routes/workflow.js","通知事件直达详情;申请人可催办本人 pending 任务。","通知目标不存在、无权限、重复催办。","催办不改变审批状态,通知失败不回滚业务。","AP6|DG7|MIA7","通知和进度视觉仍需 MIF7 进一步区分。","通知是事件收件箱,不是待办副本。","MIF7 做通知事件化。"
|
||||
"系统治理和财务","P1","finance|admin","/system/*|/audit-logs|/ap-operations","/mobile/me","server/src/routes/audit.js|server/src/routes/featureFlags.js|server/src/routes/apOperations.js","管理员看配置和审计,财务看台账和导出。","权限不足、导出失败、审计缺口。","管理员不默认获得财务业务能力,财务不获得系统管理能力。","PA6|FL6|QG6","R7 真实执行未启动。","最小权限和可追溯。","R7 前确认人员、窗口和回滚联系人。"
|
||||
|
在新工单中引用
屏蔽一个用户