补齐 OALAUNCH1 并行收口证据(05-28-oalaunch1-parallel-closeout)
这个提交包含在:
@@ -0,0 +1,6 @@
|
||||
{"file":".trellis/spec/hyb-oa/project-governance.md","reason":"检查当前任务是否满足 Trellis 治理、审批和范围要求。"}
|
||||
{"file":".trellis/spec/hyb-oa/frontend-react-vite-design.md","reason":"检查前端测试与页面相关改动是否符合项目设计和验证规则。"}
|
||||
{"file":".trellis/spec/hyb-oa/docs-and-evidence.md","reason":"检查报告证据是否使用脱敏、相对路径和可追溯结论。"}
|
||||
{"file":".trellis/spec/hyb-oa/security-privacy.md","reason":"检查测试、文档和聊天总结是否避免敏感信息泄露。"}
|
||||
{"file":".trellis/tasks/05-28-oalaunch1-parallel-closeout/research/business-test-gap-inventory.md","reason":"检查自动化业务流补测结果是否覆盖 P0 Go/No-Go 缺口。"}
|
||||
{"file": ".trellis/tasks/05-28-oalaunch1-parallel-closeout/research/invoice-verification-wecom-login-research.md", "reason": "检查发票验真 API、企业微信扫码登录和更深镜像调研决策是否纳入收口证据。"}
|
||||
@@ -0,0 +1,7 @@
|
||||
{"file":".trellis/spec/hyb-oa/project-governance.md","reason":"当前任务的 Trellis 执行、审批、提交和范围治理规则。"}
|
||||
{"file":".trellis/spec/hyb-oa/frontend-react-vite-design.md","reason":"前端测试和页面细修必须遵守的 React/Vite/design 规则。"}
|
||||
{"file":".trellis/spec/hyb-oa/docs-and-evidence.md","reason":"业务流报告和收口证据必须脱敏、可追溯且使用相对路径。"}
|
||||
{"file":".trellis/spec/hyb-oa/security-privacy.md","reason":"测试与报告不得泄露密码、完整账号、票据和原始 payload。"}
|
||||
{"file":".trellis/spec/hyb-oa/reimbursement-invoice-ocr.md","reason":"报销、发票、付款批次主路径补测涉及的业务边界。"}
|
||||
{"file":".trellis/tasks/05-28-oalaunch1-parallel-closeout/research/business-test-gap-inventory.md","reason":"本任务自动化业务测试缺口与补测优先级。"}
|
||||
{"file": ".trellis/tasks/05-28-oalaunch1-parallel-closeout/research/invoice-verification-wecom-login-research.md", "reason": "后续实现或收口时参考发票验真 API 与企业微信扫码登录/镜像调研边界。"}
|
||||
@@ -0,0 +1,34 @@
|
||||
# Implementation Notes
|
||||
|
||||
## Scope
|
||||
|
||||
本轮先收口自动化业务测试缺口,不展开真实部署、生产配置、企业微信写接口、付费发票验真 API 或真实数据写入。
|
||||
|
||||
## Decisions
|
||||
|
||||
- P0 业务流按 `auth,reimbursement,approval,procurement,governance` 组合复跑,并保留最终 PASS 证据。
|
||||
- 移动审批离线测试改用已启用的请假流程造待办;差旅在当前正式角色权限中仍处于冻结状态,不能作为非 admin 主路径测试数据来源。
|
||||
- 权限直连治理测试同步差旅冻结契约:员工直连差旅列表应返回 403,而不是返回本人范围列表。
|
||||
- 报销付款批次测试改用稳定 `data-testid`,避免页面布局细修后 selector 漂移。
|
||||
|
||||
## Verification Evidence
|
||||
|
||||
- 2026-05-28 收口校验:
|
||||
- `cd client && npm run typecheck`:通过。
|
||||
- `cd client && npm run build`:通过。
|
||||
- `cd server && npm run prisma:validate`:通过。
|
||||
- `node scripts/qa/check-trellis-governance.mjs`:通过。
|
||||
- `python3 ./.trellis/scripts/task.py validate 05-28-oalaunch1-parallel-closeout`:通过。
|
||||
- `git diff --check`:通过。
|
||||
- `research/business-flow-p0-pass/summary.txt`:P0 业务流组合最终通过。
|
||||
- `research/business-flow-approval-rerun-2/summary.txt`:WebKit 安装和移动审批测试修正后通过。
|
||||
- `research/business-flow-governance-rerun/summary.txt`:权限直连治理测试修正后通过。
|
||||
- `research/business-flow-payment-batch-fix2/summary.txt`:报销付款批次主路径修正后通过。
|
||||
- `research/business-flow-r89-fix/summary.txt`:登录/移动入口相关修正后通过。
|
||||
- `research/company-policy-oa-mapping.md`:公司制度与 OA 功能的脱敏映射清单。
|
||||
- `research/pc-consistency-frontend-design-review.md`:按 `frontend-design` 完成 PC 一致性复查。
|
||||
- `research/invoice-verification-wecom-login-research.md`:发票验真 API、企业微信 PC 扫码登录和更深镜像的调研决策。
|
||||
|
||||
## Remaining Parallel Streams
|
||||
|
||||
- 等待最终质量校验、部署/公网检查决策和试运行主线 Day 7 Go/No-Go。
|
||||
@@ -0,0 +1,114 @@
|
||||
# OALAUNCH1 最终启用前并行收口包
|
||||
|
||||
## Goal
|
||||
|
||||
在 7 天真实试运行继续进行的同时,把 OALAUNCH1 最终启用前容易遗漏的收口工作组织成一个 Trellis 执行合同:先建立 Day 7 Go/No-Go 证据框架,再补自动化业务测试缺口、公司制度与 OA 功能映射、PC 页面一致性细修,最后完成发票验真 API 与企业微信扫码登录/更深镜像的调研决策。目标是减少遗漏、避免重复讨论,并让最终是否正式启用有可追溯证据。
|
||||
|
||||
## Scope
|
||||
|
||||
本任务覆盖 OALAUNCH1 正式启用前的并行收口准备:Go/No-Go 证据、自动化业务流补测、制度/OA 映射、PC 一致性复查和外部能力调研。真实试运行每日运营仍归 `.trellis/tasks/05-26-oa-seven-day-trial-live-ops/`,本任务只引用其脱敏结论,不重复制造试运行证据。
|
||||
|
||||
## What I Already Know
|
||||
|
||||
- 当前仍有连续任务 `.trellis/tasks/05-26-oa-seven-day-trial-live-ops/`,负责 2026-05-26 至 2026-06-01 的 7 天真实试运行、每日只读巡检和真实业务反馈收口。
|
||||
- 本任务不替代试运行主线;试运行真实使用继续按 OAOPS1 节奏执行。
|
||||
- 用户已明确希望真实试运行同步执行,其他准备任务可以并行推进。
|
||||
- 前端视觉和交互裁决以 `frontend-design` skill 为准;项目内重复、过时的视觉规则已治理为噪音,不再作为新页面设计裁决。
|
||||
- 现有事实源要求:Trellis task 是新开发执行合同,`docs/` 是业务事实源,历史 Issue CSV 只作为追溯材料。
|
||||
- 已完成过多轮前端 Wave 改进,但仍需把 PC 页面一致性和业务页面适配作为收口复查,不应把“做过一轮”误认为“全部页面最终验收完成”。
|
||||
- 公司制度资料位于用户整理的公司文档目录,后续只能提炼与 OA 功能相关的制度参数和流程映射,不能泄露合同正文、银行资料、完整账号、Secret 或敏感原文。
|
||||
|
||||
## Execution Order
|
||||
|
||||
1. **试运行主线继续**
|
||||
- 继续执行 `05-26-oa-seven-day-trial-live-ops`。
|
||||
- 每日只读巡检、人工真实业务反馈、阻断问题分级收口仍在该任务下留证。
|
||||
|
||||
2. **Day 7 Go/No-Go 证据框架**
|
||||
- 先整理最终启用判断需要哪些证据、谁负责、缺口如何标记。
|
||||
- 证据框架反向指导后续自动化补测、制度映射和页面细修。
|
||||
|
||||
3. **自动化业务测试缺口补齐**
|
||||
- 盘点报销、审批、财务付款、AP、票据池、通知、权限、移动/企业微信入口等业务流程的自动化覆盖。
|
||||
- 优先补“真实启用前会影响 Go/No-Go 的主路径”,不追求把所有低频页面一次性自动化。
|
||||
|
||||
4. **公司制度与 OA 功能映射**
|
||||
- 从已整理制度中提取 OA 应落地的参数、流程、角色、证据和告警点。
|
||||
- 输出“制度条款/管理要求 -> OA 功能/流程/缺口/后续动作”的映射,不复制敏感原文。
|
||||
|
||||
5. **PC 页面一致性细修**
|
||||
- 使用 `frontend-design` 做设计判断。
|
||||
- 优先 A/B 类真实高频页面:登录、工作台、报销、审批、通知、财务/付款/AP/票据池。
|
||||
- C 类管理页只做阻碍使用或明显割裂的收口,不做大规模重设计。
|
||||
|
||||
6. **调研决策项**
|
||||
- 发票验真付费 API:比较适配国内小公司 OA 的成本、合规、接入难度和稳定性。
|
||||
- 企业微信扫码登录/更深镜像:判断是否值得纳入近期,避免把非必需能力挤进最终启用前主线。
|
||||
|
||||
## Requirements
|
||||
|
||||
- 本任务必须保持 Trellis-only:需求、执行、验证和复盘均写入当前 Trellis task 或既有事实源,不再创建新的历史 Issue CSV 作为默认合同。
|
||||
- 不得把本任务做成单纯聊天结论;必须留下可追溯的 PRD、研究/审查结果、测试证据或实现提交。
|
||||
- 真实试运行每日巡检仍归 `05-26-oa-seven-day-trial-live-ops`;本任务只引用其结论,不重复制造试运行证据。
|
||||
- 自动化补测应优先覆盖后端和前端业务主路径,必要时包含 Playwright/视觉交互验证。
|
||||
- 前端页面调整前必须读取 `frontend-design`,并保持 OA 工具型系统应有的安静、紧凑、可扫描、低干扰风格。
|
||||
- 公司制度映射只保存脱敏摘要、规则编号、流程要求和 OA 对应关系,不保存敏感原文。
|
||||
- 任何公网部署、生产配置、真实数据写入、企业微信写入、数据库重置/恢复、真实付款或付费 API 开通,必须另行获得用户明确批准。
|
||||
|
||||
## Acceptance Criteria
|
||||
|
||||
- [x] Day 7 Go/No-Go 证据框架已建立,能列出最终启用所需证据、现状、缺口和负责人/来源。
|
||||
- [x] 自动化业务测试缺口已盘点,并至少补齐本轮确定的高优先级主路径缺口。
|
||||
- [x] 公司制度与 OA 功能映射已形成脱敏清单,标明已支持、需配置、需开发、暂缓四类状态。
|
||||
- [x] PC 页面一致性已按 `frontend-design` 复查并完成本轮高优先级细修。
|
||||
- [x] 发票验真 API 与企业微信扫码登录/更深镜像已有调研结论和是否进入近期开发的建议。
|
||||
- [x] 所有代码改动通过相关后端/前端/业务/视觉验证;如有未跑项,必须说明原因和风险。
|
||||
- [ ] 面向用户可测试的改动完成部署与公网检查后,才告知用户可以测试。
|
||||
|
||||
## Definition of Done
|
||||
|
||||
- 当前任务下的研究、实现、验证和遗留风险可追溯。
|
||||
- 不再依赖聊天记忆判断哪些任务完成、哪些未完成。
|
||||
- 试运行主线和本地开发线边界清晰,没有把只读巡检、自动化测试、人工真实业务反馈混为一谈。
|
||||
- 所有新增或更新的事实源不泄露密码、token、Secret、完整账号、完整本地路径、真实票据、合同正文、银行资料或 raw payload。
|
||||
|
||||
## Out of Scope
|
||||
|
||||
- 不在本任务中直接宣布 OALAUNCH1 最终正式启用完成。
|
||||
- 不执行真实付款、不开通银行接口、不写 ERP、不导入银行流水。
|
||||
- 不在没有单独批准的情况下调用企业微信写接口、批量同步真实员工或启用更深镜像。
|
||||
- 不在没有单独批准的情况下采购或开通发票验真付费 API。
|
||||
- 不恢复差旅、不开启图片 OCR、不扩展复杂 BPM、不建设预算硬控或 RuleOps。
|
||||
- 不把公司制度、合同、账号、银行、客户或供应商敏感原文搬进 OA 或 Trellis 证据。
|
||||
|
||||
## Test Plan
|
||||
|
||||
- Trellis/task 合规:
|
||||
```bash
|
||||
python3 ./.trellis/scripts/task.py validate 05-28-oalaunch1-parallel-closeout
|
||||
node scripts/qa/check-trellis-governance.mjs
|
||||
git diff --check
|
||||
```
|
||||
- 后端相关改动:
|
||||
```bash
|
||||
cd server && npm run prisma:validate
|
||||
```
|
||||
- 前端相关改动:
|
||||
```bash
|
||||
cd client && npm run typecheck && npm run build
|
||||
```
|
||||
- 业务流程自动化:
|
||||
- 优先复用现有 `scripts/qa/` 和 Playwright 流程。
|
||||
- 新增补测必须保存脱敏报告或摘要到当前 task 的 `research/` 或既有 artifacts 索引。
|
||||
- 公网/试运行:
|
||||
- 只读巡检继续在 `05-26-oa-seven-day-trial-live-ops` 下执行。
|
||||
- 本任务如产出面向用户可测试的改动,部署和公网检查需另行批准后执行。
|
||||
|
||||
## Technical Notes
|
||||
|
||||
- Workflow: `.trellis/workflow.md`
|
||||
- Active live-ops task: `.trellis/tasks/05-26-oa-seven-day-trial-live-ops/`
|
||||
- Product facts: `docs/文档事实源状态矩阵.md`、`docs/产品设计规则.md`
|
||||
- Trial runbook: `docs/试运行与自动化验证手册.md`
|
||||
- Admin runbook: `docs/管理员手册.md`
|
||||
- Frontend decision authority: `frontend-design`
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"issueId": null,
|
||||
"baseURL": "http://127.0.0.1:3001",
|
||||
"commit": "c8b41a4",
|
||||
"checkedAt": "2026-05-28T07:36:37.322Z",
|
||||
"status": "PASS",
|
||||
"mode": "business-flow-attached",
|
||||
"reportDir": ".trellis/tasks/05-28-oalaunch1-parallel-closeout/research/business-flow-approval-rerun-2",
|
||||
"reportRef": ".trellis/tasks/05-28-oalaunch1-parallel-closeout/research/business-flow-approval-rerun-2",
|
||||
"groups": "approval",
|
||||
"notes": "业务流门禁按 BUSINESS_FLOW_GROUPS 选择领域执行;summary.txt 保留逐组通过/失败明细。"
|
||||
}
|
||||
+2
@@ -0,0 +1,2 @@
|
||||
>>> [business-flow] approval
|
||||
[business-flow][PASS] approval
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"issueId": null,
|
||||
"baseURL": "http://127.0.0.1:3001",
|
||||
"commit": "c8b41a4",
|
||||
"checkedAt": "2026-05-28T07:32:16.380Z",
|
||||
"status": "FAIL",
|
||||
"mode": "business-flow-attached",
|
||||
"reportDir": ".trellis/tasks/05-28-oalaunch1-parallel-closeout/research/business-flow-approval-rerun",
|
||||
"reportRef": ".trellis/tasks/05-28-oalaunch1-parallel-closeout/research/business-flow-approval-rerun",
|
||||
"groups": "approval",
|
||||
"notes": "业务流门禁按 BUSINESS_FLOW_GROUPS 选择领域执行;summary.txt 保留逐组通过/失败明细。"
|
||||
}
|
||||
+2
@@ -0,0 +1,2 @@
|
||||
>>> [business-flow] approval
|
||||
[business-flow][FAIL] approval
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"issueId": null,
|
||||
"baseURL": "http://127.0.0.1:3001",
|
||||
"commit": "c8b41a4",
|
||||
"checkedAt": "2026-05-28T07:42:47.640Z",
|
||||
"status": "PASS",
|
||||
"mode": "business-flow-attached",
|
||||
"reportDir": ".trellis/tasks/05-28-oalaunch1-parallel-closeout/research/business-flow-governance-rerun",
|
||||
"reportRef": ".trellis/tasks/05-28-oalaunch1-parallel-closeout/research/business-flow-governance-rerun",
|
||||
"groups": "governance",
|
||||
"notes": "业务流门禁按 BUSINESS_FLOW_GROUPS 选择领域执行;summary.txt 保留逐组通过/失败明细。"
|
||||
}
|
||||
+2
@@ -0,0 +1,2 @@
|
||||
>>> [business-flow] governance
|
||||
[business-flow][PASS] governance
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"issueId": null,
|
||||
"baseURL": "http://127.0.0.1:3001",
|
||||
"commit": "c8b41a4",
|
||||
"checkedAt": "2026-05-28T07:28:01.883Z",
|
||||
"status": "FAIL",
|
||||
"mode": "business-flow-attached",
|
||||
"reportDir": ".trellis/tasks/05-28-oalaunch1-parallel-closeout/research/business-flow-p0-final",
|
||||
"reportRef": ".trellis/tasks/05-28-oalaunch1-parallel-closeout/research/business-flow-p0-final",
|
||||
"groups": "auth,reimbursement,approval,procurement,governance",
|
||||
"notes": "业务流门禁按 BUSINESS_FLOW_GROUPS 选择领域执行;summary.txt 保留逐组通过/失败明细。"
|
||||
}
|
||||
+6
@@ -0,0 +1,6 @@
|
||||
>>> [business-flow] auth
|
||||
[business-flow][PASS] auth
|
||||
>>> [business-flow] reimbursement
|
||||
[business-flow][PASS] reimbursement
|
||||
>>> [business-flow] approval
|
||||
[business-flow][FAIL] approval
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"issueId": null,
|
||||
"baseURL": "http://127.0.0.1:3001",
|
||||
"commit": "c8b41a4",
|
||||
"checkedAt": "2026-05-28T07:54:26.343Z",
|
||||
"status": "PASS",
|
||||
"mode": "business-flow-attached",
|
||||
"reportDir": ".trellis/tasks/05-28-oalaunch1-parallel-closeout/research/business-flow-p0-pass",
|
||||
"reportRef": ".trellis/tasks/05-28-oalaunch1-parallel-closeout/research/business-flow-p0-pass",
|
||||
"groups": "auth,reimbursement,approval,procurement,governance",
|
||||
"notes": "业务流门禁按 BUSINESS_FLOW_GROUPS 选择领域执行;summary.txt 保留逐组通过/失败明细。"
|
||||
}
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
>>> [business-flow] auth
|
||||
[business-flow][PASS] auth
|
||||
>>> [business-flow] reimbursement
|
||||
[business-flow][PASS] reimbursement
|
||||
>>> [business-flow] approval
|
||||
[business-flow][PASS] approval
|
||||
>>> [business-flow] procurement
|
||||
[business-flow][PASS] procurement
|
||||
>>> [business-flow] governance
|
||||
[business-flow][PASS] governance
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"issueId": null,
|
||||
"baseURL": "http://127.0.0.1:3001",
|
||||
"commit": "c8b41a4",
|
||||
"checkedAt": "2026-05-28T07:10:03.376Z",
|
||||
"status": "FAIL",
|
||||
"mode": "business-flow-attached",
|
||||
"reportDir": ".trellis/tasks/05-28-oalaunch1-parallel-closeout/research/business-flow-p0-rerun",
|
||||
"reportRef": ".trellis/tasks/05-28-oalaunch1-parallel-closeout/research/business-flow-p0-rerun",
|
||||
"groups": "auth,reimbursement,approval,procurement,governance",
|
||||
"notes": "业务流门禁按 BUSINESS_FLOW_GROUPS 选择领域执行;summary.txt 保留逐组通过/失败明细。"
|
||||
}
|
||||
+4
@@ -0,0 +1,4 @@
|
||||
>>> [business-flow] auth
|
||||
[business-flow][PASS] auth
|
||||
>>> [business-flow] reimbursement
|
||||
[business-flow][FAIL] reimbursement
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"issueId": null,
|
||||
"baseURL": "http://127.0.0.1:3001",
|
||||
"commit": "c8b41a4",
|
||||
"checkedAt": "2026-05-28T07:39:53.008Z",
|
||||
"status": "FAIL",
|
||||
"mode": "business-flow-attached",
|
||||
"reportDir": ".trellis/tasks/05-28-oalaunch1-parallel-closeout/research/business-flow-p0-tail",
|
||||
"reportRef": ".trellis/tasks/05-28-oalaunch1-parallel-closeout/research/business-flow-p0-tail",
|
||||
"groups": "procurement,governance",
|
||||
"notes": "业务流门禁按 BUSINESS_FLOW_GROUPS 选择领域执行;summary.txt 保留逐组通过/失败明细。"
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
>>> [business-flow] procurement
|
||||
[business-flow][PASS] procurement
|
||||
>>> [business-flow] governance
|
||||
[business-flow][FAIL] governance
|
||||
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"issueId": null,
|
||||
"baseURL": "http://127.0.0.1:3001",
|
||||
"commit": "c8b41a4",
|
||||
"checkedAt": "2026-05-28T06:56:14.106Z",
|
||||
"status": "FAIL",
|
||||
"mode": "business-flow-attached",
|
||||
"reportDir": ".trellis/tasks/05-28-oalaunch1-parallel-closeout/research/business-flow-p0",
|
||||
"reportRef": ".trellis/tasks/05-28-oalaunch1-parallel-closeout/research/business-flow-p0",
|
||||
"groups": "auth,reimbursement,approval,procurement,governance",
|
||||
"notes": "业务流门禁按 BUSINESS_FLOW_GROUPS 选择领域执行;summary.txt 保留逐组通过/失败明细。"
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
>>> [business-flow] auth
|
||||
[business-flow][FAIL] auth
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"issueId": null,
|
||||
"baseURL": "http://127.0.0.1:3001",
|
||||
"commit": "c8b41a4",
|
||||
"checkedAt": "2026-05-28T07:19:30.812Z",
|
||||
"status": "FAIL",
|
||||
"mode": "business-flow-attached",
|
||||
"reportDir": ".trellis/tasks/05-28-oalaunch1-parallel-closeout/research/business-flow-payment-batch-fix",
|
||||
"reportRef": ".trellis/tasks/05-28-oalaunch1-parallel-closeout/research/business-flow-payment-batch-fix",
|
||||
"groups": "reimbursement",
|
||||
"notes": "业务流门禁按 BUSINESS_FLOW_GROUPS 选择领域执行;summary.txt 保留逐组通过/失败明细。"
|
||||
}
|
||||
+2
@@ -0,0 +1,2 @@
|
||||
>>> [business-flow] reimbursement
|
||||
[business-flow][FAIL] reimbursement
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"issueId": null,
|
||||
"baseURL": "http://127.0.0.1:3001",
|
||||
"commit": "c8b41a4",
|
||||
"checkedAt": "2026-05-28T07:22:39.683Z",
|
||||
"status": "PASS",
|
||||
"mode": "business-flow-attached",
|
||||
"reportDir": ".trellis/tasks/05-28-oalaunch1-parallel-closeout/research/business-flow-payment-batch-fix2",
|
||||
"reportRef": ".trellis/tasks/05-28-oalaunch1-parallel-closeout/research/business-flow-payment-batch-fix2",
|
||||
"groups": "reimbursement",
|
||||
"notes": "业务流门禁按 BUSINESS_FLOW_GROUPS 选择领域执行;summary.txt 保留逐组通过/失败明细。"
|
||||
}
|
||||
+2
@@ -0,0 +1,2 @@
|
||||
>>> [business-flow] reimbursement
|
||||
[business-flow][PASS] reimbursement
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"issueId": null,
|
||||
"baseURL": "http://127.0.0.1:3001",
|
||||
"commit": "c8b41a4",
|
||||
"checkedAt": "2026-05-28T07:01:03.526Z",
|
||||
"status": "PASS",
|
||||
"mode": "business-flow-attached",
|
||||
"reportDir": ".trellis/tasks/05-28-oalaunch1-parallel-closeout/research/business-flow-r89-fix",
|
||||
"reportRef": ".trellis/tasks/05-28-oalaunch1-parallel-closeout/research/business-flow-r89-fix",
|
||||
"groups": "auth",
|
||||
"notes": "业务流门禁按 BUSINESS_FLOW_GROUPS 选择领域执行;summary.txt 保留逐组通过/失败明细。"
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
>>> [business-flow] auth
|
||||
[business-flow][PASS] auth
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"issueId": null,
|
||||
"baseURL": "http://127.0.0.1:3001",
|
||||
"commit": "c8b41a4",
|
||||
"checkedAt": "2026-05-28T07:16:20.204Z",
|
||||
"status": "FAIL",
|
||||
"mode": "business-flow-attached",
|
||||
"reportDir": ".trellis/tasks/05-28-oalaunch1-parallel-closeout/research/business-flow-reimbursement-fix",
|
||||
"reportRef": ".trellis/tasks/05-28-oalaunch1-parallel-closeout/research/business-flow-reimbursement-fix",
|
||||
"groups": "reimbursement",
|
||||
"notes": "业务流门禁按 BUSINESS_FLOW_GROUPS 选择领域执行;summary.txt 保留逐组通过/失败明细。"
|
||||
}
|
||||
+2
@@ -0,0 +1,2 @@
|
||||
>>> [business-flow] reimbursement
|
||||
[business-flow][FAIL] reimbursement
|
||||
@@ -0,0 +1,145 @@
|
||||
# 自动化业务测试缺口盘点
|
||||
|
||||
## Scope
|
||||
|
||||
本盘点服务 OALAUNCH1 最终启用前的自动化测试收口。目标不是一次性扩大所有自动化,而是找出影响 Day 7 Go/No-Go 的主路径缺口,并给出先后顺序。
|
||||
|
||||
## Existing Coverage
|
||||
|
||||
### 项目级流程覆盖扫描
|
||||
|
||||
已运行:
|
||||
|
||||
```bash
|
||||
node scripts/qa/check-flow-coverage.mjs --markdown .trellis/tasks/05-28-oalaunch1-parallel-closeout/research/flow-coverage-audit.md --json
|
||||
```
|
||||
|
||||
结果摘要:
|
||||
|
||||
| 指标 | 结果 |
|
||||
| --- | ---: |
|
||||
| 前端路由数 | 69 |
|
||||
| 业务域数 | 5 |
|
||||
| 后端 route 文件数 | 68 |
|
||||
| P0 含缺口路由数 | 0 |
|
||||
| highRiskGapCount | 0 |
|
||||
|
||||
已生成详细报告:`research/flow-coverage-audit.md`。
|
||||
|
||||
注意:该扫描是“路由/关键词/用例存在性”级别的覆盖盘点,可以证明没有明显 P0 空白,但不能替代业务闭环实际执行结果。
|
||||
|
||||
### 业务流门禁分组
|
||||
|
||||
`scripts/qa/run-business-flow-gates.sh list` 当前覆盖:
|
||||
|
||||
| 业务域 | 代表用例 |
|
||||
| --- | --- |
|
||||
| auth | 登录页、企业微信入口、绑定、移动登录导航 |
|
||||
| reimbursement | 报销进度、发票 OCR、付款批次、报销主流程、发票护栏、删除后重传 |
|
||||
| approval | 快速审批、移动审批离线态 |
|
||||
| leave | 请假流程、团队日历 |
|
||||
| collaboration | 周报/待办、公告在场、全局搜索 |
|
||||
| hr | 用户入职、自动化缺口填补 |
|
||||
| project | 项目工作台、敏感边界 |
|
||||
| procurement | 采购流程 |
|
||||
| asset | 资产流程 |
|
||||
| travel | 差旅付款、差旅对账 |
|
||||
| governance | 权限直连、系统治理 |
|
||||
|
||||
### 后端回归/单测覆盖
|
||||
|
||||
已有后端脚本和单测覆盖:
|
||||
|
||||
- `server/scripts/regression-all.sh`
|
||||
- `server/scripts/regression-workflow-actions.sh`
|
||||
- `server/scripts/regression-payment-batches.sh`
|
||||
- `server/scripts/regression-procurement.sh`
|
||||
- `server/scripts/regression-dedup.sh`
|
||||
- `server/scripts/regression-ocr.sh`
|
||||
- `server/tests/unit/routes/reimbursements.*.test.js`
|
||||
- `server/tests/unit/routes/workflow.*.test.js`
|
||||
- `server/tests/unit/routes/paymentBatches.reimbursement.test.js`
|
||||
- `server/tests/unit/routes/invoicePool.*.test.js`
|
||||
- `server/tests/unit/routes/notifications.test.js`
|
||||
- `server/tests/unit/routes/announcements.test.js`
|
||||
- `server/tests/unit/services/email.test.js`
|
||||
- `server/tests/unit/services/verification.test.js`
|
||||
|
||||
## Go/No-Go Relevant Gaps
|
||||
|
||||
| 优先级 | 缺口 | 现状 | 建议动作 |
|
||||
| --- | --- | --- | --- |
|
||||
| P0 | 当前分支业务流门禁是否全绿 | 有脚本和用例清单,但本任务尚未复跑完整 `business-flow-local` | 先跑本地最小高优先级分组:auth、reimbursement、approval、procurement、governance |
|
||||
| P0 | 报销 -> 审批 -> 付款批次 -> AP 的自动化闭环是否覆盖最新页面 | 已有 `reimbursement-payment-batch-flow.spec.ts` 和后端付款批次测试 | 复跑并根据失败补修;若通过则作为 Go/No-Go 自动化证据 |
|
||||
| P0 | 登录页找回密码/验证码/Tab 顺序/输入不丢失回归 | 已有 `login-portal-ux.spec.ts`,前序功能已修过 | 复跑 auth 分组;若缺验证码/找回密码断言则补充 |
|
||||
| P0 | 审批详情/通知直达实际业务对象 | 有审批和通知用例,但通知直达是否完整覆盖最新关键业务需复核 | 检查 `workflow-action-confirm-ui`、`workflow-quick-approve`、`notifications` 后端单测;必要时补 E2E |
|
||||
| P1 | 财务/AP/票据池 PC 页面视觉/操作一致性 | Wave4 已有视觉用例和公网只读巡检 | 在前端一致性复查中处理;不阻塞自动化主路径 |
|
||||
| P1 | 制度签收与制度/OA 映射自动化 | 已有 `announcements-policy-ack.spec.ts` 和后端 announcements 单测 | 制度映射完成后再判断是否需要新增配置/展示测试 |
|
||||
| P2 | 发票验真付费 API | 现有 verification 相关单测,真实付费 API 未决策 | 先调研,不进入本轮代码实现 |
|
||||
| P2 | 企业微信扫码登录 | 企业微信入口/绑定已有测试;扫码登录未实现 | 先调研和产品决策,不作为 Day 7 硬门禁 |
|
||||
|
||||
## Recommended First Test Batch
|
||||
|
||||
为了在不扩大风险的情况下快速提升 Go/No-Go 可信度,第一批只跑本地/隔离自动化:
|
||||
|
||||
```bash
|
||||
BUSINESS_FLOW_GROUPS=auth,reimbursement,approval,procurement,governance \
|
||||
BUSINESS_FLOW_REPORT_DIR=.trellis/tasks/05-28-oalaunch1-parallel-closeout/research/business-flow-p0 \
|
||||
bash scripts/qa/run-business-flow-gates.sh local
|
||||
```
|
||||
|
||||
配套后端:
|
||||
|
||||
```bash
|
||||
cd server && npm run prisma:validate
|
||||
cd server && ./scripts/regression-workflow-actions.sh
|
||||
cd server && ./scripts/regression-payment-batches.sh
|
||||
cd server && ./scripts/regression-procurement.sh
|
||||
```
|
||||
|
||||
如果第一批通过,再进入第二批:
|
||||
|
||||
```bash
|
||||
BUSINESS_FLOW_GROUPS=leave,collaboration,hr,project,asset \
|
||||
BUSINESS_FLOW_REPORT_DIR=.trellis/tasks/05-28-oalaunch1-parallel-closeout/research/business-flow-p1 \
|
||||
bash scripts/qa/run-business-flow-gates.sh local
|
||||
```
|
||||
|
||||
## Execution Results
|
||||
|
||||
### P0 final pass
|
||||
|
||||
最终 P0 组合已复跑通过:
|
||||
|
||||
```bash
|
||||
QA_SKIP_CLIENT_BUILD=1 BUSINESS_FLOW_GROUPS=auth,reimbursement,approval,procurement,governance \
|
||||
BUSINESS_FLOW_REPORT_DIR=.trellis/tasks/05-28-oalaunch1-parallel-closeout/research/business-flow-p0-pass \
|
||||
bash scripts/qa/run-business-flow-gates.sh local
|
||||
```
|
||||
|
||||
结果:
|
||||
|
||||
| 业务域 | 结果 |
|
||||
| --- | --- |
|
||||
| auth | PASS,16 passed |
|
||||
| reimbursement | PASS,10 passed,1 skipped |
|
||||
| approval | PASS,3 passed |
|
||||
| procurement | PASS,1 passed |
|
||||
| governance | PASS,9 passed |
|
||||
|
||||
证据目录:`research/business-flow-p0-pass/`。
|
||||
|
||||
### Fixes made during rerun
|
||||
|
||||
- `auth` 初次失败点来自旧移动登录测试未 mock `/api/auth/capabilities`,已补 mock,`business-flow-r89-fix` 通过。
|
||||
- `reimbursement` 失败点来自付款批次页面 selector 与页面结构演进不一致,已补稳定 `data-testid` 并修正断言,`business-flow-payment-batch-fix2` 通过。
|
||||
- `approval` 初次阻塞来自本地 Playwright WebKit 缺失;安装 WebKit 后发现移动审批测试仍用冻结的差旅流程造数据,已改为请假流程,`business-flow-approval-rerun-2` 通过。
|
||||
- `governance` 失败点来自测试仍期望员工可直连差旅列表并被收敛为本人范围;当前契约是非 admin 差旅权限冻结,已改为 403 期望,`business-flow-governance-rerun` 通过。
|
||||
|
||||
## Decision
|
||||
|
||||
当前判断:
|
||||
|
||||
- P0 自动化业务流已具备 Go/No-Go 证据价值。
|
||||
- 本轮缺口主要是测试契约与当前产品冻结策略/页面结构不同步,不是缺少主路径自动化骨架。
|
||||
- 下一步可并行推进制度/OA 映射、PC 一致性细修和发票验真/企微扫码调研;P1/P2 业务流可按风险继续补跑,但不应阻塞当前 P0 结论。
|
||||
@@ -0,0 +1,51 @@
|
||||
# 公司制度与 OA 功能映射清单
|
||||
|
||||
## Scope
|
||||
|
||||
本清单基于公司制度体系建设包中的制度草案、联调矩阵、待确认参数、RACI 和签收材料,提炼 OA 需要承接的流程、角色、参数和证据。本文只保存脱敏摘要,不保存合同正文、银行资料、完整账号、完整本地路径、敏感报价、身份证件、密钥或原始凭证。
|
||||
|
||||
## Status Legend
|
||||
|
||||
| 状态 | 含义 |
|
||||
| --- | --- |
|
||||
| 已支持 | 当前 OA 已有主流程或可通过现有功能承接 |
|
||||
| 需配置 | 不需要新开发,但上线前需确认制度参数、角色、开关或基础数据 |
|
||||
| 需开发 | 现有 OA 尚不能完整承接,需要后续功能任务 |
|
||||
| 暂缓 | 制度要求重要,但不建议压入 OALAUNCH1 正式启用前 |
|
||||
|
||||
## Mapping
|
||||
|
||||
| 制度/管理要求 | OA 对应功能 | 当前状态 | 建议动作 |
|
||||
| --- | --- | --- | --- |
|
||||
| 授权审批:申请人提交、负责人审核、财务复核、管理层按风险/金额最终批准;禁止自审 | workflow 任务、审批人权限、admin-only 自审拒绝、审计日志 | 已支持 | 保持“逐单审批 + 角色留痕”作为 V1 口径;金额阈值不得写死 |
|
||||
| 金额分级、小额/一般/重大阈值、预算外审批 | 审批规则、费用标准、预算/风险提示 | 需配置 | 管理层确认阈值后录入配置;V1 先用说明字段和风险提示,不做预算硬阻断 |
|
||||
| 报销资料、PDF 发票、重复报销、付款批次、银行回单、AP/代账导出 | 报销、PDF OCR、发票护栏、付款批次、回单附件、AP 台账/导出 | 已支持 | 已通过 P0 自动化;真实试运行仍需至少 1 条真实业务闭环留证 |
|
||||
| 付款前置条件:审批、合同/采购依据、验收、付款节点、收款账户一致、凭证齐全 | 付款批次、附件、AP 台账、审批记录 | 已支持 | V1 不导入银行流水原件;只记录付款批次、回单附件和导出证据 |
|
||||
| 采购申请、必要性审核、财务预算审核、验收付款、采购台账 | 采购申请、审批、供应商/项目/成本中心基础数据、付款/AP 关联 | 已支持 | 保持小团队 V1:申请、审核、付款前置资料和验收留痕,不建设复杂招投标 |
|
||||
| 供应商准入、黑名单、评价、多方询价、单一来源 | 供应商主数据、采购附件/说明 | 需开发 | 先用供应商摘要和附件承接;供应商评价/黑名单/多方询价结构化后续开发 |
|
||||
| 固定资产购置、资产编号、领用、盘点、维修、报废 | 资产台账、资产流程、盘点用例 | 已支持 | 资产 V1 可用;软件/云资源/备份介质只登记元数据,不登记密钥 |
|
||||
| 电子资产:文档索引、系统资产、代码仓库元数据、备份介质 | 资产台账扩展、资料索引 | 需配置 | 采用 `FA`/`EA-*` 分类口径;账号资产卡暂缓,不保存密码/Secret |
|
||||
| 员工制度民主程序、发布、宣贯、签收、未签收提醒和导出证据 | 公告/制度签收、员工回执、后台汇总 | 已支持 | 适合作为制度发布 V1;不等同电子签章或合同签署 |
|
||||
| 入职:合同、保密/IP、制度签收、设备领用、权限开通 | 员工、人事资料、公告签收、资产、权限 | 需开发 | 当前可分散留痕;完整入职清单/权限申请闭环建议后续开发 |
|
||||
| 离职:工作交接、资产归还、权限回收、财务核对、保密义务 | 员工状态、资产、审计、权限 | 需开发 | 建议建立离职交接任务清单和权限回收记录;OALAUNCH1 不强塞 |
|
||||
| 请假、考勤、加班、异常考勤说明 | 请假、移动审批、考勤/企微边界 | 需配置 | 企微仍是考勤主系统边界;OA 保留请假/审批和必要摘要 |
|
||||
| 信息安全:最小权限、岗位授权、临时权限、定期复核、离职回收 | RBAC、权限直连审计、系统设置、审计日志 | 部分已支持 | 当前支持系统内权限与审计;跨系统权限申请/复核/回收需开发 |
|
||||
| 凭据边界:密码、token、Secret、私钥、完整连接串不得进入 OA | 安全边界、配置规范、敏感扫描 | 已支持 | 继续禁止 OA/文档/聊天/仓库保存凭据;只登记负责人和回收要求 |
|
||||
| 资料分级、外发审批、借阅复制、资料保管期限、销毁记录 | 档案/资料索引、审计、附件脱敏边界 | 需开发 | 当前只适合登记摘要、编号、负责人、状态、hash 或受控外部编号 |
|
||||
| 合同会审、用印、合同台账、履约节点、归档 | 合同台账、附件摘要、项目/付款联动 | 需开发 | 已有合同台账基础,但合同会审/用印/履约节点闭环需单独任务 |
|
||||
| 项目验收、开票、回款、应收预警、归档 | 项目、合同/财务/AP/档案联动 | 需开发 | 项目资料有基础入口;回款和应收预警不进入本次启用硬门禁 |
|
||||
| 差旅标准、招待费标准、借款核销期限 | 费用标准、报销规则、差旅模块 | 暂缓 | 标准需管理层确认;差旅权限当前冻结,真实启用前不作为主路径 |
|
||||
| 银行流水原件导入、真实付款、银行接口、ERP 写入 | 付款批次/AP 导出/集成边界 | 暂缓 | 不在 OALAUNCH1 中启用;保持线下付款和只读/导出边界 |
|
||||
|
||||
## Go/No-Go Implications
|
||||
|
||||
- OALAUNCH1 可以先启用“报销/审批/付款批次/AP 导出/制度签收/权限审计/基础采购和资产台账”的轻量 OA 闭环。
|
||||
- 上线前必须配置或确认:审批角色、费用标准、法人主体、成本中心、报销类型、制度签收范围、管理员权限、通知策略。
|
||||
- 不应在正式启用前强行加入:合同会审用印闭环、供应商生命周期、入离职全流程、跨系统权限工单、银行流水导入、真实付款接口、预算硬控、差旅完整启用。
|
||||
|
||||
## Suggested Follow-up Tasks
|
||||
|
||||
1. 制度参数配置任务:把“待确认参数清单”转成 OA 配置项和默认试运行口径。
|
||||
2. 入离职/权限回收任务:设计员工入职、离职交接、资产归还、权限回收的轻量流程。
|
||||
3. 合同/用印/档案任务:基于合同台账扩展会审、用印、履约节点和归档证据。
|
||||
4. 供应商评价任务:扩展供应商准入、评价、黑名单和单一来源留痕。
|
||||
+95
@@ -0,0 +1,95 @@
|
||||
# Day 7 Go/No-Go 证据框架
|
||||
|
||||
## Purpose
|
||||
|
||||
用于 OALAUNCH1 Day 7 最终启用判断。本文不宣布正式启用完成,只定义 Day 7 前必须看哪些证据、如何判定 Go / Conditional Go / No-Go,以及当前截至 2026-05-28 的缺口。
|
||||
|
||||
## Decision Options
|
||||
|
||||
| 结论 | 口径 | 后续动作 |
|
||||
| --- | --- | --- |
|
||||
| `GO` | 必需证据齐全,P0/P1 阻断为 0,冻结项未误开,真实业务主路径可解释通过 | 进入小团队正式启用,保留首周运营巡检 |
|
||||
| `CONDITIONAL_GO` | 核心主路径可用,但存在可接受 finding 或低频页面体验问题 | 指定 owner、处理日期和接受理由,进入正式启用但保留问题池 |
|
||||
| `NO_GO` | 登录、提交、审批、付款、权限、附件、OCR、审计、移动/企微入口任一核心阻断不可解释 | 暂停正式启用,拆最小修复任务后复检 |
|
||||
|
||||
## Evidence Matrix
|
||||
|
||||
| 证据域 | 必需证据 | 当前状态 | 证据来源 | Day 7 缺口/动作 |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| 7 天每日只读巡检 | Day 1-Day 7 每日 `PASS_OA_REAL_USE_DAILY_READY` 或可解释 finding | Day 1-Day 3 已 PASS,findingCount=0 | `.trellis/tasks/05-26-oa-seven-day-trial-live-ops/research/day1-oa-real-use-daily/summary.json`、`day2-oa-real-use-daily/summary.json`、`day3-oa-real-use-daily/summary.json` | Day 4-Day 7 按 OAOPS1 继续跑;finding 必须当天归类 |
|
||||
| 公网健康与登录 | `/ready`、live smoke 环境、角色只读 smoke、认证只读探针通过 | Day 1-Day 3 已覆盖;Wave4 部署后公网巡检 PASS | OAOPS1 日报、`postdeploy-20260527-wave4-public/summary.json` | Day 7 复跑最终 readiness;登录页体验问题不得复发 |
|
||||
| 功能开关与冻结项 | `payment_batch_v1=force_on`,`erp_sync=force_off`,图片 OCR/真实支付/ERP/预算硬控/复杂 BPM 等未误开 | Day 1-Day 3 已 PASS;Wave4 后 PASS | OAOPS1 `live-feature-flags.step.json` | Day 7 再确认;任何冻结项误开即 No-Go |
|
||||
| 报销/PDF OCR/发票 | 至少 1 条真实报销 PDF OCR -> 审批 -> 付款批次 -> 银行回单 -> 已付款 -> AP 导出 | 自动化 readiness 已通过;真实业务人工闭环需要现场证据 | OAOPS1 manual gates、现场人工问题登记 | 需现场给出脱敏业务编号/状态,不保存票据原件、金额、完整账号 |
|
||||
| 审批中心 | 审批人能从待办进入详情,审批/退回动作符合权限和状态机 | 自动化与页面整改已有历史证据;真实试运行中需继续观察 | 既有回归、OAOPS1 人工反馈 | Day 7 汇总审批阻断数、退回/补材料是否可解释 |
|
||||
| 财务/付款/AP/票据池 | 财务复核、付款批次、回单附件、已付款标记、AP 导出、票据抽查可用 | Wave4 财务页部署后只读巡检 PASS | `postdeploy-20260527-wave4-public/summary.md` | 仍需真实业务人工闭环证据;真实付款只能线下人工执行 |
|
||||
| 采购/费用/项目/合同 | 至少 1 条采购/费用审批并关联项目或合同;合同台账含归档位置和权限检查 | 自动化/历史证据存在,真实试运行仍需人工样本 | docs/runbook、OAOPS1 manual gates | Day 7 收集脱敏样本状态和权限检查结论 |
|
||||
| 通知与企业微信入口 | 站内通知、移动入口、企业微信入口/渲染矩阵通过;消息/deeplink 无阻断 | Day 1-Day 3 入口矩阵 PASS;Wave4 后 PASS | OAOPS1 `mobile-entry-matrix`、`wecom-rendering-matrix`、`wecom-entry` | 真机人工反馈若有阻断必须登记;扫码登录仍属调研项,不进 Day 7 硬门禁 |
|
||||
| PC 页面一致性 | A/B 类高频页无明显割裂、冗余、操作复杂或布局阻碍 | Wave2-Wave4 已做过多轮;仍需最终一致性复查 | 当前任务后续 PC 复查结果 | 只修高优先级问题;不做大规模重设计 |
|
||||
| 制度与 OA 对应 | 关键公司制度要求能映射到 OA 功能、配置、流程或后续缺口 | 已完成制度签收轻量回执;完整映射待做 | 当前任务后续制度/OA 映射 | 输出脱敏映射清单,不搬运制度敏感原文 |
|
||||
| 安全与隐私 | 报告无 secret、token、完整账号、真实票据/合同/银行资料、完整本地路径或 raw payload | Day 1-Day 3 报告隐私扫描 PASS;Wave4 后 PASS | OAOPS1 `report-privacy-smoke.step.json` | Day 7 最终报告继续跑隐私扫描 |
|
||||
| 自动化业务补测 | Go/No-Go 相关后端/前端主路径有可跑脚本或明确 SKIP 原因 | 待当前任务盘点和补齐 | 当前任务后续 `business-test-gap-inventory` | 优先补报销、审批、财务/AP、通知/权限主路径 |
|
||||
|
||||
## Current Snapshot
|
||||
|
||||
- Day 1:2026-05-26,只读巡检 `PASS_OA_REAL_USE_DAILY_READY`,findingCount=0。
|
||||
- Day 2:2026-05-27,只读巡检 `PASS_OA_REAL_USE_DAILY_READY`,findingCount=0;首次企业微信渲染测试 mock 缺口已修复并复跑通过。
|
||||
- Day 3:2026-05-28,只读巡检 `PASS_OA_REAL_USE_DAILY_READY`,findingCount=0。
|
||||
- Wave4 财务/管理页部署后公网只读巡检:`PASS_OA_REAL_USE_DAILY_READY`,findingCount=0。
|
||||
- 仍不能提前宣布最终启用完成,因为 Day 4-Day 7、真实业务人工闭环、制度/OA 映射、自动化补测和最终 Go/No-Go 汇总尚未完成。
|
||||
|
||||
## Blocker Rules
|
||||
|
||||
出现以下情况,Day 7 结论直接进入 `NO_GO` 或至少 `CONDITIONAL_GO`,不得写成无条件 `GO`:
|
||||
|
||||
- 无法登录、登录页自动刷新导致输入丢失、验证码/找回密码主路径不可用。
|
||||
- 普通员工无法提交核心单据,审批人无法处理待办,财务无法完成付款/AP 主路径。
|
||||
- 权限越权、未授权用户能看到敏感数据,或审计留痕缺失。
|
||||
- 真实 PDF OCR 大面积失败且不可解释;图片 OCR 被误当成已开放能力。
|
||||
- `payment_batch_v1` 意外关闭、`erp_sync` 意外开启,或冻结项被误开启。
|
||||
- 企业微信/移动入口无法进入 OA 目标页,且没有可接受的人工绕行。
|
||||
- 证据报告泄露密码、token、Secret、完整账号、票据原件、合同正文、银行资料、完整本地路径或 raw payload。
|
||||
|
||||
## Day 7 Report Skeleton
|
||||
|
||||
```markdown
|
||||
# OALAUNCH1 Day 7 Go/No-Go 汇总
|
||||
|
||||
## Decision
|
||||
|
||||
- 结论:GO / CONDITIONAL_GO / NO_GO
|
||||
- 日期:2026-06-01
|
||||
- 决策人:
|
||||
- 接受的 finding:
|
||||
- 必须整改项:
|
||||
|
||||
## Evidence Summary
|
||||
|
||||
| 证据域 | 结论 | 证据引用 | 备注 |
|
||||
| --- | --- | --- | --- |
|
||||
| 7 天每日只读巡检 | | | |
|
||||
| 真实报销/付款/AP 闭环 | | | |
|
||||
| 审批/通知/移动/企微入口 | | | |
|
||||
| 采购/合同/项目 | | | |
|
||||
| PC 页面一致性 | | | |
|
||||
| 制度/OA 映射 | | | |
|
||||
| 自动化补测 | | | |
|
||||
| 安全隐私 | | | |
|
||||
|
||||
## Open Findings
|
||||
|
||||
| 等级 | 问题 | 影响 | owner | 处理日期 | 接受理由 |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
|
||||
## Final Boundaries
|
||||
|
||||
- 真实支付接口、ERP 写入、银行流水导入、图片 OCR、复杂 BPM、预算硬控、RuleOps 继续冻结。
|
||||
- 企业微信扫码登录和更深镜像若未另行批准,不作为本次正式启用硬门禁。
|
||||
```
|
||||
|
||||
## Next Actions
|
||||
|
||||
1. 继续 OAOPS1 Day 4-Day 7 每日只读巡检。
|
||||
2. 盘点并补齐自动化业务测试缺口。
|
||||
3. 形成制度/OA 脱敏映射清单。
|
||||
4. 使用 `frontend-design` 做 PC 页面最终一致性复查并修高优先级问题。
|
||||
5. 输出发票验真 API、企业微信扫码登录/更深镜像调研建议。
|
||||
@@ -0,0 +1,95 @@
|
||||
# 项目级流程覆盖扫描
|
||||
|
||||
- 生成时间:2026-05-28T06:41:16.738Z
|
||||
- 前端路由数:69
|
||||
- 业务域数:5
|
||||
- 后端 route 文件数:68
|
||||
- P0 含缺口路由数:0
|
||||
|
||||
## 缺口汇总
|
||||
|
||||
- none: 0
|
||||
|
||||
## 业务域
|
||||
|
||||
| Domain | Tier | Routes | Gaps | Next Action |
|
||||
| --- | --- | ---: | ---: | --- |
|
||||
| 认证与企业微信入口 | P0 | 18 | 0 | R7E 前跑公网匿名、带凭据 live readiness 和角色只读核验。 |
|
||||
| 报销与票据 | P0 | 5 | 0 | R7E 前复跑核心业务流和公网移动矩阵。 |
|
||||
| 请假与采购 | P0 | 4 | 0 | R7E 前复跑请假/采购列表、详情和返回语义。 |
|
||||
| 通知与审批效率 | P0 | 1 | 0 | R7E 前复跑通知直达和审批/进度矩阵。 |
|
||||
| 系统治理和财务 | P1 | 1 | 0 | R7 前确认人员、窗口和回滚联系人。 |
|
||||
|
||||
## 路由覆盖
|
||||
|
||||
| Route | Domain | Tier | PC | Mobile | WeCom | Visual | Flow | Gaps |
|
||||
| --- | --- | --- | --- | --- | --- | --- | --- | --- |
|
||||
| / | 未映射 | unmapped | Y | Y | Y | Y | Y | - |
|
||||
| /announcements | 未映射 | unmapped | Y | Y | Y | Y | Y | - |
|
||||
| /ap-operations | 报销与票据 | P0 | Y | Y | Y | Y | Y | - |
|
||||
| /assets | 未映射 | unmapped | Y | Y | Y | Y | Y | - |
|
||||
| /attendance | 未映射 | unmapped | Y | Y | Y | Y | Y | - |
|
||||
| /audit-logs | 系统治理和财务 | P1 | Y | Y | Y | Y | Y | - |
|
||||
| /budgets | 未映射 | unmapped | N | Y | Y | Y | Y | - |
|
||||
| /change-password | 未映射 | unmapped | Y | N | Y | N | Y | - |
|
||||
| /contracts-registry | 未映射 | unmapped | Y | Y | Y | Y | Y | - |
|
||||
| /dashboard | 未映射 | unmapped | Y | Y | Y | Y | Y | - |
|
||||
| /delegations | 未映射 | unmapped | Y | N | Y | Y | Y | - |
|
||||
| /forgot-password | 未映射 | unmapped | N | Y | Y | N | Y | - |
|
||||
| /inventory-checks | 未映射 | unmapped | N | Y | Y | Y | Y | - |
|
||||
| /invoice-pool | 未映射 | unmapped | Y | Y | Y | Y | Y | - |
|
||||
| /leave-requests | 请假与采购 | P0 | Y | Y | Y | Y | Y | - |
|
||||
| /login | 认证与企业微信入口 | P0 | Y | Y | Y | Y | Y | - |
|
||||
| /mobile | 认证与企业微信入口 | P0 | N | Y | Y | Y | Y | - |
|
||||
| /mobile/approvals | 认证与企业微信入口 | P0 | N | Y | Y | Y | Y | - |
|
||||
| /mobile/approvals/:taskId | 认证与企业微信入口 | P0 | N | Y | Y | Y | Y | - |
|
||||
| /mobile/assets/scan | 认证与企业微信入口 | P0 | N | Y | Y | Y | Y | - |
|
||||
| /mobile/capture | 认证与企业微信入口 | P0 | N | Y | Y | Y | Y | - |
|
||||
| /mobile/leave | 认证与企业微信入口 | P0 | N | Y | Y | Y | Y | - |
|
||||
| /mobile/leave/:leaveRequestId | 认证与企业微信入口 | P0 | N | Y | Y | Y | Y | - |
|
||||
| /mobile/me | 认证与企业微信入口 | P0 | N | Y | Y | Y | Y | - |
|
||||
| /mobile/notifications | 认证与企业微信入口 | P0 | N | Y | Y | Y | Y | - |
|
||||
| /mobile/profile | 认证与企业微信入口 | P0 | N | Y | Y | Y | Y | - |
|
||||
| /mobile/purchase-requests | 认证与企业微信入口 | P0 | N | Y | Y | Y | Y | - |
|
||||
| /mobile/purchase-requests/:purchaseRequestId | 认证与企业微信入口 | P0 | N | Y | Y | Y | Y | - |
|
||||
| /mobile/reimbursements | 认证与企业微信入口 | P0 | N | Y | Y | Y | Y | - |
|
||||
| /mobile/reimbursements/:reimbursementId | 认证与企业微信入口 | P0 | N | Y | Y | Y | Y | - |
|
||||
| /mobile/wecom-approval-archive | 认证与企业微信入口 | P0 | N | Y | Y | Y | Y | - |
|
||||
| /notifications | 通知与审批效率 | P0 | Y | Y | Y | Y | Y | - |
|
||||
| /organization | 未映射 | unmapped | N | Y | Y | Y | Y | - |
|
||||
| /payment-batches | 未映射 | unmapped | Y | Y | Y | Y | Y | - |
|
||||
| /payroll | 未映射 | unmapped | N | Y | Y | Y | Y | - |
|
||||
| /people | 未映射 | unmapped | Y | Y | Y | Y | Y | - |
|
||||
| /people/:employeeId | 未映射 | unmapped | Y | Y | Y | Y | Y | - |
|
||||
| /people/stats | 未映射 | unmapped | Y | Y | Y | Y | Y | - |
|
||||
| /performance | 未映射 | unmapped | N | Y | Y | Y | Y | - |
|
||||
| /portal | 认证与企业微信入口 | P0 | Y | Y | Y | Y | Y | - |
|
||||
| /projects | 未映射 | unmapped | Y | Y | Y | Y | Y | - |
|
||||
| /projects/:projectId | 未映射 | unmapped | Y | Y | Y | Y | Y | - |
|
||||
| /purchase-requests | 请假与采购 | P0 | Y | Y | Y | Y | Y | - |
|
||||
| /reimbursements | 报销与票据 | P0 | Y | Y | Y | Y | Y | - |
|
||||
| /reimbursements/:reimbursementId | 报销与票据 | P0 | Y | Y | Y | Y | Y | - |
|
||||
| /reimbursements/:reimbursementId/print | 报销与票据 | P0 | Y | Y | Y | Y | Y | - |
|
||||
| /reimbursements/dashboard | 报销与票据 | P0 | Y | Y | Y | Y | Y | - |
|
||||
| /settings/profile | 认证与企业微信入口 | P0 | Y | Y | Y | Y | Y | - |
|
||||
| /system/announcements | 未映射 | unmapped | Y | Y | Y | Y | Y | - |
|
||||
| /system/approval-rules | 未映射 | unmapped | Y | Y | Y | Y | Y | - |
|
||||
| /system/cutover | 未映射 | unmapped | Y | Y | Y | Y | Y | - |
|
||||
| /system/departments | 未映射 | unmapped | Y | Y | Y | Y | Y | - |
|
||||
| /system/expense-standards | 未映射 | unmapped | Y | Y | Y | Y | Y | - |
|
||||
| /system/feature-flags | 未映射 | unmapped | Y | Y | Y | Y | Y | - |
|
||||
| /system/integrations/erp | 未映射 | unmapped | Y | Y | Y | Y | Y | - |
|
||||
| /system/master-data | 未映射 | unmapped | Y | Y | Y | Y | Y | - |
|
||||
| /system/notification-channels | 未映射 | unmapped | Y | Y | Y | Y | Y | - |
|
||||
| /system/reimbursement-templates | 未映射 | unmapped | Y | Y | Y | Y | Y | - |
|
||||
| /system/settings | 未映射 | unmapped | Y | Y | Y | Y | Y | - |
|
||||
| /system/users | 未映射 | unmapped | Y | Y | Y | Y | Y | - |
|
||||
| /system/workflow-definitions | 未映射 | unmapped | Y | Y | Y | Y | Y | - |
|
||||
| /system/workspace | 未映射 | unmapped | Y | Y | Y | Y | Y | - |
|
||||
| /team | 未映射 | unmapped | Y | Y | Y | Y | Y | - |
|
||||
| /todos | 未映射 | unmapped | Y | Y | Y | Y | Y | - |
|
||||
| /travel-requests | 未映射 | unmapped | Y | Y | Y | Y | Y | - |
|
||||
| /wecom-approval-archive | 未映射 | unmapped | N | Y | Y | Y | Y | - |
|
||||
| /weekly-reports | 未映射 | unmapped | Y | Y | Y | Y | Y | - |
|
||||
| /workflow/tasks | 请假与采购 | P0 | Y | Y | Y | Y | Y | - |
|
||||
| /workflow/tasks/:taskId | 请假与采购 | P0 | Y | Y | Y | Y | Y | - |
|
||||
+105
@@ -0,0 +1,105 @@
|
||||
# 发票验真 API 与企业微信扫码登录调研结论
|
||||
|
||||
调研日期:2026-05-28
|
||||
|
||||
## Executive Decision
|
||||
|
||||
- **发票验真 API:Pilot First,暂不作为 OALAUNCH1 正式启用前置条件。**
|
||||
- **企业微信 PC 扫码登录:Pause for OALAUNCH1,后续单独做 `wecom_pc_qr_login_v1`。**
|
||||
- **企业微信更深镜像:Pause,继续沿用“企微主办 HR/考勤,OA 主办报销/财务/采购/合同/项目”的边界。**
|
||||
|
||||
理由:
|
||||
|
||||
1. 当前系统已经有发票验真的服务边界、feature flag、mock provider 和 `tax` 占位 provider;业务上仍以 PDF OCR、查重和财务人工复核为正式启用前的稳态控制。
|
||||
2. 付费验真 API 的关键不只是价格,还包括数电票覆盖、发票字段最小化、供应商数据处理责任、失败/限流兜底和小票量成本。没有供应商正式报价前,不应直接给采购级结论。
|
||||
3. 当前登录已经具备账号密码、邮箱验证码、企业微信 WebView/OAuth 入口和绑定链路。PC 扫码登录能改善桌面免密体验,但不是 Day 7 Go/No-Go 阻断项。
|
||||
4. 更深企业微信镜像会碰到真实员工、可信 IP、回调、审批/打卡历史和 API 写入边界,风险明显高于本轮最终启用前准备。
|
||||
|
||||
## Current OA Fit
|
||||
|
||||
现有代码状态:
|
||||
|
||||
- `server/src/services/verification/index.js` 已按 provider 分派,支持 `mock` 和 `tax` 名称。
|
||||
- `server/src/services/verification/tax.js` 当前只返回 `tax_provider_not_configured`,说明真实税务/供应商接入尚未启用。
|
||||
- `server/src/routes/invoicePool/verification.js` 已有触发、查询、重试和权限入口。
|
||||
- `docs/报销发票附件规则.md` 明确“首批发票合规以 OCR、查重和财务人工复核为主,自动验真作为后续评估项”。
|
||||
- `server/src/routes/wecomAuth.js` 已有企业微信 OAuth WebView 登录/绑定、state、回调、绑定冲突处理和 session 创建。
|
||||
|
||||
结论:本轮不需要重做架构;后续只要新增一个真实 provider adapter,并沿用现有 feature flag、审计和 retry 机制。
|
||||
|
||||
## 发票验真 API 方案比较
|
||||
|
||||
| 方案 | 适配度 | 成本判断 | 风险 | 建议 |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| 官方全国增值税发票查验平台人工查验 | 适合低频人工复核 | 现金成本低 | 不应做爬虫自动化;验证码、频控、合规和稳定性风险高 | 保留为财务人工兜底 |
|
||||
| API 市场类供应商 | 最适合小团队先试点 | 通常可小额度/按量试用,需控制台或报价确认 | 供应商质量不一;要确认数电票、专票/普票、失败码、发票字段最小化 | 作为第一试点方向 |
|
||||
| 云厂商 OCR/票据服务 | 工程集成和 SLA 相对稳 | 可能有免费额度/按量,但“识别”和“验真”能力需逐项确认 | 有的产品偏 OCR,不一定等同税务验真 | 作为备选,优先确认是否支持验真 |
|
||||
| 百望/航信等发票服务商 | 发票业务专业度较高 | 可能偏企业套件或合同报价,小团队成本未必最优 | 接入和商务周期较长 | 后续规模化或强合规时再评估 |
|
||||
|
||||
近期采购判断:
|
||||
|
||||
- **不要在 OALAUNCH1 前采购正式套餐。**
|
||||
- 若要开始试点,先拿 **100-1000 次小额度测试包/试用额度**,只用授权脱敏样票或低风险真实票据做验证。
|
||||
- 试点成功标准:
|
||||
- 支持当前 PDF OCR 已识别字段可直接入参;
|
||||
- 覆盖数电票、增值税专票/普票等公司常见票种;
|
||||
- 返回结果能稳定归一为 `passed / failed / error`;
|
||||
- 失败码能区分字段不全、查无、限流、供应商错误;
|
||||
- 日志和报告不保存完整票面、完整税号、完整原始响应或敏感附件;
|
||||
- 单次成本在当前票量下可接受,并允许随时停用 provider 回到人工复核。
|
||||
|
||||
建议的落地顺序:
|
||||
|
||||
1. 先保持当前 `mock` provider 和人工复核为生产口径。
|
||||
2. 新建独立 Trellis 任务:`invoice_verification_provider_pilot_v1`。
|
||||
3. 在私有环境配置供应商 base URL/key,不写入仓库、Trellis 或日志。
|
||||
4. 新增 provider adapter,例如 `vendor_http`,只传必要字段:发票代码/号码、开票日期、金额、校验码后几位等供应商要求的最小集合。
|
||||
5. 将供应商原始响应脱敏后映射到 OA 统一结果,不把 raw payload 直接落库或展示。
|
||||
6. 用授权样票跑后端单测、job retry、权限、前端状态展示和公网只读回归。
|
||||
|
||||
## 企业微信 PC 扫码登录
|
||||
|
||||
现状:
|
||||
|
||||
- 现在已有企业微信 WebView OAuth 入口,适合员工在手机企业微信工作台内进入 OA。
|
||||
- 普通桌面浏览器点击“企业微信登录”如果仍走 WebView OAuth,用户会困惑,因为该体验天然依赖微信/企业微信环境。
|
||||
- 企业微信官方另有“构造扫码登录链接”能力,适合 PC 浏览器展示二维码后由员工企业微信扫码确认。
|
||||
|
||||
近期判断:
|
||||
|
||||
- **不纳入 OALAUNCH1 前置开发。**
|
||||
- 当前更急的是确保真实试运行、业务流、权限、备份恢复、财务闭环和页面一致性。
|
||||
- PC 扫码登录是体验增强,不是正式启用阻断项;邮箱验证码登录已经能覆盖忘记密码/免密码场景。
|
||||
|
||||
后续独立任务范围:
|
||||
|
||||
1. 新增 PC QR 登录入口,普通浏览器下展示“企业微信扫码登录”;企业微信 WebView 内仍使用“一键进入”。
|
||||
2. 后端新增 QR login mode,复用现有 `state`、回调校验、绑定冲突、session 创建和 `returnTo` 白名单。
|
||||
3. 企业微信后台配置可信域名/回调域名/应用可见范围,并用真机扫码验证。
|
||||
4. 未绑定用户扫码后不自动创建真实员工,只引导先账号登录并绑定。
|
||||
5. E2E 覆盖按钮显示、回调错误态、未绑定提示;真实扫码只作为人工/公网验收证据。
|
||||
|
||||
## 企业微信更深镜像
|
||||
|
||||
保持后置。
|
||||
|
||||
当前边界仍应是:
|
||||
|
||||
- 企业微信主办:通讯录、人事助手、打卡、请假、补卡、外出、加班等 HR/考勤日常动作。
|
||||
- OA 主办:报销、付款批次、AP、票据池、采购/费用、合同、项目、敏感附件和审计。
|
||||
- 企业微信到 OA:只做脱敏消息、移动入口、OAuth/绑定和必要历史留存。
|
||||
|
||||
不建议在 OALAUNCH1 前推进更深镜像,因为它会引入真实员工同步、审批/打卡补偿、可信 IP、回调、历史一致性和应急接管等多项门禁。
|
||||
|
||||
## Source Notes
|
||||
|
||||
- 国家税务总局全国增值税发票查验平台:`https://inv-veri.chinatax.gov.cn/`
|
||||
- 企业微信“构造扫码登录链接”:`https://developer.work.weixin.qq.com/document/path/91019`
|
||||
- 企业微信“构造网页授权链接”:`https://developer.work.weixin.qq.com/document/path/91022`
|
||||
- 企业微信“获取访问用户身份”:`https://developer.work.weixin.qq.com/document/path/91023`
|
||||
- 腾讯云文字识别 OCR 产品页:`https://cloud.tencent.com/product/ocr`
|
||||
- 百度智能云票据文字识别产品页:`https://cloud.baidu.com/product/ocr_receipts`
|
||||
- 阿里云云市场发票验真检索入口:`https://market.aliyun.com/search?keywords=%E5%8F%91%E7%A5%A8%E9%AA%8C%E7%9C%9F`
|
||||
- 百望股份官网:`https://www.baiwang.com/`
|
||||
|
||||
以上公开网页用于确认能力方向和集成边界;价格、票种覆盖和 SLA 仍必须以供应商控制台、合同报价或试用开通结果为准。
|
||||
+55
@@ -0,0 +1,55 @@
|
||||
# PC 页面一致性复查
|
||||
|
||||
## Method
|
||||
|
||||
设计判断使用 `frontend-design`,但按 OA 工具型系统约束落地为安静、紧凑、可扫描、低干扰的运营界面,不采用营销式 hero、装饰性大图或强视觉噪声。
|
||||
|
||||
本轮复查范围覆盖:
|
||||
|
||||
- Wave2:登录页、工作台、报销列表、审批中心。
|
||||
- Wave3:报销详情、审批详情、通知中心。
|
||||
- Wave4:付款批次、AP、票据池、用户、主数据、通知渠道、系统设置、功能开关、流程定义、审计日志。
|
||||
|
||||
## Verification
|
||||
|
||||
已运行:
|
||||
|
||||
```bash
|
||||
npx playwright test tests/e2e/pc-core-workflow-visual-wave2.spec.ts --workers=1 --reporter=list
|
||||
npx playwright test tests/e2e/pc-detail-mobile-visual-wave3.spec.ts --workers=1 --reporter=list
|
||||
npx playwright test tests/e2e/pc-finance-admin-visual-wave4.spec.ts --workers=1 --reporter=list
|
||||
```
|
||||
|
||||
结果:
|
||||
|
||||
| 验证项 | 结果 |
|
||||
| --- | --- |
|
||||
| PC 核心工作流 Wave2 | PASS,1 passed |
|
||||
| PC 详情/通知 Wave3 | PASS,2 passed |
|
||||
| PC 财务/管理 Wave4 | PASS,3 passed |
|
||||
|
||||
截图证据位于本地 Playwright 输出目录,未写入敏感业务数据。
|
||||
|
||||
## Findings
|
||||
|
||||
### No P0/P1 blocker
|
||||
|
||||
- 页面整体已统一为左侧导航 + 顶部栏 + 内容工作区。
|
||||
- 高频页面有明确状态摘要、筛选/命令区、列表/详情区。
|
||||
- 财务/管理页已复用 `finance-*` 和 `admin-*` 工作区样式,视觉断层明显减少。
|
||||
- 报销、审批、付款批次、AP、票据池已能支撑重复操作,不像 landing page 或宣传页。
|
||||
|
||||
### Remaining P2 improvements
|
||||
|
||||
| 类型 | 观察 | 建议 |
|
||||
| --- | --- | --- |
|
||||
| 信息密度 | 部分页面顶部同时出现面包屑、标题、问候语和说明,内容重复 | 后续统一为“模块名 + 一句任务型说明”,避免每页都显示重复问候 |
|
||||
| 表单/列表比例 | 付款批次这类页面左侧创建表单较高,右侧工作区信息更关键 | 后续可把创建表单做成折叠/抽屉或“新建模式”,默认突出待处理批次 |
|
||||
| 票据池空白 | 票据详情和绑定区在数据少时竖向占用偏大 | 后续把辅助核验、详情、绑定操作合并为更紧凑的右侧详情面板 |
|
||||
| 管理页层级 | C 类管理页仍偏“表格 + 卡片”,但已可用 | 不在 OALAUNCH1 前大改;保留为后续管理台重构任务 |
|
||||
|
||||
## Decision
|
||||
|
||||
- 本轮 PC 一致性没有发现阻断真实试运行或 Go/No-Go 的视觉/交互问题。
|
||||
- OALAUNCH1 前不建议继续扩大 PC 重设计范围;保留 P2 改进给试运行反馈后排期。
|
||||
- 若下一轮继续前端优化,优先级应是:付款批次默认工作区 -> 票据池详情面板 -> C 类管理页密度统一。
|
||||
@@ -0,0 +1,35 @@
|
||||
{
|
||||
"id": "oalaunch1-parallel-closeout",
|
||||
"name": "oalaunch1-parallel-closeout",
|
||||
"title": "OALAUNCH1 最终启用前并行收口包",
|
||||
"description": "并行收口 OALAUNCH1 最终启用前的 Go/No-Go 证据、P0 自动化业务流补测、制度/OA 映射、PC 一致性和调研决策项。",
|
||||
"status": "in_progress",
|
||||
"dev_type": null,
|
||||
"scope": "oalaunch1-readiness-parallel-closeout",
|
||||
"package": null,
|
||||
"priority": "P2",
|
||||
"creator": "shunli",
|
||||
"assignee": "shunli",
|
||||
"createdAt": "2026-05-28",
|
||||
"completedAt": null,
|
||||
"branch": null,
|
||||
"base_branch": "main",
|
||||
"worktree_path": null,
|
||||
"commit": null,
|
||||
"pr_url": null,
|
||||
"subtasks": [],
|
||||
"children": [],
|
||||
"parent": null,
|
||||
"relatedFiles": [
|
||||
"client/tests/e2e/mobile-approvals-offline.spec.ts",
|
||||
"client/tests/e2e/permission-direct-access.spec.ts",
|
||||
"client/tests/e2e/r89-mobile-login-navigation.spec.ts",
|
||||
"client/tests/e2e/r102-reimbursement-main-flow.spec.ts",
|
||||
"client/tests/e2e/reimbursement-payment-batch-flow.spec.ts",
|
||||
"client/src/pages/LoginPage.tsx",
|
||||
"client/src/pages/ForgotPasswordPage.tsx",
|
||||
"client/src/pages/PaymentBatchesPage.tsx"
|
||||
],
|
||||
"notes": "",
|
||||
"meta": {}
|
||||
}
|
||||
在新工单中引用
屏蔽一个用户