DCL7 精简文档并统一中文口径
这个提交包含在:
@@ -43,12 +43,14 @@ Skill 不复制长文档。详细规则放在 `docs/`,Skill 通过 references
|
||||
|
||||
### 4. 文档保存事实源
|
||||
|
||||
项目事实源应随仓库版本管理:
|
||||
项目事实源应随仓库版本管理,DCL7 之后采用中文优先和物理精简:
|
||||
|
||||
- 设计事实源:`docs/product-design-rules.md`
|
||||
- 报销发票规则:`docs/reimbursement-invoice-rules.md`
|
||||
- 试运行 Runbook:`docs/trialrun-runbook.md`
|
||||
- Agent 交付实践:`docs/agent-development-practices.md`
|
||||
- 文档入口:`docs/文档索引.md`
|
||||
- 文档状态矩阵:`docs/文档事实源状态矩阵.md`
|
||||
- 设计事实源:`docs/产品设计规则.md`
|
||||
- 报销发票规则:`docs/报销发票附件规则.md`
|
||||
- 试运行手册:`docs/试运行与自动化验证手册.md`
|
||||
- Agent 交付实践:`docs/Agent开发交付实践.md`
|
||||
|
||||
AGENTS.md 只放硬约束和入口,不复制长规则。
|
||||
|
||||
@@ -84,7 +86,7 @@ AGENTS.md 只放硬约束和入口,不复制长规则。
|
||||
|
||||
移动页治理必须收敛到同一套事实源和组件体系:
|
||||
|
||||
- 改移动页面前先读 `docs/product-design-rules.md`,确认是否属于底部一级 Tab、首页图标宫格、卡片列表、深层 Push 页、顶部返回、吸底主操作或安全区问题。
|
||||
- 改移动页面前先读 `docs/产品设计规则.md`,确认是否属于底部一级 Tab、首页图标宫格、卡片列表、深层 Push 页、顶部返回、吸底主操作或安全区问题。
|
||||
- 新移动页默认纳入统一响应式 token 和跨视口视觉矩阵,覆盖 320、360、375、390、393、414、430px;不得只按某一台手机打补丁。
|
||||
- 专用 `/mobile` 路由默认使用统一移动槽位、`mobile-card`、移动列表卡片和吸底操作;不得把桌面 `card-std p-4` 作为手机主容器,也不得为单个页面自造另一套间距、卡片或图标布局。
|
||||
- 角色差异采用“同框架、按角色裁剪内容和动作”:员工、审批人、财务、管理员、负责人看到不同入口和动作,但不创建互不一致的角色专属移动 UI。
|
||||
@@ -94,10 +96,12 @@ AGENTS.md 只放硬约束和入口,不复制长规则。
|
||||
|
||||
截至 R7P,RI6 报销票据体验、LP6 请假采购体验、ME6 自动化/部署收口、QG6 QA 治理以及 R7/OPS7/DOC7 草案材料均已完成;`ME6-3` 代表性企业微信真机抽查因设备不便继续待确认。后续默认进入等待门禁状态:不得关闭 `ME6-3`,不得把 QG6 或公网移动视觉矩阵当成真机替代,也不得从文档草案直接启动真实 R7。R7 真实执行必须保持 `R7E-*` 为 TODO,直到用户确认最终人员、角色、窗口、回滚联系人、问题登记负责人和每日收口节奏,并补足真机门禁或明确接受风险。
|
||||
|
||||
文档治理采用 DOCG7 后的索引归档策略:
|
||||
文档治理采用 DCL7 后的中文优先和物理精简策略:
|
||||
|
||||
- 先读 `docs/文档索引.md` 和 `docs/文档事实源状态矩阵.md` 判断文档用途。
|
||||
- 不删除、不移动历史证据,不回写旧 Issue CSV;用索引和顶部状态说明标注历史口径。
|
||||
- 当前事实源、操作手册和用户可读文档默认使用中文文件名;技术生态或脚本强引用的英文名可以保留,但必须在索引中说明。
|
||||
- 已确认不用的历史文档从当前树物理删除,不放 `docs/archive/`;需要时通过 git 历史恢复。
|
||||
- 不回写旧 Issue CSV 快照;旧 Issue 中的历史路径保留审计语义。
|
||||
- 历史矩阵、旧 runbook 或旧 trialrun 记录若与最新 Issue CSV、当前 PRD 或模块规约冲突,以最新 Issue CSV 和当前模块规约为准。
|
||||
- R7/OPS7/DOC7 草案不代表真实 R7 已启动;MIF7 TODO 不代表移动整改已完成。
|
||||
|
||||
@@ -155,7 +159,7 @@ agent 在声明 blocker 前,必须先查项目内已有资产:
|
||||
- 开发:按 Issue 实施后端、前端、脚本或文档变更,并执行对应验证。
|
||||
- 审查:默认先报风险、行为回归、权限泄漏、状态机问题和漏测项。
|
||||
- QA:用接口回归、Playwright、视觉截图、真机/公网 smoke 和人工步骤复核。
|
||||
- 设计师:对齐 `docs/product-design-rules.md`、公司官网视觉和国内 OA 操作习惯。
|
||||
- 设计师:对齐 `docs/产品设计规则.md`、公司官网视觉和国内 OA 操作习惯。
|
||||
- 用户代理:模拟普通员工、审批人、财务、管理员在 PC、手机、企业微信里的真实路径。
|
||||
|
||||
不需要用户显式写“请扮演某角色”。agent 应根据语义自动选择角色;若任务跨多个角色,先给执行顺序和交接物。
|
||||
-202
@@ -1,202 +0,0 @@
|
||||
# MVP 主线代码差距盘点
|
||||
|
||||
> Issue: `A1` in `issues/2026-05-09_20-57-19-mvp-mainline-dev-kickoff.csv`
|
||||
> 日期: 2026-05-09
|
||||
> 范围: 只读盘点,不改业务代码,不部署。
|
||||
|
||||
## 1. 盘点结论
|
||||
|
||||
首轮开发不应重写 OA。仓库内已经存在审批、报销、票据、企业微信、请假、采购、合同台账和项目轻管理的主要实现,下一步应按当前 PRD 做“主线收口”和“试运行门禁”,而不是新建一套系统。
|
||||
|
||||
当前可复用的主干如下:
|
||||
|
||||
| 主线 | 可复用实现 | 结论 |
|
||||
| --- | --- | --- |
|
||||
| 统一审批中心 | `workflow` 路由、`WorkflowDefinition/Instance/Task/History` 模型、PC/移动审批页、审批回归脚本 | 可作为 A2 底座,优先修入口、状态一致性、deeplink 和权限边界 |
|
||||
| 报销/发票/OCR | `reimbursements`、`invoicePool`、附件、OCR、查重、付款、导出、PC/移动报销页 | 可作为 A3 底座,重点修主流程体验和状态文案 |
|
||||
| 企业微信基础设施 | `wecomAuth`、身份绑定表、移动入口识别、通知 dispatcher、企业微信 webhook provider | 可作为 A4 底座,重点验证未绑定回退、停用阻断、通知脱敏和 deeplink |
|
||||
| 请假/考勤 | `leave`、请假余额/附件/审批/撤回、团队日历;另有极简考勤与团队状态 | A5 先收口请假,不扩成完整考勤;补卡/外出/加班需另拆或只做最小入口 |
|
||||
| 采购/费用 | `purchaseRequests`、明细、附件、审批、撤回、PO/合同号归档、采购回归 | A6 可做采购最小可用收口;费用申请可先复用报销/采购口径,不新造预算/ERP |
|
||||
| 合同归档 | `contractsRegistry`、合同编号唯一、项目关联、归档位置、审计 | A6 可做台账最小可用;正式合同审批和合同附件库不是首轮默认范围 |
|
||||
| 项目轻管理 | `projects`、成员、里程碑、任务、风险、交付、周报/报销/合同关联 | A6 可做项目页汇总收口,不做重型项目管理 |
|
||||
| 权限/导航 | `systemWorkspace`、导航可见性、前端路由守卫、角色权限 | A7 重点收紧普通员工主路径和 P2 备用模块 |
|
||||
| 回归门禁 | server 回归脚本、client E2E、QA smoke/live readiness 脚本 | A8 可复用现有门禁,缺真实配置时必须标 `SKIP` |
|
||||
|
||||
首轮默认不新增公共 API、不新增数据库表。若后续确认要实现补卡/外出/加班独立审批对象、合同正文附件库、正式合同审批、自动发票验真强依赖或预算占用,应另拆 Issue,并在 `Notes` 写明迁移和回滚路径。
|
||||
|
||||
## 2. 当前事实源
|
||||
|
||||
本次按以下当前事实源盘点:
|
||||
|
||||
| 文档 | 用途 |
|
||||
| --- | --- |
|
||||
| `docs/海音达OA-MVP需求规格说明书.md` | MVP 总纲、路线和验收 |
|
||||
| `docs/需求-统一审批中心规约.md` | 审批动作、状态机、权限和留痕总依据 |
|
||||
| `docs/需求-报销发票OCR规约.md` | 报销、发票、OCR、附件、付款和导出依据 |
|
||||
| `docs/需求-企业微信基础设施规约.md` | 企业微信入口、绑定、通知、deeplink 和打卡边界 |
|
||||
| `docs/需求-请假考勤修正规约.md` | 请假、补卡、外出、加班和考勤解释依据 |
|
||||
| `docs/需求-采购费用审批规约.md` | 采购/费用申请最小可用依据 |
|
||||
| `docs/需求-合同附件归档规约.md` | 合同台账、编号、归档位置和敏感边界依据 |
|
||||
| `docs/需求-项目轻管理规约.md` | 项目轻管理和业务关联依据 |
|
||||
|
||||
路线确认:
|
||||
|
||||
- `hyb-oa` 是唯一业务主系统和唯一审批中心。
|
||||
- 企业微信只做入口、身份、通知和打卡原始采集边界。
|
||||
- 企业微信原生审批、飞书、钉钉、小程序、复杂 BPM、完整 ERP、AI 和重型项目管理不进入首轮开发。
|
||||
|
||||
## 3. 后端与数据模型盘点
|
||||
|
||||
### 3.1 统一审批中心
|
||||
|
||||
可复用:
|
||||
|
||||
- `server/src/routes/workflow.js` 已提供待办列表、待办详情、通过、驳回、退回、转审、批量通过、批量驳回。
|
||||
- Prisma 已有 `WorkflowDefinition`、`WorkflowInstance`、`WorkflowTask`、`WorkflowHistory`、`ApprovalRule`、`ApprovalTransfer`。
|
||||
- 待办详情已能关联报销、请假、采购、差旅对象。
|
||||
- workflow 动作已在业务状态、历史记录、通知副作用之间做事务处理和后处理。
|
||||
|
||||
待修缺口:
|
||||
|
||||
- PC 待办列表目前偏“快速通过 + 详情”,退回、驳回、转审主要在详情页和移动页完成,A2 需确认 PC 操作是否清晰。
|
||||
- 批量审批接口当前以报销权限和 `reimbursement` 为主,采购/请假批量是否首轮开放需在 A2 明确,不建议首轮扩大。
|
||||
- 合同审批对象尚未接入 workflow,首轮 A6 只按合同台账最小可用处理。
|
||||
- 移动审批存在离线队列能力,但 PRD 明确首批审批动作必须在线提交,A2 需确保离线草稿不会被误解为正式审批已完成。
|
||||
|
||||
### 3.2 报销、发票、OCR、附件
|
||||
|
||||
可复用:
|
||||
|
||||
- `server/src/routes/reimbursements.js` 已覆盖报销创建、列表、详情、明细、附件、提交、撤回、付款、项目关联。
|
||||
- `server/src/routes/invoicePool.js` 和 `server/src/routes/invoicePool/*` 已覆盖票据上传、OCR、状态查询、可绑定票据、绑定/解绑、人工修正、归档、查重例外、发票文件访问。
|
||||
- Prisma 已有 `ReimbursementForm`、`ReimbursementItem`、`ReimbursementAttachment`、`InvoicePool`、`InvoiceVerificationRecord`。
|
||||
- 报销提交会校验绑定发票、审批定义、审批人和单号;付款后会归档已用发票。
|
||||
|
||||
待修缺口:
|
||||
|
||||
- `InvoiceVerificationRecord` 和验真接口已经存在,但当前 PRD 首批口径是 OCR + 查重 + 财务人工复核,A3 不能把自动验真变成必选路径。
|
||||
- PC 和移动报销页功能较多,A3 重点应清理普通用户可见的内部术语、状态码和发票池概念。
|
||||
- 报销主流程应优先验证“上传 -> OCR 终态 -> 绑定明细 -> 提交 -> 审批 -> 付款 -> 导出”,不在首轮扩展 ERP 导出能力。
|
||||
- 费用申请若与报销/采购边界不清,A3/A6 应先采用现有报销或采购能力,不新建费用模块。
|
||||
|
||||
### 3.3 企业微信基础设施
|
||||
|
||||
可复用:
|
||||
|
||||
- `server/src/routes/wecomAuth.js` 已提供 `/api/auth/wecom/config`、login、callback、bind、unbind。
|
||||
- `WecomIdentityBinding` 已保证 `employee_id` 和 `external_user_id` 唯一。
|
||||
- callback 已覆盖已绑定直达、未绑定回退登录、绑定冲突、员工停用阻断和审计。
|
||||
- `server/src/services/notificationDispatcher.js`、`server/src/services/notifications/*`、`server/src/services/integrations/im/wecom.js` 已支持企业微信 webhook、delivery 记录、失败分类和重试。
|
||||
- `client/src/lib/runtimeContext.ts` 已能把企业微信/移动容器映射到 `/mobile`,并把 PC 详情页映射到移动等价路径。
|
||||
|
||||
待修缺口:
|
||||
|
||||
- 通知当前走 channel + webhook 能力,是否完全满足“脱敏标题、业务编号、状态、deeplink”需在 A4 逐类验收。
|
||||
- 企业微信 live smoke 需要真实 CorpID、AgentID、回调地址、webhook 等配置;缺配置必须 `SKIP`。
|
||||
- `runtimeContext` 中还有通用企业 IM UA 判断包含钉钉,仅用于移动偏好判断,不等于接入钉钉;A4/A7 可视情况把文案和测试聚焦为企业微信。
|
||||
|
||||
### 3.4 请假、考勤修正和团队状态
|
||||
|
||||
可复用:
|
||||
|
||||
- `server/src/routes/leave.js` 已覆盖假别、余额、工作日预览、请假创建/编辑/详情/提交/撤回。
|
||||
- `server/src/services/leave.js` 已有工作日、附件规则、假期 ledger 预占和审批通过后扣减口径。
|
||||
- `LeaveRequest`、`LeaveLedger`、`WorkflowInstance` 已支持请假接入统一审批。
|
||||
- PC 请假页有团队日历,移动页支持请假提交,团队状态页支持在岗/居家/外出/出差/请假展示。
|
||||
- 另有 `attendance` 路由、`AttendanceRecord` 和 `AttendancePolicy`,但应按当前路线视为备用/历史能力,不作为首轮正式打卡实现目标。
|
||||
|
||||
待修缺口:
|
||||
|
||||
- 补卡、外出、加班尚未形成独立 OA 审批对象;当前只有极简考勤补录和团队状态手工外出,不等于正式审批流。
|
||||
- 企业微信打卡同步未实现,符合当前“首批不接打卡 API”的边界;A5 不应开发定位、人脸、Wi-Fi 或排班。
|
||||
- A5 应先验证请假审批结果对团队状态或日历的影响。若补卡/外出/加班必须上线,应另拆独立 Issue,可能需要新增模型或复用申请对象,不能混在 A5 主线修补里。
|
||||
|
||||
### 3.5 P1 采购、合同、项目
|
||||
|
||||
可复用:
|
||||
|
||||
- `purchaseRequests` 已覆盖采购草稿、明细、附件、提交、撤回、审批、PO/合同号归档和采购回归脚本。
|
||||
- `contractsRegistry` 已覆盖合同台账列表、到期提醒、新增、编辑、续签,合同编号唯一,支持项目关联、责任人、归档位置和审计。
|
||||
- `projects` 已覆盖项目列表/详情、成员、里程碑、任务、风险、费用摘要、差旅摘要、周报、沟通记录、收口清单、交付记录和涉密文档引用。
|
||||
- Prisma 已有 `PurchaseRequest`、`PurchaseRequestItem`、`PurchaseAttachment`、`PurchaseOrderArchive`、`ContractRegistry`、`Project`、`ProjectMember`、`ProjectMilestone`、`ProjectTask`、`ProjectRisk`、`ProjectDeliveryRecord` 等。
|
||||
|
||||
待修缺口:
|
||||
|
||||
- 采购当前包含预算预占、ERP track 等较重能力,A6 应只保留“申请 -> 审批 -> 附件/归档可追溯”的最小可用验收。
|
||||
- 合同台账没有正式合同 workflow,也没有合同正文附件库;首轮只验收编号、状态、责任人、归档位置、项目关联和非涉密边界。
|
||||
- 项目页功能较全,A6 应避免扩成项目管理平台,只确认关键事项汇总、风险、交付记录和业务关联。
|
||||
|
||||
## 4. 前端入口与页面盘点
|
||||
|
||||
可复用页面:
|
||||
|
||||
| 模块 | PC 页面 | 移动页面 |
|
||||
| --- | --- | --- |
|
||||
| 审批 | `WorkflowTasksPage.tsx`、`WorkflowTaskDetailPage.tsx` | `MobileApprovalsPage.tsx` |
|
||||
| 报销 | `ReimbursementsPage.tsx`、`ReimbursementDetailPage.tsx`、`InvoicePoolPage.tsx` | `MobileReimbursementsPage.tsx`、`MobileReimbursementDetailPage.tsx`、`MobileCapturePage.tsx` |
|
||||
| 企业微信绑定 | `ProfilePage.tsx` | `MobileProfilePage.tsx` |
|
||||
| 请假 | `LeaveRequestPage.tsx` | `MobileLeavePage.tsx` |
|
||||
| 采购 | `PurchaseRequestsPage.tsx` | 复用响应式 PC 页面 |
|
||||
| 合同 | `ContractsRegistryPage.tsx` | 复用响应式 PC 页面 |
|
||||
| 项目 | `ProjectsPage.tsx`、`ProjectDetailPage.tsx` | 移动端首批以 `/mobile` 摘要和 PC 响应式为主 |
|
||||
|
||||
入口现状:
|
||||
|
||||
- `client/src/router/index.tsx` 已注册 PC 和移动主路由。
|
||||
- `AppShellLayout` 会根据企业微信/移动容器跳转到移动等价路径。
|
||||
- `MobileBottomNav` 默认提供首页、审批、票据、我的;`MobilePortalPage` 额外提供报销、请假等卡片入口。
|
||||
- `notificationLinks.ts` 已把 workflow、reimbursement、leave、purchase 等通知目标解析回 OA 页面。
|
||||
|
||||
待修缺口:
|
||||
|
||||
- PC 主导航目前有“主导航 / 管理入口 / 备用模块”分组,后台也有 `system/navigation`,但 fallback 与服务端默认可见性不完全一致;A7 需统一。
|
||||
- 审批待办在服务端默认可见性中归入 admin/backup 强制段,A2/A7 需确保主管、财务、老板的审批入口清晰可达。
|
||||
- 普通员工拥有一些旅行/采购/项目自助权限,A7 需确认是否会看到完整差旅、预算、AP、ERP、AI 等非首轮主路径。
|
||||
- 移动端采购、合同、项目没有完整移动专页,首轮 A6 只做最小可用和可达性,不扩展移动完整编辑体验。
|
||||
|
||||
## 5. 测试与回归盘点
|
||||
|
||||
可复用门禁:
|
||||
|
||||
| 范围 | 已有脚本或用例 |
|
||||
| --- | --- |
|
||||
| 后端总回归 | `server/scripts/regression-all.sh` |
|
||||
| 审批动作 | `server/scripts/regression-workflow-actions.sh`、`client/tests/e2e/workflow-quick-approve.spec.ts`、`client/tests/e2e/mobile-approvals-offline.spec.ts` |
|
||||
| 报销/票据/OCR | `server/scripts/regression-dedup.sh`、`server/scripts/regression-ocr.sh`、`client/tests/e2e/r102-reimbursement-main-flow.spec.ts`、`client/tests/e2e/invoice-ocr-flow.spec.ts` |
|
||||
| 企业微信入口 | `client/tests/e2e/wecom-entry.spec.ts`、`client/tests/e2e/wecom-first-bind.spec.ts`、`client/tests/e2e/r124-mobile-entry-matrix.spec.ts` |
|
||||
| 请假/日历 | `client/tests/e2e/leave-flow.spec.ts`、`client/tests/e2e/leave-team-calendar.spec.ts` |
|
||||
| 采购/项目 | `server/scripts/regression-procurement.sh`、`client/tests/e2e/procurement-flow.spec.ts`、`client/tests/e2e/project-workbench.spec.ts` |
|
||||
| 权限/导航 | `client/tests/e2e/settings-governance.spec.ts`、`scripts/qa/check-mobile-route-contract.mjs` |
|
||||
| 组合门禁 | `scripts/qa/run-business-flow-gates.sh`、`scripts/qa/run-web-gates.sh`、`scripts/qa/check-live-smoke-env.mjs` |
|
||||
|
||||
测试缺口:
|
||||
|
||||
- 合同台账目前没有明确的首轮 E2E,应在 A6 或 A8 补人工步骤或轻量 E2E。
|
||||
- 企业微信真实入口、真实 webhook 和真实 OCR 依赖配置,A8 必须允许 `SKIP` 并记录原因。
|
||||
- A7 权限导航需要按员工、主管、财务、管理员做角色矩阵,不应只跑 build/typecheck。
|
||||
|
||||
## 6. A2-A8 实施边界建议
|
||||
|
||||
| Issue | 建议边界 | 不做范围 | 是否需要新增 API/DB |
|
||||
| --- | --- | --- | --- |
|
||||
| A2 统一审批中心 | 修 PC/移动待办、详情状态、审批历史、deeplink 一致性;确认并发/已处理提示 | 不新增企业微信原生审批;不扩复杂 BPM;不强行批量支持所有业务 | 默认不需要 |
|
||||
| A4 企业微信基础设施 | 验证 config、绑定、未绑定回退、停用阻断、通知脱敏、deeplink 回 OA | 不接飞书;不接企业微信原生审批;不做打卡同步 | 默认不需要 |
|
||||
| A3 报销/发票/OCR | 收口上传、OCR 状态、查重、绑定、提交、付款、导出、用户文案 | 不把自动验真设为必需;不扩 ERP;不重构 OCR provider | 默认不需要 |
|
||||
| A5 请假/考勤 | 先收口请假审批、团队状态/日历;补卡/外出/加班不足则记录或最小入口 | 不接企微打卡 API;不做定位/人脸/Wi-Fi/排班 | 独立补卡/外出/加班可能需要另拆 |
|
||||
| A6 P1 最小可用 | 采购申请审批、合同台账、项目汇总最小可用 | 不做预算/ERP/AI/复杂招采/重型项目 | 合同审批/附件库若要做需另拆 |
|
||||
| A7 权限导航 | 收紧角色可见性和备用模块;确保审批、报销、请假入口清晰 | 不靠前端隐藏替代服务端权限 | 默认不需要 |
|
||||
| A8 回归门禁 | 汇总 server/client/E2E/smoke/live readiness;真实配置缺失标 SKIP | 不部署;不通知真机试运行 | 不需要 |
|
||||
|
||||
## 7. 后续开发顺序
|
||||
|
||||
建议继续执行既定顺序:
|
||||
|
||||
1. A2:统一审批中心入口与状态收口。
|
||||
2. A4:企业微信入口、绑定、通知回 OA。
|
||||
3. A3:报销/发票/OCR 主链路收口。
|
||||
4. A5:请假、补卡、外出、加班与考勤口径。
|
||||
5. A6:P1 采购、合同、项目最小可用。
|
||||
6. A7:权限、导航与备用模块护栏。
|
||||
7. A8:回归门禁与试运行证据收口。
|
||||
|
||||
A1 之后可以进入 A2,但 A2 是涉及 workflow 状态机、权限和入口的一类高风险改动,实施前需要给出具体技术方案并等待批准。
|
||||
@@ -1,384 +0,0 @@
|
||||
# hyb-oa 实现状态矩阵(历史主表 + R70-R90 试运行补充)
|
||||
|
||||
**文档状态**:实现状态与历史证据矩阵,不是 PRD,也不是当前开发排期。
|
||||
**快照日期**:2026-05-05
|
||||
**范围**:`F1-F42`(含 `F19b/F19c/F19d`) + `R1-S2` + `P9A1-P9D1` + `P10E1-P10G1` + `G0-G6` + `H1` + `M1-M4` + `P13-0-P13-8` + `P14-0-P14-8` + `P15A-0-P15A-5` + `P15B-0-P15B-6` + `P16A-0-P16A-6` + `P16B-0-P16B-6` + `P16C-0-P16C-6` + `R9-0-R9-3` + `G2-0-G2-6` + `P17A-0-P17A-6` + `P17B-0-P17B-6` + `P18A-0-P18A-6` + `P18B-0-P18B-6` + `P19-0-P19-6` + `P19IM1-0-P19IM1-6` + `P19ERP1-0-P19ERP1-6` + `P19ERP2-0-P19ERP2-6` + `P19ERP3-0-P19ERP3-6` + `R10-0-R10-4` + `P19MCP1-0-P19MCP1-4` + `P19AI1-0-P19AI1-5` + `P20TRAVEL1-0-P20TRAVEL1-5` + `P20TRAVEL2-0-P20TRAVEL2-5` + `P20TRAVEL3-0-P20TRAVEL3-5` + `P21PWA1-0-P21PWA1-5` + `P21PWA2-0-P21PWA2-5` + `P22PROD1-0-P22PROD1-5` + `R11-0-R11-5`,共 278 项。
|
||||
**事实源**:`issues/2026-02-09_13-39-02-p5-blueprint-v3.csv` + `issues/2026-02-09_23-30-00-p6-p8-remaining-work-master.csv` + `issues/2026-02-10_09-42-31-p9-maintenance-performance-matrix.csv` + `issues/2026-02-10_10-35-30-p10-production-hardening.csv` + `issues/2026-02-11-p11-p12-governance-mobile.csv` + `issues/2026-02-12_01-09-41-p13-l5-governance.csv` + `issues/2026-02-13_00-11-56-p14-l5-operationalization.csv` + `issues/2026-03-06_14-30-00-p15a-l5-permission-decouple.csv` + `issues/2026-03-06_14-30-00-p15b-l5-leave-v1.csv` + `issues/2026-03-07_13-47-05-p16a-l5-master-data-core.csv` + `issues/2026-03-07_16-22-07-p16b-l5-holiday-calendar.csv` + `issues/2026-03-07_17-14-39-p16c-l5-suppliers.csv` + `issues/2026-03-07_18-15-03-r9-g2-p19-roadmap-refresh.csv` + `issues/2026-03-07_18-16-00-g2-l5-cross-domain-bridge.csv` + `issues/2026-03-07_19-33-09-p17a-l5-procurement-core.csv` + `issues/2026-03-07_21-00-37-p17b-l5-procurement-budget-archive.csv` + `issues/2026-03-07_22-02-09-p18a-l5-asset-registry-core.csv` + `issues/2026-03-07_22-34-03-p18b-l5-asset-movements-inventory.csv` + `issues/2026-03-07_23-22-00-p19-l4-integration-readiness.csv` + `issues/2026-03-08_12-18-10-p19-im-1-l5-collaboration-adapter.csv` + `issues/2026-03-08_14-10-53-p19-erp-1-l5-masterdata-journal-bridge.csv` + `issues/2026-03-08_22-46-51-p19-erp-2-l5-procurement-commitment-archive.csv` + `issues/2026-03-09_00-10-00-p19-erp-3-l5-asset-ledger-summary.csv` + `issues/2026-03-09_10-15-00-r10-post-erp3-roadmap-refresh.csv` + `issues/2026-03-09_10-25-00-p19-mcp-1-l4-readonly-tools-baseline.csv` + `issues/2026-03-10_12-54-30-p19-ai-1-l5-suggestion-workbench-refresh.csv` + `issues/2026-03-10_17-32-21-p20-travel-1-l5-request-intake-refresh.csv` + `issues/2026-03-10_21-05-59-p20-travel-2-l5-corporate-payments-refresh.csv` + `issues/2026-03-11_09-57-28-p20-travel-3-l5-reconciliation-erp-bridge-refresh.csv` + `issues/2026-03-11_17-50-39-p21-pwa-1-l5-asset-scan-refresh.csv` + `issues/2026-03-12_04-32-13-p21-pwa-2-l5-offline-deeplink-refresh.csv` + `issues/2026-03-12_16-58-44-p22-prod-1-l5-production-hardening.csv` + `issues/2026-03-13_10-30-00-r11-contract-reconciliation-and-spec-refresh.csv` + `issues/2026-04-26_r70-manual-trialrun.csv` + `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` + `issues/2026-05-04_13-11-16-r79-governance-live-readiness.csv` + `docs/trialrun/coverage-matrix.csv`(执行合同与覆盖证据)
|
||||
**当前用途**:判断功能是否做过、证据在哪、历史路线如何演进。
|
||||
**不得误读**:新增需求和优先级以 [海音达OA-MVP需求规格说明书](./海音达OA-MVP需求规格说明书.md)、[产品口径文档](./product-decisions.md) 和最新 `issues/*.csv` 为准。
|
||||
|
||||
**DOCG7 当前说明(2026-05-12)**:本表是历史主表和 QA 参考,不代表 2026-05-12 当前状态。R6、PC6、PA6、FL6、AP6、RI6、LP6、ME6/QG6、DG7/MRF7、MIA7/MIF7 之后的事实应以最新 Issue CSV、[`docs/文档索引.md`](./文档索引.md)、[`docs/文档事实源状态矩阵.md`](./文档事实源状态矩阵.md) 和 [`docs/trialrun/manual-trialrun-report.md`](./trialrun/manual-trialrun-report.md) 为准。
|
||||
|
||||
## R70-R90 试运行与外部环境补充(2026-04-28 至 2026-05-05)
|
||||
|
||||
- **本地核心链路**:员工/经理/管理员的本地 trialrun 主链路已在 R70/R71 通过;R73-R78 进一步补齐了真实 PDF OCR、深层业务辅助回归和财务支付尾链 focused regression。
|
||||
- **当前公网部署基线**:`oa.hyinda.com` 已接到 `caddy -> 127.0.0.1:3000`,远端目录为 `/opt/hyb-oa-trialrun`,部署由本地 `rsync` 驱动,远端不是 git 工作树。
|
||||
- **历史企微状态**:R80 当时已启用公网 `WECOM_ENABLED / WECOM_ENTRY_ENABLED / WECOM_OAUTH_ENABLED`,`wecom_entry_v1` 已由 `force_off` 调整为 `inherit`;R82-R88 已收口真实企微 UserId 兼容、首次绑定、会话提示与设备指纹,用户手机企业微信已验证可进入系统。
|
||||
- **历史移动状态**:R89 当时已在本地完成登录极简化、移动默认 `/mobile`、底部导航、移动审批、票据上传与小屏菜单抽屉自动化;“公网仍需部署最新 R89/R90”是 2026-05-05 历史缺口,不代表当前公网状态。
|
||||
- **历史剩余外部事项**:公网 live smoke、独立 smoke 账号核对、备份恢复演练、HTTPS cookie 行为与多用户并发证据在 R90/R91 当时仍待收口;历史 R79 中 “WECOM=false / wecom_entry_v1=force_off” 只作为过期诊断记录,不再代表当前状态。
|
||||
- **阅读方式**:本文件的主表仍保留历史主线;与 trialrun、覆盖率、外部环境有关的现状判断,应结合 `docs/trialrun/coverage-matrix.csv` 与 `docs/trialrun/manual-trialrun-report.md` 一起看。
|
||||
|
||||
## R12 增量能力(2026-03-21)
|
||||
|
||||
- **事实源**:`issues/2026-03-21_10-30-00-p25-fee-control-ap-refresh.csv`、`issues/2026-03-21_10-40-00-p26-portal-sso-im-entry-refresh.csv`、`issues/2026-03-21_10-50-00-p28-portal-search-workbench-refresh.csv`、`issues/2026-03-21_11-00-00-p24-workflow-governance-refresh.csv`、`issues/2026-03-21_11-10-00-p29-replacement-readiness-refresh.csv`
|
||||
- **P25-lite 费控闭环**:新增预算控制规则中心、三域统一 `precheck`、`EntityRiskFlag` 风险项、支付批次和最小 `AP Operations` 运营视图。
|
||||
- **P26-lite 统一入口**:新增 `Portal Home`、`OIDC provider` 列表、登录页统一入口和 IM 签名 deep link。
|
||||
- **P28-lite 搜索与工作台**:新增全局搜索、公告管理、最近访问与 Portal 工作台卡片聚合。
|
||||
- **P24-lite 流程治理**:新增工作流定义后台治理、版本发布归档、报销流程只读投影,不改现有运行时引擎。
|
||||
- **P29-lite 试点切换**:新增迁移 dry-run、切换范围控制台、试点切换 runbook 与映射清单,遵循“旧单只读归档、新单由新系统接管”。
|
||||
- **默认开关**:`budget_precheck_v1`、`payment_batch_v1`、`portal_home_v1`、`global_search_v1`、`announcements_v1`、`workflow_definition_admin_v1`、`cutover_console_v1` 默认 `force_off`,需 env 与 DB 开关双重开启。
|
||||
|
||||
**说明**:
|
||||
- 本矩阵用于全局读图(审计/交接/回归覆盖追踪),不替代 `issues/*.csv` 的执行合同职责。
|
||||
- UI 专项合同(如 `ui-refresh-stage7/8`)属于界面治理线,独立维护,不并入本业务主表统计。
|
||||
- `R11` 属于治理收口阶段:只承接历史 TODO 清账与规格书补齐,不代表新增运行时业务能力。
|
||||
- `首次规划 CSV` 为该 ID 首次出现的执行合同;`首次完成 CSV` 为三状态首次全 `DONE` 的执行合同。
|
||||
- `规格书章节` 仍保留历史引用语义;当前 PRD 主事实源已迁移到 `docs/海音达OA-MVP需求规格说明书.md`,`docs/requirements-specification.md` 仅为旧路径跳转。
|
||||
|
||||
| ID | 功能项 | 规格书章节 | 首次规划 CSV | 首次完成 CSV | 完成日期 | 当前状态 | 回归覆盖 | Notes |
|
||||
| --- | --- | --- | --- | --- | --- | --- | --- | --- |
|
||||
| F1 | CSV快照收口(P5蓝图v2) | §16 迭代计划(执行合同收口) | 2026-02-09_11-17-07-p5-blueprint.csv | 2026-02-09_11-17-07-p5-blueprint.csv | 2026-02-09 | DONE | manual | none |
|
||||
| F2 | 费用类型只读API(expense-types) | §9.1-§9.2,§13.2/§13.3 | 2026-02-09_11-17-07-p5-blueprint.csv | 2026-02-09_13-39-02-p5-blueprint-v3.csv | 2026-02-09 | DONE | manual | none |
|
||||
| F3 | 费用类型管理API(system.settings) | §9.1-§9.2,§13.2/§13.3 | 2026-02-09_11-17-07-p5-blueprint.csv | 2026-02-09_13-39-02-p5-blueprint-v3.csv | 2026-02-09 | DONE | manual | none |
|
||||
| F4 | 报销单编辑与删除(补齐CRUD) | §4.2,§13.2 | 2026-02-09_11-17-07-p5-blueprint.csv | 2026-02-09_13-39-02-p5-blueprint-v3.csv | 2026-02-09 | DONE | server/scripts/regression-workflow-actions.sh | none |
|
||||
| F5 | 报销明细CRUD与总金额重算 | §4.2,§13.2 | 2026-02-09_11-17-07-p5-blueprint.csv | 2026-02-09_13-39-02-p5-blueprint-v3.csv | 2026-02-09 | DONE | server/scripts/regression-workflow-actions.sh | none |
|
||||
| F6 | 前端报销编辑器(明细+费用类型) | §4.2,§13.2 | 2026-02-09_11-17-07-p5-blueprint.csv | 2026-02-09_13-39-02-p5-blueprint-v3.csv | 2026-02-09 | DONE | client:typecheck/build/test:e2e | none |
|
||||
| F7 | 代提交(expense.proxy_submit) | §4.2.3-§4.2.4,§13.5 | 2026-02-09_11-17-07-p5-blueprint.csv | 2026-02-09_13-39-02-p5-blueprint-v3.csv | 2026-02-09 | DONE | server/scripts/regression-workflow-actions.sh | none |
|
||||
| F8 | 行政代上传(owner≠uploaded_by) | §4.2.3-§4.2.4,§10.7 | 2026-02-09_11-17-07-p5-blueprint.csv | 2026-02-09_13-39-02-p5-blueprint-v3.csv | 2026-02-09 | DONE | server/scripts/regression-ocr.sh + regression-audit.sh | none |
|
||||
| F9 | 票据解绑/重绑(bound->available) | §4.4,§10.4-§10.7 | 2026-02-09_11-17-07-p5-blueprint.csv | 2026-02-09_13-39-02-p5-blueprint-v3.csv | 2026-02-09 | DONE | server/scripts/regression-workflow-actions.sh | none |
|
||||
| F10 | 判重例外(override duplicate) | §4.4,§10.7,§12.4 | 2026-02-09_11-17-07-p5-blueprint.csv | 2026-02-09_13-39-02-p5-blueprint-v3.csv | 2026-02-09 | DONE | server/scripts/regression-dedup.sh + regression-audit.sh | none |
|
||||
| F11 | OCR失败重试API(次数/频控) | §4.4,§10.7 | 2026-02-09_11-17-07-p5-blueprint.csv | 2026-02-09_13-39-02-p5-blueprint-v3.csv | 2026-02-09 | DONE | server/scripts/regression-ocr.sh + regression-audit.sh | none |
|
||||
| F12 | 90天未绑定自动归档(unused_timeout) | §4.4,§10.4-§10.7 | 2026-02-09_11-17-07-p5-blueprint.csv | 2026-02-09_13-39-02-p5-blueprint-v3.csv | 2026-02-09 | DONE | server/scripts/regression-ocr.sh | none |
|
||||
| F13 | signed-url审计与下载行为记录 | §10.2,§10.7,§12.4 | 2026-02-09_11-17-07-p5-blueprint.csv | 2026-02-09_13-39-02-p5-blueprint-v3.csv | 2026-02-09 | DONE | server/scripts/regression-audit.sh | none |
|
||||
| F14 | 站内通知基础设施(DB+API) | §4.6 | 2026-02-09_11-17-07-p5-blueprint.csv | 2026-02-09_13-39-02-p5-blueprint-v3.csv | 2026-02-09 | DONE | manual | none |
|
||||
| F15 | 邮件通知(SMTP/Nodemailer) | §4.6 | 2026-02-09_11-17-07-p5-blueprint.csv | 2026-02-09_13-39-02-p5-blueprint-v3.csv | 2026-02-09 | DONE | manual | none |
|
||||
| F16 | 前端通知入口(Bell) | §4.6 | 2026-02-09_11-17-07-p5-blueprint.csv | 2026-02-09_13-39-02-p5-blueprint-v3.csv | 2026-02-09 | DONE | client:test:e2e | none |
|
||||
| F17 | 报表导出(CSV/Excel) | §16 Phase 2(报表导出) | 2026-02-09_11-17-07-p5-blueprint.csv | 2026-02-09_13-39-02-p5-blueprint-v3.csv | 2026-02-09 | DONE | manual | none |
|
||||
| F18 | 审批规则维护(system.settings) | §6,§13.3 | 2026-02-09_11-17-07-p5-blueprint.csv | 2026-02-09_13-39-02-p5-blueprint-v3.csv | 2026-02-09 | DONE | server/scripts/regression-workflow-actions.sh | none |
|
||||
| F19 | 作业系统升级(pg-boss 基础设施) | §16 Phase 2(队列/作业) | 2026-02-09_11-17-07-p5-blueprint.csv | 2026-02-09_13-39-02-p5-blueprint-v3.csv | 2026-02-09 | DONE | server/scripts/regression-all.sh | none |
|
||||
| F19b | 作业迁移(OCR -> pg-boss) | §16 Phase 2(OCR队列化) | 2026-02-09_12-34-42-p5-blueprint-v2.csv | 2026-02-09_13-39-02-p5-blueprint-v3.csv | 2026-02-09 | DONE | server/scripts/regression-ocr.sh + regression-all.sh | none |
|
||||
| F19c | 作业迁移(委派回收 -> pg-boss) | §16 Phase 2(委派回收队列化) | 2026-02-09_12-34-42-p5-blueprint-v2.csv | 2026-02-09_13-39-02-p5-blueprint-v3.csv | 2026-02-09 | DONE | server/scripts/regression-workflow-actions.sh | none |
|
||||
| F19d | 作业迁移(超期归档 -> pg-boss) | §16 Phase 2(归档作业队列化) | 2026-02-09_12-34-42-p5-blueprint-v2.csv | 2026-02-09_13-39-02-p5-blueprint-v3.csv | 2026-02-09 | DONE | server/scripts/regression-ocr.sh + regression-all.sh | none |
|
||||
| F20 | Worker进程拆分(可选) | §14(部署),§16 Phase 2 | 2026-02-09_11-17-07-p5-blueprint.csv | 2026-02-09_13-39-02-p5-blueprint-v3.csv | 2026-02-09 | DONE | manual | none |
|
||||
| F21 | 对象存储(MinIO/S3兼容) | §10.3,§16 Phase 2 | 2026-02-09_11-17-07-p5-blueprint.csv | 2026-02-09_13-39-02-p5-blueprint-v3.csv | 2026-02-09 | DONE | manual | none |
|
||||
| F22 | 可观测性增强(metrics/日志) | §14 非功能需求(可观测性) | 2026-02-09_11-17-07-p5-blueprint.csv | 2026-02-09_13-39-02-p5-blueprint-v3.csv | 2026-02-09 | DONE | manual | none |
|
||||
| F23 | SSO/OIDC(可选,P7+) | §11.1(登录扩展),§16 Phase 2 | 2026-02-09_11-17-07-p5-blueprint.csv | 2026-02-09_13-39-02-p5-blueprint-v3.csv | 2026-02-09 | DONE | manual | 规格扩展项(P6+/P7+) |
|
||||
| F24 | 工作流扩展到其他实体(P7+) | §5,§16 Phase 2 | 2026-02-09_11-17-07-p5-blueprint.csv | 2026-02-09_13-39-02-p5-blueprint-v3.csv | 2026-02-09 | DONE | manual | 规格扩展项(P6+/P7+) |
|
||||
| F25 | 敏感字段加密与脱敏(P6+) | §12.1-§12.3 | 2026-02-09_11-17-07-p5-blueprint.csv | 2026-02-09_13-39-02-p5-blueprint-v3.csv | 2026-02-09 | DONE | manual | 规格扩展项(P6+/P7+) |
|
||||
| F26 | 部门API(departments) | §3.2,§4.1,§13.2 | 2026-02-09_12-34-42-p5-blueprint-v2.csv | 2026-02-09_13-39-02-p5-blueprint-v3.csv | 2026-02-09 | DONE | manual | none |
|
||||
| F27 | 员工API对齐(新增别名 /api/employees) | §4.1,§13.2 | 2026-02-09_12-34-42-p5-blueprint-v2.csv | 2026-02-09_13-39-02-p5-blueprint-v3.csv | 2026-02-09 | DONE | manual | none |
|
||||
| F28 | 票据人工修正与手工归档(invoice-pool patch/archive) | §4.4,§10.4-§10.7 | 2026-02-09_12-34-42-p5-blueprint-v2.csv | 2026-02-09_13-39-02-p5-blueprint-v3.csv | 2026-02-09 | DONE | server/scripts/regression-audit.sh | none |
|
||||
| F29 | 配置只读API(approval-rules/document-sequences) | §6,§8,§13.3 | 2026-02-09_12-34-42-p5-blueprint-v2.csv | 2026-02-09_13-39-02-p5-blueprint-v3.csv | 2026-02-09 | DONE | manual | none |
|
||||
| F30 | 通知触发集成(workflow/pay/auth) | §4.6,§12.4 | 2026-02-09_12-34-42-p5-blueprint-v2.csv | 2026-02-09_13-39-02-p5-blueprint-v3.csv | 2026-02-09 | DONE | manual | none |
|
||||
| F31 | Delegation Grants API对齐(新增别名/增强响应) | §4.2.4,§13.5 | 2026-02-09_12-34-42-p5-blueprint-v2.csv | 2026-02-09_13-39-02-p5-blueprint-v3.csv | 2026-02-09 | DONE | manual | none |
|
||||
| F32 | 前端组织与员工最小运营 | §3.2,§4.1(前端运营) | 2026-02-09_12-34-42-p5-blueprint-v2.csv | 2026-02-09_13-39-02-p5-blueprint-v3.csv | 2026-02-09 | DONE | client:typecheck/build | none |
|
||||
| F33 | 前端行政代提交/代上传入口 | §4.2.3-§4.2.4 | 2026-02-09_12-34-42-p5-blueprint-v2.csv | 2026-02-09_13-39-02-p5-blueprint-v3.csv | 2026-02-09 | DONE | client:typecheck/build/test:e2e | none |
|
||||
| F34 | 前端票据中心增强(编辑/归档/解绑/重试/例外) | §4.4,§10.7(前端增强) | 2026-02-09_12-34-42-p5-blueprint-v2.csv | 2026-02-09_13-39-02-p5-blueprint-v3.csv | 2026-02-09 | DONE | client:typecheck/build/test:e2e | none |
|
||||
| F35 | 前端错误码文案补齐(VALID/AUTH/PERM) | §13.6 | 2026-02-09_12-34-42-p5-blueprint-v2.csv | 2026-02-09_13-39-02-p5-blueprint-v3.csv | 2026-02-09 | DONE | client:typecheck/build | none |
|
||||
| F36 | 首次登录强制改密(后端) | §11.2-§11.5,§13.6 | 2026-02-09_12-34-42-p5-blueprint-v2.csv | 2026-02-09_13-39-02-p5-blueprint-v3.csv | 2026-02-09 | DONE | manual | none |
|
||||
| F37 | 登录失败锁定与解锁(AUTH_002) | §11.2-§11.5,§13.6 | 2026-02-09_12-34-42-p5-blueprint-v2.csv | 2026-02-09_13-39-02-p5-blueprint-v3.csv | 2026-02-09 | DONE | manual | none |
|
||||
| F38 | 首次登录改密与锁定提示(前端) | §11.2-§11.5,§13.6(前端) | 2026-02-09_12-34-42-p5-blueprint-v2.csv | 2026-02-09_13-39-02-p5-blueprint-v3.csv | 2026-02-09 | DONE | client:typecheck/build/test:e2e | none |
|
||||
| F39 | 弱密码库拦截(Top 10k) | §11.2,§13.6 | 2026-02-09_12-34-42-p5-blueprint-v2.csv | 2026-02-09_13-39-02-p5-blueprint-v3.csv | 2026-02-09 | DONE | manual | none |
|
||||
| F40 | 组织/配置回归脚本(org+settings) | §16(回归工程化) | 2026-02-09_13-39-02-p5-blueprint-v3.csv | 2026-02-09_13-39-02-p5-blueprint-v3.csv | 2026-02-09 | DONE | server/scripts/regression-org-settings.sh | 治理/回归工程项 |
|
||||
| F41 | 认证安全回归脚本(auth security) | §11,§16(认证回归) | 2026-02-09_13-39-02-p5-blueprint-v3.csv | 2026-02-09_13-39-02-p5-blueprint-v3.csv | 2026-02-09 | DONE | server/scripts/regression-auth-security.sh | 治理/回归工程项 |
|
||||
| F42 | 架构文档修订(As-Is/To-Be) | N/A(架构文档治理) | 2026-02-09_13-39-02-p5-blueprint-v3.csv | 2026-02-09_13-39-02-p5-blueprint-v3.csv | 2026-02-09 | DONE | manual | 治理/回归工程项 |
|
||||
|
||||
| R1 | 历史TODO清账映射(A/C -> E/F) | N/A(治理项) | 2026-02-09_23-30-00-p6-p8-remaining-work-master.csv | 2026-02-09_23-30-00-p6-p8-remaining-work-master.csv | 2026-02-09 | DONE | manual | none |
|
||||
| R2 | 规格与计划文档状态同步 | §16(执行合同与文档对齐) | 2026-02-09_23-30-00-p6-p8-remaining-work-master.csv | 2026-02-09_23-30-00-p6-p8-remaining-work-master.csv | 2026-02-09 | DONE | manual | none |
|
||||
| R3 | 状态一致性自动校验与CI接入 | §16(门禁与漂移阻断) | 2026-02-09_23-30-00-p6-p8-remaining-work-master.csv | 2026-02-09_23-30-00-p6-p8-remaining-work-master.csv | 2026-02-09 | DONE | scripts/check-minimal.sh | none |
|
||||
| V1 | 验真域模型与Provider抽象 | §4.4(发票治理扩展) | 2026-02-09_23-30-00-p6-p8-remaining-work-master.csv | 2026-02-09_23-30-00-p6-p8-remaining-work-master.csv | 2026-02-09 | DONE | server/scripts/regression-verification.sh | none |
|
||||
| V2 | 验真API与异步任务(pg-boss) | §4.4,§16(作业体系) | 2026-02-09_23-30-00-p6-p8-remaining-work-master.csv | 2026-02-09_23-30-00-p6-p8-remaining-work-master.csv | 2026-02-09 | DONE | server/scripts/regression-verification.sh | none |
|
||||
| V3 | 票据中心验真前端闭环 | §4.4(票据中心前端) | 2026-02-09_23-30-00-p6-p8-remaining-work-master.csv | 2026-02-09_23-30-00-p6-p8-remaining-work-master.csv | 2026-02-09 | DONE | client:typecheck/build | none |
|
||||
| V4 | 验真回归脚本与总回归接入 | §16(回归工程化) | 2026-02-09_23-30-00-p6-p8-remaining-work-master.csv | 2026-02-09_23-30-00-p6-p8-remaining-work-master.csv | 2026-02-09 | DONE | server/scripts/regression-verification.sh + regression-all.sh | none |
|
||||
| D1 | 看板聚合API | §16 Phase 2(可视化看板) | 2026-02-09_23-30-00-p6-p8-remaining-work-master.csv | 2026-02-09_23-30-00-p6-p8-remaining-work-master.csv | 2026-02-09 | DONE | server/scripts/regression-dashboard.sh | none |
|
||||
| D2 | 前端Dashboard强化 | §16 Phase 2(可视化看板) | 2026-02-09_23-30-00-p6-p8-remaining-work-master.csv | 2026-02-09_23-30-00-p6-p8-remaining-work-master.csv | 2026-02-09 | DONE | client:typecheck/build | none |
|
||||
| D3 | 看板导出联动 | §16 Phase 2(报表导出联动) | 2026-02-09_23-30-00-p6-p8-remaining-work-master.csv | 2026-02-09_23-30-00-p6-p8-remaining-work-master.csv | 2026-02-09 | DONE | server/scripts/regression-dashboard.sh | none |
|
||||
| B1 | 预算池与台账模型 | §16 Phase 2(预算管控) | 2026-02-09_23-30-00-p6-p8-remaining-work-master.csv | 2026-02-09_23-30-00-p6-p8-remaining-work-master.csv | 2026-02-09 | DONE | server/scripts/regression-budget.sh | none |
|
||||
| B2 | 预算API与提交流程拦截 | §16 Phase 2(预算管控) | 2026-02-09_23-30-00-p6-p8-remaining-work-master.csv | 2026-02-09_23-30-00-p6-p8-remaining-work-master.csv | 2026-02-09 | DONE | server/scripts/regression-budget.sh | none |
|
||||
| B3 | 预算前端运营页 | §16 Phase 2(预算运营) | 2026-02-09_23-30-00-p6-p8-remaining-work-master.csv | 2026-02-09_23-30-00-p6-p8-remaining-work-master.csv | 2026-02-09 | DONE | client:typecheck/build | none |
|
||||
| B4 | 预算回归脚本 | §16(回归工程化) | 2026-02-09_23-30-00-p6-p8-remaining-work-master.csv | 2026-02-09_23-30-00-p6-p8-remaining-work-master.csv | 2026-02-09 | DONE | server/scripts/regression-budget.sh | none |
|
||||
| I1 | 集成框架(Outbox+Adapter) | §16 Phase 2(外部集成) | 2026-02-09_23-30-00-p6-p8-remaining-work-master.csv | 2026-02-09_23-30-00-p6-p8-remaining-work-master.csv | 2026-02-09 | DONE | server/scripts/regression-integrations.sh | none |
|
||||
| I2 | ERP最小集成(paid同步) | §16 Phase 2(ERP 集成) | 2026-02-09_23-30-00-p6-p8-remaining-work-master.csv | 2026-02-09_23-30-00-p6-p8-remaining-work-master.csv | 2026-02-09 | DONE | server/scripts/regression-integrations.sh | 默认关闭,按需灰度 |
|
||||
| I3 | 差旅单导入与报销关联 | §16 Phase 2(差旅闭环) | 2026-02-09_23-30-00-p6-p8-remaining-work-master.csv | 2026-02-09_23-30-00-p6-p8-remaining-work-master.csv | 2026-02-09 | DONE | server/scripts/regression-integrations.sh | 默认关闭,按需灰度 |
|
||||
| I4 | 通知渠道扩展(企微/钉钉) | §4.6(多渠道通知) | 2026-03-13_21-04-30-p23-im2-wecom-productionization-refresh.csv | 2026-03-13_21-04-30-p23-im2-wecom-productionization-refresh.csv | 2026-03-13 | DONE | server/scripts/regression-im-notifier.sh | 已完成企微 webhook 生产化与密钥加固;飞书 / 钉钉 provider 继续 backlog |
|
||||
| S1 | 企业卡/虚拟卡管控预研 | N/A(ADR 决策项) | 2026-02-09_23-30-00-p6-p8-remaining-work-master.csv | 2026-02-09_23-30-00-p6-p8-remaining-work-master.csv | 2026-02-09 | DONE | manual | docs/adr/adr-enterprise-card-control.md |
|
||||
| S2 | 移动端路线决策预研 | N/A(ADR 决策项) | 2026-02-09_23-30-00-p6-p8-remaining-work-master.csv | 2026-02-09_23-30-00-p6-p8-remaining-work-master.csv | 2026-02-09 | DONE | manual | docs/adr/adr-mobile-strategy.md |
|
||||
|
||||
| P9A1 | invoicePool拆分方案设计与边界冻结 | §16(维护性治理) | 2026-02-10_09-42-31-p9-maintenance-performance-matrix.csv | 2026-02-10_09-42-31-p9-maintenance-performance-matrix.csv | 2026-02-10 | DONE | manual | none |
|
||||
| P9A2 | invoicePool验真路由独立化实施 | §16(维护性治理) | 2026-02-10_09-42-31-p9-maintenance-performance-matrix.csv | 2026-02-10_09-42-31-p9-maintenance-performance-matrix.csv | 2026-02-10 | DONE | server/scripts/regression-verification.sh | none |
|
||||
| P9A3 | invoicePool共享select与响应映射收敛 | §16(维护性治理) | 2026-02-10_09-42-31-p9-maintenance-performance-matrix.csv | 2026-02-10_09-42-31-p9-maintenance-performance-matrix.csv | 2026-02-10 | DONE | server/scripts/regression-workflow-actions.sh + regression-verification.sh | none |
|
||||
| P9B1 | Dashboard趋势改为SQL聚合 | §16(看板性能) | 2026-02-10_09-42-31-p9-maintenance-performance-matrix.csv | 2026-02-10_09-42-31-p9-maintenance-performance-matrix.csv | 2026-02-10 | DONE | server/scripts/regression-dashboard.sh | none |
|
||||
| P9B2 | Dashboard聚合性能回归脚本补强 | §16(回归工程化) | 2026-02-10_09-42-31-p9-maintenance-performance-matrix.csv | 2026-02-10_09-42-31-p9-maintenance-performance-matrix.csv | 2026-02-10 | DONE | server/scripts/regression-dashboard.sh + regression-all.sh | none |
|
||||
| P9C1 | feature-matrix纳入P6-P8能力 | §16(状态治理) | 2026-02-10_09-42-31-p9-maintenance-performance-matrix.csv | 2026-02-10_09-42-31-p9-maintenance-performance-matrix.csv | 2026-02-10 | DONE | manual | none |
|
||||
| P9C2 | 矩阵一致性校验脚本扩展 | §16(门禁与漂移阻断) | 2026-02-10_09-42-31-p9-maintenance-performance-matrix.csv | 2026-02-10_09-42-31-p9-maintenance-performance-matrix.csv | 2026-02-10 | DONE | scripts/check-minimal.sh | none |
|
||||
| P9D1 | P9整体验收与回归基线 | §16(回归基线) | 2026-02-10_09-42-31-p9-maintenance-performance-matrix.csv | 2026-02-10_09-42-31-p9-maintenance-performance-matrix.csv | 2026-02-10 | DONE | scripts/check-minimal.sh + server/scripts/regression-all.sh | none |
|
||||
| P10E1 | ERP适配器配置模型收口 | §16(外部集成硬化) | 2026-02-10_10-35-30-p10-production-hardening.csv | 2026-02-10_10-35-30-p10-production-hardening.csv | 2026-02-10 | DONE | server/src/config.js 静态检查 | none |
|
||||
| P10E2 | ERP真实HTTP适配器实现 | §16(ERP 同步硬化) | 2026-02-10_10-35-30-p10-production-hardening.csv | 2026-02-10_10-35-30-p10-production-hardening.csv | 2026-02-10 | DONE | server/scripts/regression-integrations.sh | 4xx dead_letter / 5xx+timeout retry |
|
||||
| P10E3 | Outbox失败分类与重试语义强化 | §16(Outbox 可靠性) | 2026-02-10_10-35-30-p10-production-hardening.csv | 2026-02-10_10-35-30-p10-production-hardening.csv | 2026-02-10 | DONE | server/scripts/regression-integrations.sh | none |
|
||||
| P10E4 | 集成回归脚本引入本地Mock ERP | §16(回归工程化) | 2026-02-10_10-35-30-p10-production-hardening.csv | 2026-02-10_10-35-30-p10-production-hardening.csv | 2026-02-10 | DONE | server/scripts/regression-integrations.sh | 脚本内嵌 Node mock server |
|
||||
| P10M1 | invoicePool二阶段拆分(读路径) | §16(维护性治理) | 2026-02-10_10-35-30-p10-production-hardening.csv | 2026-02-10_10-35-30-p10-production-hardening.csv | 2026-02-10 | DONE | node --check invoicePool 主/子模块 | none |
|
||||
| P10M2 | invoicePool二阶段拆分回归与基线更新 | §16(回归与文档) | 2026-02-10_10-35-30-p10-production-hardening.csv | 2026-02-10_10-35-30-p10-production-hardening.csv | 2026-02-10 | DONE | server/scripts/regression-verification.sh + regression-workflow-actions.sh | none |
|
||||
| P10G1 | 矩阵与执行合同同步到P10 | §16(状态治理) | 2026-02-10_10-35-30-p10-production-hardening.csv | 2026-02-10_10-35-30-p10-production-hardening.csv | 2026-02-10 | DONE | scripts/check-minimal.sh | 覆盖 P5-P10 全量 |
|
||||
| G0 | P11/P12执行合同建档 | §16(执行合同治理) | 2026-02-11-p11-p12-governance-mobile.csv | 2026-02-11-p11-p12-governance-mobile.csv | 2026-02-11 | DONE | manual | none |
|
||||
| G1 | Feature Flag模型与评估服务 | §16(灰度治理) | 2026-02-11-p11-p12-governance-mobile.csv | 2026-02-11-p11-p12-governance-mobile.csv | 2026-02-11 | DONE | cd server && npm run prisma:validate | none |
|
||||
| G2 | 开关管理API与审计 | §16(灰度治理) | 2026-02-11-p11-p12-governance-mobile.csv | 2026-02-11-p11-p12-governance-mobile.csv | 2026-02-11 | DONE | node --check server/src/routes/featureFlags.js | none |
|
||||
| G3 | ERP灰度接入(pay+手动sync) | §16(外部集成灰度) | 2026-02-11-p11-p12-governance-mobile.csv | 2026-02-11-p11-p12-governance-mobile.csv | 2026-02-11 | DONE | server/scripts/regression-integrations.sh | 补齐department_id上下文 |
|
||||
| G4 | 验真开关统一收口(路由+服务+作业) | §16(验真灰度) | 2026-02-11-p11-p12-governance-mobile.csv | 2026-02-11-p11-p12-governance-mobile.csv | 2026-02-11 | DONE | server/scripts/regression-verification.sh | 判定统一收口 |
|
||||
| G5 | 管理后台开关页 | §16(运营治理) | 2026-02-11-p11-p12-governance-mobile.csv | 2026-02-11-p11-p12-governance-mobile.csv | 2026-02-11 | DONE | client:typecheck/build | none |
|
||||
| G6 | 回归脚本与文档收口 | §16(回归工程化) | 2026-02-11-p11-p12-governance-mobile.csv | 2026-02-11-p11-p12-governance-mobile.csv | 2026-02-11 | DONE | server/scripts/regression-feature-flags.sh | none |
|
||||
| H1 | 安全与压测门槛 | §16(非功能治理) | 2026-02-11-p11-p12-governance-mobile.csv | 2026-02-11-p11-p12-governance-mobile.csv | 2026-02-11 | DONE | server/scripts/security-baseline.sh + benchmark-dashboard.sh | none |
|
||||
| M1 | PWA基础设施 | §16(移动端治理) | 2026-02-11-p11-p12-governance-mobile.csv | 2026-02-11-p11-p12-governance-mobile.csv | 2026-02-11 | DONE | client:typecheck/build | none |
|
||||
| M2 | 移动 PDF 发票与离线上传队列 | §16(移动端治理) | 2026-02-11-p11-p12-governance-mobile.csv | 2026-02-11-p11-p12-governance-mobile.csv | 2026-02-11 | DONE | manual + client:typecheck/build | iOS前台恢复重放 |
|
||||
| M3 | 移动审批快捷处理 | §16(移动端治理) | 2026-02-11-p11-p12-governance-mobile.csv | 2026-02-11-p11-p12-governance-mobile.csv | 2026-02-11 | DONE | manual + client:typecheck/build | none |
|
||||
| M4 | P12验收与收口 | §16(状态治理) | 2026-02-11-p11-p12-governance-mobile.csv | 2026-02-11-p11-p12-governance-mobile.csv | 2026-02-11 | DONE | docs/mobile/pwa-regression-checklist.md | none |
|
||||
|
||||
| P13-0 | P13执行合同建档 | §16(执行合同治理) | 2026-02-12_01-09-41-p13-l5-governance.csv | 2026-02-12_01-09-41-p13-l5-governance.csv | 2026-02-12 | DONE | manual | none |
|
||||
| P13-1 | 后端单元测试框架引入 | §16(测试工程化) | 2026-02-12_01-09-41-p13-l5-governance.csv | 2026-02-12_01-09-41-p13-l5-governance.csv | 2026-02-12 | DONE | cd server && npm test | Vitest底座落地 |
|
||||
| P13-2 | 核心服务单元测试补齐 | §16(测试工程化) | 2026-02-12_01-09-41-p13-l5-governance.csv | 2026-02-12_01-09-41-p13-l5-governance.csv | 2026-02-12 | DONE | cd server && npm run test:coverage | 覆盖 featureFlags/verification/integrations dispatcher |
|
||||
| P13-3 | OpenAPI自动文档接入 | §16(治理可观测性) | 2026-02-12_01-09-41-p13-l5-governance.csv | 2026-02-12_01-09-41-p13-l5-governance.csv | 2026-02-12 | DONE | /api/docs + /api/docs/json(非生产) | 双闸条件:非生产+开关开启 |
|
||||
| P13-4 | SLI-SLO与错误预算落地 | §16(非功能治理) | 2026-02-12_01-09-41-p13-l5-governance.csv | 2026-02-12_01-09-41-p13-l5-governance.csv | 2026-02-12 | DONE | docs/ops/slo.md + deploy/prometheus/alerts-slo.yml | none |
|
||||
| P13-5 | 回归脚本结构化报告输出 | §16(回归工程化) | 2026-02-12_01-09-41-p13-l5-governance.csv | 2026-02-12_01-09-41-p13-l5-governance.csv | 2026-02-12 | DONE | server/scripts/regression-all.sh --json-report | 报告 schema_version=1.0 |
|
||||
| P13-6 | CI回归报告归档 | §16(CI治理) | 2026-02-12_01-09-41-p13-l5-governance.csv | 2026-02-12_01-09-41-p13-l5-governance.csv | 2026-02-12 | DONE | .github/workflows/ci-regression.yml artifact | run_id+sha 可追溯 |
|
||||
| P13-7 | 变更失败率统计脚本 | §16(DORA 指标治理) | 2026-02-12_01-09-41-p13-l5-governance.csv | 2026-02-12_01-09-41-p13-l5-governance.csv | 2026-02-12 | DONE | python3 scripts/cfr_report.py --window 7d,30d | failed_commit=回归失败或24h热修 |
|
||||
| P13-8 | P13验收与矩阵收口 | §16(状态治理) | 2026-02-12_01-09-41-p13-l5-governance.csv | 2026-02-12_01-09-41-p13-l5-governance.csv | 2026-02-12 | DONE | check-minimal + regression-all + validate-feature-matrix | none |
|
||||
|
||||
| P14-0 | P14执行合同建档 | §16(执行合同治理) | 2026-02-13_00-11-56-p14-l5-operationalization.csv | 2026-02-13_00-11-56-p14-l5-operationalization.csv | 2026-02-13 | DONE | manual | none |
|
||||
| P14-1 | 回归报告Schema固化 | §16(报告Schema) | 2026-02-13_00-11-56-p14-l5-operationalization.csv | 2026-02-13_00-11-56-p14-l5-operationalization.csv | 2026-02-13 | DONE | scripts/validate_regression_report.py | none |
|
||||
| P14-2 | CI回归摘要发布 | §16(CI摘要) | 2026-02-13_00-11-56-p14-l5-operationalization.csv | 2026-02-13_00-11-56-p14-l5-operationalization.csv | 2026-02-13 | DONE | manual | none |
|
||||
| P14-3 | CFR自动周/月报 | §16(CFR报告) | 2026-02-13_00-11-56-p14-l5-operationalization.csv | 2026-02-13_00-11-56-p14-l5-operationalization.csv | 2026-02-13 | DONE | scripts/cfr_report.py | none |
|
||||
| P14-4 | 高风险服务单测扩容 | §16(单测覆盖率) | 2026-02-13_00-11-56-p14-l5-operationalization.csv | 2026-02-13_00-11-56-p14-l5-operationalization.csv | 2026-02-13 | DONE | cd server && npm run test:coverage | 仅纯单测 |
|
||||
| P14-5 | 覆盖率门禁渐进 | §16(覆盖率门禁) | 2026-02-13_00-11-56-p14-l5-operationalization.csv | 2026-02-13_00-11-56-p14-l5-operationalization.csv | 2026-02-13 | DONE | scripts/coverage_gate.js | none |
|
||||
| P14-6 | OpenAPI覆盖扩展与漂移检查 | §16(OpenAPI覆盖扩展) | 2026-02-13_00-11-56-p14-l5-operationalization.csv | 2026-02-13_00-11-56-p14-l5-operationalization.csv | 2026-02-13 | DONE | scripts/openapi_diff_check.py | none |
|
||||
| P14-7 | 分布式追踪最小落地 | §16(链路追踪) | 2026-02-13_00-11-56-p14-l5-operationalization.csv | 2026-02-13_00-11-56-p14-l5-operationalization.csv | 2026-02-13 | DONE | manual | none |
|
||||
| P14-8 | P14验收与矩阵收口 | §16(验收与同步) | 2026-02-13_00-11-56-p14-l5-operationalization.csv | 2026-02-13_00-11-56-p14-l5-operationalization.csv | 2026-02-13 | DONE | scripts/check-minimal.sh | none |
|
||||
|
||||
|
||||
| P15A-0 | P15A执行合同建档 | §17(权限解耦治理) | 2026-03-06_14-30-00-p15a-l5-permission-decouple.csv | 2026-03-06_14-30-00-p15a-l5-permission-decouple.csv | 2026-03-06 | DONE | CSV 校验 | none |
|
||||
| P15A-1 | 常量字典与角色补齐 | §17(权限解耦治理) | 2026-03-06_14-30-00-p15a-l5-permission-decouple.csv | 2026-03-06_14-30-00-p15a-l5-permission-decouple.csv | 2026-03-07 | DONE | server:test | leave.* 权限与角色映射落地 |
|
||||
| P15A-2 | 工作流动态鉴权剥离 | §17(权限解耦治理) | 2026-03-06_14-30-00-p15a-l5-permission-decouple.csv | 2026-03-06_14-30-00-p15a-l5-permission-decouple.csv | 2026-03-07 | DONE | server:test + regression-workflow-actions | workflow 审批按 entityType 动态鉴权 |
|
||||
| P15A-3 | 前端路由与菜单显隐域解耦 | §17(权限解耦治理) | 2026-03-06_14-30-00-p15a-l5-permission-decouple.csv | 2026-03-06_14-30-00-p15a-l5-permission-decouple.csv | 2026-03-07 | DONE | client:typecheck/build | 复用审批入口支持 leave.approve |
|
||||
| P15A-4 | OpenAPI Tag分离 | §17(权限解耦治理) | 2026-03-06_14-30-00-p15a-l5-permission-decouple.csv | 2026-03-06_14-30-00-p15a-l5-permission-decouple.csv | 2026-03-07 | DONE | /api/docs/json | leave 路由独立归组 |
|
||||
| P15A-5 | P15A全量回归测试 | §17(权限解耦治理) | 2026-03-06_14-30-00-p15a-l5-permission-decouple.csv | 2026-03-06_14-30-00-p15a-l5-permission-decouple.csv | 2026-03-07 | DONE | regression-all | 报销主流程零回归 |
|
||||
| P15B-0 | P15B执行合同建档 | §17(请假V1治理) | 2026-03-06_14-30-00-p15b-l5-leave-v1.csv | 2026-03-06_14-30-00-p15b-l5-leave-v1.csv | 2026-03-06 | DONE | CSV 校验 | none |
|
||||
| P15B-1 | 国际化四层模型扩展 | §17(请假V1治理) | 2026-03-06_14-30-00-p15b-l5-leave-v1.csv | 2026-03-06_14-30-00-p15b-l5-leave-v1.csv | 2026-03-07 | DONE | prisma migrate dev + prisma generate | LeaveType / LeavePolicy / LeaveLedger / LeaveRequest 扩展完成 |
|
||||
| P15B-2 | HR业务基础类型维表API | §17(请假V1治理) | 2026-03-06_14-30-00-p15b-l5-leave-v1.csv | 2026-03-06_14-30-00-p15b-l5-leave-v1.csv | 2026-03-07 | DONE | manual + server:test | leave-types CRUD 与策略绑定完成 |
|
||||
| P15B-2A | Leave申请列表接口 | §17(请假V1治理) | 2026-03-06_14-30-00-p15b-l5-leave-v1.csv | 2026-03-06_14-30-00-p15b-l5-leave-v1.csv | 2026-03-07 | DONE | manual | 支持本人/全量视角列表查询 |
|
||||
| P15B-3 | 天数预检与隔离碰撞强设闸 | §17(请假V1治理) | 2026-03-06_14-30-00-p15b-l5-leave-v1.csv | 2026-03-06_14-30-00-p15b-l5-leave-v1.csv | 2026-03-07 | DONE | manual leave flow | 半天粒度天数与冲突校验返回 422 |
|
||||
| P15B-4 | 状态机与冻结账本流转闭环 | §17(请假V1治理) | 2026-03-06_14-30-00-p15b-l5-leave-v1.csv | 2026-03-06_14-30-00-p15b-l5-leave-v1.csv | 2026-03-07 | DONE | server:test + manual leave flow | reserve/release/consume 账本联动 workflow 完成 |
|
||||
| P15B-4A | Leave撤回与冻结释放接口 | §17(请假V1治理) | 2026-03-06_14-30-00-p15b-l5-leave-v1.csv | 2026-03-06_14-30-00-p15b-l5-leave-v1.csv | 2026-03-07 | DONE | manual leave flow | 撤回恢复 draft 并释放冻结额度 |
|
||||
| P15B-5 | Leave申请前端模块集成 | §17(请假V1治理) | 2026-03-06_14-30-00-p15b-l5-leave-v1.csv | 2026-03-06_14-30-00-p15b-l5-leave-v1.csv | 2026-03-07 | DONE | client:typecheck/build | 请假页面、菜单、路由与审批详情联动完成 |
|
||||
| P15B-6 | P15B验收联调测试 | §17(请假V1治理) | 2026-03-06_14-30-00-p15b-l5-leave-v1.csv | 2026-03-06_14-30-00-p15b-l5-leave-v1.csv | 2026-03-07 | DONE | regression-all + manual leave flow | 创建/提交/审批/冲突/撤回全链路通过 |
|
||||
|
||||
| P16A-0 | P16A执行合同建档 | §18(主数据核心治理) | 2026-03-07_13-47-05-p16a-l5-master-data-core.csv | 2026-03-07_13-47-05-p16a-l5-master-data-core.csv | 2026-03-07 | DONE | CSV 校验 | P16A仅建主数据本体不批量改造既有业务 |
|
||||
| P16A-1 | Prisma主数据模型与迁移 | §18(主数据核心治理) | 2026-03-07_13-47-05-p16a-l5-master-data-core.csv | 2026-03-07_13-47-05-p16a-l5-master-data-core.csv | 2026-03-07 | DONE | prisma:validate + prisma:migrate + prisma:generate | LegalEntity/CostCenter/DocumentCategory 与枚举迁移完成 |
|
||||
| P16A-2 | 权限与种子补齐 | §18(主数据核心治理) | 2026-03-07_13-47-05-p16a-l5-master-data-core.csv | 2026-03-07_13-47-05-p16a-l5-master-data-core.csv | 2026-03-07 | DONE | server:test + seed:config + seed:dev-users | 新增 masterdata.view/manage 与主数据演示种子 |
|
||||
| P16A-3 | 后端主数据CRUD API | §18(主数据核心治理) | 2026-03-07_13-47-05-p16a-l5-master-data-core.csv | 2026-03-07_13-47-05-p16a-l5-master-data-core.csv | 2026-03-07 | DONE | server:test + manual master-data flow | `/api/master-data/*` 三类主数据 CRUD/归档与唯一性校验可用 |
|
||||
| P16A-4 | 前端主数据入口与管理页 | §18(主数据核心治理) | 2026-03-07_13-47-05-p16a-l5-master-data-core.csv | 2026-03-07_13-47-05-p16a-l5-master-data-core.csv | 2026-03-07 | DONE | client:typecheck/build | `MasterDataPage` 单页多 Tab 与菜单路由落地 |
|
||||
| P16A-5 | 矩阵与文档同步 | §18(主数据核心治理) | 2026-03-07_13-47-05-p16a-l5-master-data-core.csv | 2026-03-07_13-47-05-p16a-l5-master-data-core.csv | 2026-03-07 | DONE | validate-feature-matrix | 状态矩阵范围、事实源与 P16A 条目同步完成 |
|
||||
| P16A-6 | P16A回归与安全收口 | §18(主数据核心治理) | 2026-03-07_13-47-05-p16a-l5-master-data-core.csv | 2026-03-07_13-47-05-p16a-l5-master-data-core.csv | 2026-03-07 | DONE | regression-all + manual security | 主数据 CRUD/归档/越权负测与既有主流程回归通过 |
|
||||
|
||||
| P16B-0 | P16B执行合同建档 | §18(日历主数据治理) | 2026-03-07_16-22-07-p16b-l5-holiday-calendar.csv | 2026-03-07_16-22-07-p16b-l5-holiday-calendar.csv | 2026-03-07 | DONE | CSV 校验 | P16B仅补节假日历主数据与关闭态算法增强 |
|
||||
| P16B-1 | Prisma日历模型与迁移 | §18(日历主数据治理) | 2026-03-07_16-22-07-p16b-l5-holiday-calendar.csv | 2026-03-07_16-22-07-p16b-l5-holiday-calendar.csv | 2026-03-07 | DONE | prisma:validate + prisma:migrate + prisma:generate | HolidayCalendar/HolidayCalendarDay 与法体默认日历关联落地 |
|
||||
| P16B-2 | 日历开关与种子补齐 | §18(日历主数据治理) | 2026-03-07_16-22-07-p16b-l5-holiday-calendar.csv | 2026-03-07_16-22-07-p16b-l5-holiday-calendar.csv | 2026-03-07 | DONE | server:test + seed:config + seed:dev-users | `leave_holiday_calendar` 双闸开关与演示日历种子完成 |
|
||||
| P16B-3 | 后端日历主数据API | §18(日历主数据治理) | 2026-03-07_16-22-07-p16b-l5-holiday-calendar.csv | 2026-03-07_16-22-07-p16b-l5-holiday-calendar.csv | 2026-03-07 | DONE | server:test + manual calendar flow | `/api/master-data/holiday-calendars*` 列表/维护/日期覆盖/归档可用 |
|
||||
| P16B-4 | 前端主数据日历Tab | §18(日历主数据治理) | 2026-03-07_16-22-07-p16b-l5-holiday-calendar.csv | 2026-03-07_16-22-07-p16b-l5-holiday-calendar.csv | 2026-03-07 | DONE | client:typecheck/build | `MasterDataPage` 新增日历 Tab 与功能开关展示文案 |
|
||||
| P16B-5 | 请假日历增强计算器 | §18(日历主数据治理) | 2026-03-07_16-22-07-p16b-l5-holiday-calendar.csv | 2026-03-07_16-22-07-p16b-l5-holiday-calendar.csv | 2026-03-07 | DONE | server:test + manual leave flow | 关闭开关保持自然日 开启后按法体默认日历计算 requestedDays |
|
||||
| P16B-6 | P16B回归与矩阵收口 | §18(日历主数据治理) | 2026-03-07_16-22-07-p16b-l5-holiday-calendar.csv | 2026-03-07_16-22-07-p16b-l5-holiday-calendar.csv | 2026-03-07 | DONE | regression-all + manual flag toggle | finance 只读 finance_mgr 可维护 默认日历禁止归档 且请假 6 天→4 天验证通过 |
|
||||
|
||||
| P16C-0 | P16C执行合同建档 | §18(供应商主数据治理) | 2026-03-07_17-14-39-p16c-l5-suppliers.csv | 2026-03-07_17-14-39-p16c-l5-suppliers.csv | 2026-03-07 | DONE | CSV 校验 | P16C仅补供应商主数据与主数据页入口 |
|
||||
| P16C-1 | Prisma供应商模型与迁移 | §18(供应商主数据治理) | 2026-03-07_17-14-39-p16c-l5-suppliers.csv | 2026-03-07_17-14-39-p16c-l5-suppliers.csv | 2026-03-07 | DONE | prisma:validate + prisma:migrate + prisma:generate | Supplier 模型、法体关联与迁移落地 |
|
||||
| P16C-2 | 种子与权限边界补齐 | §18(供应商主数据治理) | 2026-03-07_17-14-39-p16c-l5-suppliers.csv | 2026-03-07_17-14-39-p16c-l5-suppliers.csv | 2026-03-07 | DONE | server:test + seed:config + seed:dev-users | 沿用 masterdata.view/manage 并补开发演示供应商 |
|
||||
| P16C-3 | 后端供应商CRUD API | §18(供应商主数据治理) | 2026-03-07_17-14-39-p16c-l5-suppliers.csv | 2026-03-07_17-14-39-p16c-l5-suppliers.csv | 2026-03-07 | DONE | server:test + manual supplier flow | `/api/master-data/suppliers*` 列表/创建/更新/归档可用 |
|
||||
| P16C-4 | 前端供应商Tab与API封装 | §18(供应商主数据治理) | 2026-03-07_17-14-39-p16c-l5-suppliers.csv | 2026-03-07_17-14-39-p16c-l5-suppliers.csv | 2026-03-07 | DONE | client:typecheck/build | `MasterDataPage` 新增供应商 Tab 与 API 封装完成 |
|
||||
| P16C-5 | 矩阵与蓝图事实源同步 | §18(供应商主数据治理) | 2026-03-07_17-14-39-p16c-l5-suppliers.csv | 2026-03-07_17-14-39-p16c-l5-suppliers.csv | 2026-03-07 | DONE | validate-feature-matrix | P16C 条目、范围与事实源同步完成 |
|
||||
| P16C-6 | P16C回归与安全收口 | §18(供应商主数据治理) | 2026-03-07_17-14-39-p16c-l5-suppliers.csv | 2026-03-07_17-14-39-p16c-l5-suppliers.csv | 2026-03-07 | DONE | regression-all + manual supplier flow | finance 只读 finance_mgr 可维护 employee 无查看权限 且重复/归档幂等验证通过 |
|
||||
|
||||
| R9-0 | R9执行合同建档 | N/A | 2026-03-07_18-15-03-r9-g2-p19-roadmap-refresh.csv | 2026-03-07_18-15-03-r9-g2-p19-roadmap-refresh.csv | 2026-03-07 | DONE | CSV 校验 | 新路线图合同建档并校验通过 |
|
||||
| R9-1 | 冻结P16C之后的新阶段顺序 | N/A | 2026-03-07_18-15-03-r9-g2-p19-roadmap-refresh.csv | 2026-03-07_18-15-03-r9-g2-p19-roadmap-refresh.csv | 2026-03-07 | DONE | validate-feature-matrix | 固定顺序为 G2 → P17A → P17B → P18A → P18B → P19 |
|
||||
| R9-2 | 冻结Skills与MCP启用边界 | N/A | 2026-03-07_18-15-03-r9-g2-p19-roadmap-refresh.csv | 2026-03-07_18-15-03-r9-g2-p19-roadmap-refresh.csv | 2026-03-07 | DONE | manual | 继续固定 `plan/testing`,MCP 默认关闭且首次启用前补 `docs/mcp-tools.md` |
|
||||
| R9-3 | 声明旧P16到P18蓝图为历史快照 | N/A | 2026-03-07_18-15-03-r9-g2-p19-roadmap-refresh.csv | 2026-03-07_18-15-03-r9-g2-p19-roadmap-refresh.csv | 2026-03-07 | DONE | validate-feature-matrix | 旧蓝图保持不可变,后续阶段不回写历史 CSV |
|
||||
|
||||
| G2-0 | G2执行合同建档 | N/A | 2026-03-07_18-16-00-g2-l5-cross-domain-bridge.csv | 2026-03-07_18-16-00-g2-l5-cross-domain-bridge.csv | 2026-03-07 | DONE | CSV 校验 | G2 只处理预算/编号/工作流跨域桥接 |
|
||||
| G2-1 | 扩展预算与工作流跨域兼容模型 | N/A | 2026-03-07_18-16-00-g2-l5-cross-domain-bridge.csv | 2026-03-07_18-16-00-g2-l5-cross-domain-bridge.csv | 2026-03-07 | DONE | prisma:validate + prisma:migrate + prisma:generate | BudgetPool / BudgetLedgerEntry / WorkflowInstance 补齐桥接字段并保持旧报销兼容 |
|
||||
| G2-2 | 补齐预算接口与通用单据编号读取 | N/A | 2026-03-07_18-16-00-g2-l5-cross-domain-bridge.csv | 2026-03-07_18-16-00-g2-l5-cross-domain-bridge.csv | 2026-03-07 | DONE | server:test | 预算 API 支持法体/成本中心维度,新增通用 document sequence 读取与发号服务 |
|
||||
| G2-3 | 扩展权限解析与工作流实体元数据 | N/A | 2026-03-07_18-16-00-g2-l5-cross-domain-bridge.csv | 2026-03-07_18-16-00-g2-l5-cross-domain-bridge.csv | 2026-03-07 | DONE | server:test + regression-workflow-actions | procurement 审批权限与 workflow 实体元数据扩展完成 |
|
||||
| G2-4 | 升级预算前端为多作用域模式 | N/A | 2026-03-07_18-16-00-g2-l5-cross-domain-bridge.csv | 2026-03-07_18-16-00-g2-l5-cross-domain-bridge.csv | 2026-03-07 | DONE | client:typecheck/build | `BudgetsPage` 支持全局/部门/法体+成本中心三种预算模式 |
|
||||
| G2-5 | 同步R9与G2事实源 | N/A | 2026-03-07_18-16-00-g2-l5-cross-domain-bridge.csv | 2026-03-07_18-16-00-g2-l5-cross-domain-bridge.csv | 2026-03-07 | DONE | validate-feature-matrix | Feature Matrix 范围、事实源与 R9/G2 条目同步完成 |
|
||||
| G2-6 | G2回归与安全收口 | N/A | 2026-03-07_18-16-00-g2-l5-cross-domain-bridge.csv | 2026-03-07_18-16-00-g2-l5-cross-domain-bridge.csv | 2026-03-07 | DONE | regression-all + client:typecheck/build | 预算/编号/工作流跨域桥接回归通过,报销主流程零回归 |
|
||||
|
||||
| P17A-0 | P17A执行合同建档 | N/A | 2026-03-07_19-33-09-p17a-l5-procurement-core.csv | 2026-03-07_19-33-09-p17a-l5-procurement-core.csv | 2026-03-07 | DONE | CSV 校验 | 轻采购核心合同建档并冻结仅做申请主流程边界 |
|
||||
| P17A-1 | 采购核心Prisma模型与迁移 | N/A | 2026-03-07_19-33-09-p17a-l5-procurement-core.csv | 2026-03-07_19-33-09-p17a-l5-procurement-core.csv | 2026-03-07 | DONE | prisma:validate + server:test | PurchaseRequest/PurchaseRequestItem/PurchaseAttachment 与 WorkflowInstance 采购关联落地 |
|
||||
| P17A-2 | 采购权限与系统种子补齐 | N/A | 2026-03-07_19-33-09-p17a-l5-procurement-core.csv | 2026-03-07_19-33-09-p17a-l5-procurement-core.csv | 2026-03-07 | DONE | server:test + seed:config | procurement 权限映射、`PR_STANDARD` 单据分类与单步经理审批种子完成 |
|
||||
| P17A-3 | 采购申请后端API与工作流接入 | N/A | 2026-03-07_19-33-09-p17a-l5-procurement-core.csv | 2026-03-07_19-33-09-p17a-l5-procurement-core.csv | 2026-03-07 | DONE | server:test + regression-workflow-actions | `/api/purchase-requests*` 草稿/提交/撤回/附件接口与 workflow 待办联动可用 |
|
||||
| P17A-4 | 采购前端入口与申请页 | N/A | 2026-03-07_19-33-09-p17a-l5-procurement-core.csv | 2026-03-07_19-33-09-p17a-l5-procurement-core.csv | 2026-03-07 | DONE | client:typecheck/build | `PurchaseRequestsPage`、菜单、路由与移动审批详情采购展示完成 |
|
||||
| P17A-5 | OpenAPI与合同文档同步 | N/A | 2026-03-07_19-33-09-p17a-l5-procurement-core.csv | 2026-03-07_19-33-09-p17a-l5-procurement-core.csv | 2026-03-07 | DONE | node --check + validate-feature-matrix | 采购路由标签、合同锚点与矩阵事实源同步完成 |
|
||||
| P17A-6 | P17A回归与验收收口 | N/A | 2026-03-07_19-33-09-p17a-l5-procurement-core.csv | 2026-03-07_19-33-09-p17a-l5-procurement-core.csv | 2026-03-07 | DONE | regression-all + client:typecheck/build | 采购草稿/附件/提交/撤回/审批通过,且报销/请假/主数据零回归 |
|
||||
|
||||
|
||||
| P17B-0 | P17B执行合同建档 | N/A | 2026-03-07_21-00-37-p17b-l5-procurement-budget-archive.csv | 2026-03-07_21-00-37-p17b-l5-procurement-budget-archive.csv | 2026-03-07 | DONE | CSV 校验 | 采购预算闭环与归档执行合同建档,冻结仅做预算预留确认释放与 PO/合同归档 |
|
||||
| P17B-1 | 采购预算预留确认释放语义 | N/A | 2026-03-07_21-00-37-p17b-l5-procurement-budget-archive.csv | 2026-03-07_21-00-37-p17b-l5-procurement-budget-archive.csv | 2026-03-07 | DONE | server:test + regression-all | `purchase_request` 提交写 reserve、审批写 confirm、撤回/驳回/退回写 release,且兼容报销旧预算语义 |
|
||||
| P17B-2 | PO合同归档模型与接口 | N/A | 2026-03-07_21-00-37-p17b-l5-procurement-budget-archive.csv | 2026-03-07_21-00-37-p17b-l5-procurement-budget-archive.csv | 2026-03-07 | DONE | server:test + regression-procurement | `PurchaseOrderArchive`、采购详情归档读取与幂等保存接口可用,仅管理角色可操作 |
|
||||
| P17B-3 | 工作流联动预算释放 | N/A | 2026-03-07_21-00-37-p17b-l5-procurement-budget-archive.csv | 2026-03-07_21-00-37-p17b-l5-procurement-budget-archive.csv | 2026-03-07 | DONE | server:test + regression-workflow-actions | workflow 审批通过/驳回/退回与采购撤回链路已联动预算预留确认释放,并通过幂等释放助手收口 |
|
||||
| P17B-4 | 前端归档入口与采购E2E | N/A | 2026-03-07_21-00-37-p17b-l5-procurement-budget-archive.csv | 2026-03-07_21-00-37-p17b-l5-procurement-budget-archive.csv | 2026-03-07 | DONE | client:typecheck/build + playwright | `PurchaseRequestsPage` 新增归档区块,采购主链路 E2E 覆盖员工提单、经理审批、财务归档 |
|
||||
| P17B-5 | 安全文档与接口说明 | N/A | 2026-03-07_21-00-37-p17b-l5-procurement-budget-archive.csv | 2026-03-07_21-00-37-p17b-l5-procurement-budget-archive.csv | 2026-03-07 | DONE | node --check + validate-feature-matrix | 采购预算闭环、归档权限边界与矩阵事实源同步完成,主数据读取越权缺口已补齐 |
|
||||
| P17B-6 | P17B回归与安全收口 | N/A | 2026-03-07_21-00-37-p17b-l5-procurement-budget-archive.csv | 2026-03-07_21-00-37-p17b-l5-procurement-budget-archive.csv | 2026-03-07 | DONE | regression-all + client:typecheck/build + playwright | 采购预算闭环、PO归档与全量回归通过,报销/请假/主数据/采购主流程零回归 |
|
||||
|
||||
| P18A-0 | P18A执行合同建档 | N/A | 2026-03-07_22-02-09-p18a-l5-asset-registry-core.csv | 2026-03-07_22-02-09-p18a-l5-asset-registry-core.csv | 2026-03-07 | DONE | CSV 校验 | 固资台账核心执行合同建档并冻结仅做资产分类与资产卡片 |
|
||||
| P18A-1 | 资产Prisma模型与迁移 | N/A | 2026-03-07_22-02-09-p18a-l5-asset-registry-core.csv | 2026-03-07_22-02-09-p18a-l5-asset-registry-core.csv | 2026-03-07 | DONE | prisma:validate + prisma:migrate + prisma:generate | `AssetCategory`、`AssetCard` 与法体/成本中心/采购来源关系落地,且不破坏既有主流程 |
|
||||
| P18A-2 | 资产权限与系统种子 | N/A | 2026-03-07_22-02-09-p18a-l5-asset-registry-core.csv | 2026-03-07_22-02-09-p18a-l5-asset-registry-core.csv | 2026-03-07 | DONE | server:test + seed:config | `asset.*` 权限映射与 `ASSET_CARD_DEFAULT` 系统单据分类补齐完成 |
|
||||
| P18A-3 | 资产分类与卡片后端API | N/A | 2026-03-07_22-02-09-p18a-l5-asset-registry-core.csv | 2026-03-07_22-02-09-p18a-l5-asset-registry-core.csv | 2026-03-07 | DONE | server:test + regression-assets | `/api/asset-categories` 与 `/api/assets` 列表详情创建更新接口可用,采购来源引用校验正确 |
|
||||
| P18A-4 | 资产台账前端入口与页面 | N/A | 2026-03-07_22-02-09-p18a-l5-asset-registry-core.csv | 2026-03-07_22-02-09-p18a-l5-asset-registry-core.csv | 2026-03-07 | DONE | client:typecheck/build | `AssetRegistryPage`、菜单、路由与资产分类/卡片编辑界面可用 |
|
||||
| P18A-5 | OpenAPI与矩阵同步 | N/A | 2026-03-07_22-02-09-p18a-l5-asset-registry-core.csv | 2026-03-07_22-02-09-p18a-l5-asset-registry-core.csv | 2026-03-07 | DONE | node --check + validate-feature-matrix | 资产接口文档标签、合同锚点与矩阵事实源同步完成 |
|
||||
| P18A-6 | P18A回归与验收收口 | N/A | 2026-03-07_22-02-09-p18a-l5-asset-registry-core.csv | 2026-03-07_22-02-09-p18a-l5-asset-registry-core.csv | 2026-03-07 | DONE | regression-all + client:typecheck/build | 资产分类、资产卡片与既有报销/请假/采购/主数据回归全部通过 |
|
||||
|
||||
| P18B-0 | P18B执行合同建档 | N/A | 2026-03-07_22-34-03-p18b-l5-asset-movements-inventory.csv | 2026-03-07_22-34-03-p18b-l5-asset-movements-inventory.csv | 2026-03-07 | DONE | CSV 校验 | 资产流转与盘点执行合同建档并冻结不引入资产审批流 |
|
||||
| P18B-1 | 资产领用归还模型与接口 | N/A | 2026-03-07_22-34-03-p18b-l5-asset-movements-inventory.csv | 2026-03-07_22-34-03-p18b-l5-asset-movements-inventory.csv | 2026-03-07 | DONE | server:test + regression-assets | `AssetAssignment` 与 `/api/assets/:id/assign|return` 落地,支持领用归还再领用并保留不可变历史 |
|
||||
| P18B-2 | 资产调拨模型与接口 | N/A | 2026-03-07_22-34-03-p18b-l5-asset-movements-inventory.csv | 2026-03-07_22-34-03-p18b-l5-asset-movements-inventory.csv | 2026-03-07 | DONE | server:test + regression-assets | `AssetTransfer` 与 `/api/assets/:id/transfer` 落地,调拨时同步归属人与位置并维护 assignment 开闭 |
|
||||
| P18B-3 | 资产盘点模型与接口 | N/A | 2026-03-07_22-34-03-p18b-l5-asset-movements-inventory.csv | 2026-03-07_22-34-03-p18b-l5-asset-movements-inventory.csv | 2026-03-07 | DONE | server:test + regression-assets | `InventoryCheck`/`InventoryCheckItem` 与创建启动录入完成接口可用,盘点结果按资产 upsert |
|
||||
| P18B-4 | 资产流转前端与盘点页 | N/A | 2026-03-07_22-34-03-p18b-l5-asset-movements-inventory.csv | 2026-03-07_22-34-03-p18b-l5-asset-movements-inventory.csv | 2026-03-07 | DONE | client:typecheck/build + playwright | `AssetRegistryPage` 增加领用归还调拨入口,新增 `InventoryChecksPage`、菜单与路由 |
|
||||
| P18B-5 | 安全文档与审计动作同步 | N/A | 2026-03-07_22-34-03-p18b-l5-asset-movements-inventory.csv | 2026-03-07_22-34-03-p18b-l5-asset-movements-inventory.csv | 2026-03-07 | DONE | validate-feature-matrix + regression-assets | 审计动作码 `ASSET_*` 与 `INVENTORY_*` 链路补齐,矩阵事实源与资产回归脚本同步完成 |
|
||||
| P18B-6 | P18B回归与安全收口 | N/A | 2026-03-07_22-34-03-p18b-l5-asset-movements-inventory.csv | 2026-03-07_22-34-03-p18b-l5-asset-movements-inventory.csv | 2026-03-07 | DONE | regression-all + client:typecheck/build + playwright | 资产领用归还调拨盘点闭环通过,且报销/请假/主数据/采购/资产台账零回归 |
|
||||
|
||||
| P19-0 | P19执行合同建档 | N/A | 2026-03-07_23-22-00-p19-l4-integration-readiness.csv | 2026-03-07_23-22-00-p19-l4-integration-readiness.csv | 2026-03-07 | DONE | CSV 校验 | 集成/AI/IM 准备阶段执行合同建档并冻结仅做蓝图与边界 |
|
||||
| P19-1 | 领域事件清单冻结 | N/A | 2026-03-07_23-22-00-p19-l4-integration-readiness.csv | 2026-03-07_23-22-00-p19-l4-integration-readiness.csv | 2026-03-07 | DONE | validate-feature-matrix | `docs/domain-events.md` 冻结采购与资产域对外事件名、触发时机与最小载荷 |
|
||||
| P19-2 | ERP与财务适配边界 | N/A | 2026-03-07_23-22-00-p19-l4-integration-readiness.csv | 2026-03-07_23-22-00-p19-l4-integration-readiness.csv | 2026-03-07 | DONE | validate-feature-matrix | `docs/integration-boundaries.md` 明确主数据同步、采购资产摘要输出与 ERP 禁入规则 |
|
||||
| P19-3 | IM与AI边界冻结 | N/A | 2026-03-07_23-22-00-p19-l4-integration-readiness.csv | 2026-03-07_23-22-00-p19-l4-integration-readiness.csv | 2026-03-07 | DONE | validate-feature-matrix | 冻结飞书/企微通知与 AI 只读辅助边界,明确不得绕过权限与人工复核 |
|
||||
| P19-4 | MCP与文档基线 | N/A | 2026-03-07_23-22-00-p19-l4-integration-readiness.csv | 2026-03-07_23-22-00-p19-l4-integration-readiness.csv | 2026-03-07 | DONE | manual | 明确 MCP 默认关闭,首次启用前需补 `docs/mcp-tools.md` 并生成工具目录 |
|
||||
| P19-5 | 文档与矩阵同步 | N/A | 2026-03-07_23-22-00-p19-l4-integration-readiness.csv | 2026-03-07_23-22-00-p19-l4-integration-readiness.csv | 2026-03-07 | DONE | validate-feature-matrix | Feature Matrix 标题、范围、事实源与 P19 条目同步到 `P5-P19` |
|
||||
| P19-6 | P19蓝图验收收口 | N/A | 2026-03-07_23-22-00-p19-l4-integration-readiness.csv | 2026-03-07_23-22-00-p19-l4-integration-readiness.csv | 2026-03-07 | DONE | validate-issues-csv + validate-feature-matrix | P19 仅交付文档蓝图且不包含运行时代码改动,校验通过后收口 |
|
||||
|
||||
| P19IM1-0 | P19IM1执行合同建档 | N/A | 2026-03-08_12-18-10-p19-im-1-l5-collaboration-adapter.csv | 2026-03-08_12-18-10-p19-im-1-l5-collaboration-adapter.csv | 2026-03-08 | DONE | CSV 校验 | 企微协同适配一期执行合同建档,冻结仅做群机器人 + 深链 + Outbox 派发 |
|
||||
| P19IM1-1 | 通知渠道CRUD与路由配置 | N/A | 2026-03-08_12-18-10-p19-im-1-l5-collaboration-adapter.csv | 2026-03-08_12-18-10-p19-im-1-l5-collaboration-adapter.csv | 2026-03-08 | DONE | server:test + node --check | `NotificationChannel` 创建更新查询与角色 / 业务域 / 类型路由校验落地,不新增 Prisma 迁移 |
|
||||
| P19IM1-2 | Outbox化IM派发与企微适配器 | N/A | 2026-03-08_12-18-10-p19-im-1-l5-collaboration-adapter.csv | 2026-03-08_12-18-10-p19-im-1-l5-collaboration-adapter.csv | 2026-03-08 | DONE | server:test + regression-im-notifier | `notification.im` 真实走 `IntegrationOutbox`,支持企微 `mock` / `wecom_webhook` 并与邮件拆分 |
|
||||
| P19IM1-3 | 业务事件接入与通知类型规范化 | N/A | 2026-03-08_12-18-10-p19-im-1-l5-collaboration-adapter.csv | 2026-03-08_12-18-10-p19-im-1-l5-collaboration-adapter.csv | 2026-03-08 | DONE | server:test + regression-all | 报销 / 请假 / 采购 / 资产 / 盘点的首批待办与结果通知统一接入 IM 入队 |
|
||||
| P19IM1-4 | 前端渠道管理页与导航入口 | N/A | 2026-03-08_12-18-10-p19-im-1-l5-collaboration-adapter.csv | 2026-03-08_12-18-10-p19-im-1-l5-collaboration-adapter.csv | 2026-03-08 | DONE | client:typecheck/build | 新增 `NotificationChannelsPage`、`/system/notification-channels` 路由与菜单入口,支持测试发送 |
|
||||
| P19IM1-5 | OpenAPI文档与矩阵同步 | N/A | 2026-03-08_12-18-10-p19-im-1-l5-collaboration-adapter.csv | 2026-03-08_12-18-10-p19-im-1-l5-collaboration-adapter.csv | 2026-03-08 | DONE | validate-feature-matrix | 集成边界、领域事件与 Feature Matrix 更新到 `P5-P19+IM-1` 并纳入新合同事实源 |
|
||||
| P19IM1-6 | P19IM1回归与验收收口 | N/A | 2026-03-08_12-18-10-p19-im-1-l5-collaboration-adapter.csv | 2026-03-08_12-18-10-p19-im-1-l5-collaboration-adapter.csv | 2026-03-08 | DONE | server:test + regression-all + client:typecheck/build | 企微 mock / webhook、渠道后台、业务入队与回归脚本全部通过,且站内通知 / 邮件零回归 |
|
||||
|
||||
| P19ERP1-0 | P19ERP1执行合同建档 | N/A | 2026-03-08_14-10-53-p19-erp-1-l5-masterdata-journal-bridge.csv | 2026-03-08_14-10-53-p19-erp-1-l5-masterdata-journal-bridge.csv | 2026-03-08 | DONE | CSV 校验 | ERP 主数据同步与报销付款凭证桥接执行合同建档,冻结先入后出与不污染核心域原则 |
|
||||
| P19ERP1-1 | ERP适配契约与集成层模型 | N/A | 2026-03-08_14-10-53-p19-erp-1-l5-masterdata-journal-bridge.csv | 2026-03-08_14-10-53-p19-erp-1-l5-masterdata-journal-bridge.csv | 2026-03-08 | DONE | prisma:validate + server:test | 新增 `IntegrationBinding` / `IntegrationSyncState` 与 ERP provider 扩展契约,且不向核心事务表写 ERP 私有字段 |
|
||||
| P19ERP1-2 | 主数据入站同步服务与接口 | N/A | 2026-03-08_14-10-53-p19-erp-1-l5-masterdata-journal-bridge.csv | 2026-03-08_14-10-53-p19-erp-1-l5-masterdata-journal-bridge.csv | 2026-03-08 | DONE | server:test + regression-integrations | `LegalEntity`、`CostCenter`、`Supplier` 支持 ERP 全量 Pull、状态查询与可选 cron,同步冲突与 skip 语义可追踪 |
|
||||
| P19ERP1-3 | 报销付款凭证切片出站 | N/A | 2026-03-08_14-10-53-p19-erp-1-l5-masterdata-journal-bridge.csv | 2026-03-08_14-10-53-p19-erp-1-l5-masterdata-journal-bridge.csv | 2026-03-08 | DONE | server:test + regression-integrations + regression-all | `reimbursement.paid` 可预览标准 journal slice,并通过 `erp.journal.export` Outbox 导出;旧 `/api/integrations/erp/sync/:id` 继续兼容 |
|
||||
| P19ERP1-4 | ERP管理页与报销详情导出入口 | N/A | 2026-03-08_14-10-53-p19-erp-1-l5-masterdata-journal-bridge.csv | 2026-03-08_14-10-53-p19-erp-1-l5-masterdata-journal-bridge.csv | 2026-03-08 | DONE | client:typecheck/build | 新增 `ErpIntegrationPage`、系统导航入口与报销详情 ERP 导出卡片,支持手动同步与导出反馈 |
|
||||
| P19ERP1-5 | OpenAPI文档与矩阵同步 | N/A | 2026-03-08_14-10-53-p19-erp-1-l5-masterdata-journal-bridge.csv | 2026-03-08_14-10-53-p19-erp-1-l5-masterdata-journal-bridge.csv | 2026-03-08 | DONE | validate-feature-matrix | 集成边界、领域事件、Feature Matrix 与校验器同步到 `P5-P19+IM-1+ERP-1`,并纳入 ERP-1 合同事实源 |
|
||||
| P19ERP1-6 | P19ERP1回归与安全收口 | N/A | 2026-03-08_14-10-53-p19-erp-1-l5-masterdata-journal-bridge.csv | 2026-03-08_14-10-53-p19-erp-1-l5-masterdata-journal-bridge.csv | 2026-03-08 | DONE | server:test + regression-integrations + regression-all + client:typecheck/build | 主数据 Pull、报销凭证切片、ERP 管理入口、开关阻断与 dead_letter 重入全部通过,且既有主流程零回归 |
|
||||
|
||||
|
||||
| P19ERP2-0 | P19ERP2执行合同建档 | N/A | 2026-03-08_22-46-51-p19-erp-2-l5-procurement-commitment-archive.csv | 2026-03-08_22-46-51-p19-erp-2-l5-procurement-commitment-archive.csv | 2026-03-08 | DONE | CSV 校验 | 采购 ERP 双阶段出站执行合同建档,冻结 commitment / accrual / archive summary 三段模型 |
|
||||
| P19ERP2-1 | 采购ERP出站契约与provider扩展 | N/A | 2026-03-08_22-46-51-p19-erp-2-l5-procurement-commitment-archive.csv | 2026-03-08_22-46-51-p19-erp-2-l5-procurement-commitment-archive.csv | 2026-03-08 | DONE | server:test | 扩展 `erp.journal.export` / `erp.procurement.export` 契约、payload、dedupe 与采购 binding 回写规则 |
|
||||
| P19ERP2-2 | 采购审批与归档自动出站 | N/A | 2026-03-08_22-46-51-p19-erp-2-l5-procurement-commitment-archive.csv | 2026-03-08_22-46-51-p19-erp-2-l5-procurement-commitment-archive.csv | 2026-03-08 | DONE | server:test + regression-integrations | 采购审批自动入队 commitment,首次归档自动入队 accrual + summary,且 gate 关闭时仅 skip 不阻断业务 |
|
||||
| P19ERP2-3 | 采购ERP轨道查询与重试接口 | N/A | 2026-03-08_22-46-51-p19-erp-2-l5-procurement-commitment-archive.csv | 2026-03-08_22-46-51-p19-erp-2-l5-procurement-commitment-archive.csv | 2026-03-08 | DONE | server:test + regression-integrations | 新增采购 ERP track / requeue 接口,支持历史补发、失败重试与 archive summary 覆盖同步 |
|
||||
| P19ERP2-4 | 采购详情ERP轨道挂件 | N/A | 2026-03-08_22-46-51-p19-erp-2-l5-procurement-commitment-archive.csv | 2026-03-08_22-46-51-p19-erp-2-l5-procurement-commitment-archive.csv | 2026-03-08 | DONE | client:typecheck/build | `PurchaseRequestsPage` 归档区新增 ERP 三段轨道挂件,按权限区分查看与重试能力 |
|
||||
| P19ERP2-5 | 文档事件与矩阵同步 | N/A | 2026-03-08_22-46-51-p19-erp-2-l5-procurement-commitment-archive.csv | 2026-03-08_22-46-51-p19-erp-2-l5-procurement-commitment-archive.csv | 2026-03-08 | DONE | validate-feature-matrix | 集成边界、领域事件、Feature Matrix 与校验器同步到 `P5-P19+IM-1+ERP-2`,并纳入 ERP-2 合同事实源 |
|
||||
| P19ERP2-6 | P19ERP2回归与验收收口 | N/A | 2026-03-08_22-46-51-p19-erp-2-l5-procurement-commitment-archive.csv | 2026-03-08_22-46-51-p19-erp-2-l5-procurement-commitment-archive.csv | 2026-03-08 | DONE | server:test + regression-integrations + regression-all + client:typecheck/build | 采购双阶段 journal、archive summary 覆盖同步、详情挂件、权限边界与既有 ERP / IM 主流程回归全部通过 |
|
||||
|
||||
| P19ERP3-0 | P19ERP3执行合同建档 | N/A | 2026-03-09_00-10-00-p19-erp-3-l5-asset-ledger-summary.csv | 2026-03-09_00-10-00-p19-erp-3-l5-asset-ledger-summary.csv | 2026-03-09 | DONE | CSV 校验 | 资产 ERP 台账摘要执行合同建档,冻结仅做 asset ledger summary export 与仓库事实对齐 |
|
||||
| P19ERP3-1 | 资产ERP出站契约与provider扩展 | N/A | 2026-03-09_00-10-00-p19-erp-3-l5-asset-ledger-summary.csv | 2026-03-09_00-10-00-p19-erp-3-l5-asset-ledger-summary.csv | 2026-03-09 | DONE | server:test | 新增 `erp.asset.export` 契约、`exportAssetToErp` provider 与 dispatcher / binding 回写规则,不新增核心表 ERP 字段 |
|
||||
| P19ERP3-2 | 资产建卡与财务维度变更自动出站 | N/A | 2026-03-09_00-10-00-p19-erp-3-l5-asset-ledger-summary.csv | 2026-03-09_00-10-00-p19-erp-3-l5-asset-ledger-summary.csv | 2026-03-09 | DONE | server:test + regression-integrations | `POST /api/assets` 与财务维度 patch 自动写入资产 ERP 摘要 outbox,gate 关闭时仅 skip 不阻断业务 |
|
||||
| P19ERP3-3 | 资产ERP轨道查询与重试接口 | N/A | 2026-03-09_00-10-00-p19-erp-3-l5-asset-ledger-summary.csv | 2026-03-09_00-10-00-p19-erp-3-l5-asset-ledger-summary.csv | 2026-03-09 | DONE | server:test + regression-integrations | 新增资产 ERP `track / requeue` 接口,支持脱敏查看、历史补发与失败重试 |
|
||||
| P19ERP3-4 | 资产详情ERP轨道挂件 | N/A | 2026-03-09_00-10-00-p19-erp-3-l5-asset-ledger-summary.csv | 2026-03-09_00-10-00-p19-erp-3-l5-asset-ledger-summary.csv | 2026-03-09 | DONE | client:typecheck/build | `AssetRegistryPage` 详情侧新增资产 ERP 同步轨道挂件,按权限区分状态查看与补发操作 |
|
||||
| P19ERP3-5 | 文档事件与矩阵同步 | N/A | 2026-03-09_00-10-00-p19-erp-3-l5-asset-ledger-summary.csv | 2026-03-09_00-10-00-p19-erp-3-l5-asset-ledger-summary.csv | 2026-03-09 | DONE | validate-feature-matrix | 集成边界、领域事件、Feature Matrix 与校验器同步到 `P5-P19+IM-1+ERP-3` 并纳入 ERP-3 合同事实源 |
|
||||
| P19ERP3-6 | P19ERP3回归与验收收口 | N/A | 2026-03-09_00-10-00-p19-erp-3-l5-asset-ledger-summary.csv | 2026-03-09_00-10-00-p19-erp-3-l5-asset-ledger-summary.csv | 2026-03-09 | DONE | server:test + regression-integrations + regression-all + client:typecheck/build | 资产 ERP 摘要出站、详情挂件、脱敏权限、同一 outbox 覆盖同步与既有采购 / 报销 / IM 主流程回归全部通过 |
|
||||
|
||||
| R10-0 | R10执行合同建档 | N/A | 2026-03-09_10-15-00-r10-post-erp3-roadmap-refresh.csv | 2026-03-09_10-15-00-r10-post-erp3-roadmap-refresh.csv | 2026-03-09 | DONE | CSV 校验 | 后 ERP-3 时代总控路线合同建档,冻结未来主线顺序与执行纪律 |
|
||||
| R10-1 | 冻结R10到P21主线顺序 | N/A | 2026-03-09_10-15-00-r10-post-erp3-roadmap-refresh.csv | 2026-03-09_10-15-00-r10-post-erp3-roadmap-refresh.csv | 2026-03-09 | DONE | CSV 校验 | 固定 `P19+MCP-1 -> P19+AI-1 -> P20+TRAVEL-1/2/3 -> P21+PWA-1/2`,并为后续阶段预生成执行合同 |
|
||||
| R10-2 | 冻结后置backlog与进入条件 | N/A | 2026-03-09_10-15-00-r10-post-erp3-roadmap-refresh.csv | 2026-03-09_10-15-00-r10-post-erp3-roadmap-refresh.csv | 2026-03-09 | DONE | manual | `IM-2/3/4`、车辆、资产财务深化明确降为后置 backlog,仅保留进入条件不抢主线 |
|
||||
| R10-3 | 同步路线文档与矩阵事实源 | N/A | 2026-03-09_10-15-00-r10-post-erp3-roadmap-refresh.csv | 2026-03-09_10-15-00-r10-post-erp3-roadmap-refresh.csv | 2026-03-09 | DONE | validate-feature-matrix | 集成边界与 Feature Matrix 纳入 R10 路线事实源,且不提前把未来 TODO phase 计入完成总数 |
|
||||
| R10-4 | R10校验与收口 | N/A | 2026-03-09_10-15-00-r10-post-erp3-roadmap-refresh.csv | 2026-03-09_10-15-00-r10-post-erp3-roadmap-refresh.csv | 2026-03-09 | DONE | CSV 校验 + validate-feature-matrix | 新旧合同校验通过,主线 roadmap 可直接承接 P19+MCP-1 到 P21+PWA-2 |
|
||||
|
||||
| P19MCP1-0 | P19MCP1执行合同建档 | N/A | 2026-03-09_10-25-00-p19-mcp-1-l4-readonly-tools-baseline.csv | 2026-03-09_10-25-00-p19-mcp-1-l4-readonly-tools-baseline.csv | 2026-03-09 | DONE | CSV 校验 | MCP 只读工具基线执行合同建档,冻结示例配置优先与 GitHub deferred 边界 |
|
||||
| P19MCP1-1 | MCP工具目录建档 | N/A | 2026-03-09_10-25-00-p19-mcp-1-l4-readonly-tools-baseline.csv | 2026-03-09_10-25-00-p19-mcp-1-l4-readonly-tools-baseline.csv | 2026-03-09 | DONE | validate-mcp-tools | 新增 `docs/mcp-tools.md`,enabled servers 固定仅 `postgres`,`github` 仅作为 deferred candidate 记录 |
|
||||
| P19MCP1-2 | MCP使用边界与回滚策略 | N/A | 2026-03-09_10-25-00-p19-mcp-1-l4-readonly-tools-baseline.csv | 2026-03-09_10-25-00-p19-mcp-1-l4-readonly-tools-baseline.csv | 2026-03-09 | DONE | validate-mcp-tools + validate-feature-matrix | 固化只读排障边界、真实密钥禁入、GitHub 不启用与本机回滚策略,且与集成边界文档一致 |
|
||||
| P19MCP1-3 | MCP文档校验与治理脚本 | N/A | 2026-03-09_10-25-00-p19-mcp-1-l4-readonly-tools-baseline.csv | 2026-03-09_10-25-00-p19-mcp-1-l4-readonly-tools-baseline.csv | 2026-03-09 | DONE | validate-mcp-tools | 新增 `.mcp.json.example` 与 `scripts/validate-mcp-tools.py`,形成目录文档、示例配置、校验脚本闭环 |
|
||||
| P19MCP1-4 | P19MCP1文档矩阵与验收收口 | N/A | 2026-03-09_10-25-00-p19-mcp-1-l4-readonly-tools-baseline.csv | 2026-03-09_10-25-00-p19-mcp-1-l4-readonly-tools-baseline.csv | 2026-03-09 | DONE | validate-feature-matrix + git-diff-check | MCP 工具目录、边界文档、Feature Matrix 与事实源校验全部通过,可作为 `P19+AI-1` 前置基线 |
|
||||
|
||||
| P19AI1-0 | P19AI1执行合同刷新建档 | N/A | 2026-03-09_10-35-00-p19-ai-1-l5-suggestion-workbench.csv | 2026-03-10_12-54-30-p19-ai-1-l5-suggestion-workbench-refresh.csv | 2026-03-10 | DONE | CSV 校验 | 以 superseding CSV 刷新 AI-1 执行合同,修正 feature flag 与 seed/config 锚点后冻结只读建议边界 |
|
||||
| P19AI1-1 | AI provider与治理开关 | N/A | 2026-03-09_10-35-00-p19-ai-1-l5-suggestion-workbench.csv | 2026-03-10_12-54-30-p19-ai-1-l5-suggestion-workbench-refresh.csv | 2026-03-10 | DONE | server:test | 新增 `ai.assist`、`ai_assist`、`AI_*` 配置与 mock/http provider 契约,默认关闭且不引入运行时 MCP 依赖 |
|
||||
| P19AI1-2 | AI建议服务与接口 | N/A | 2026-03-09_10-35-00-p19-ai-1-l5-suggestion-workbench.csv | 2026-03-10_12-54-30-p19-ai-1-l5-suggestion-workbench-refresh.csv | 2026-03-10 | DONE | server:test | 实现报销 / 采购 / 资产三类只读 suggestion 接口、白名单脱敏快照、prompt hash 与审计摘要,不写库不改状态 |
|
||||
| P19AI1-3 | 详情页AI建议卡片 | N/A | 2026-03-09_10-35-00-p19-ai-1-l5-suggestion-workbench.csv | 2026-03-10_12-54-30-p19-ai-1-l5-suggestion-workbench-refresh.csv | 2026-03-10 | DONE | client:typecheck/build | 在报销详情、采购详情、资产详情挂载 AI 建议卡片,权限不足或 AI 关闭时不显示,失败仅卡片内降级 |
|
||||
| P19AI1-4 | AI文档事件与矩阵同步 | N/A | 2026-03-09_10-35-00-p19-ai-1-l5-suggestion-workbench.csv | 2026-03-10_12-54-30-p19-ai-1-l5-suggestion-workbench-refresh.csv | 2026-03-10 | DONE | validate-feature-matrix | 集成边界、领域事件、Feature Matrix 与事实源校验器同步收口到 `P5-P19+IM-1+ERP-3+R10+MCP-1+AI-1` |
|
||||
| P19AI1-5 | P19AI1回归与验收收口 | N/A | 2026-03-09_10-35-00-p19-ai-1-l5-suggestion-workbench.csv | 2026-03-10_12-54-30-p19-ai-1-l5-suggestion-workbench-refresh.csv | 2026-03-10 | DONE | server:test + client:typecheck/build + validate-feature-matrix | AI provider、权限门禁、详情卡片、降级容错与既有主流程回归通过,`P19` 主线至此收口 |
|
||||
|
||||
|
||||
| P20TRAVEL1-0 | P20TRAVEL1执行合同刷新建档 | N/A | 2026-03-09_10-45-00-p20-travel-1-l5-request-intake.csv | 2026-03-10_17-32-21-p20-travel-1-l5-request-intake-refresh.csv | 2026-03-10 | DONE | CSV 校验 | 以 superseding CSV 刷新 TRAVEL-1 执行合同,冻结独立 `travel.*` 权限、预算语义与非 ERP 边界 |
|
||||
| P20TRAVEL1-1 | 差旅模型权限与seed基线 | N/A | 2026-03-09_10-45-00-p20-travel-1-l5-request-intake.csv | 2026-03-10_17-32-21-p20-travel-1-l5-request-intake-refresh.csv | 2026-03-10 | DONE | server:prisma-validate + server:test | 新增 `TravelRequest`、`TravelRequestSegment`、`travel_orders.travel_request_id`、`travel.*` 权限、差旅单号配置与默认单层审批 seed |
|
||||
| P20TRAVEL1-2 | 差旅申请接口工作流与预算语义 | N/A | 2026-03-09_10-45-00-p20-travel-1-l5-request-intake.csv | 2026-03-10_17-32-21-p20-travel-1-l5-request-intake-refresh.csv | 2026-03-10 | DONE | server:test | 实现差旅申请 CRUD、提交 / 撤回、workflow travel 分支、预算 reserve/confirm/release 与 `travel_orders` 关联导入,不触发 ERP 出站 |
|
||||
| P20TRAVEL1-3 | 差旅前端入口详情与待办联动 | N/A | 2026-03-09_10-45-00-p20-travel-1-l5-request-intake.csv | 2026-03-10_17-32-21-p20-travel-1-l5-request-intake-refresh.csv | 2026-03-10 | DONE | client:typecheck/build | 新增 `/travel-requests` 列表+详情页,支持创建 / 编辑 / 提交 / 撤回,并打通待办、移动审批、导航与通知深链 |
|
||||
| P20TRAVEL1-4 | 差旅事件边界与矩阵同步 | N/A | 2026-03-09_10-45-00-p20-travel-1-l5-request-intake.csv | 2026-03-10_17-32-21-p20-travel-1-l5-request-intake-refresh.csv | 2026-03-10 | DONE | validate-feature-matrix | 集成边界、领域事件、Feature Matrix 与事实源校验器同步收口,明确 `TRAVEL-1` 不做 ERP / 供应商 API / 对公支付 |
|
||||
| P20TRAVEL1-5 | P20TRAVEL1回归与验收收口 | N/A | 2026-03-09_10-45-00-p20-travel-1-l5-request-intake.csv | 2026-03-10_17-32-21-p20-travel-1-l5-request-intake-refresh.csv | 2026-03-10 | DONE | server:test + client:typecheck/build + validate-feature-matrix | 差旅 happy path、权限边界、预算释放、订单关联与既有 IM / ERP / AI / 采购 / 资产主流程回归全部通过 |
|
||||
|
||||
| P20TRAVEL2-0 | P20TRAVEL2执行合同刷新建档 | N/A | 2026-03-09_10-55-00-p20-travel-2-l5-corporate-payments.csv | 2026-03-10_21-05-59-p20-travel-2-l5-corporate-payments-refresh.csv | 2026-03-10 | DONE | CSV 校验 | 以 superseding CSV 刷新 TRAVEL-2 执行合同,冻结混合双轨、发票绑定与 ERP payment journal 前移边界 |
|
||||
| P20TRAVEL2-1 | 统付模型支付权限与双账轨基线 | N/A | 2026-03-09_10-55-00-p20-travel-2-l5-corporate-payments.csv | 2026-03-10_21-05-59-p20-travel-2-l5-corporate-payments-refresh.csv | 2026-03-10 | DONE | server:prisma-validate + server:test | 新增 `CardAuthorization`、`CardTransaction`、`travel_order` 支付字段、`invoice_pool.travel_order_id` 与 `travel.payment.manage`,并冻结 authorize/settle/reverse 支付账轨 |
|
||||
| P20TRAVEL2-2 | 授权交易导入与订单确认语义 | N/A | 2026-03-09_10-55-00-p20-travel-2-l5-corporate-payments.csv | 2026-03-10_21-05-59-p20-travel-2-l5-corporate-payments-refresh.csv | 2026-03-10 | DONE | server:test | 授权/交易导入具备幂等与清晰 skip reason,精确匹配的 settled charge 可把 `TravelOrder` 从 `imported` 推进到 `confirmed` |
|
||||
| P20TRAVEL2-3 | 发票绑定标记已支付与ERP journal出站 | N/A | 2026-03-09_10-55-00-p20-travel-2-l5-corporate-payments.csv | 2026-03-10_21-05-59-p20-travel-2-l5-corporate-payments-refresh.csv | 2026-03-10 | DONE | server:test | 发票池支持 `travelOrderId` 排他绑定,`mark-paid` 支持幂等支付确认,并按 `travel_order.paid` 复用 `erp.journal.export` 出站 |
|
||||
| P20TRAVEL2-4 | 差旅前端支付轨道与发票绑定交互 | N/A | 2026-03-09_10-55-00-p20-travel-2-l5-corporate-payments.csv | 2026-03-10_21-05-59-p20-travel-2-l5-corporate-payments-refresh.csv | 2026-03-10 | DONE | client:typecheck/build | 差旅详情新增对公支付轨道卡片,支持只读摘要、标记已支付、发票绑定与冻结建议交互,失败仅卡片内降级 |
|
||||
| P20TRAVEL2-5 | P20TRAVEL2文档矩阵同步与回归收口 | N/A | 2026-03-09_10-55-00-p20-travel-2-l5-corporate-payments.csv | 2026-03-10_21-05-59-p20-travel-2-l5-corporate-payments-refresh.csv | 2026-03-10 | DONE | server:test + client:typecheck/build + validate-feature-matrix | ADR、边界文档、领域事件、Feature Matrix 与全量回归同步收口,主线里程碑推进到 248 |
|
||||
|
||||
| P20TRAVEL3-0 | P20TRAVEL3执行合同刷新建档 | N/A | 2026-03-09_11-05-00-p20-travel-3-l5-reconciliation-erp-bridge.csv | 2026-03-11_09-57-28-p20-travel-3-l5-reconciliation-erp-bridge-refresh.csv | 2026-03-11 | DONE | CSV 校验 | 以 superseding CSV 刷新 TRAVEL-3 执行合同,冻结批次快照、只读对账与 `erp.travel.export` 摘要桥边界 |
|
||||
| P20TRAVEL3-1 | 对账批次模型与序列基线 | N/A | 2026-03-09_11-05-00-p20-travel-3-l5-reconciliation-erp-bridge.csv | 2026-03-11_09-57-28-p20-travel-3-l5-reconciliation-erp-bridge-refresh.csv | 2026-03-11 | DONE | server:prisma-validate + server:test | 新增 `TravelReconciliationBatch`、`TravelReconciliationItem`、`travel_reconciliation_batch` 单号与 seed,不改写既有订单/交易状态语义 |
|
||||
| P20TRAVEL3-2 | 对账引擎批次接口与人工确认 | N/A | 2026-03-09_11-05-00-p20-travel-3-l5-reconciliation-erp-bridge.csv | 2026-03-11_09-57-28-p20-travel-3-l5-reconciliation-erp-bridge-refresh.csv | 2026-03-11 | DONE | server:test | 差旅对账支持批次快照、差异判定、confirm / reopen / finalize,且只读发现差异不自动修复订单或预算 |
|
||||
| P20TRAVEL3-3 | ERP travel export与批次轨道 | N/A | 2026-03-09_11-05-00-p20-travel-3-l5-reconciliation-erp-bridge.csv | 2026-03-11_09-57-28-p20-travel-3-l5-reconciliation-erp-bridge-refresh.csv | 2026-03-11 | DONE | server:test | 新增 `erp.travel.export`、`travel_payable_summary` / `travel_settlement_batch` binding 与 batch-level track / requeue,不影响既有 `travel_order_payment` journal |
|
||||
| P20TRAVEL3-4 | 差旅页对账Tab与前端联动 | N/A | 2026-03-09_11-05-00-p20-travel-3-l5-reconciliation-erp-bridge.csv | 2026-03-11_09-57-28-p20-travel-3-l5-reconciliation-erp-bridge-refresh.csv | 2026-03-11 | DONE | client:typecheck/build | `/travel-requests?tab=reconciliation&batchId=<id>` 已支持批次列表、KPI、异常确认、Finalize 与 ERP 轨道重试联动 |
|
||||
| P20TRAVEL3-5 | P20TRAVEL3文档矩阵同步与回归收口 | N/A | 2026-03-09_11-05-00-p20-travel-3-l5-reconciliation-erp-bridge.csv | 2026-03-11_09-57-28-p20-travel-3-l5-reconciliation-erp-bridge-refresh.csv | 2026-03-11 | DONE | server:test + client:typecheck/build + validate-feature-matrix | 边界文档、领域事件、Feature Matrix、CSV 校验与全量回归同步收口,主线里程碑推进到 254 |
|
||||
|
||||
| P21PWA1-0 | P21PWA1执行合同刷新与P20基线冻结 | N/A | 2026-03-09_11-15-00-p21-pwa-1-l5-asset-scan.csv | 2026-03-11_17-50-39-p21-pwa-1-l5-asset-scan-refresh.csv | 2026-03-11 | DONE | CSV 校验 | 以 superseding CSV 刷新 PWA-1 执行合同,并正式冻结 P20 收口 gate、clean-main 起步与浏览器 PWA 资产扫码边界 |
|
||||
| P21PWA1-1 | 移动资产扫码页与扫描适配器 | N/A | 2026-03-09_11-15-00-p21-pwa-1-l5-asset-scan.csv | 2026-03-11_17-50-39-p21-pwa-1-l5-asset-scan-refresh.csv | 2026-03-11 | DONE | client:typecheck/build | 新增 `/mobile/assets/scan`、扫码导航与 `BarcodeDetector -> ZXing` 回退扫描面板,保留手工输入兜底 |
|
||||
| P21PWA1-2 | 资产扫码查找最小后端扩展 | N/A | 2026-03-09_11-15-00-p21-pwa-1-l5-asset-scan.csv | 2026-03-11_17-50-39-p21-pwa-1-l5-asset-scan-refresh.csv | 2026-03-11 | DONE | server:test | `GET /api/assets` 支持 `q` 条件,按 `assetNo/serialNo` 精确匹配与 `name contains` 兜底,不新增 lookup 路由 |
|
||||
| P21PWA1-3 | 盘点录入模式与离线队列联动 | N/A | 2026-03-09_11-15-00-p21-pwa-1-l5-asset-scan.csv | 2026-03-11_17-50-39-p21-pwa-1-l5-asset-scan-refresh.csv | 2026-03-11 | DONE | server:test + client:typecheck/build | `inventoryCheckId` 模式支持 draft 启动、counting 录入、completed 只读,以及 IndexedDB 离线队列 last-write-wins 重放 |
|
||||
| P21PWA1-4 | PWA一期文档边界与矩阵同步 | N/A | 2026-03-09_11-15-00-p21-pwa-1-l5-asset-scan.csv | 2026-03-11_17-50-39-p21-pwa-1-l5-asset-scan-refresh.csv | 2026-03-11 | DONE | validate-feature-matrix | 集成边界、PWA 回归清单、Feature Matrix 与事实源校验器同步到 `...+PWA-1`,并明确不做原生壳 / 深链 / 完整离线同步 |
|
||||
| P21PWA1-5 | P21PWA1回归与验收收口 | N/A | 2026-03-09_11-15-00-p21-pwa-1-l5-asset-scan.csv | 2026-03-11_17-50-39-p21-pwa-1-l5-asset-scan-refresh.csv | 2026-03-11 | DONE | server:test + regression-all + client:typecheck/build + validate-feature-matrix | 移动扫码、盘点录入、离线重放与权限边界回归通过,矩阵推进到 260 并为 `P21+PWA-2` 留出干净合同起点 |
|
||||
|
||||
| P21PWA2-0 | P21PWA2执行合同刷新与主线最终冻结 | N/A | 2026-03-09_11-25-00-p21-pwa-2-l5-offline-deeplink.csv | 2026-03-12_04-32-13-p21-pwa-2-l5-offline-deeplink-refresh.csv | 2026-03-12 | DONE | CSV 校验 | 以 superseding CSV 刷新 PWA-2 执行合同,冻结 canonical workflow deep link、离线守卫、本地草稿与 R10 主线最终里程碑 |
|
||||
| P21PWA2-1 | 移动审批深链入口与离线守卫快照 | N/A | 2026-03-09_11-25-00-p21-pwa-2-l5-offline-deeplink.csv | 2026-03-12_04-32-13-p21-pwa-2-l5-offline-deeplink-refresh.csv | 2026-03-12 | DONE | client:typecheck/build | `/workflow/tasks/:taskId` 保持 canonical,客户端在移动 / PWA / IM WebView 下自动分流到 `/mobile/approvals?taskId=<id>`,并引入仅含 `me + permissions` 的 24h 离线快照 |
|
||||
| P21PWA2-2 | 移动审批approve/reject离线草稿队列 | N/A | 2026-03-09_11-25-00-p21-pwa-2-l5-offline-deeplink.csv | 2026-03-12_04-32-13-p21-pwa-2-l5-offline-deeplink-refresh.csv | 2026-03-12 | DONE | client:typecheck/build | `MobileApprovalsPage` 支持 `taskId` deep link、已缓存详情离线查看与 `approve/reject` 草稿 last-write-wins 重放,`already_processed` / 403 / 404 明确进入冲突态 |
|
||||
| P21PWA2-3 | PWA缓存策略升级与IndexedDB helper收口 | N/A | 2026-03-09_11-25-00-p21-pwa-2-l5-offline-deeplink.csv | 2026-03-12_04-32-13-p21-pwa-2-l5-offline-deeplink-refresh.csv | 2026-03-12 | DONE | client:typecheck/build | `vite-plugin-pwa` runtime cache 升级为静态资源 `StaleWhileRevalidate` + 审批 GET `NetworkFirst`,并新增共享 IndexedDB helper 供上传 / 盘点 / 审批队列复用 |
|
||||
| P21PWA2-4 | PWA二期文档矩阵与主线闭环同步 | N/A | 2026-03-09_11-25-00-p21-pwa-2-l5-offline-deeplink.csv | 2026-03-12_04-32-13-p21-pwa-2-l5-offline-deeplink-refresh.csv | 2026-03-12 | DONE | validate-feature-matrix | 集成边界、PWA 回归清单、Feature Matrix 与事实源校验器同步到 `...+PWA-2`,矩阵总数推进到 266 并明确 R10 主线闭环 |
|
||||
| P21PWA2-5 | P21PWA2回归与R10主线最终验收 | N/A | 2026-03-09_11-25-00-p21-pwa-2-l5-offline-deeplink.csv | 2026-03-12_04-32-13-p21-pwa-2-l5-offline-deeplink-refresh.csv | 2026-03-12 | DONE | server:test + regression-all + client:typecheck/build + validate-feature-matrix | 移动 deep link、离线审批草稿、联网重放、权限拒绝、缓存回退与既有 PWA-1 / workflow 主流程回归全部通过,R10 主线正式闭环 |
|
||||
|
||||
|
||||
| P22PROD1-0 | P22PROD1执行合同建档与生产化边界冻结 | N/A | 2026-03-12_16-58-44-p22-prod-1-l5-production-hardening.csv | 2026-03-12_16-58-44-p22-prod-1-l5-production-hardening.csv | 2026-03-12 | DONE | CSV 校验 | 冻结 `P22+PROD-1` 为路由级分包、高风险主链路 E2E 与证据化性能审计的单一生产化迭代,不混入新业务域或依赖大升级 |
|
||||
| P22PROD1-1 | 路由懒加载与构建分包治理 | N/A | 2026-03-12_16-58-44-p22-prod-1-l5-production-hardening.csv | 2026-03-12_16-58-44-p22-prod-1-l5-production-hardening.csv | 2026-03-12 | DONE | client:typecheck/build | 顶层业务页切换为 `React.lazy + Suspense`,并在 Vite 中固定 `vendor-*` / `page-*` manual chunks,构建不再出现大包 warning |
|
||||
| P22PROD1-2 | 差旅三部曲Playwright补齐 | N/A | 2026-03-12_16-58-44-p22-prod-1-l5-production-hardening.csv | 2026-03-12_16-58-44-p22-prod-1-l5-production-hardening.csv | 2026-03-12 | DONE | client:test:e2e(travel) | 新增差旅支付与对账 Playwright 规格,覆盖申请→审批→支付→绑票以及 reconciliation batch 创建、异常确认与 finalize 主链路 |
|
||||
| P22PROD1-3 | 移动审批deep link与离线草稿E2E补齐 | N/A | 2026-03-12_16-58-44-p22-prod-1-l5-production-hardening.csv | 2026-03-12_16-58-44-p22-prod-1-l5-production-hardening.csv | 2026-03-12 | DONE | client:test:e2e(mobile approvals) | 以移动 viewport 自动化覆盖 canonical workflow deep link 分流、离线 `approve/reject` 草稿入队、联网重放与冲突态展示 |
|
||||
| P22PROD1-4 | 高频查询性能审计与小步修复 | N/A | 2026-03-12_16-58-44-p22-prod-1-l5-production-hardening.csv | 2026-03-12_16-58-44-p22-prod-1-l5-production-hardening.csv | 2026-03-12 | DONE | server:test + benchmark scripts | 为 workflow tasks、`/api/assets?q` 与 travel reconciliation batches 新增 benchmark 脚本,并将资产搜索重写为 exact-first / fuzzy-second;未证实收益前不新增索引或 PG 扩展 |
|
||||
| P22PROD1-5 | P22PROD1矩阵回归与验收收口 | N/A | 2026-03-12_16-58-44-p22-prod-1-l5-production-hardening.csv | 2026-03-12_16-58-44-p22-prod-1-l5-production-hardening.csv | 2026-03-12 | DONE | server:test + client:typecheck/build/test:e2e + validate-feature-matrix | Feature Matrix、事实源校验器、差旅与移动审批 E2E、后端单测与 benchmark 一并收口,主线推进到 `...+PROD-1` / 272 项 |
|
||||
|
||||
|
||||
| R11-0 | R11执行合同建档与范围冻结 | §16 迭代计划(执行合同收口) | 2026-03-13_10-30-00-r11-contract-reconciliation-and-spec-refresh.csv | 2026-03-13_10-30-00-r11-contract-reconciliation-and-spec-refresh.csv | 2026-03-13 | DONE | CSV 校验 | 冻结 R11 只做历史 TODO 清账证据刷新与规格书补齐,不回写旧 CSV、不改运行时代码 |
|
||||
| R11-1 | 历史 TODO 清账证据刷新 | N/A | 2026-03-13_10-30-00-r11-contract-reconciliation-and-spec-refresh.csv | 2026-03-13_10-30-00-r11-contract-reconciliation-and-spec-refresh.csv | 2026-03-13 | DONE | manual | `docs/todo-reconciliation.md` 已把 A1/A2/A3/A3-LOCK/A4/C2/C3/C4/C5 映射为 implemented,A5 映射为 superseded,历史 CSV 保持不可变 |
|
||||
| R11-2 | 规格书目录扩展与章节锚点建立 | §4.7-§4.11,§13.2.7-§13.2.11 | 2026-03-13_10-30-00-r11-contract-reconciliation-and-spec-refresh.csv | 2026-03-13_10-30-00-r11-contract-reconciliation-and-spec-refresh.csv | 2026-03-13 | DONE | git diff --check | `docs/requirements-specification.md` 已补齐请假 / 采购 / 资产 / 差旅 / 集成章节与对应 API 契约锚点 |
|
||||
| R11-3 | 请假采购资产规格补齐 | §4.7-§4.9,§13.2.7-§13.2.9 | 2026-03-13_10-30-00-r11-contract-reconciliation-and-spec-refresh.csv | 2026-03-13_10-30-00-r11-contract-reconciliation-and-spec-refresh.csv | 2026-03-13 | DONE | manual | 规格书已按当前代码与完成合同补齐请假 / 采购 / 资产的范围、权限、状态机、核心对象与显式不做项 |
|
||||
| R11-4 | 差旅集成规格补齐与 cross-cutting 同步 | §4.10-§4.11,§13.2.10-§13.2.11,§15-§16 | 2026-03-13_10-30-00-r11-contract-reconciliation-and-spec-refresh.csv | 2026-03-13_10-30-00-r11-contract-reconciliation-and-spec-refresh.csv | 2026-03-13 | DONE | manual | 规格书已补齐 TRAVEL-1~3、IM-1、ERP-1~3 的已实现边界,并同步数据模型概览与迭代计划 |
|
||||
| R11-5 | R11矩阵事实源与文档校验收口 | §16 迭代计划(执行合同收口) | 2026-03-13_10-30-00-r11-contract-reconciliation-and-spec-refresh.csv | 2026-03-13_10-30-00-r11-contract-reconciliation-and-spec-refresh.csv | 2026-03-13 | DONE | CSV 校验 + validate-feature-matrix + git diff --check | Feature Matrix、事实源校验器、R11 合同与文档变更已同步收口,历史 TODO 清账口径可追溯 |
|
||||
|
||||
## R13-R17 小团队内部管理增量(2026-03-21)
|
||||
|
||||
- **事实源**:`issues/2026-03-21_12-00-00-r13-small-team-profile.csv`、`issues/2026-03-21_12-10-00-r14-people-lifecycle.csv`、`issues/2026-03-21_12-20-00-r15-team-presence.csv`、`issues/2026-03-21_12-30-00-r16-weekly-report-todo.csv`、`issues/2026-03-21_12-40-00-r17-small-team-go-live.csv`
|
||||
- **R13 小团队模式收敛**:新增 `WorkspaceSetting` 单例配置、`/api/system/workspace` 与 `/api/system/navigation`,默认主导航收敛为 `Portal / 团队 / 请假 / 报销 / 资产 / 周报 / 待办 / 公告`,采购/差旅/预算/AP 等模块降级为管理员备用入口。
|
||||
- **R14 入转离与资产闭环**:扩展 `Employee` 就业状态字段,新增 `EmployeeLifecycleEvent`、`EmployeeChecklistTask`,支持入职、转正、调岗、离职、资产阻塞校验与账号停用闭环。
|
||||
- **R15 团队状态**:新增 `EmployeePresence` 与团队在岗视图,支持员工手工更新今日状态,请假自动覆盖为 `leave`。
|
||||
- **R16 周报与待办**:新增 `WeeklyReport` 与 `TodoItem`,支持周报懒创建、提交、团队汇总、待办创建/完成/取消,并接入 `Portal` 与搜索。
|
||||
- **R17 真可用收口**:新增小团队管理员手册、员工快速上手文档、trialrun 运行手册与检查项补充,支持以 `small_team_internal` 为默认上线模式。
|
||||
- **R17-4 试点观测支撑**:`Portal` 新增管理员试点观测摘要(近 7 天登录、周报提交、团队状态覆盖率),并补充 4 周观测模板。
|
||||
- **默认上线建议**:开启 `portal_home_v1`、`announcements_v1`、`presence_board_v1`、`weekly_report_v1`、`employee_lifecycle_v1`、`todo_board_v1`、`global_search_v1`;保留 `payment_batch_v1`、`cutover_console_v1` 为管理员备用能力。
|
||||
|
||||
## R18-R22 统一内部业务平台增量(2026-03-21)
|
||||
|
||||
- **事实源**:`issues/2026-03-21_23-00-00-r18-r22-unified-internal-workbench.csv`
|
||||
- **R18 企业微信前台接入**:新增企业微信配置、账号绑定、工作台入口与 deeplink 回跳;企业微信定位为 `入口 + 通知 + 可选免登`,不再承接第二套业务事实。
|
||||
- **R19 项目管理基础进 OA**:新增 `Project / ProjectMember / ProjectMilestone / ProjectTask / ProjectRisk` 与前后端项目页,`Portal` 与全局搜索已接入项目域。
|
||||
- **R20 项目联动主链**:报销、差旅、周报、待办已支持挂项目;项目详情页可统一查看成员、里程碑、任务、风险、费用、差旅、周报、合同与交付记录。
|
||||
- **R21 涉密与公网边界**:新增 `ContractRegistry`、`ConfidentialDocumentRef`;OA 只保存元数据和引用路径,Refresh 来源校验与企业微信 IM 脱敏规则已收口到公网安全基线。
|
||||
- **运行口径**:员工真正操作仍集中在 `hyb-oa`;企业微信只做入口与脱敏提醒;涉密正文与附件继续留在内网文件盘、NAS 或离线档案中。
|
||||
|
||||
## R23 试点收口与项目治理轻增强
|
||||
|
||||
| Feature Flag | 默认值 | 作用 | 主要页面 / 路由 |
|
||||
| --- | --- | --- | --- |
|
||||
| `project_communication_log_v1` | `force_off` | 在项目详情页记录客户沟通结果摘要、下一步动作与跟进日期;不做聊天归档 | `client/src/pages/ProjectDetailPage.tsx`, `/api/projects/:id/communication-logs` |
|
||||
| `project_closure_checklist_v1` | `force_off` | 为项目完成/归档提供软约束式收口清单与 Portal 待收口统计 | `client/src/pages/ProjectDetailPage.tsx`, `/api/projects/:id/closure-checklist`, `/api/portal/home` |
|
||||
|
||||
### R23 固定边界
|
||||
- `ProjectCommunicationLog` 与 `ProjectClosureChecklistItem` 不进入全文搜索。
|
||||
- `confidential` / `restricted` 合同与资料引用不按摘要全文命中搜索,只按编号、项目编号或最小必要标签命中。
|
||||
- 企业微信提醒仅发送脱敏标题与 deeplink,不发送沟通摘要、收口备注或涉密标题全文。
|
||||
@@ -1,179 +0,0 @@
|
||||
# hyb-oa 实施计划(历史 Phase 1 引导 + 当前执行口径)
|
||||
|
||||
**文档状态**:历史实施计划归档,不是当前执行计划。
|
||||
**日期**:2026-05-04
|
||||
**范围**:保留 2026-02 的引导性实施计划,同时补充当前试运行收口与外部环境闭环口径。
|
||||
**当前用途**:追溯早期里程碑、复用资产和历史技术决策;当前需求与开发优先级以 [海音达OA-MVP需求规格说明书](./海音达OA-MVP需求规格说明书.md)、[文档索引](./文档索引.md) 和最新 `issues/*.csv` 为准。
|
||||
**不得误读**:下文的 `Phase 1 / P0 / Phase 2` 是历史阶段名,不代表 2026-05-09 之后的当前排期。
|
||||
|
||||
## 当前阶段(2026-05-04)
|
||||
|
||||
- 当前系统已不处于 `Phase 1 / P0` 开发阶段;本地核心 happy path、真实 PDF OCR 和报销付款尾链已具备回归证据。
|
||||
- 当前优先级不是继续堆新功能,而是:
|
||||
1. 治理事实源刷新
|
||||
2. 外部环境闭环(HTTPS / 企微 / live smoke / 并发)
|
||||
3. 发布门禁与部署 runbook 收口
|
||||
- 当前执行事实源优先级:
|
||||
- 当前 PRD:`docs/海音达OA-MVP需求规格说明书.md`
|
||||
- 最新执行合同:`issues/*.csv`
|
||||
- 业务覆盖:`docs/trialrun/coverage-matrix.csv`
|
||||
- 试运行结论:`docs/trialrun/manual-trialrun-report.md`
|
||||
- 全局状态矩阵:`docs/feature-matrix.md`
|
||||
|
||||
## 历史说明
|
||||
|
||||
下文保留的是 2026-02 的 Phase 1 引导计划,主要用于追溯设计出发点、资产复用和里程碑拆解;它**不是**当前最优先的执行合同。
|
||||
|
||||
## 0. 前置结论(不可再分叉)
|
||||
- 技术栈:Fastify + Prisma + PostgreSQL(见 `docs/tech_stack_report.md`)
|
||||
- 当前 PRD:以 `docs/海音达OA-MVP需求规格说明书.md` 为主事实源;`docs/requirements-specification.md` 仅保留为旧路径跳转。
|
||||
|
||||
## 1. 历史:复用资产清单(从 shenzhou-business-suite 迁移到 hyb-oa)
|
||||
| 资产 | 来源 | 复用方式 | 需要改造 |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| 工作流 4 表结构 | `shenzhou-business-suite/supabase/schema/70_workflow/01_workflow_02_tables.sql` | 转 Prisma schema | Supabase/RPC → Fastify service 事务 |
|
||||
| `approval_rules` | 同上 | 转 Prisma schema + seed 3 条 | 管理 UI 放 P1(P0 先 DB/接口维护) |
|
||||
| `approval_transfers` | 同上 | 转 Prisma schema | 与 `workflow_tasks` 联动,reason≥10 约束 |
|
||||
| `document_sequences` | 同上 | 转 Prisma schema + seed 默认报销单号 | 生成逻辑改为服务端原子更新 |
|
||||
| 权限码体系 | `shenzhou-business-suite/src/types/permissions.ts` | 复用命名与粒度 | 增加 `expense.proxy_submit/proxy_manage` |
|
||||
| 工作流类型 | `shenzhou-business-suite/src/types/workflow.ts` | 参考 JSON 结构 | P0 只用线性审批链(后续扩展保留) |
|
||||
| 报销表结构参考 | `shenzhou-business-suite/supabase/schema/20_finance/06_reimbursement_01_tables.sql` | 参考 forms/items/attachments 字段 | 补 `file_sha256`、签名 URL、判重例外审计 |
|
||||
| 默认费用类型 seed | `shenzhou-business-suite/supabase/seed.sql` | 迁移 35 启用 + 3 legacy 禁用 | hyb-oa 额外启用 `utilities/rent` 形成 37 启用 |
|
||||
| 存储安全基线思路 | `shenzhou-business-suite/supabase/migrations/20260131175000_storage_security_baseline.sql` | 迁移约束到 API 层 | P0 本地存储 + 签名 URL;P2 MinIO/OSS |
|
||||
| UI 组件 | `shenzhou-business-suite/src/components/ui/*` | 实现阶段复制到 `client/src/` | 替换路由/样式变量;移除 Supabase 依赖 |
|
||||
| 测试基建 | `playwright` + `vitest` 配置 | 实现阶段迁移 | P0 覆盖鉴权/工作流/判重核心路径 |
|
||||
|
||||
## 2. 历史:Phase 1(P0)里程碑拆解(按可开工顺序)
|
||||
|
||||
### Milestone 1:Prisma schema 草稿 + 评审
|
||||
**目标**:把关键表结构确定下来(后续开发不再反复改 schema)。
|
||||
**范围(至少)**:
|
||||
- 组织/人员:`departments`、`employees`、`employee_roles`
|
||||
- 权限:权限码为代码常量;角色集合落 `employee_roles`
|
||||
- 报销:`reimbursement_forms`、`reimbursement_items`、`invoice_pool`(票据/附件池 + 绑定关系)
|
||||
- OCR:`ocr_results`(OCR 去重与结果持久化)
|
||||
- 费用类型:`expense_types`(含 37 默认启用 seed)
|
||||
- 单号:`document_sequences`
|
||||
- 工作流:`workflow_definitions`、`workflow_instances`、`workflow_tasks`、`workflow_history`
|
||||
- 审批规则/转审:`approval_rules`、`approval_transfers`
|
||||
- 认证与审计:`auth_sessions`、`audit_logs`
|
||||
- 代提交授权:`delegation_grants`
|
||||
|
||||
**验收**:
|
||||
- schema 与当时的 `docs/requirements-specification.md` 一致;当前需求事实源已迁移到 `docs/海音达OA-MVP需求规格说明书.md`
|
||||
- 关键约束可实现(单号唯一、转审原因≥10、费用类型 code 唯一、软禁用等)
|
||||
|
||||
**评审截止(Schema Freeze)**:
|
||||
- 截止:Milestone 1 合并后的 **2 个工作日**
|
||||
- 截止后变更规则:
|
||||
- 仅允许 `ADD COLUMN / ADD TABLE / ADD INDEX` 这类向前兼容变更
|
||||
- `DROP/RENAME/CHANGE TYPE/CHANGE NULLABLE` 等破坏性变更必须走“变更申请”,并同步更新规格书与迁移计划
|
||||
|
||||
### Milestone 2:认证与会话(JWT + refresh cookie)
|
||||
**范围**:
|
||||
- `POST /api/auth/login|refresh|logout|forgot-password|reset-password`
|
||||
- `auth_sessions`:refresh hash + deviceFingerprint/ip/UA + session 限额(5)
|
||||
- `tokenVersion` 踢下线
|
||||
|
||||
**验收**:
|
||||
- refresh rotation 生效;退出/重置能撤销会话;access 不落 localStorage
|
||||
|
||||
### Milestone 3A:发票池上传(本地存储)+ SHA256 + 签名 URL
|
||||
**范围**:
|
||||
- `POST /api/invoice-pool/upload`(multipart;入参 `file` + 可选 `owner_employee_id` + 可选 `ocr_type`;返回 `invoice_pool_id`)
|
||||
- `POST /api/invoice-pool/:id/signed-url`(TTL=10m)
|
||||
- 上传约束:类型白名单 + ≤10MB
|
||||
- 哈希:计算并落库 `file_sha256`(作为 OCR 去重 key)
|
||||
|
||||
**验收**:
|
||||
- 未授权用户无法获取签名 URL;过期不可访问;同文件哈希可用于 OCR 去重复用
|
||||
|
||||
### Milestone 3B:腾讯云 OCR + `ocr_results` 去重 + retry 策略
|
||||
**范围**:
|
||||
- OCR:调用腾讯云 OCR,保存“标准化结果”(rawResponse 仅日志不落库)
|
||||
- 去重:`ocr_results` 以 `file_sha256 + ocr_provider + ocr_type` 唯一,命中时复用(不重复计费)
|
||||
- 状态机:`invoice_pool` 从 `pending_ocr` → `available/ocr_failed`
|
||||
- 重试:`POST /api/invoice-pool/:id/retry-ocr`(attempt<=3;间隔>=60s;错误码 `VALID_006/VALID_007`)
|
||||
- 审计:`OCR_REQUESTED/OCR_SUCCEEDED/OCR_FAILED/OCR_RETRIED`
|
||||
- 自动归档:`available/ocr_failed` 未绑定条目 90 天后自动归档为 `archived_reason=unused_timeout`
|
||||
|
||||
**验收**:
|
||||
- 同一文件二次上传不重复计费;OCR 失败可重试且次数/频控生效;90 天游离自动归档生效且不参与全局判重;状态与审计一致
|
||||
|
||||
### Milestone 4:费用类型系统(动态 `expense_types`)
|
||||
**范围**:
|
||||
- `GET /api/expense-types?enabled=true`
|
||||
- seed:默认启用 37 项 + legacy 3 项禁用
|
||||
- 软禁用语义:禁用后不出现在下拉,但历史可展示
|
||||
|
||||
**验收**:
|
||||
- 下拉加载启用类型;禁用类型不显示但历史单据不丢
|
||||
|
||||
### Milestone 5:单号生成(`document_sequences`)
|
||||
**范围**:
|
||||
- 报销单号:`BX-YYYYMMDD-0001`(daily reset)
|
||||
- 生成逻辑:数据库原子递增(同事务写入 `reimbursement_forms.form_number`)
|
||||
|
||||
**验收**:
|
||||
- 并发下无重复编号;失败回滚不产生脏占用
|
||||
|
||||
### Milestone 6:报销单 CRUD + 提交发起工作流
|
||||
**范围**:
|
||||
- 报销单:创建/更新/删除草稿/查看
|
||||
- 发票池绑定/解绑:`POST /api/invoice-pool/:id/bind|unbind`(并发行锁;冲突 409/`VALID_005`;绑定时触发全局判重 409/`VALID_003`)
|
||||
- 删除草稿:自动解绑其绑定的发票池条目并回到 `available`
|
||||
- 提交:校验 items、票据/发票要求(发票池绑定)、判重;生成单号;启动工作流实例并创建首个任务
|
||||
- 代提交:校验 `delegation_grants`(scope & 生效时间)
|
||||
- 代提交授权(Delegation Grants)CRUD API(用于自助/代维护):
|
||||
- `GET /api/delegation-grants`(默认返回与本人相关;`system.users` 可查询任意)
|
||||
- `POST /api/delegation-grants`(本人创建:principal=自己;`system.users` 可代创建)
|
||||
- `POST /api/delegation-grants/:id/revoke`(本人撤销;`system.users` 可代撤销)
|
||||
|
||||
**验收**:
|
||||
- draft → submitted/reviewing;workflow_instance/task/history 创建完整
|
||||
- delegation_grants 可被创建/查询/撤销;所有变更写入 `audit_logs`
|
||||
|
||||
### Milestone 7:审批动作(approve/reject/return/withdraw/transfer)
|
||||
**范围**:
|
||||
- `approval_rules` 匹配审批链(3 条默认规则)
|
||||
- `POST /api/workflow/tasks/:taskId/approve|reject|return`
|
||||
- `POST /api/workflow/tasks/:taskId/transfer`(reason≥10;链路≤3)
|
||||
- 审计:动作写入 `workflow_history`;关键例外写 `audit_logs`
|
||||
|
||||
**验收**:
|
||||
- 审批推进正确;转审三处证据齐全;状态与任务一致(status=reviewing 但节点来自 task)
|
||||
|
||||
### Milestone 8:付款标记 + 发票判重例外 + 发票池归档
|
||||
**范围**:
|
||||
- `POST /api/reimbursements/:id/pay`(需 `expense.finance.pay`)
|
||||
- 付款完成联动:将该报销单绑定的发票池条目归档(`status=archived, archived_reason=used_complete`)
|
||||
- 发票双策略判重 + 例外(仅 `finance_mgr`,需原单号+原因,原单 `approved/paid` 禁止)
|
||||
|
||||
**验收**:
|
||||
- approved → paid;发票池条目自动归档为 `used_complete`;例外受限且审计完整
|
||||
|
||||
### Milestone 9:最小 CI 门槛(护栏)
|
||||
**范围**:
|
||||
- typecheck + lint(不改写源码)
|
||||
- 最小集成测试:登录/发票池上传+OCR+绑定/提交/审批/转审/判重/付款标记/归档
|
||||
- 安全回归:敏感字段脱敏测试(银行卡/身份证等字段在所有对外响应均为脱敏格式;审计日志禁止明文)
|
||||
|
||||
**验收**:
|
||||
- CI 通过:typecheck + lint + 最小集成测试 + 脱敏测试全绿
|
||||
|
||||
## 3. Phase 2(扩展)
|
||||
|
||||
> 状态口径说明(2026-02-09):
|
||||
> - 已落地:OCR 增强、报表导出、对象存储(MinIO/OSS)、工作流扩展到其他实体(最小骨架)。
|
||||
> - 历史待推进:企微/钉钉通知(渠道扩展)。当前路线已调整为“企业微信基础设施 + OA 唯一审批中心”,飞书/钉钉不进入首批 MVP。
|
||||
> - 详细状态与证据以 `docs/feature-matrix.md` 与 `issues/2026-02-09_13-39-02-p5-blueprint-v3.csv` 为准。
|
||||
|
||||
- [x] OCR 能力增强(队列化与重试策略)
|
||||
- [ ] 历史项:企微/钉钉通知(当前不作为待开发入口;企微基础设施以新 PRD 与最新 Issue CSV 为准)
|
||||
- [x] 报表导出
|
||||
- [x] 对象存储(MinIO/OSS)
|
||||
- [x] 工作流扩展到其他实体(请假/采购)
|
||||
|
||||
## 4. 风险与阻塞项(P0)
|
||||
- 财务对“费用类型/科目默认值”仍可能需要微调:通过 `expense_types` 配置解决,避免改代码
|
||||
- 转审/例外权限属于高风险动作:必须上线前完成审计与权限回归测试
|
||||
@@ -1,60 +0,0 @@
|
||||
# invoicePool 路由拆分方案(P9A1)
|
||||
|
||||
**文档状态**:一次性重构方案归档,不是当前待办。
|
||||
**当前用途**:追溯 `invoicePool` 路由拆分的边界、兼容策略和回滚思路。
|
||||
**不得误读**:本文不代表当前新需求;报销、发票、OCR、附件规则以 [报销、发票与附件规则](./reimbursement-invoice-rules.md) 和当前 PRD 为准。
|
||||
|
||||
## 1. 背景
|
||||
- 现状:`server/src/routes/invoicePool.js` 超过 2700 行,上传、列表、详情、验真、归档、解绑、OCR 重试等职责集中在单文件。
|
||||
- 风险:
|
||||
- 验真链路迭代时容易与票据主流程互相影响。
|
||||
- `select` 片段与响应映射逻辑重复,字段漂移不易发现。
|
||||
- 新人接手定位成本高,回归面过大。
|
||||
|
||||
## 2. 目标与非目标
|
||||
- 目标:
|
||||
- 不改变现有 API 路径、权限码、响应结构。
|
||||
- 将验真端点独立到子模块,主文件保留入口职责。
|
||||
- 抽取 shared `select`/`mapper`,降低重复与字段遗漏风险。
|
||||
- 非目标:
|
||||
- 不新增业务功能。
|
||||
- 不调整数据库模型与外部接口契约。
|
||||
|
||||
## 3. 拆分边界冻结
|
||||
|
||||
### 3.1 保留在 `invoicePool.js` 的能力
|
||||
- 票据列表、上传、详情、编辑、归档、解绑、OCR 重试、判重例外、签名 URL 与文件读取。
|
||||
- 入口职责:对外仍由 `server/src/routes/invoicePool.js` 注册全部 `/api/invoice-pool/*` 路径。
|
||||
|
||||
### 3.2 独立模块
|
||||
- `server/src/routes/invoicePool/verification.js`
|
||||
- `POST /invoice-pool/:id/verify`
|
||||
- `GET /invoice-pool/:id/verification`
|
||||
- `POST /invoice-pool/:id/verification/retry`
|
||||
|
||||
### 3.3 shared 模块
|
||||
- `server/src/routes/invoicePool/shared/selects.js`
|
||||
- 统一 `verification_records` 子查询。
|
||||
- 提供列表/详情 `select` builder。
|
||||
- `server/src/routes/invoicePool/shared/mappers.js`
|
||||
- `mapVerificationRecord`
|
||||
- `mapInvoiceSummary`
|
||||
- `normalizeInvoiceResponse`
|
||||
- `server/src/routes/invoicePool/shared/schemas.js`
|
||||
- 验真列表查询参数解析。
|
||||
- `server/src/routes/invoicePool/shared/helpers.js`
|
||||
- 验真任务触发(`pg-boss`/inline 兼容)。
|
||||
|
||||
## 4. 迁移顺序
|
||||
1. 新增 shared 模块与 `verification.js`,逻辑先保持等价迁移。
|
||||
2. `invoicePool.js` 改为组合注册(调用 `verification.js`),删除内联验真端点。
|
||||
3. 将列表与详情相关查询切换到 shared `select` builder。
|
||||
4. 执行静态检查与验真回归脚本,确认无接口行为变化。
|
||||
|
||||
## 5. 兼容性与回滚
|
||||
- 兼容性:
|
||||
- 路由路径、权限码、返回字段保持不变。
|
||||
- 错误码(`VALID_001`/`PERM_001`/`SYS_404`)保持原语义。
|
||||
- 回滚策略:
|
||||
- 保留 `invoicePool.js` 入口文件与原有注册顺序。
|
||||
- 如发现回归,可将 `verification.js` 调用回切为原文件内联实现(无 schema 变更,无数据回滚)。
|
||||
@@ -1,70 +0,0 @@
|
||||
# hyb-oa 试点迁移映射清单(R12-lite)
|
||||
|
||||
## 1. 迁移边界
|
||||
- 本轮只支持 **人工导出 / dry-run 核对 / 人工导入主数据**。
|
||||
- 历史业务单据采取 **旧 OA 只读归档** 策略,不导入到 hyb-oa 继续流转。
|
||||
- 新系统只接 **切换后新建单据**。
|
||||
- 未完结旧单需在切换前由业务人工清空或冻结。
|
||||
|
||||
## 2. 主数据映射
|
||||
| 旧 OA 对象 | hyb-oa 对象 | 关键字段 | 备注 |
|
||||
| --- | --- | --- | --- |
|
||||
| 员工 | `Employee` | `employee_no`、`name`、`email`、`department_id` | dry-run 文件头至少包含 `employee_no,name,department_name` |
|
||||
| 部门 | `Department` | `name`、`parent_id`、`manager_id` | dry-run 文件头至少包含 `name` |
|
||||
| 预算 | `Budget` / `BudgetPool` | `code`、`name`、`department_id`、`legal_entity_id`、`cost_center_id` | dry-run 文件头至少包含 `code,name` |
|
||||
| 法体 / 成本中心 / 供应商 / 费用类型 | 既有主数据表 | 编码、名称、启停用状态 | 建议优先沿用现有编码体系 |
|
||||
|
||||
## 3. 业务域映射
|
||||
| 旧 OA 域 | hyb-oa 域 | 切换策略 |
|
||||
| --- | --- | --- |
|
||||
| 报销 | `reimbursements` | 切换后新单进入 hyb-oa;旧单仅旧 OA 只读查询 |
|
||||
| 请假 | `leave-requests` | 切换后新单进入 hyb-oa;旧单不迁移流程状态 |
|
||||
| 采购申请 | `purchase-requests` | 切换后新单进入 hyb-oa;PO/合同历史仅保留编号映射 |
|
||||
| 差旅申请 / 支付 | `travel-requests` / `payment-batches` | 切换后新单进入 hyb-oa;历史订单不重放支付状态 |
|
||||
| 资产台账 | `assets` | 可按主数据导入当前资产卡片,历史流转日志保留在旧 OA |
|
||||
| 门户入口 | `portal` | 先切 Portal,再逐域切业务入口 |
|
||||
|
||||
## 4. 状态映射原则
|
||||
- `draft / reviewing / approved / rejected / cancelled / paid` 等状态只做 **对照说明**,不做历史单据业务态导入。
|
||||
- 旧 OA 审批中的单据,不在切换后继续迁移到 hyb-oa 跑剩余流程。
|
||||
- 所有状态核对用于审计与人工校验,不用于自动回放。
|
||||
|
||||
## 5. 编号与附件原则
|
||||
- 编号:旧 OA 历史编号保留在旧系统;hyb-oa 新单继续使用自身编号规则。
|
||||
- 附件:历史附件仅做映射清单,不搬运到 hyb-oa 继续流转。
|
||||
- 如需保留锚点,可在迁移台账中记录“旧编号 / 旧附件路径 / 新系统实体 ID(如有)”对照表。
|
||||
|
||||
## 6. dry-run 文件要求
|
||||
| runType | 必需列 |
|
||||
| --- | --- |
|
||||
| `employees` | `employee_no,name,department_name` |
|
||||
| `departments` | `name` |
|
||||
| `budgets` | `code,name` |
|
||||
| `masterdata_validation` | `type,code` |
|
||||
|
||||
## 7. 切换与回退
|
||||
1. 导出旧 OA 主数据 CSV。
|
||||
2. 在 hyb-oa 执行 dry-run,确认 `dry_run_ok`。
|
||||
3. 公告旧 OA 新单停用时间。
|
||||
4. 打开目标 `CutoverScope`。
|
||||
5. 试点期观测 Portal、待办、预算预校验、支付批次与消息链路。
|
||||
6. 如需回退,关闭 `CutoverScope` 并恢复旧入口。
|
||||
|
||||
## 8. 审计留痕
|
||||
- 保存 dry-run 记录 ID、上传文件名、差异摘要。
|
||||
- 保存 `CutoverScope` 启停时间、操作人和备注。
|
||||
- 保存试点期首批新单编号、审批截图与付款批次号。
|
||||
|
||||
## 9. R18-R22 项目与合同最小导入映射
|
||||
| 现有表格 | hyb-oa 对象 | 建议最小列 |
|
||||
| --- | --- | --- |
|
||||
| 项目台账 | `Project` | `project_no,name,client_name,owner_employee_no,status,target_end_at,is_confidential` |
|
||||
| 项目成员表 | `ProjectMember` | `project_no,employee_no,role` |
|
||||
| 里程碑表 | `ProjectMilestone` | `project_no,title,status,due_date,sort_order` |
|
||||
| 风险表 | `ProjectRisk` | `project_no,title,detail,level,status,owner_employee_no` |
|
||||
| 合同登记表 | `ContractRegistry` | `contract_no,project_no,counterparty_name,summary,confidentiality_level,archive_location,offline_archive_no,status` |
|
||||
|
||||
### 9.1 导入原则
|
||||
- 优先导入“仍在使用的活动项目”,不追求一次性搬空历史。
|
||||
- 项目资料正文不导入,`hyb-oa` 只保留资料目录、链接和归档位置。
|
||||
- 对于涉密合同,CSV 里也只放元数据,不放正文摘要和附件路径明细。
|
||||
@@ -1,102 +0,0 @@
|
||||
# PWA 回归清单(P12 + P21PWA1 + P21PWA2)
|
||||
|
||||
## 前置条件
|
||||
- `client` 已完成构建:`cd client && npm run build`
|
||||
- 浏览器支持 PWA(Chrome / Safari 最新版,含移动端)
|
||||
- 服务端 API 可用
|
||||
- 离线相关场景优先在真实设备、企微 / 钉钉容器或移动浏览器中手工验证
|
||||
|
||||
## 场景 A:安装与离线壳
|
||||
1. 打开系统首页,确认可出现安装入口(浏览器原生 UI)。
|
||||
2. 安装到桌面后重新打开,确认可进入系统壳页面。
|
||||
3. 断网后刷新,确认仍可打开壳页面(离线壳生效)。
|
||||
|
||||
期望:离线壳可访问,不应白屏崩溃。
|
||||
|
||||
## 场景 B:移动 PDF 发票离线上传
|
||||
1. 访问 `移动 PDF 发票上传` 页面。
|
||||
2. 断网,选择 PDF 文件,点击“立即上传”。
|
||||
3. 确认提示“已加入待上传队列”。
|
||||
4. 恢复网络,点击“同步队列”或等待自动重放。
|
||||
5. 进入票据中心确认文件已上传。
|
||||
|
||||
期望:离线缓存成功,联网可重放成功。
|
||||
|
||||
## 场景 C:移动资产扫码
|
||||
1. 使用具备资产读取权限的账号访问 `资产扫码` 页面。
|
||||
2. 在支持 `BarcodeDetector` 的浏览器中点击“开始扫码”,扫描资产条码或二维码。
|
||||
3. 若浏览器不支持 `BarcodeDetector`,确认页面自动回退到 ZXing 并可继续扫码。
|
||||
4. 若相机不可用,改为手工输入资产编号 / 序列号 / 名称。
|
||||
5. 确认唯一命中时展示轻量资产详情卡;多命中时展示候选列表。
|
||||
|
||||
期望:扫码与手工输入都能完成资产查找,且不要求新增原生壳。
|
||||
|
||||
## 场景 D:移动盘点录入与离线重放
|
||||
1. 使用具备 `asset.inventory` 权限的账号,从 `资产盘点` 页面进入 `移动扫码盘点`。
|
||||
2. 选择或打开一个 `draft` 盘点任务,点击“开始并扫码”,确认任务进入 `counting`。
|
||||
3. 扫码定位资产后提交盘点结果,确认桌面盘点页同步看到新增 item。
|
||||
4. 在任务为 `counting` 且已解析资产的前提下断网,再次提交盘点结果,确认提示“已加入离线队列”。
|
||||
5. 恢复网络后等待自动重放或手动点击“同步队列”,确认队列项被移除且盘点结果已写回服务端。
|
||||
6. 用无 `asset.inventory` 权限账号访问同一路径,确认只能查看资产结果,不能录入盘点。
|
||||
|
||||
期望:离线只缓存已解析盘点结果,联网可重放成功,权限边界不回退。
|
||||
|
||||
## 场景 E:移动审批在线动作
|
||||
1. 使用审批角色访问 `移动审批` 页面。
|
||||
2. 选择待办任务,依次测试在线 `通过` / `驳回` / `退回` / `转审`。
|
||||
3. 返回待办列表与详情页确认状态同步刷新。
|
||||
|
||||
期望:在线动作闭环不回归,错误提示可读。
|
||||
|
||||
## 场景 F:workflow canonical deep link 落点
|
||||
1. 生成待办通知,其 canonical URL 为 `/workflow/tasks/<taskId>`。
|
||||
2. 在企微 / 钉钉容器或移动浏览器打开链接。
|
||||
3. 确认 PWA 壳成功打开并自动跳转到 `/mobile/approvals?taskId=<taskId>`。
|
||||
4. 确认待办详情正确展开;若该任务不在第一页列表中,也能单独查看详情。
|
||||
|
||||
期望:服务端 canonical deep link 不变,移动端自动落到移动审批页,桌面链接不回归。
|
||||
|
||||
## 场景 G:deep link 登录回跳
|
||||
1. 未登录状态下直接打开 `/workflow/tasks/<taskId>`。
|
||||
2. 守卫跳转到 `/login?redirect=...`。
|
||||
3. 登录成功后返回原始 deep link。
|
||||
4. 再次命中移动兜底跳转并进入 `/mobile/approvals?taskId=<taskId>`。
|
||||
|
||||
期望:登录回跳完整保留 deep link,上线后仍进入移动审批详情。
|
||||
|
||||
## 场景 H:离线审批草稿与联网重放
|
||||
1. 在线进入移动审批页并成功加载某个待办详情。
|
||||
2. 断网后选择 `通过` 或填写 comment 后 `驳回`。
|
||||
3. 页面提示“已加入待同步审批草稿”。
|
||||
4. 恢复联网后等待自动重放或手动点击“同步草稿队列”。
|
||||
5. 确认成功项从队列移除,列表 / 详情刷新到最新状态。
|
||||
|
||||
期望:离线仅排队 `approve / reject`,联网可自动或手动重放成功。
|
||||
|
||||
## 场景 I:离线冷启动与未缓存待办
|
||||
1. 设备先在线登录成功并写入本地会话快照。
|
||||
2. 完全关闭页面后断网,直接打开 `/workflow/tasks/<taskId>` 或 `/mobile/approvals?taskId=<taskId>`。
|
||||
3. 若该待办曾在线加载过,确认可进入移动审批壳并看到缓存详情。
|
||||
4. 若该待办从未缓存过,确认页面只显示 taskId 与“离线未缓存该待办,请联网后重试”提示。
|
||||
|
||||
期望:离线冷启动仅依赖本地会话快照进入壳页面,不伪造未缓存详情。
|
||||
|
||||
## 场景 J:草稿冲突与失败重试
|
||||
1. 离线起草一条 `驳回` 草稿。
|
||||
2. 在恢复联网前,由其他审批人在线处理同一待办。
|
||||
3. 自动重放返回 `409 already_processed`、`403` 或 `404`。
|
||||
4. 确认草稿进入“存在冲突”状态,而不是静默视为成功。
|
||||
5. 对 `5xx` 或临时网络异常场景,确认草稿进入“同步失败”状态并可手动重试。
|
||||
|
||||
期望:冲突与失败语义区分明确,用户可查看任务、重试失败项或丢弃草稿。
|
||||
|
||||
## 场景 K:权限与边界
|
||||
1. 非审批角色访问 `移动审批` 或 deep link,确认被拒绝到 `403`。
|
||||
2. 无在线会话且无本地快照时,离线冷启动不得绕过守卫。
|
||||
3. 离线状态下确认 `退回` / `转审` 按钮统一置灰,并提示“需联网执行”。
|
||||
|
||||
期望:PWA-2 只放开移动审批壳的离线守卫,不扩散到其他受保护页面。
|
||||
|
||||
## 备注
|
||||
- iOS 场景仅保证前台恢复后的重放,不承诺后台持续同步。
|
||||
- `PWA-2` 不校验真实钉钉 / 企微 JS-SDK,只校验同源 H5 deep link 打开体验。
|
||||
@@ -28,7 +28,7 @@
|
||||
- 最大响应(max)< 1500ms
|
||||
|
||||
## SLI/SLO 与错误预算(P13)
|
||||
- 详细定义见:`docs/ops/slo.md`
|
||||
- 详细定义见:`docs/ops/SLO错误预算.md`
|
||||
- 首版目标:
|
||||
- 可用性(30天)>= 99.9%
|
||||
- 核心 Dashboard API P99 < 500ms
|
||||
@@ -1,9 +0,0 @@
|
||||
# 需求规格说明书旧路径说明
|
||||
|
||||
**文档状态**:兼容跳转入口,不再作为主编辑入口。
|
||||
|
||||
当前 PRD 主事实源已改为中文文件名,方便人工审查:
|
||||
|
||||
- [海音达OA-MVP需求规格说明书](./海音达OA-MVP需求规格说明书.md)
|
||||
|
||||
保留本文件是为了兼容历史文档、历史 Issue CSV 和外部链接。后续新增需求、评审和开发拆分,应优先引用中文主文档。
|
||||
@@ -1,69 +0,0 @@
|
||||
# hyb-oa 技术栈与复用报告(定案)
|
||||
|
||||
**文档状态**:历史技术选型定案,保留为架构追溯参考。
|
||||
**日期**:2026-02-05
|
||||
**适用范围**:OA 报销系统(Phase 1)
|
||||
**当前用途**:确认 Fastify + Prisma + PostgreSQL 等基础技术选型来源。
|
||||
**不得误读**:`Phase 1 / P0 / P2` 为早期阶段口径,不代表当前 MVP 需求范围;当前需求以 [海音达OA-MVP需求规格说明书](./海音达OA-MVP需求规格说明书.md) 为准。
|
||||
|
||||
## 1. 定案结论(统一口径)
|
||||
| 层级 | 选型 |
|
||||
| :--- | :--- |
|
||||
| 前端(OA) | React + Vite + Tailwind |
|
||||
| 后端(OA API) | Fastify |
|
||||
| ORM | Prisma |
|
||||
| 数据库 | PostgreSQL |
|
||||
| 认证 | JWT(access + refresh rotation),refresh 以 httpOnly Cookie 传输 |
|
||||
| 权限 | RBAC(权限码) |
|
||||
| 审计 | `workflow_history`(流程)+ `audit_logs`(安全与关键变更) |
|
||||
| 部署 | Docker + Caddy/Nginx(反向代理) |
|
||||
|
||||
## 2. 关键取舍(为什么这么选)
|
||||
|
||||
### 2.1 常驻 Node 服务场景:优先“稳定性/少踩坑”
|
||||
本项目目标是云服务器常驻 Node 服务 + 长期演进,因此选型优先级为:
|
||||
1) 工具链成熟度与可维护性
|
||||
2) 团队上手成本与踩坑风险
|
||||
3) 可观测性/审计/权限等生产配套
|
||||
4) 性能(在常驻服务场景下,冷启动优势不显著)
|
||||
|
||||
### 2.2 Prisma vs Drizzle(定案:Prisma)
|
||||
- Prisma:迁移范式统一、资料多、团队协作成本低;适合“新人不踩坑”
|
||||
- Drizzle:更轻、更 SQL 直观,但更依赖团队 SQL/事务/索引纪律;在本项目“稳定性优先”的定义下不作为默认
|
||||
|
||||
### 2.3 Fastify vs Hono(定案:Fastify)
|
||||
- Fastify 适合常驻服务:生态成熟、插件与生产实践丰富(鉴权、日志、schema 校验等)
|
||||
- Hono 更偏极简/Edge/Serverless 方向;并非本项目的默认最优解
|
||||
|
||||
### 2.4 为什么不使用 Supabase(本项目定案)
|
||||
本项目部署形态为“自建常驻 API + 自建权限/审计/工作流/文件存储”,Supabase 在此形态下会带来:
|
||||
- 额外的运维与概念复杂度(RLS、RPC、Storage、Auth 等)
|
||||
- 架构边界不清(哪些逻辑在 DB,哪些在服务层)
|
||||
因此 hyb-oa 选择“Fastify + Prisma + PostgreSQL”作为单一事实源。
|
||||
|
||||
## 3. 复用资产清单(来自 `shenzhou-business-suite`)
|
||||
> 原则:复用“成熟结构/约束/枚举/经验”,把改造集中在“Supabase 调用 → REST API 调用”。
|
||||
|
||||
| 资产 | 来源路径(参考) | 复用价值 | 备注/改造点 |
|
||||
| :--- | :--- | :---: | :--- |
|
||||
| 工作流引擎 4 表 + `approval_rules`/`approval_transfers`/`document_sequences` | `shenzhou-business-suite/supabase/schema/70_workflow/01_workflow_02_tables.sql` | ⭐⭐⭐⭐⭐ | 转 Prisma schema;工作流事务由 Fastify 服务层实现 |
|
||||
| 工作流配置/类型(assignee_rule 等) | `shenzhou-business-suite/src/types/workflow.ts` | ⭐⭐⭐⭐ | 作为工作流 JSON 配置与契约参考 |
|
||||
| 权限码体系 | `shenzhou-business-suite/src/types/permissions.ts` | ⭐⭐⭐⭐ | 复用命名与粒度;补 `expense.proxy_*` |
|
||||
| 报销表结构参考(forms/items/attachments) | `shenzhou-business-suite/supabase/schema/20_finance/06_reimbursement_01_tables.sql` | ⭐⭐⭐⭐ | 字段设计参考;hyb-oa 简化并补 `file_sha256` 等 |
|
||||
| 默认费用类型 seed(35 启用 + 3 legacy 禁用) | `shenzhou-business-suite/supabase/seed.sql` | ⭐⭐⭐⭐⭐ | hyb-oa 额外启用 `utilities/rent` 形成 37 启用 |
|
||||
| 存储安全基线(类型/大小/访问控制) | `shenzhou-business-suite/supabase/migrations/20260131175000_storage_security_baseline.sql` | ⭐⭐⭐⭐ | 思路迁移到“本地存储 + 签名 URL” |
|
||||
| UI 组件(shadcn/ui 风格) | `shenzhou-business-suite/src/components/ui/*` | ⭐⭐⭐⭐ | 实现阶段复制到 `hyb-oa/client/src/`(需统一路径与样式变量) |
|
||||
| 报销前端页面结构 | `shenzhou-business-suite/src/pages/finance/reimbursement/*` | ⭐⭐⭐ | 需移除 Supabase 调用,替换为 OA API |
|
||||
| 测试框架 | `shenzhou-business-suite/playwright.config.ts` + `vitest.config.ts` | ⭐⭐⭐ | 实现阶段迁移;补齐鉴权/工作流核心路径 |
|
||||
|
||||
## 4. 关键设计原则(写入规格书的那几条)
|
||||
- 状态 vs 节点分离:报销单 `status` 固定 7 状态;审批节点由 `workflow_tasks` 驱动
|
||||
- 配置驱动:`approval_rules`/`expense_types`/`document_sequences` 均可配置;P0 预置默认值即可生效
|
||||
- 审计分层:
|
||||
- `workflow_history`:流程动作与审批链路(权威)
|
||||
- `audit_logs`:登录/敏感字段/配置变更/判重例外等安全关键事件
|
||||
- 文件存储:P0 本地存储 + 签名 URL;P2 切换 MinIO/OSS(接口不变)
|
||||
|
||||
## 5. 与本仓库当前现状对齐(信息校验)
|
||||
- `server/package.json` 已包含:`fastify`、`@fastify/jwt`、`prisma/@prisma/client`、`zod`
|
||||
- `docker-compose.yml` 已提供 PostgreSQL 15(本地/开发用)
|
||||
@@ -1,43 +0,0 @@
|
||||
# 历史 TODO 清账映射(A/C -> B/D/F)
|
||||
|
||||
**文档状态**:历史 TODO 清账证据,不是当前待办列表。
|
||||
**日期**:2026-03-13
|
||||
**范围**:
|
||||
- `issues/2026-02-07-p2-kickoff.csv`
|
||||
- `issues/2026-02-08_14-20-25-p2-ci-and-tests.csv`
|
||||
|
||||
**目标**:对历史 `TODO` 项逐条给出去向:`implemented | superseded | still-open`,并以“后续执行合同 + 当前代码路径”形成可审计证据链。
|
||||
**当前用途**:解释早期 TODO 为什么不再直接推进;新需求必须进入新的 `issues/*.csv`。
|
||||
**不得误读**:本文中的 `still-open=0` 只针对列出的早期 TODO,不代表全项目没有待办。
|
||||
|
||||
## 1. 2026-02-07-p2-kickoff.csv
|
||||
|
||||
| Legacy ID | 标题 | 清账状态 | 对应实现 / 去向证据 |
|
||||
| --- | --- | --- | --- |
|
||||
| A1 | 付款凭证扩展与pay幂等冲突判定 | implemented | `issues/2026-02-08_11-02-30-p2-stabilization.csv:B1`(DONE)承接付款幂等收口;当前代码在 `server/src/routes/reimbursements.js` 的 `/api/reimbursements/:id/pay` 已支持 `paymentVoucherNo/paymentDate/paymentChannel` 幂等重试,并在冲突时返回 `already_paid_conflict`。 |
|
||||
| A2 | 委派有效期与自动回收 | implemented | `issues/2026-02-08_11-02-30-p2-stabilization.csv:B2/B3`(DONE)收口委派有效期与并发回收;当前代码在 `server/src/routes/delegations.js` 支持 `validFrom/validTo`,`server/src/jobs/delegationRevokeJob.js` 负责过期授权自动回收与审计。 |
|
||||
| A5 | Sprint1回归护栏前置 | superseded | 该目标已被后续统一回归体系取代:`issues/2026-02-08_17-05-00-p3-full-delivery.csv:D12`(DONE)与 `issues/2026-02-08_17-05-00-p3-full-delivery.csv:D4`(DONE)已将回归入口与 CI 补强收口;当前脚本 `server/scripts/regression-workflow-actions.sh` 与 `server/scripts/regression-all.sh` 持续承接原“护栏前置”职责。 |
|
||||
| A3 | OCR真对接与异步处理 | implemented | `issues/2026-02-09_13-39-02-p5-blueprint-v3.csv:F11` 与 `issues/2026-02-09_13-39-02-p5-blueprint-v3.csv:F19b`(DONE)已将 OCR provider、异步处理与回归闭环收口;当前代码在 `server/src/services/ocr/tencent.js` 提供腾讯云 VAT OCR 对接,在 `server/src/scripts/run-ocr-once.js` 与 `server/src/jobs/ocrJob.js` 提供异步扫描执行能力。 |
|
||||
| A3-LOCK | OCR多实例并发幂等锁 | implemented | `issues/2026-02-08_17-05-00-p3-full-delivery.csv:D3`(DONE)已把 OCR mock 回归与并发锁验收纳入主线;当前代码在 `server/src/jobs/ocrJob.js` 使用 `FOR UPDATE SKIP LOCKED` + `ocr_locked_at/ocr_lock_owner` 进行唯一认领,表结构见 `server/prisma/schema.prisma`。 |
|
||||
| A4 | 审计工作台只读能力 | implemented | `issues/2026-02-08_17-05-00-p3-full-delivery.csv:D2`(DONE)承接审计接口与回归;当前代码在 `server/src/routes/audit.js` 已提供 `/api/audit-logs`,前端 `client/src/pages/AuditLogsPage.tsx` 已实现分页、筛选、导出与权限控制。 |
|
||||
|
||||
## 2. 2026-02-08_14-20-25-p2-ci-and-tests.csv
|
||||
|
||||
| Legacy ID | 标题 | 清账状态 | 对应实现 / 去向证据 |
|
||||
| --- | --- | --- | --- |
|
||||
| C2 | 审计接口自动化测试 | implemented | `issues/2026-02-08_17-05-00-p3-full-delivery.csv:D2`(DONE)直接承接;当前回归脚本 `server/scripts/regression-audit.sh` 已覆盖权限、分页、筛选与参数非法场景。 |
|
||||
| C3 | OCR 自动化测试(Mock优先) | implemented | `issues/2026-02-08_17-05-00-p3-full-delivery.csv:D3`(DONE)直接承接;当前回归脚本 `server/scripts/regression-ocr.sh` 已覆盖 mock provider、状态流转、失败重试与并发唯一认领。 |
|
||||
| C4 | P3-a 待办列表页落地 | implemented | `issues/2026-02-08_17-05-00-p3-full-delivery.csv:D6`(DONE)直接承接;当前页面 `client/src/pages/WorkflowTasksPage.tsx` 已实现真实待办列表、分页、状态筛选与详情入口。 |
|
||||
| C5 | P3-a 审批详情与动作联调 | implemented | `issues/2026-02-08_17-05-00-p3-full-delivery.csv:D6`(DONE)直接承接;当前页面 `client/src/pages/WorkflowTaskDetailPage.tsx` 已联通 `approve/reject/return/transfer` 动作、候选审批人、错误提示与数据刷新。 |
|
||||
|
||||
## 3. 汇总结论
|
||||
|
||||
- `implemented`:9
|
||||
- `superseded`:1
|
||||
- `still-open`:0
|
||||
|
||||
## 4. 治理口径
|
||||
|
||||
- 历史 `issues/*.csv` 继续保持快照不可变,不回写旧状态。
|
||||
- 清账结论由本文件和后续治理合同承接,作为“旧 TODO 已被后续迭代覆盖”的审计证据。
|
||||
- 若后续代码与旧合同文案冲突,以当前运行时代码和已完成执行合同为准。
|
||||
@@ -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 前确认人员、窗口和回滚联系人。"
|
||||
|
+33
@@ -0,0 +1,33 @@
|
||||
# 历史功能状态矩阵
|
||||
|
||||
**文档状态**:轻量历史索引,不是当前 PRD,不是当前开发排期。
|
||||
**适用时间**:DCL7 之后。
|
||||
|
||||
本文件只回答“早期功能状态矩阵是否还存在入口,以及去哪里追溯历史明细”。DCL7 已删除原来的大表内容,避免旧阶段状态和当前事实源混在一起。
|
||||
|
||||
## 当前使用规则
|
||||
|
||||
- 当前需求、范围和验收以 [文档索引](./文档索引.md)、[海音达OA-MVP需求规格说明书](./海音达OA-MVP需求规格说明书.md)、当前模块规约和最新 `issues/*.csv` 为准。
|
||||
- 历史完成证据优先看相关 Issue CSV 和 git 历史;不要从本文件生成新需求。
|
||||
- 早期大表可通过 git 历史恢复:`git show 5da05eb:docs/feature-matrix.md`。
|
||||
|
||||
## 当前事实摘要
|
||||
|
||||
| 范围 | 当前口径 | 事实源 |
|
||||
| --- | --- | --- |
|
||||
| R6 小范围试运行 | 已完成并部署;不等于全面正式上线 | `issues/2026-05-11_10-23-41-r6-small-trialrun-prep.csv`、[人工试运行报告](./trialrun/人工试运行报告.md) |
|
||||
| PC6/PA6/FL6/AP6/RI6/LP6 | 已按各自合同完成 | 最新相关 `issues/*.csv` |
|
||||
| ME6 | 自动化和公网视觉矩阵已完成;`ME6-3` 真机门禁未关闭 | [真机公网测试清单](./trialrun/真机公网测试清单.md) |
|
||||
| QG6 | QA 治理已完成 | `issues/2026-05-12_01-47-00-r6-qa-governance-upgrade.csv` |
|
||||
| DG7/MRF7/MIA7 | 移动信息去重、真机反馈修复和审查已完成 | [移动信息架构视觉流程审查](./trialrun/移动信息架构视觉流程审查.md) |
|
||||
| MIF7 | 下一批移动整改,仍为 TODO | `issues/2026-05-12_21-48-40-mobile-ia-flow-remediation.csv` |
|
||||
| R7 | 只有草案和准备材料;真实 R7 未启动 | [R7扩大试运行草案](./trialrun/R7扩大试运行草案.md) |
|
||||
|
||||
## 已移除历史大表
|
||||
|
||||
原 `docs/feature-matrix.md` 包含 P5-R90 等历史批次的大量完成行。DCL7 后压缩并重命名为当前轻量索引;如需审计某个旧 ID,请按以下顺序查:
|
||||
|
||||
1. `git log --follow -- docs/历史功能状态矩阵.md`
|
||||
2. `git show 5da05eb:docs/feature-matrix.md`
|
||||
3. 对应 `issues/*.csv`
|
||||
4. 对应 commit 记录
|
||||
+1
-1
@@ -124,5 +124,5 @@ A7 收口员工导航和备用模块护栏
|
||||
- `docs/海音达OA-MVP需求规格说明书.md` 定义开发项目流程和 MVP 业务目标。
|
||||
- `issues/*.csv` 是每轮执行合同。
|
||||
- `docs/测试规约与回归门禁.md` 定义测试、视觉验证和回归门禁。
|
||||
- `docs/trialrun-runbook.md` 定义本地、公网、企业微信和真实 OCR 的操作步骤。
|
||||
- `docs/试运行与自动化验证手册.md` 定义本地、公网、企业微信和真实 OCR 的操作步骤。
|
||||
- `AGENTS.md` 定义不可违反的执行硬约束。
|
||||
|
||||
@@ -103,7 +103,7 @@ PC 端:
|
||||
|
||||
- 适合明细编辑、批量查看、财务复核和台账导出。
|
||||
- 报销详情分区展示:摘要、明细、发票、附件、审批流、预算与审核提示。
|
||||
- PC 报销列表和详情遵循 [产品设计规则基线](./product-design-rules.md):业务编号、状态、申请人、金额和更新时间优先,不把 UUID 或内部状态码作为主展示。
|
||||
- PC 报销列表和详情遵循 [产品设计规则基线](./产品设计规则.md):业务编号、状态、申请人、金额和更新时间优先,不把 UUID 或内部状态码作为主展示。
|
||||
|
||||
手机/企业微信端:
|
||||
|
||||
+84
-69
@@ -1,77 +1,92 @@
|
||||
# hyb-oa 文档事实源状态矩阵
|
||||
# 文档事实源状态矩阵
|
||||
|
||||
**文档状态**:当前文档治理事实源。
|
||||
**适用时间**:2026-05-12 DOCG7 之后。
|
||||
**治理策略**:采用索引归档,不删除、不移动历史文档,不回写旧 Issue CSV。历史文档通过本文档和 `docs/文档索引.md` 标注用途。
|
||||
**适用时间**:DCL7 之后。
|
||||
**治理口径**:中文优先,物理精简。历史资料不建 `docs/archive/`,已确认不用的文档从当前树移除,通过 git 历史恢复。
|
||||
|
||||
## 当前判断规则
|
||||
## 冲突优先级
|
||||
|
||||
- 最新 Issue CSV 是执行合同事实源;当前 PRD、模块规约和设计规则是需求/验收事实源。
|
||||
- 当前操作手册用于执行试运行、部署、真机验收和用户培训;若与最新 Issue CSV 或模块规约冲突,以最新 Issue CSV 和当前模块规约为准。
|
||||
- 历史矩阵、旧 trialrun 报告和旧 CSV 用于追溯证据,不代表 2026-05-12 当前状态。
|
||||
- R7/OPS7/DOC7 是准备材料,不代表真实扩大试运行已经启动。
|
||||
- `ME6-3` 代表性企业微信真机门禁仍未关闭;MIF7 是下一批移动信息架构整改合同,当前仍为 TODO。
|
||||
最新 Issue CSV > 当前 PRD/模块规约 > 产品和设计规则 > 当前操作手册 > 技术参考 > 历史证据 > git 历史。
|
||||
|
||||
## 状态矩阵
|
||||
## 当前事实源
|
||||
|
||||
| 文档 | 分类 | 当前用途 | 当前口径 |
|
||||
| --- | --- | --- | --- |
|
||||
| `docs/文档索引.md` | 当前事实源 | 文档入口、冲突优先级、归档策略 | 当前有效;先读它判断哪些文档可指导开发 |
|
||||
| `docs/文档事实源状态矩阵.md` | 当前事实源 | DOCG7 后文档状态分类 | 当前有效;不替代具体模块规约 |
|
||||
| `docs/海音达OA-MVP需求规格说明书.md` | 当前事实源 | PRD 主事实源 | 当前有效;范围变更先更新 PRD 或模块规约 |
|
||||
| `docs/product-design-rules.md` | 当前事实源 | PC、移动、企业微信 WebView 设计规则 | 当前有效;MIA7 移动标准为最新移动设计事实源 |
|
||||
| `docs/product-decisions.md` | 当前事实源 | 已拍板产品边界 | 当前有效;与最新 Issue CSV 冲突时以后者为准 |
|
||||
| `docs/需求-统一审批中心规约.md` | 当前事实源 | 审批、催办、超时提醒、审批效率 | 当前有效;AP6 v1 已是当前事实 |
|
||||
| `docs/reimbursement-invoice-rules.md` | 当前事实源 | 报销、发票、附件、OCR 规则 | 当前有效;RI6 后员工入口仍是报销详情添加发票 |
|
||||
| `docs/需求-报销发票OCR规约.md` | 当前事实源 | 报销发票 OCR 模块规约 | 当前有效;细节与 `reimbursement-invoice-rules.md` 配套 |
|
||||
| `docs/需求-企业微信基础设施规约.md` | 当前事实源 | 企业微信入口、身份、消息、deeplink | 当前有效;企业微信不替代 OA 正式审批 |
|
||||
| `docs/需求-请假考勤修正规约.md` | 当前事实源 | 请假、补卡、考勤修正 | 当前有效;LP6 已完成轻体验收口 |
|
||||
| `docs/需求-采购费用审批规约.md` | 当前事实源 | 采购、费用、附件、审批规则 | 当前有效;复杂预算、供应商准入和 ERP 不在当前批次扩展 |
|
||||
| `docs/需求-合同附件归档规约.md` | 当前事实源 | 合同台账和附件归档边界 | 当前有效;涉密正文不上传 |
|
||||
| `docs/需求-项目轻管理规约.md` | 当前事实源 | 项目轻管理边界 | 当前有效;不扩成重型项目管理 |
|
||||
| `docs/测试规约与回归门禁.md` | 当前事实源 | 自动化、视觉、真机、状态回填规则 | 当前有效;真机暂停只能标 PAUSED |
|
||||
| `docs/开发交付与变更管理规约.md` | 当前事实源 | Issue CSV、review、提交和交付流程 | 当前有效 |
|
||||
| `AGENTS.md` | 当前事实源 | Agent 执行硬约束 | 当前有效;执行开发前必须遵守 |
|
||||
| `.agents/skills/hyb-oa-delivery/SKILL.md` | 当前事实源 | 项目交付 Skill | 当前有效;需要随事实源同步 |
|
||||
| `docs/agent-development-practices.md` | 当前事实源 | Agent 协作与交付实践 | 当前有效;详细事实源在 docs 和 Issue CSV |
|
||||
| `docs/admin-handbook.md` | 当前操作手册 | 管理员上线、权限、试运行配置 | 当前有效;R7 未真实启动,ME6-3 未关闭 |
|
||||
| `docs/employee-quickstart.md` | 当前操作手册 | 员工使用说明 | 当前有效;移动体验下一批 MIF7 继续整改 |
|
||||
| `docs/trialrun-runbook.md` | 当前操作手册 | 本地、公网、企业微信、真实 OCR 验证步骤 | 当前有效;不替代真机清单 |
|
||||
| `docs/trialrun/real-device-public-checklist.md` | 当前操作手册 | 真实手机/企业微信人工验收 | 当前有效;`ME6-3` 仍待代表设备确认 |
|
||||
| `docs/trialrun/release-readiness-checklist.md` | 当前操作手册 | 发布试运行准备与门禁 | 当前有效但含早期证据;顶部当前状态优先 |
|
||||
| `docs/trialrun/live-smoke-readiness.md` | 当前操作手册 | 公网 live smoke 和真实 OCR readiness | 当前有效 |
|
||||
| `docs/trialrun/r7-expanded-trialrun-prep.md` | 草案/准备材料 | R7 扩大试运行草案 | 不代表真实 R7 已启动;`R7E-*` 仍需用户确认后执行 |
|
||||
| `docs/trialrun/ops7-runbook.md` | 草案/准备材料 | 运维交接 Runbook 草案 | 不代表生产配置变更或恢复演练已执行 |
|
||||
| `docs/trialrun/r7-user-guide-and-faq.md` | 草案/准备材料 | R7 用户手册和 FAQ 草案 | 只描述已实现能力,不承诺扩展能力 |
|
||||
| `docs/trialrun/mobile-ia-visual-flow-review.md` | 实现状态与证据 | MIA7 移动信息架构审查结论 | 当前审查证据;整改仍以 MIF7 合同为准 |
|
||||
| `docs/trialrun/manual-trialrun-report.md` | 实现状态与证据 | R70-R6 及后续批次收口记录 | 历史基底 + 最新追加记录;不要只读标题判断当前状态 |
|
||||
| `docs/feature-matrix.md` | 历史证据 | 2026-05-05 前后历史实现状态矩阵 | 历史主表;不代表 2026-05-12 当前状态 |
|
||||
| `docs/trialrun/coverage-matrix.csv` | 历史证据 | 试运行覆盖证据和 QA 参考 | 历史证据;不单独作为当前门禁 |
|
||||
| `docs/trialrun/project-wide-flow-matrix.csv` | 历史证据 / QA 参考 | 项目级流程和覆盖映射 | 历史 QA 参考;当前流程以最新 Issue CSV 为准 |
|
||||
| `docs/trialrun/permission-direct-access-audit.md` | 实现状态与证据 | 权限直连审计记录 | 当前可追溯证据;后续权限变更需重新审计 |
|
||||
| `docs/trialrun/deployment-preflight-2026-05-10.md` | 实现状态与证据 | 2026-05-10 部署预检证据 | 历史证据;不代表最新部署状态 |
|
||||
| `docs/trialrun/async-ux-audit.csv` | 历史证据 / QA 参考 | 异步体验审计记录 | 历史 QA 参考 |
|
||||
| `docs/requirements-specification.md` | 历史归档参考 | 旧规格入口或跳转 | 不作为当前 PRD 主入口 |
|
||||
| `docs/implementation_plan.md` | 历史归档参考 | 早期实施计划 | 不作为当前排期 |
|
||||
| `docs/tech_stack_report.md` | 技术参考 / 历史归档参考 | 技术栈和复用报告 | 技术栈有参考价值,范围口径需看当前 PRD |
|
||||
| `docs/architecture.md` | 技术参考 | 架构概览 | 当前参考;部署状态需结合最新部署报告 |
|
||||
| `docs/integration-boundaries.md` | 技术参考 | ERP、IM、AI、MCP、PWA 集成边界 | 当前参考;不因历史能力扩大 R6/R7 范围 |
|
||||
| `docs/domain-events.md` | 技术参考 | 领域事件清单 | 当前参考 |
|
||||
| `docs/mcp-tools.md` | 技术参考 | MCP 工具边界 | 当前参考;未启用工具不得假设可用 |
|
||||
| `docs/ops/*.md` | 技术参考 | SLO、 tracing、测试策略、CI 和 DORA | 当前参考;不替代 Issue CSV |
|
||||
| `docs/adr/*.md` | 技术参考 / 历史归档参考 | 重要路线决策记录 | 保留 ADR 历史结论 |
|
||||
| `docs/mobile/pwa-regression-checklist.md` | 历史证据 / QA 参考 | PWA 移动回归清单 | 历史 QA 参考;当前移动验收看 ME6/MIA7/MIF7 |
|
||||
| `docs/MVP主线代码差距盘点.md` | 历史证据 | MVP 主线差距盘点 | 历史证据;不作为新需求入口 |
|
||||
| `docs/todo-reconciliation.md` | 历史证据 | 旧 TODO 清账映射 | 历史追溯,不直接生成新需求 |
|
||||
| `docs/invoice-pool-refactor-plan.md` | 历史归档参考 | invoicePool 拆分方案 | 一次性方案归档 |
|
||||
| `docs/migration-mapping.md` | 历史归档参考 | 旧系统迁移映射 | 仅迁移专项使用 |
|
||||
| `docs/trialrun/domestic-oa-best-practices.md` | 历史归档参考 | 国内 OA 调研快照 | 仅作原则参考,不替代产品事实源 |
|
||||
| 路径 | 分类 | 当前用途 |
|
||||
| --- | --- | --- |
|
||||
| `docs/文档索引.md` | 当前事实源 | 唯一文档入口 |
|
||||
| `docs/文档事实源状态矩阵.md` | 当前事实源 | 文档分类和恢复规则 |
|
||||
| `docs/海音达OA-MVP需求规格说明书.md` | 当前事实源 | PRD 主事实源 |
|
||||
| `docs/产品设计规则.md` | 当前事实源 | PC、移动、企业微信设计规则 |
|
||||
| `docs/产品口径.md` | 当前事实源 | 产品边界和业务规则 |
|
||||
| `docs/需求-统一审批中心规约.md` | 当前事实源 | 审批、催办、超时、效率摘要 |
|
||||
| `docs/报销发票附件规则.md` | 当前事实源 | 报销、发票、附件细则 |
|
||||
| `docs/需求-报销发票OCR规约.md` | 当前事实源 | OCR 和报销模块规约 |
|
||||
| `docs/需求-企业微信基础设施规约.md` | 当前事实源 | 企业微信入口、身份、消息、deeplink |
|
||||
| `docs/需求-请假考勤修正规约.md` | 当前事实源 | 请假和考勤修正 |
|
||||
| `docs/需求-采购费用审批规约.md` | 当前事实源 | 采购和费用审批 |
|
||||
| `docs/需求-合同附件归档规约.md` | 当前事实源 | 合同台账和附件归档 |
|
||||
| `docs/需求-项目轻管理规约.md` | 当前事实源 | 项目轻管理 |
|
||||
| `docs/测试规约与回归门禁.md` | 当前事实源 | 测试和回归门禁 |
|
||||
| `docs/开发交付与变更管理规约.md` | 当前事实源 | Issue CSV、review、提交和交付 |
|
||||
| `docs/Agent开发交付实践.md` | 当前事实源 | Agent 协作开发实践 |
|
||||
| `AGENTS.md` | 当前事实源 | 项目硬约束 |
|
||||
| `.agents/skills/hyb-oa-delivery/SKILL.md` | 当前事实源 | 项目交付 Skill |
|
||||
|
||||
## 最近事实链摘要
|
||||
## 当前操作手册
|
||||
|
||||
- R6、PC6、PA6、FL6、AP6、RI6、LP6 已完成并部署。
|
||||
- ME6 自动化、部署和公网移动视觉矩阵已完成;`ME6-3` 代表性真机抽查仍待确认。
|
||||
- QG6 已完成 QA 治理升级。
|
||||
- DG7/MRF7 已完成移动信息去重和真机反馈第一轮修复。
|
||||
- MIA7 已完成移动信息架构、视觉和流程审查;MIF7 是下一批移动整改合同,尚未实施。
|
||||
- R7 只有草案和准备材料;真实扩大试运行尚未启动。
|
||||
| 路径 | 当前用途 |
|
||||
| --- | --- |
|
||||
| `docs/管理员手册.md` | 管理员上线、权限、试运行配置 |
|
||||
| `docs/员工快速上手.md` | 员工使用说明 |
|
||||
| `docs/试运行与自动化验证手册.md` | 本地、公网、企业微信和真实 OCR 验证 |
|
||||
| `docs/trialrun/发布试运行准备清单.md` | 发布和试运行门禁 |
|
||||
| `docs/trialrun/公网LiveSmoke准备清单.md` | 公网 live smoke 和真实 OCR readiness |
|
||||
| `docs/trialrun/真机公网测试清单.md` | 真实手机和企业微信人工验收 |
|
||||
|
||||
## 草案和证据
|
||||
|
||||
| 路径 | 分类 | 当前口径 |
|
||||
| --- | --- | --- |
|
||||
| `docs/trialrun/R7扩大试运行草案.md` | 草案 | R7 未真实启动 |
|
||||
| `docs/trialrun/OPS7运维交接Runbook.md` | 草案 | 不代表已执行生产配置或恢复演练 |
|
||||
| `docs/trialrun/R7用户手册与FAQ.md` | 草案 | 不承诺未实现能力 |
|
||||
| `docs/历史功能状态矩阵.md` | 历史证据 | 轻量索引,旧大表从 git 历史恢复 |
|
||||
| `docs/trialrun/人工试运行报告.md` | 历史证据 | R6 后状态摘要和关键证据索引 |
|
||||
| `docs/trialrun/试运行覆盖矩阵.csv` | 历史证据 | 轻量覆盖摘要 |
|
||||
| `docs/trialrun/项目级流程覆盖矩阵.csv` | QA 参考 | `check-flow-coverage` 使用 |
|
||||
| `docs/trialrun/权限直连审计记录.md` | 当前证据 | 权限直连审计 |
|
||||
| `docs/trialrun/移动信息架构视觉流程审查.md` | 当前证据 | MIA7 审查结论;MIF7 仍为 TODO |
|
||||
|
||||
## 技术参考
|
||||
|
||||
| 路径 | 说明 |
|
||||
| --- | --- |
|
||||
| `docs/架构概览.md` | 架构和运行时边界 |
|
||||
| `docs/集成边界.md` | 集成边界,不扩大 MVP 范围 |
|
||||
| `docs/领域事件清单.md` | 领域事件 |
|
||||
| `docs/mcp-tools.md` | 脚本和 AGENTS 强引用,保留英文文件名 |
|
||||
| `docs/ops/*.md` | 非功能、SLO、测试、CI、DORA、追踪 |
|
||||
| `docs/adr/*.md` | ADR 历史决策 |
|
||||
|
||||
## 已从当前树移除
|
||||
|
||||
这些文件已物理删除,不再维护当前副本;需要时通过 git 历史恢复。
|
||||
|
||||
| 旧路径 | 原用途 |
|
||||
| --- | --- |
|
||||
| `docs/implementation_plan.md` | 早期实施计划 |
|
||||
| `docs/tech_stack_report.md` | 早期技术栈报告 |
|
||||
| `docs/invoice-pool-refactor-plan.md` | invoicePool 一次性方案 |
|
||||
| `docs/migration-mapping.md` | 旧迁移映射 |
|
||||
| `docs/MVP主线代码差距盘点.md` | 旧 MVP 代码差距盘点 |
|
||||
| `docs/todo-reconciliation.md` | 旧 TODO 清账 |
|
||||
| `docs/mobile/pwa-regression-checklist.md` | 旧 PWA 回归清单 |
|
||||
| `docs/trialrun/domestic-oa-best-practices.md` | 旧国内 OA 调研快照 |
|
||||
| `docs/trialrun/async-ux-audit.csv` | 旧异步体验审计 |
|
||||
| `docs/trialrun/deployment-preflight-2026-05-10.md` | 旧部署预检记录 |
|
||||
| `docs/requirements-specification.md` | 旧 PRD 跳转入口 |
|
||||
|
||||
## 当前门禁
|
||||
|
||||
- `ME6-3` 代表性企业微信真机门禁仍未关闭。
|
||||
- MIF7 是下一批移动信息架构整改合同,当前仍为 TODO。
|
||||
- R7 真实扩大试运行尚未启动。
|
||||
|
||||
+91
-92
@@ -1,117 +1,116 @@
|
||||
# hyb-oa 文档索引
|
||||
|
||||
**文档状态**:当前人工审查入口。
|
||||
**适用时间**:2026-05-12 DOCG7 之后。
|
||||
**文档状态**:当前唯一文档入口。
|
||||
**适用时间**:DCL7 之后。
|
||||
**治理口径**:中文优先,物理精简。已确认不用的历史文档不放 `docs/archive/`,直接从当前工作树移除;需要时从 git 历史恢复。
|
||||
|
||||
本索引用来区分“当前事实源”和“历史证据”。查需求、排期、开发范围时,先读当前事实源;排查历史实现、回归证据或旧决策时,再读历史快照和证据文档。
|
||||
## 读取规则
|
||||
|
||||
## 归档判定规则
|
||||
- 判断当前需求、开发、验收:读最新 Issue CSV、当前 PRD、模块规约和本索引。
|
||||
- 判断历史证据:读轻量历史索引,必要时用 `git show <commit>:<old-path>` 恢复旧文档。
|
||||
- 判断冲突:最新 Issue CSV > 当前 PRD/模块规约 > 设计和产品规则 > 当前操作手册 > 技术参考 > 历史证据。
|
||||
- 英文文件名只在技术生态或脚本强引用时保留,例如 `docs/mcp-tools.md`。
|
||||
|
||||
本仓库采用“索引归档”策略治理历史文档:历史证据和过期口径保留原路径,不移动到 `docs/archive`,不批量删除,也不回写旧 Issue CSV。归档通过本文档分区和文档顶部状态说明完成。
|
||||
## 最近事实源链
|
||||
|
||||
| 分类 | 判定标准 | 使用规则 |
|
||||
| --- | --- | --- |
|
||||
| 当前事实源 | PRD、模块规约、产品口径、设计规则、AGENTS 项目规则 | 可以直接指导需求确认、Issue CSV 拆分、开发和验收 |
|
||||
| 当前操作手册 | 管理员、员工、试运行、部署和真机复核手册 | 用于当前试运行、上线和人工验收;与 PRD 冲突时以 PRD 和最新 Issue CSV 为准 |
|
||||
| 历史证据 | 实现状态矩阵、trialrun 报告和 CSV、旧 TODO、旧实施计划 | 只用于追溯功能是否做过、当时怎么验过;不作为当前需求来源 |
|
||||
| 技术参考 | 架构、集成边界、领域事件、MCP、ops、ADR | 用于理解运行时边界和技术约束;不能单独扩大当前 MVP 范围 |
|
||||
| 历史归档参考 | 一次性方案、早期选型、迁移映射和外部调研快照 | 只作审计和追溯;若要重新启用,必须先更新 PRD 或模块规约并新建 Issue CSV |
|
||||
|
||||
判断冲突时,优先级固定为:最新 Issue CSV > 当前 PRD 和模块规约 > 产品口径文档 > 当前操作手册 > 技术参考 > 历史证据和归档参考。
|
||||
|
||||
如果历史矩阵、旧计划、旧 runbook 或旧 trialrun 记录里出现“当前”“下一批”“公网仍需”“待执行”等旧阶段措辞,但该文档没有在 2026-05-12 之后刷新,应按历史证据读取,不得覆盖最新 Issue CSV 和当前模块规约。
|
||||
|
||||
## 最近事实源更新链
|
||||
|
||||
当前事实链为:R6 -> PC6 -> PA6 -> FL6 -> AP6 -> RI6 -> LP6 -> ME6/QG6 -> DG7/MRF7 -> MIA7 -> MIF7(TODO)。
|
||||
R6 -> PC6 -> PA6 -> FL6 -> AP6 -> RI6 -> LP6 -> ME6/QG6 -> DG7/MRF7 -> MIA7 -> MIF7(TODO)。
|
||||
|
||||
- R6、PC6、PA6、FL6、AP6、RI6、LP6 已完成并部署。
|
||||
- ME6 自动化、部署和公网视觉矩阵已完成;`ME6-3` 代表性企业微信真机门禁仍待确认。
|
||||
- ME6 自动化和公网视觉矩阵已完成;`ME6-3` 代表性企业微信真机门禁仍待确认。
|
||||
- QG6 已完成 QA 治理升级。
|
||||
- DG7/MRF7 已完成移动信息去重和真机反馈第一轮修复。
|
||||
- MIA7 已完成移动信息架构、视觉和流程审查;MIF7 是下一批移动整改合同,尚未实施。
|
||||
- R7/OPS7/DOC7 是准备材料,不代表已上线、已启动真实 R7 或已经扩大试运行。
|
||||
- R7/OPS7/DOC7 是准备材料,不代表已上线或已启动真实 R7。
|
||||
|
||||
## 当前事实源
|
||||
|
||||
| 文档 | 用途 | 注意 |
|
||||
| --- | --- | --- |
|
||||
| [海音达OA-MVP需求规格说明书](./海音达OA-MVP需求规格说明书.md) | 当前 PRD 主事实源,回答做什么、先做什么、不做什么、如何验收,并固定标准软件开发流程 | 后续需求变更先改这里或对应规则文档,再拆 Issue CSV |
|
||||
| [需求 - 统一审批中心规约](./需求-统一审批中心规约.md) | 统一审批中心模块级开发规约,包含审批规则矩阵、状态流转和权限数据范围 | 审批相关开发拆 Issue CSV 前必须参考 |
|
||||
| [需求 - 报销发票 OCR 规约](./需求-报销发票OCR规约.md) | 报销、发票、OCR、附件、付款和导出模块级开发规约,包含费用类型矩阵、人工复核和验收数据集 | 报销主链路开发拆 Issue CSV 前必须参考 |
|
||||
| [需求 - 企业微信基础设施规约](./需求-企业微信基础设施规约.md) | 企业微信入口、免登/绑定、通讯录身份、消息通知、deeplink 和打卡采集边界规约 | 企业微信相关开发拆 Issue CSV 前必须参考 |
|
||||
| [需求 - 请假考勤修正规约](./需求-请假考勤修正规约.md) | 请假、补卡、外出、加班与考勤修正模块级开发规约 | 考勤修正相关开发拆 Issue CSV 前必须参考 |
|
||||
| [需求 - 采购费用审批规约](./需求-采购费用审批规约.md) | 采购申请、费用申请、供应商、金额、项目、附件、审批规则和业务关联模块级开发规约 | 采购/费用相关开发拆 Issue CSV 前必须参考 |
|
||||
| [需求 - 合同附件归档规约](./需求-合同附件归档规约.md) | 合同台账、编号、非涉密附件、归档位置、权限审计和业务关联模块级开发规约 | 合同与附件归档相关开发拆 Issue CSV 前必须参考 |
|
||||
| [需求 - 项目轻管理规约](./需求-项目轻管理规约.md) | 项目基础信息、成员、里程碑、任务、风险、交付记录和业务关联模块级开发规约 | 项目轻管理相关开发拆 Issue CSV 前必须参考 |
|
||||
| [产品口径文档](./product-decisions.md) | 已拍板的产品边界和业务规则 | 与 PRD 冲突时,以更新后的 PRD 和最新 Issue CSV 为准 |
|
||||
| [报销、发票与附件规则](./reimbursement-invoice-rules.md) | 报销、发票、OCR、附件的细则 | 报销相关开发必须同时参考 |
|
||||
| [产品设计规则基线](./product-design-rules.md) | PC、移动、企业微信 WebView 的视觉和交互规则 | 页面调整必须参考 |
|
||||
| [文档事实源状态矩阵](./文档事实源状态矩阵.md) | DOCG7 后的文档分类、当前口径和历史证据边界 | 判断文档是否能指导当前开发时先查这里 |
|
||||
| [测试规约与回归门禁](./测试规约与回归门禁.md) | 当前测试事实源,固定自动化、视觉验证、真机 smoke、SKIP 和状态回填规则 | A3-A8 开发和后续非微小改动必须参考 |
|
||||
| [开发交付与变更管理规约](./开发交付与变更管理规约.md) | 当前开发交付事实源,固定 Issue 生命周期、review、commit、工作区和完成输出规则 | 提交和交付前必须参考 |
|
||||
| [AGENTS 项目规则](../AGENTS.md) | Agent 协作、Issue CSV、测试和提交规则 | 执行开发前必须遵守 |
|
||||
| 文档 | 用途 |
|
||||
| --- | --- |
|
||||
| [海音达OA-MVP需求规格说明书](./海音达OA-MVP需求规格说明书.md) | PRD 主事实源 |
|
||||
| [文档事实源状态矩阵](./文档事实源状态矩阵.md) | 文档分类、删除恢复和冲突规则 |
|
||||
| [产品设计规则](./产品设计规则.md) | PC、移动、企业微信 WebView 设计事实源 |
|
||||
| [产品口径](./产品口径.md) | 已拍板产品边界和业务规则 |
|
||||
| [需求 - 统一审批中心规约](./需求-统一审批中心规约.md) | 审批、催办、超时提醒、审批效率 |
|
||||
| [报销发票附件规则](./报销发票附件规则.md) | 报销、发票、OCR、附件细则 |
|
||||
| [需求 - 报销发票 OCR 规约](./需求-报销发票OCR规约.md) | 报销发票 OCR 模块规约 |
|
||||
| [需求 - 企业微信基础设施规约](./需求-企业微信基础设施规约.md) | 企业微信入口、身份、消息、deeplink |
|
||||
| [需求 - 请假考勤修正规约](./需求-请假考勤修正规约.md) | 请假、补卡、考勤修正 |
|
||||
| [需求 - 采购费用审批规约](./需求-采购费用审批规约.md) | 采购、费用、附件、审批规则 |
|
||||
| [需求 - 合同附件归档规约](./需求-合同附件归档规约.md) | 合同台账和附件归档边界 |
|
||||
| [需求 - 项目轻管理规约](./需求-项目轻管理规约.md) | 项目轻管理边界 |
|
||||
| [测试规约与回归门禁](./测试规约与回归门禁.md) | 自动化、视觉、真机、状态回填 |
|
||||
| [开发交付与变更管理规约](./开发交付与变更管理规约.md) | Issue CSV、review、提交和交付 |
|
||||
| [Agent开发交付实践](./Agent开发交付实践.md) | Agent 协作和交付实践 |
|
||||
| [AGENTS 项目规则](../AGENTS.md) | 执行硬约束 |
|
||||
|
||||
## 当前操作手册
|
||||
|
||||
| 文档 | 用途 | 注意 |
|
||||
| --- | --- | --- |
|
||||
| [管理员手册](./admin-handbook.md) | 管理员上线、企业微信入口、权限、试点配置 | 适合小团队试运行 |
|
||||
| [员工快速上手](./employee-quickstart.md) | 员工侧日常使用说明 | 面向普通员工 |
|
||||
| [试运行与自动化验证 Runbook](./trialrun-runbook.md) | 本地、公网、企业微信试运行操作 | 涉及公网或企业微信真机时必须看 |
|
||||
| [发布试运行准备清单](./trialrun/release-readiness-checklist.md) | 发布候选证据、权限直连审计、部署预检、live smoke 和小范围试运行顺序 | 从本地可回归进入公网/真机验收前必须看 |
|
||||
| [公网 live smoke 与真实 OCR 准备清单](./trialrun/live-smoke-readiness.md) | 公网、真实 OCR、企业微信入口复核准备 | 只有部署后才能给出真机验收结论 |
|
||||
| [真机公网测试清单](./trialrun/real-device-public-checklist.md) | 手机、企业微信、PDF 发票上传人工验证 | 用于上线前人工验收 |
|
||||
| [R7 扩大试运行草案](./trialrun/r7-expanded-trialrun-prep.md) | R7 参与角色、范围、门禁、问题分级、每日收口和退出标准草案 | 仅为草案;真实 R7 仍需用户确认人员、窗口和 ME6-3 真机门禁或风险接受 |
|
||||
| [OPS7 运维交接 Runbook](./trialrun/ops7-runbook.md) | 部署、回滚、备份恢复、账号交接、live readiness 和企业微信通知检查清单 | 不代表已执行生产配置变更、恢复演练或回滚 |
|
||||
| [DOC7 试运行用户手册与 FAQ](./trialrun/r7-user-guide-and-faq.md) | 员工、审批人、财务在 R7 中使用报销、请假、采购、审批、企业微信和财务台账的说明 | 只描述当前已实现能力,不承诺预算、ERP、AI、完整差旅、复杂 BPM 或审批设计器 |
|
||||
| 文档 | 用途 |
|
||||
| --- | --- |
|
||||
| [管理员手册](./管理员手册.md) | 管理员上线、权限、试运行配置 |
|
||||
| [员工快速上手](./员工快速上手.md) | 员工侧使用说明 |
|
||||
| [试运行与自动化验证手册](./试运行与自动化验证手册.md) | 本地、公网、企业微信和真实 OCR 验证 |
|
||||
| [发布试运行准备清单](./trialrun/发布试运行准备清单.md) | 发布候选、权限审计、部署预检和试运行门禁 |
|
||||
| [公网 Live Smoke 准备清单](./trialrun/公网LiveSmoke准备清单.md) | 公网、真实 OCR、企业微信入口复核条件 |
|
||||
| [真机公网测试清单](./trialrun/真机公网测试清单.md) | 真实手机、企业微信、移动浏览器人工验收 |
|
||||
|
||||
## 实现状态与证据
|
||||
## 草案和准备材料
|
||||
|
||||
| 文档 | 用途 | 注意 |
|
||||
| --- | --- | --- |
|
||||
| [实现状态矩阵](./feature-matrix.md) | 历史实现状态、完成证据、回归覆盖追踪 | 历史证据,不是 PRD,不作为新增需求来源 |
|
||||
| [试运行覆盖矩阵](./trialrun/coverage-matrix.csv) | 试运行覆盖范围和缺口 | 历史证据;读取时结合最新 Issue CSV,不单独决定当前范围 |
|
||||
| [项目级流程矩阵](./trialrun/project-wide-flow-matrix.csv) | 核心业务流、入口、测试覆盖映射 | 历史证据和 QA 参考,不作为当前需求来源 |
|
||||
| [人工业务试运行报告](./trialrun/manual-trialrun-report.md) | R70 历史基底和 R6 之后批次收口追加记录 | 历史基底 + 当前追加证据;读取时看最新条目和最新 Issue CSV |
|
||||
| [历史 TODO 清账映射](./todo-reconciliation.md) | 旧 TODO 的 implemented / superseded / still-open 追溯 | 历史证据,不用来生成新需求 |
|
||||
| 文档 | 边界 |
|
||||
| --- | --- |
|
||||
| [R7 扩大试运行草案](./trialrun/R7扩大试运行草案.md) | 只做 R7 准备;真实 R7 未启动 |
|
||||
| [OPS7 运维交接 Runbook](./trialrun/OPS7运维交接Runbook.md) | 不代表已执行生产配置变更、恢复演练或回滚 |
|
||||
| [R7 用户手册与 FAQ](./trialrun/R7用户手册与FAQ.md) | 只描述已实现能力,不承诺预算、ERP、AI、完整差旅或复杂 BPM |
|
||||
|
||||
## 架构、集成与运维参考
|
||||
## 历史证据入口
|
||||
|
||||
| 文档 | 用途 | 注意 |
|
||||
| --- | --- | --- |
|
||||
| [系统架构概览](./architecture.md) | 当前架构、部署视图和运行时边界 | 与部署现状有关时需结合最新部署报告 |
|
||||
| [集成边界冻结](./integration-boundaries.md) | ERP、IM、AI、MCP、PWA 等集成边界 | 技术参考和历史证据;当前首批路线不接入飞书/钉钉,不因本文档扩大 ERP/AI 范围 |
|
||||
| [领域事件清单](./domain-events.md) | 领域事件名和对外事件边界 | 技术参考和历史证据;面向集成和异步处理,不作为当前 MVP 扩围依据 |
|
||||
| [MCP Tools](./mcp-tools.md) | MCP 工具启用边界 | 未启用的 MCP 不得假设可用 |
|
||||
| [非功能基线](./ops/non-functional-baseline.md) | 安全、性能、回滚、上线最低要求 | 上线和发布前参考 |
|
||||
| [测试策略](./ops/testing-strategy.md) | 自动化测试和门禁策略 | QA 规划参考 |
|
||||
| [Agent 交付实践](./agent-development-practices.md) | Agent 协作开发、Issue CSV、验证和提交实践 | 与 PRD 第 2 章的软件开发流程配套阅读 |
|
||||
| 文档 | 用途 |
|
||||
| --- | --- |
|
||||
| [历史功能状态矩阵](./历史功能状态矩阵.md) | 轻量历史功能索引;旧大表从 git 历史恢复 |
|
||||
| [人工试运行报告](./trialrun/人工试运行报告.md) | R6 后当前状态和关键证据索引 |
|
||||
| [试运行覆盖矩阵](./trialrun/试运行覆盖矩阵.csv) | 轻量覆盖摘要 |
|
||||
| [项目级流程覆盖矩阵](./trialrun/项目级流程覆盖矩阵.csv) | `check-flow-coverage` 使用的最小流程矩阵 |
|
||||
| [权限直连审计记录](./trialrun/权限直连审计记录.md) | 权限直连审计证据 |
|
||||
| [移动信息架构视觉流程审查](./trialrun/移动信息架构视觉流程审查.md) | MIA7 审查结论,整改仍以 MIF7 为准 |
|
||||
|
||||
## 历史快照与归档参考
|
||||
## 技术参考
|
||||
|
||||
| 文档 | 用途 | 注意 |
|
||||
| --- | --- | --- |
|
||||
| [实施计划](./implementation_plan.md) | 2026-02 Phase 1 引导计划和历史实施思路 | 历史归档参考,不是当前执行计划 |
|
||||
| [技术栈与复用报告](./tech_stack_report.md) | 早期技术选型定案和复用说明 | 历史归档参考;技术栈仍有参考价值,范围说明已过时 |
|
||||
| [invoicePool 路由拆分方案](./invoice-pool-refactor-plan.md) | 一次性拆分方案归档 | 历史归档参考,完成后只作追溯 |
|
||||
| [试点迁移映射清单](./migration-mapping.md) | 旧系统迁移和切换边界 | 历史归档参考,仅在迁移/切换专项中使用 |
|
||||
| [国内 OA 与费控系统最佳实践对照](./trialrun/domestic-oa-best-practices.md) | 外部最佳实践调研快照 | 历史归档参考,不替代当前 PRD |
|
||||
| [ADR: 移动端路线决策](./adr/adr-mobile-strategy.md) | PWA、RN、小程序路线决策记录 | 保留 ADR 历史结论 |
|
||||
| [ADR: 企业卡/虚拟卡管控能力预研](./adr/adr-enterprise-card-control.md) | 企业卡能力预研记录 | 不进入当前 MVP 首批范围 |
|
||||
| 文档 | 说明 |
|
||||
| --- | --- |
|
||||
| [架构概览](./架构概览.md) | 当前架构和运行时边界 |
|
||||
| [集成边界](./集成边界.md) | ERP、IM、AI、MCP、PWA 集成边界;不扩大当前 MVP 范围 |
|
||||
| [领域事件清单](./领域事件清单.md) | 领域事件名和对外事件边界 |
|
||||
| [MCP Tools](./mcp-tools.md) | 脚本和 AGENTS 强引用,保留英文文件名 |
|
||||
| [非功能基线](./ops/非功能基线.md) | 安全、性能、回滚、上线最低要求 |
|
||||
| [SLO 错误预算](./ops/SLO错误预算.md) | SLO 和错误预算 |
|
||||
| [测试策略](./ops/测试策略.md) | 自动化测试和门禁策略 |
|
||||
| [CI 回归报告归档](./ops/CI回归报告归档.md) | CI 回归报告归档 |
|
||||
| [DORA 指标](./ops/DORA指标.md) | CFR 等 DORA 指标 |
|
||||
| [链路追踪策略](./ops/链路追踪策略.md) | OpenTelemetry 追踪策略 |
|
||||
| [ADR: 移动端路线决策](./adr/移动端路线决策.md) | PWA、RN、小程序路线历史决策 |
|
||||
| [ADR: 企业卡/虚拟卡管控预研](./adr/企业卡虚拟卡管控预研.md) | 企业卡能力预研 |
|
||||
|
||||
## 已从当前树移除
|
||||
|
||||
这些文档不再作为当前资料维护;需要时从 git 历史恢复,例如 `git show 5da05eb:<旧路径>`。
|
||||
|
||||
| 旧路径 | 恢复说明 |
|
||||
| --- | --- |
|
||||
| `docs/implementation_plan.md` | 早期实施计划 |
|
||||
| `docs/tech_stack_report.md` | 早期技术栈报告 |
|
||||
| `docs/invoice-pool-refactor-plan.md` | invoicePool 一次性拆分方案 |
|
||||
| `docs/migration-mapping.md` | 旧迁移映射 |
|
||||
| `docs/MVP主线代码差距盘点.md` | A1 旧盘点 |
|
||||
| `docs/todo-reconciliation.md` | 旧 TODO 清账 |
|
||||
| `docs/mobile/pwa-regression-checklist.md` | 旧 PWA 回归清单 |
|
||||
| `docs/trialrun/domestic-oa-best-practices.md` | 旧外部调研快照 |
|
||||
| `docs/trialrun/async-ux-audit.csv` | 旧异步体验审计 CSV |
|
||||
| `docs/trialrun/deployment-preflight-2026-05-10.md` | 旧部署预检记录 |
|
||||
| `docs/requirements-specification.md` | 旧 PRD 跳转入口 |
|
||||
|
||||
## 阅读顺序
|
||||
|
||||
1. 要看“现在到底做什么”:读 [海音达OA-MVP需求规格说明书](./海音达OA-MVP需求规格说明书.md)。
|
||||
2. 要细化审批、报销、企业微信、考勤修正、采购费用、合同归档或项目轻管理开发任务:读对应模块规约,再拆 `issues/*.csv`。
|
||||
3. 要开新开发任务:先读 PRD 第 2 章的软件开发项目流程,再更新需求或规则文档,并新建 `issues/*.csv`。
|
||||
4. 要看“某个业务规则为什么这么定”:读 [产品口径文档](./product-decisions.md) 和对应规则文档。
|
||||
5. 要判断测试、视觉验证、SKIP、状态回填和提交规则:读 [测试规约与回归门禁](./测试规约与回归门禁.md) 和 [开发交付与变更管理规约](./开发交付与变更管理规约.md)。
|
||||
6. 要判断功能是否已经做过:读 [实现状态矩阵](./feature-matrix.md) 和最新相关 Issue CSV。
|
||||
7. 要上线或真机验收:读 [试运行与自动化验证 Runbook](./trialrun-runbook.md)、[发布试运行准备清单](./trialrun/release-readiness-checklist.md)、live smoke 清单和最新部署结果。
|
||||
|
||||
## 明确废弃或不进入首批
|
||||
|
||||
- 飞书路线已废弃,不接入登录、通知、审批、文档或项目管理。
|
||||
- 企业微信原生审批不作为正式审批流;企业微信只做入口、免登/绑定、通讯录身份、消息通知和打卡原始采集。
|
||||
- 钉钉、小程序、复杂 BPM、重型项目管理、CRM、完整 ERP 不进入当前 MVP 首批范围。
|
||||
1. 新需求:PRD + 对应模块规约 + 最新 Issue CSV。
|
||||
2. 页面体验:产品设计规则。
|
||||
3. 报销/发票:报销发票附件规则 + 报销 OCR 规约。
|
||||
4. 试运行/部署/真机:试运行手册 + 发布清单 + 真机清单。
|
||||
5. 历史追溯:历史功能状态矩阵 + git 历史 + 相关 Issue CSV。
|
||||
|
||||
@@ -7,9 +7,9 @@
|
||||
**相关文档**:
|
||||
- [文档索引](./文档索引.md)
|
||||
- [海音达OA-MVP需求规格说明书](./海音达OA-MVP需求规格说明书.md)
|
||||
- [实现状态矩阵](./feature-matrix.md)
|
||||
- [试运行覆盖矩阵](trialrun/coverage-matrix.csv)
|
||||
- [人工试运行报告](trialrun/manual-trialrun-report.md)
|
||||
- [实现状态矩阵](./历史功能状态矩阵.md)
|
||||
- [试运行覆盖矩阵](trialrun/试运行覆盖矩阵.csv)
|
||||
- [人工试运行报告](trialrun/人工试运行报告.md)
|
||||
|
||||
**2026-05-04 已核实部署基线**:
|
||||
- 公网入口:`https://oa.hyinda.com`
|
||||
+1
-1
@@ -114,5 +114,5 @@ Issue 状态回填必须基于证据:
|
||||
|
||||
- 主 PRD 回答“做什么、为什么、如何验收”。
|
||||
- 本文回答“如何测试和何时可过门禁”。
|
||||
- `docs/trialrun-runbook.md` 回答“本地、公网、企业微信、真实 OCR 怎么操作”。
|
||||
- `docs/试运行与自动化验证手册.md` 回答“本地、公网、企业微信、真实 OCR 怎么操作”。
|
||||
- `docs/开发交付与变更管理规约.md` 回答“如何 review、提交和交付变更”。
|
||||
|
||||
+8
-8
@@ -7,11 +7,11 @@
|
||||
|
||||
**相关文档**:
|
||||
- [文档索引](./文档索引.md):人工审查入口和文档阅读顺序。
|
||||
- [产品口径文档](./product-decisions.md):关键产品决策与边界。
|
||||
- [功能状态矩阵](./feature-matrix.md):历史实现状态、覆盖证据和完成追踪,不作为 PRD 扩写入口。
|
||||
- [管理员手册](./admin-handbook.md):试运行配置、企业微信入口和上线操作。
|
||||
- [员工快速开始](./employee-quickstart.md):员工侧使用说明。
|
||||
- [报销与发票规则](./reimbursement-invoice-rules.md):报销、发票、OCR、附件的细则。
|
||||
- [产品口径文档](./产品口径.md):关键产品决策与边界。
|
||||
- [功能状态矩阵](./历史功能状态矩阵.md):历史实现状态、覆盖证据和完成追踪,不作为 PRD 扩写入口。
|
||||
- [管理员手册](./管理员手册.md):试运行配置、企业微信入口和上线操作。
|
||||
- [员工快速开始](./员工快速上手.md):员工侧使用说明。
|
||||
- [报销与发票规则](./报销发票附件规则.md):报销、发票、OCR、附件的细则。
|
||||
- [需求 - 统一审批中心规约](./需求-统一审批中心规约.md):审批中心模块级开发规约。
|
||||
- [需求 - 报销发票 OCR 规约](./需求-报销发票OCR规约.md):报销、发票、OCR、附件模块级开发规约。
|
||||
- [需求 - 企业微信基础设施规约](./需求-企业微信基础设施规约.md):企业微信入口、免登、绑定、通知、deeplink 和打卡采集边界规约。
|
||||
@@ -147,7 +147,7 @@ OA 是公司唯一正式审批中心。以下审批必须在 OA 内提交、审
|
||||
|
||||
## 6. 报销、发票、OCR、附件与财务导出
|
||||
|
||||
本章保留总纲口径。报销、发票、OCR、附件、查重、财务复核、付款、导出、费用类型矩阵、人工验真和验收数据集,以 [需求 - 报销发票 OCR 规约](./需求-报销发票OCR规约.md) 作为后续开发拆分依据;历史细则继续参考 [报销与发票规则](./reimbursement-invoice-rules.md)。
|
||||
本章保留总纲口径。报销、发票、OCR、附件、查重、财务复核、付款、导出、费用类型矩阵、人工验真和验收数据集,以 [需求 - 报销发票 OCR 规约](./需求-报销发票OCR规约.md) 作为后续开发拆分依据;历史细则继续参考 [报销与发票规则](./报销发票附件规则.md)。
|
||||
|
||||
### 6.1 用户流程
|
||||
|
||||
@@ -377,8 +377,8 @@ OA 是公司唯一正式审批中心。以下审批必须在 OA 内提交、审
|
||||
## 14. 文档维护规则
|
||||
|
||||
- 本文件回答“要做什么、为什么做、先做什么、不做什么、如何验收”。
|
||||
- `docs/product-decisions.md` 记录已经拍板的产品口径。
|
||||
- `docs/feature-matrix.md` 记录已经实现了什么和证据在哪里。
|
||||
- `docs/产品口径.md` 记录已经拍板的产品口径。
|
||||
- `docs/历史功能状态矩阵.md` 记录已经实现了什么和证据在哪里。
|
||||
- `issues/*.csv` 是每轮开发执行合同。
|
||||
- 需求变化必须先更新本文件或对应规则文档,再创建新的 Issue CSV。
|
||||
- 不批量回改旧 Issue CSV 来伪造一致性;历史计划保留为历史快照。
|
||||
|
||||
@@ -13,9 +13,9 @@
|
||||
1. 读取 `AGENTS.md`。
|
||||
2. 读取最新 `issues/*.csv`。
|
||||
3. 按任务读取事实源:
|
||||
- 设计:`docs/product-design-rules.md`
|
||||
- 报销发票:`docs/reimbursement-invoice-rules.md`
|
||||
- Agent 交付:`docs/agent-development-practices.md`
|
||||
- 设计:`docs/产品设计规则.md`
|
||||
- 报销发票:`docs/报销发票附件规则.md`
|
||||
- Agent 交付:`docs/Agent开发交付实践.md`
|
||||
4. 检查 `git status --short`,保护用户已有改动。
|
||||
|
||||
## 本地验证
|
||||
@@ -82,7 +82,7 @@ cd client && npm run build
|
||||
- 手机企业微信实际点击应用入口。
|
||||
- 企业微信授权或绑定确认。
|
||||
|
||||
真机公网测试按 [`docs/trialrun/real-device-public-checklist.md`](trialrun/real-device-public-checklist.md) 执行。可先生成报告模板:
|
||||
真机公网测试按 [`docs/trialrun/真机公网测试清单.md`](trialrun/真机公网测试清单.md) 执行。可先生成报告模板:
|
||||
|
||||
```bash
|
||||
node scripts/qa/create-real-device-report.mjs
|
||||
@@ -95,14 +95,14 @@ node scripts/qa/create-real-device-report.mjs
|
||||
- `BLOCKED`:缺少测试账号、企业微信后台配置、样票或网络等前置条件。
|
||||
- `PAUSED`:用户或现场条件暂停验证;自动化通过也不能据此关闭真机门禁或把相关 Issue 标为完成。
|
||||
|
||||
公网 live smoke 和真实 OCR 准备按 [`docs/trialrun/live-smoke-readiness.md`](trialrun/live-smoke-readiness.md) 执行:
|
||||
公网 live smoke 和真实 OCR 准备按 [`docs/trialrun/公网LiveSmoke准备清单.md`](trialrun/公网LiveSmoke准备清单.md) 执行:
|
||||
|
||||
```bash
|
||||
node scripts/qa/check-live-smoke-env.mjs
|
||||
LIVE_SMOKE_BASE_URL=https://oa.hyinda.com bash scripts/qa/run-live-smoke-readiness.sh
|
||||
```
|
||||
|
||||
发布候选进入公网或小范围试运行前,先按 [`docs/trialrun/release-readiness-checklist.md`](trialrun/release-readiness-checklist.md) 完成证据整理、权限直连审计、部署预检、live smoke 和试运行分级。
|
||||
发布候选进入公网或小范围试运行前,先按 [`docs/trialrun/发布试运行准备清单.md`](trialrun/发布试运行准备清单.md) 完成证据整理、权限直连审计、部署预检、live smoke 和试运行分级。
|
||||
|
||||
系统应避免让已绑定用户反复登录。若手机企业微信能进入但仍要求登录,优先检查:
|
||||
|
||||
@@ -278,7 +278,7 @@
|
||||
|
||||
### 9.3 差旅统付主线
|
||||
- `P20+TRAVEL-1` 已完成差旅申请、行程段、审批预算与 `travel_orders` 入站整合,作为对公统付的前置流程基线。
|
||||
- `P20+TRAVEL-2` 固定采用企业卡 / 虚拟卡授权与交易导入路线,优先复用 `docs/adr/adr-enterprise-card-control.md` 的既有结论。
|
||||
- `P20+TRAVEL-2` 固定采用企业卡 / 虚拟卡授权与交易导入路线,优先复用 `docs/adr/企业卡虚拟卡管控预研.md` 的既有结论。
|
||||
- `P20+TRAVEL-3` 固定负责核销闭环与 ERP / AP 摘要桥接;个人垫资报销继续与对公统付并存,不互相替代。
|
||||
|
||||
### 9.4 PWA 兑现顺序
|
||||
+1
-1
@@ -5,7 +5,7 @@
|
||||
**状态**:模块级开发规约
|
||||
**上级事实源**:[海音达OA-MVP需求规格说明书](./海音达OA-MVP需求规格说明书.md)
|
||||
**审批总依据**:[需求 - 统一审批中心规约](./需求-统一审批中心规约.md)
|
||||
**体验总依据**:[产品设计规则基线](./product-design-rules.md)
|
||||
**体验总依据**:[产品设计规则基线](./产品设计规则.md)
|
||||
|
||||
本规约细化合同台账、合同编号、非涉密附件、归档位置、权限审计和业务关联要求。合同审批、合同变更审批和归档动作仍回到 OA 统一审批中心留痕;PC 和移动页面模式以产品设计规则基线为体验依据;本规约不替代公司法务制度。
|
||||
|
||||
|
||||
+1
-1
@@ -4,7 +4,7 @@
|
||||
**日期**:2026-05-09
|
||||
**状态**:模块级开发规约
|
||||
**上级事实源**:[海音达OA-MVP需求规格说明书](./海音达OA-MVP需求规格说明书.md)
|
||||
**细则来源**:[报销、发票与附件规则](./reimbursement-invoice-rules.md)
|
||||
**细则来源**:[报销、发票与附件规则](./报销发票附件规则.md)
|
||||
|
||||
本规约细化报销、发票、OCR、附件、查重、财务复核、付款和导出的产品要求。后续报销主链路开发必须先从本规约拆分 Issue CSV,再进入技术方案和代码实现。
|
||||
|
||||
|
||||
+1
-1
@@ -5,7 +5,7 @@
|
||||
**状态**:模块级开发规约
|
||||
**上级事实源**:[海音达OA-MVP需求规格说明书](./海音达OA-MVP需求规格说明书.md)
|
||||
**相关事实源**:[需求 - 统一审批中心规约](./需求-统一审批中心规约.md)、[需求 - 企业微信基础设施规约](./需求-企业微信基础设施规约.md)
|
||||
**体验总依据**:[产品设计规则基线](./product-design-rules.md)
|
||||
**体验总依据**:[产品设计规则基线](./产品设计规则.md)
|
||||
|
||||
本规约细化请假、补卡、外出、加班与考勤修正的产品要求。正式审批记录以 OA 为准;企业微信打卡只作为原始采集来源,不直接决定最终考勤结论。PC 和移动页面体验以产品设计规则基线为依据,不重复定义通用审批链和移动导航规则。
|
||||
|
||||
|
||||
+1
-1
@@ -5,7 +5,7 @@
|
||||
**状态**:模块级开发规约
|
||||
**上级事实源**:[海音达OA-MVP需求规格说明书](./海音达OA-MVP需求规格说明书.md)
|
||||
**审批总依据**:[需求 - 统一审批中心规约](./需求-统一审批中心规约.md)
|
||||
**体验总依据**:[产品设计规则基线](./product-design-rules.md)
|
||||
**体验总依据**:[产品设计规则基线](./产品设计规则.md)
|
||||
|
||||
本规约细化采购申请和费用申请的业务边界、字段、状态、权限、异常、验收场景和后续开发拆分建议。审批动作、状态机、审批规则矩阵、权限数据范围和留痕要求,以统一审批中心规约为总依据;PC 和移动页面模式以产品设计规则基线为体验依据;本规约只补充采购和费用业务自身规则。
|
||||
|
||||
|
||||
+1
-1
@@ -4,7 +4,7 @@
|
||||
**日期**:2026-05-09
|
||||
**状态**:模块级开发规约
|
||||
**上级事实源**:[海音达OA-MVP需求规格说明书](./海音达OA-MVP需求规格说明书.md)
|
||||
**审批与体验依据**:[需求 - 统一审批中心规约](./需求-统一审批中心规约.md)、[产品设计规则基线](./product-design-rules.md)
|
||||
**审批与体验依据**:[需求 - 统一审批中心规约](./需求-统一审批中心规约.md)、[产品设计规则基线](./产品设计规则.md)
|
||||
|
||||
本规约细化项目轻管理的业务边界、字段、状态、角色、业务关联、异常、验收场景和后续开发拆分建议。项目页目标是汇总关键事项和业务关联,帮助 10 人以下科技公司看清项目交付、风险和费用,不替代专业项目管理工具。项目相关审批和待办回到统一审批中心,PC 和移动页面模式以产品设计规则基线为依据。
|
||||
|
||||
|
||||
在新工单中引用
屏蔽一个用户