chore(R12-1/P24-0/P25-0/P26-0/P28-0/P29-0): 建立内部OA够用版执行合同

关联 Issue: R12-1, P24-0, P25-0, P26-0, P28-0, P29-0
这个提交包含在:
2026-03-21 18:02:53 +08:00
父节点 845b52b89b
当前提交 9b7cd818f7
共修改 12 个文件,包含 88 行新增和 0 行删除
@@ -0,0 +1,8 @@
ID,Title,Description,Acceptance,Test_Method,Tools,Dev_Status,Review1_Status,Regression_Status,Files,Dependencies,Notes
P24-0,P24执行合同建档与范围冻结,创建并校验 Workflow 平台化执行合同 CSV 并冻结本轮只演进现有工作流内核的边界,CSV 通过校验且明确本期仅做流程平台化 不引入外部 BPM 引擎 不改资产受控操作模型,python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-03-21_09-00-00-p24-workflow-platformization.csv,manual,TODO,TODO,TODO,issues/2026-03-21_09-00-00-p24-workflow-platformization.csv|docs/requirements-specification.md|server/prisma/schema.prisma|server/src/routes/workflow.js,[],Workflow 平台化先兼容 definition_json v1 并以现有四表为演进起点
P24-1,WorkflowDefinitionV2 数据模型与迁移,新增 WorkflowDefinitionV2 所需的 version steps transitions ccRules sla businessConstraints 结构并补增量迁移,流程定义支持版本化 草稿与发布态 并保持旧 definition_json 按 version=1 兼容读取且 Prisma 校验通过,cd server && npm run prisma:validate && npm test -- tests/unit/utils/workflow.test.js tests/unit/routes/workflow.permissions.test.js,manual,TODO,TODO,TODO,server/prisma/schema.prisma|server/prisma/migrations|server/src/utils/workflow.js|server/tests/unit/utils/workflow.test.js|server/tests/unit/routes/workflow.permissions.test.js,"[""P24-0""]",不做破坏性改列 仅允许增量 schema 与运行时兼容逻辑
P24-2,流程定义管理 API 与后台页,新增 workflow definitions 的列表 详情 创建 草稿更新 发布 归档与版本查看能力并提供后台运营页,支持 GET POST PATCH publish archive 及版本查看 前后端联通且仅 system.settings 可操作,cd server && npm test -- tests/unit/routes/workflow.permissions.test.js && cd ../client && npm run typecheck && npm run build,manual,TODO,TODO,TODO,server/src/routes/workflowDefinitions.js|server/src/app.js|client/src/api/workflow.ts|client/src/pages/WorkflowDefinitionsPage.tsx|client/src/router/index.tsx|client/src/auth/permissions.ts,"[""P24-1""]",优先复用现有 workflow API 风格与后台布局 不新引入管理端框架
P24-3,运行时引擎升级,将报销 请假 采购 差旅四域运行时引擎升级为支持条件分支 并行会签 抄送节点与超时策略,四个业务域在不改现有业务路径前提下可由 WorkflowDefinitionV2 驱动并通过线性流程兼容回归,cd server && npm test -- tests/unit/routes/workflow.travel.test.js tests/unit/routes/travelRequests.test.js tests/unit/routes/workflow.purchase-erp.test.js tests/unit/services/leave.test.js,manual,TODO,TODO,TODO,server/src/routes/workflow.js|server/src/routes/reimbursements.js|server/src/routes/leave.js|server/src/routes/purchaseRequests.js|server/src/routes/travelRequests.js|server/src/utils/workflow.js|server/tests/unit/routes|server/tests/unit/services,"[""P24-2""]",asset 域继续保持受控操作模型 不新增审批实例
P24-4,审批运营能力,补齐催办 超时提醒 升级处理 流程时间线与节点耗时可视化能力,可对待办发起催办并查看 timeline nodeDuration timeout escalation 记录且审计日志完整,cd server && npm test -- tests/unit/routes/workflow.permissions.test.js tests/unit/utils/workflow.test.js && cd ../client && npm run typecheck && npm run build,manual,TODO,TODO,TODO,server/src/routes/workflow.js|server/src/routes/notifications.js|server/src/utils/audit.js|client/src/pages/WorkflowTaskDetailPage.tsx|client/src/pages/WorkflowTasksPage.tsx|client/src/api/workflow.ts,"[""P24-3""]",超时策略固定为 remind escalate skip 三类 不引入外部调度平台
P24-5,文档矩阵与 OpenAPI 同步,同步 Workflow 平台化后的规格书 集成边界 Feature Matrix 与 OpenAPI 文档事实源,规格书 边界文档 Feature Matrix OpenAPI 与新流程能力一致且矩阵事实源可追溯,python3 scripts/validate-feature-matrix.py && cd server && node scripts/export_openapi.js,manual,TODO,TODO,TODO,docs/requirements-specification.md|docs/integration-boundaries.md|docs/feature-matrix.md|server/scripts/export_openapi.js|issues/2026-03-21_09-00-00-p24-workflow-platformization.csv,"[""P24-4""]",仅同步已承诺能力 不提前写入未来阶段实现细节
P24-6,P24回归与验收收口,完成四域主流程与旧线性流程兼容回归后收口 Workflow 平台化阶段,报销 请假 采购 差旅主流程与旧线性流程全部通过回归 且无既有能力回退,cd server && npm run prisma:validate && npm test && ./scripts/regression-workflow-actions.sh && ./scripts/regression-all.sh && cd ../client && npm run typecheck && npm run build,manual,TODO,TODO,TODO,issues/2026-03-21_09-00-00-p24-workflow-platformization.csv|server/tests|server/scripts/regression-workflow-actions.sh|server/scripts/regression-all.sh|client/src/pages/WorkflowTaskDetailPage.tsx,"[""P24-5""]",P24 完成标准以四域共享 WorkflowDefinitionV2 且旧流程零回归为准
1 ID Title Description Acceptance Test_Method Tools Dev_Status Review1_Status Regression_Status Files Dependencies Notes
2 P24-0 P24执行合同建档与范围冻结 创建并校验 Workflow 平台化执行合同 CSV 并冻结本轮只演进现有工作流内核的边界 CSV 通过校验且明确本期仅做流程平台化 不引入外部 BPM 引擎 不改资产受控操作模型 python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-03-21_09-00-00-p24-workflow-platformization.csv manual TODO TODO TODO issues/2026-03-21_09-00-00-p24-workflow-platformization.csv|docs/requirements-specification.md|server/prisma/schema.prisma|server/src/routes/workflow.js [] Workflow 平台化先兼容 definition_json v1 并以现有四表为演进起点
3 P24-1 WorkflowDefinitionV2 数据模型与迁移 新增 WorkflowDefinitionV2 所需的 version steps transitions ccRules sla businessConstraints 结构并补增量迁移 流程定义支持版本化 草稿与发布态 并保持旧 definition_json 按 version=1 兼容读取且 Prisma 校验通过 cd server && npm run prisma:validate && npm test -- tests/unit/utils/workflow.test.js tests/unit/routes/workflow.permissions.test.js manual TODO TODO TODO server/prisma/schema.prisma|server/prisma/migrations|server/src/utils/workflow.js|server/tests/unit/utils/workflow.test.js|server/tests/unit/routes/workflow.permissions.test.js ["P24-0"] 不做破坏性改列 仅允许增量 schema 与运行时兼容逻辑
4 P24-2 流程定义管理 API 与后台页 新增 workflow definitions 的列表 详情 创建 草稿更新 发布 归档与版本查看能力并提供后台运营页 支持 GET POST PATCH publish archive 及版本查看 前后端联通且仅 system.settings 可操作 cd server && npm test -- tests/unit/routes/workflow.permissions.test.js && cd ../client && npm run typecheck && npm run build manual TODO TODO TODO server/src/routes/workflowDefinitions.js|server/src/app.js|client/src/api/workflow.ts|client/src/pages/WorkflowDefinitionsPage.tsx|client/src/router/index.tsx|client/src/auth/permissions.ts ["P24-1"] 优先复用现有 workflow API 风格与后台布局 不新引入管理端框架
5 P24-3 运行时引擎升级 将报销 请假 采购 差旅四域运行时引擎升级为支持条件分支 并行会签 抄送节点与超时策略 四个业务域在不改现有业务路径前提下可由 WorkflowDefinitionV2 驱动并通过线性流程兼容回归 cd server && npm test -- tests/unit/routes/workflow.travel.test.js tests/unit/routes/travelRequests.test.js tests/unit/routes/workflow.purchase-erp.test.js tests/unit/services/leave.test.js manual TODO TODO TODO server/src/routes/workflow.js|server/src/routes/reimbursements.js|server/src/routes/leave.js|server/src/routes/purchaseRequests.js|server/src/routes/travelRequests.js|server/src/utils/workflow.js|server/tests/unit/routes|server/tests/unit/services ["P24-2"] asset 域继续保持受控操作模型 不新增审批实例
6 P24-4 审批运营能力 补齐催办 超时提醒 升级处理 流程时间线与节点耗时可视化能力 可对待办发起催办并查看 timeline nodeDuration timeout escalation 记录且审计日志完整 cd server && npm test -- tests/unit/routes/workflow.permissions.test.js tests/unit/utils/workflow.test.js && cd ../client && npm run typecheck && npm run build manual TODO TODO TODO server/src/routes/workflow.js|server/src/routes/notifications.js|server/src/utils/audit.js|client/src/pages/WorkflowTaskDetailPage.tsx|client/src/pages/WorkflowTasksPage.tsx|client/src/api/workflow.ts ["P24-3"] 超时策略固定为 remind escalate skip 三类 不引入外部调度平台
7 P24-5 文档矩阵与 OpenAPI 同步 同步 Workflow 平台化后的规格书 集成边界 Feature Matrix 与 OpenAPI 文档事实源 规格书 边界文档 Feature Matrix OpenAPI 与新流程能力一致且矩阵事实源可追溯 python3 scripts/validate-feature-matrix.py && cd server && node scripts/export_openapi.js manual TODO TODO TODO docs/requirements-specification.md|docs/integration-boundaries.md|docs/feature-matrix.md|server/scripts/export_openapi.js|issues/2026-03-21_09-00-00-p24-workflow-platformization.csv ["P24-4"] 仅同步已承诺能力 不提前写入未来阶段实现细节
8 P24-6 P24回归与验收收口 完成四域主流程与旧线性流程兼容回归后收口 Workflow 平台化阶段 报销 请假 采购 差旅主流程与旧线性流程全部通过回归 且无既有能力回退 cd server && npm run prisma:validate && npm test && ./scripts/regression-workflow-actions.sh && ./scripts/regression-all.sh && cd ../client && npm run typecheck && npm run build manual TODO TODO TODO issues/2026-03-21_09-00-00-p24-workflow-platformization.csv|server/tests|server/scripts/regression-workflow-actions.sh|server/scripts/regression-all.sh|client/src/pages/WorkflowTaskDetailPage.tsx ["P24-5"] P24 完成标准以四域共享 WorkflowDefinitionV2 且旧流程零回归为准
@@ -0,0 +1,8 @@
ID,Title,Description,Acceptance,Test_Method,Tools,Dev_Status,Review1_Status,Regression_Status,Files,Dependencies,Notes
P25-0,P25执行合同建档与范围冻结,创建并校验费控内核与 AP 运营执行合同 CSV 并冻结本轮以预算前控 预校验 付款批次为主线的边界,CSV 通过校验且明确本期不引入真实银企直联 仅沉淀统一费控内核与 AP 运营能力,python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-03-21_09-10-00-p25-fee-control-ap.csv,manual,TODO,TODO,TODO,issues/2026-03-21_09-10-00-p25-fee-control-ap.csv|server/src/services/budgetPool.js|server/src/routes/reimbursements.js|server/src/routes/travelRequests.js,[],P25 以 warn block manual_review 三类预算语义和 maker-checker 为固定边界
P25-1,预算控制规则中心,新增按法体 部门 成本中心 费用类型配置 warn block manual_review 的规则中心与默认 seed,预算控制规则可查询 新增 更新 停用 并在报销 采购 差旅三域按统一优先级命中,cd server && npm run prisma:validate && npm test -- tests/unit/budgetPool.service.test.js tests/unit/services/featureFlags.test.js,manual,TODO,TODO,TODO,server/prisma/schema.prisma|server/prisma/migrations|server/src/routes/budgetControlRules.js|server/src/services/budgetPool.js|server/src/scripts/seed-config.js|server/tests/unit/budgetPool.service.test.js,"[""P25-0""]",不引入新的预算引擎服务 优先扩展现有 budgetPool 语义
P25-2,单据预校验 API,为报销 采购 差旅补齐统一 precheck API 在提交前返回预算 判重 绑定与必填风险摘要,precheck 仅返回风险结果和建议动作 不写业务终态 三个业务域接口语义一致,cd server && npm test -- tests/unit/routes/travelRequests.test.js tests/unit/routes/purchase.archive-erp.test.js tests/unit/routes/invoicePool.travel-bind.test.js,manual,TODO,TODO,TODO,server/src/routes/reimbursements.js|server/src/routes/purchaseRequests.js|server/src/routes/travelRequests.js|server/src/services/budgetPool.js|server/tests/unit/routes,"[""P25-1""]",返回结构固定包含 result riskHints blockingReasons nextActions budgetSnapshot
P25-3,财务付款批次与 maker-checker,将单笔付款提升为批次创建 复核 执行 导出模型并对高风险支付启用 maker-checker,付款批次支持 create review execute export requeue 且复核人与执行发起人不可为同一人,cd server && npm run prisma:validate && npm test -- tests/unit/routes/travelRequests.payment-track.test.js tests/unit/routes/travelAuthorizations.test.js && cd ../client && npm run typecheck && npm run build,manual,TODO,TODO,TODO,server/prisma/schema.prisma|server/prisma/migrations|server/src/routes/paymentBatches.js|server/src/routes/reimbursements.js|server/src/routes/travelRequests.js|client/src/api/travelPayments.ts|client/src/pages/TravelRequestsPage.tsx,"[""P25-2""]",执行必须幂等且失败只允许 requeue 不自动推进业务终态
P25-4,AP 摘要与异常运营页,沉淀未付 部分匹配 异常交易 待导出 失败重试的统一 AP 运营视图与处理入口,财务可查看统一 AP 异常列表 摘要 KPI 导出状态和失败重试入口 且权限边界清晰,cd server && npm test -- tests/unit/routes/travelReconciliation.test.js tests/unit/services/travelReconciliation.test.js && cd ../client && npm run typecheck && npm run build,manual,TODO,TODO,TODO,server/src/routes/paymentBatches.js|server/src/routes/travelReconciliation.js|server/src/routes/exports.js|client/src/pages/ApOperationsPage.tsx|client/src/api/exports.ts|client/src/api/travelReconciliation.ts,"[""P25-3""]",AP 运营页优先复用现有差旅对账与导出模式 不单建二套导出链路
P25-5,指标与预警,将预算超用 重复风险 长时间未付款 异常对账接入 Dashboard 与通知能力,高风险费控事件可进入 Dashboard 指标和通知路由 且不影响主业务成功返回,cd server && npm test -- tests/unit/routes/ai.test.js tests/unit/routes/notifications.test.js && ./scripts/regression-dashboard.sh && cd ../client && npm run typecheck && npm run build,manual,TODO,TODO,TODO,server/src/routes/dashboard.js|server/src/routes/notifications.js|server/src/constants/notificationTypes.js|client/src/pages/DashboardPage.tsx|client/src/api/dashboard.ts|client/src/api/notifications.ts,"[""P25-4""]",预警以只读告警和运营入口为主 不自动代执行付款或冻结
P25-6,P25回归与验收收口,完成费控规则 预校验 付款批次 AP 运营和指标预警后的整体验收收口,预算三模式 预校验 批次付款 AP 异常和三条主线零回归全部通过,cd server && npm run prisma:validate && npm test && ./scripts/regression-budget.sh && ./scripts/regression-all.sh && cd ../client && npm run typecheck && npm run build,manual,TODO,TODO,TODO,issues/2026-03-21_09-10-00-p25-fee-control-ap.csv|server/scripts/regression-budget.sh|server/scripts/regression-all.sh|server/tests|client/src/pages/DashboardPage.tsx,"[""P25-5""]",P25 完成标准以 precheck 前置和付款批次可运营为准
1 ID Title Description Acceptance Test_Method Tools Dev_Status Review1_Status Regression_Status Files Dependencies Notes
2 P25-0 P25执行合同建档与范围冻结 创建并校验费控内核与 AP 运营执行合同 CSV 并冻结本轮以预算前控 预校验 付款批次为主线的边界 CSV 通过校验且明确本期不引入真实银企直联 仅沉淀统一费控内核与 AP 运营能力 python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-03-21_09-10-00-p25-fee-control-ap.csv manual TODO TODO TODO issues/2026-03-21_09-10-00-p25-fee-control-ap.csv|server/src/services/budgetPool.js|server/src/routes/reimbursements.js|server/src/routes/travelRequests.js [] P25 以 warn block manual_review 三类预算语义和 maker-checker 为固定边界
3 P25-1 预算控制规则中心 新增按法体 部门 成本中心 费用类型配置 warn block manual_review 的规则中心与默认 seed 预算控制规则可查询 新增 更新 停用 并在报销 采购 差旅三域按统一优先级命中 cd server && npm run prisma:validate && npm test -- tests/unit/budgetPool.service.test.js tests/unit/services/featureFlags.test.js manual TODO TODO TODO server/prisma/schema.prisma|server/prisma/migrations|server/src/routes/budgetControlRules.js|server/src/services/budgetPool.js|server/src/scripts/seed-config.js|server/tests/unit/budgetPool.service.test.js ["P25-0"] 不引入新的预算引擎服务 优先扩展现有 budgetPool 语义
4 P25-2 单据预校验 API 为报销 采购 差旅补齐统一 precheck API 在提交前返回预算 判重 绑定与必填风险摘要 precheck 仅返回风险结果和建议动作 不写业务终态 三个业务域接口语义一致 cd server && npm test -- tests/unit/routes/travelRequests.test.js tests/unit/routes/purchase.archive-erp.test.js tests/unit/routes/invoicePool.travel-bind.test.js manual TODO TODO TODO server/src/routes/reimbursements.js|server/src/routes/purchaseRequests.js|server/src/routes/travelRequests.js|server/src/services/budgetPool.js|server/tests/unit/routes ["P25-1"] 返回结构固定包含 result riskHints blockingReasons nextActions budgetSnapshot
5 P25-3 财务付款批次与 maker-checker 将单笔付款提升为批次创建 复核 执行 导出模型并对高风险支付启用 maker-checker 付款批次支持 create review execute export requeue 且复核人与执行发起人不可为同一人 cd server && npm run prisma:validate && npm test -- tests/unit/routes/travelRequests.payment-track.test.js tests/unit/routes/travelAuthorizations.test.js && cd ../client && npm run typecheck && npm run build manual TODO TODO TODO server/prisma/schema.prisma|server/prisma/migrations|server/src/routes/paymentBatches.js|server/src/routes/reimbursements.js|server/src/routes/travelRequests.js|client/src/api/travelPayments.ts|client/src/pages/TravelRequestsPage.tsx ["P25-2"] 执行必须幂等且失败只允许 requeue 不自动推进业务终态
6 P25-4 AP 摘要与异常运营页 沉淀未付 部分匹配 异常交易 待导出 失败重试的统一 AP 运营视图与处理入口 财务可查看统一 AP 异常列表 摘要 KPI 导出状态和失败重试入口 且权限边界清晰 cd server && npm test -- tests/unit/routes/travelReconciliation.test.js tests/unit/services/travelReconciliation.test.js && cd ../client && npm run typecheck && npm run build manual TODO TODO TODO server/src/routes/paymentBatches.js|server/src/routes/travelReconciliation.js|server/src/routes/exports.js|client/src/pages/ApOperationsPage.tsx|client/src/api/exports.ts|client/src/api/travelReconciliation.ts ["P25-3"] AP 运营页优先复用现有差旅对账与导出模式 不单建二套导出链路
7 P25-5 指标与预警 将预算超用 重复风险 长时间未付款 异常对账接入 Dashboard 与通知能力 高风险费控事件可进入 Dashboard 指标和通知路由 且不影响主业务成功返回 cd server && npm test -- tests/unit/routes/ai.test.js tests/unit/routes/notifications.test.js && ./scripts/regression-dashboard.sh && cd ../client && npm run typecheck && npm run build manual TODO TODO TODO server/src/routes/dashboard.js|server/src/routes/notifications.js|server/src/constants/notificationTypes.js|client/src/pages/DashboardPage.tsx|client/src/api/dashboard.ts|client/src/api/notifications.ts ["P25-4"] 预警以只读告警和运营入口为主 不自动代执行付款或冻结
8 P25-6 P25回归与验收收口 完成费控规则 预校验 付款批次 AP 运营和指标预警后的整体验收收口 预算三模式 预校验 批次付款 AP 异常和三条主线零回归全部通过 cd server && npm run prisma:validate && npm test && ./scripts/regression-budget.sh && ./scripts/regression-all.sh && cd ../client && npm run typecheck && npm run build manual TODO TODO TODO issues/2026-03-21_09-10-00-p25-fee-control-ap.csv|server/scripts/regression-budget.sh|server/scripts/regression-all.sh|server/tests|client/src/pages/DashboardPage.tsx ["P25-5"] P25 完成标准以 precheck 前置和付款批次可运营为准
@@ -0,0 +1,8 @@
ID,Title,Description,Acceptance,Test_Method,Tools,Dev_Status,Review1_Status,Regression_Status,Files,Dependencies,Notes
P26-0,P26执行合同建档与范围冻结,创建并校验门户 SSO 与 IM 入口执行合同 CSV 并冻结本轮统一入口与单点登录边界,CSV 通过校验且明确本期只做 OIDC 统一入口与深链通知 不做消息卡片回调审批,python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-03-21_09-20-00-p26-portal-sso-im-entry.csv,manual,TODO,TODO,TODO,issues/2026-03-21_09-20-00-p26-portal-sso-im-entry.csv|server/src/routes/auth.js|client/src/pages/LoginPage.tsx|client/src/router/index.tsx,[],P26 固定复用现有 openid-client 能力和 targetPath 语义 不另起认证栈
P26-1,SSO OIDC 提供方注册与登录页统一,补齐 OIDC provider 列表 账号绑定 回退登录和登录页统一入口,支持查询 provider 列表 发起 OIDC 登录 回调绑定和本地密码登录回退且登录页展示一致,cd server && npm test -- tests/unit/routes/notifications.test.js && cd ../client && npm run typecheck && npm run build,manual,TODO,TODO,TODO,server/src/routes/auth.js|server/src/services/oidc/index.js|server/src/config.js|client/src/pages/LoginPage.tsx|client/src/auth/AuthContext.tsx|client/src/api/auth.ts,"[""P26-0""]",优先复用现有 openid-client 依赖 不新增厂商专属 SDK
P26-2,门户首页 Portal Home,新增统一门户首页展示我的待办 我的申请 预算预警 公告和快捷入口,门户首页按权限显示卡片并可从单一路径进入审批 财务 采购 资产和差旅主入口,cd server && npm test -- tests/unit/routes/workflow.permissions.test.js tests/unit/routes/ai.test.js && cd ../client && npm run typecheck && npm run build,manual,TODO,TODO,TODO,server/src/routes/portal.js|server/src/routes/dashboard.js|client/src/pages/PortalHomePage.tsx|client/src/layouts/AppShellLayout.tsx|client/src/router/index.tsx|client/src/api/dashboard.ts,"[""P26-1""]",Portal Home 优先聚合现有待办 看板和通知数据 不单独建立新后端聚合服务
P26-3,IM 深链通知 2.0,将审批 付款 异常 催办统一为签名 deep link 与标准 targetPath 并覆盖移动入口,通知消息统一产出签名 targetPath 且过期校验 跨端跳转和移动分流语义一致,cd server && npm test -- tests/unit/routes/notifications.test.js tests/unit/services/imRouting.test.js tests/unit/services/imEnqueue.test.js && ./scripts/regression-im-notifier.sh && cd ../client && npm run typecheck && npm run build,manual,TODO,TODO,TODO,server/src/routes/notifications.js|server/src/services/notifications|server/src/constants/notificationTypes.js|client/src/pages/NotificationsPage.tsx|client/src/router/index.tsx|client/src/pages/MobileApprovalsPage.tsx,"[""P26-2""]",继续使用页面处理型深链 不做 IM 回调审批和卡片动作回写
P26-4,通知模板与路由策略中心,为通知渠道补齐模板管理 目标受众 路由优先级与降级策略能力,通知模板和路由策略可配置且渠道失败时可按降级策略回退到次级通道或站内通知,cd server && npm test -- tests/unit/routes/notifications.test.js tests/unit/services/imRouting.test.js && cd ../client && npm run typecheck && npm run build,manual,TODO,TODO,TODO,server/src/routes/notifications.js|server/src/services/notifications/channelConfig.js|server/src/services/notifications/imRouting.js|client/src/pages/NotificationChannelsPage.tsx|client/src/api/notificationChannels.ts,"[""P26-3""]",本期只扩展模板和路由策略 不新增飞书钉钉生产通道
P26-5,文档矩阵与回归同步,同步门户 SSO IM 深链能力到规格书 边界文档 Feature Matrix 与回归清单,规格书 边界文档 Feature Matrix 与回归清单对 Portal SSO IM 深链描述一致且事实源可追溯,python3 scripts/validate-feature-matrix.py && git diff --check,manual,TODO,TODO,TODO,docs/requirements-specification.md|docs/integration-boundaries.md|docs/feature-matrix.md|docs/mobile/pwa-regression-checklist.md|issues/2026-03-21_09-20-00-p26-portal-sso-im-entry.csv,"[""P26-4""]",仅把已承诺的 OIDC 和深链入口纳入文档 不提前登记厂商扩展 backlog
P26-6,P26三个月里程碑验收,完成门户首页 SSO 统一入口和 IM 深链后的三个月阶段收口,门户 SSO IM 深链在试点部门可用且 server client 主回归绿灯,cd server && npm test && ./scripts/regression-im-notifier.sh && ./scripts/regression-all.sh && cd ../client && npm run typecheck && npm run build,manual,TODO,TODO,TODO,issues/2026-03-21_09-20-00-p26-portal-sso-im-entry.csv|server/scripts/regression-im-notifier.sh|server/scripts/regression-all.sh|client/src/pages/PortalHomePage.tsx,"[""P26-5""]",P26 是三个月里程碑收口阶段 验收以试点部门可用为准
1 ID Title Description Acceptance Test_Method Tools Dev_Status Review1_Status Regression_Status Files Dependencies Notes
2 P26-0 P26执行合同建档与范围冻结 创建并校验门户 SSO 与 IM 入口执行合同 CSV 并冻结本轮统一入口与单点登录边界 CSV 通过校验且明确本期只做 OIDC 统一入口与深链通知 不做消息卡片回调审批 python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-03-21_09-20-00-p26-portal-sso-im-entry.csv manual TODO TODO TODO issues/2026-03-21_09-20-00-p26-portal-sso-im-entry.csv|server/src/routes/auth.js|client/src/pages/LoginPage.tsx|client/src/router/index.tsx [] P26 固定复用现有 openid-client 能力和 targetPath 语义 不另起认证栈
3 P26-1 SSO OIDC 提供方注册与登录页统一 补齐 OIDC provider 列表 账号绑定 回退登录和登录页统一入口 支持查询 provider 列表 发起 OIDC 登录 回调绑定和本地密码登录回退且登录页展示一致 cd server && npm test -- tests/unit/routes/notifications.test.js && cd ../client && npm run typecheck && npm run build manual TODO TODO TODO server/src/routes/auth.js|server/src/services/oidc/index.js|server/src/config.js|client/src/pages/LoginPage.tsx|client/src/auth/AuthContext.tsx|client/src/api/auth.ts ["P26-0"] 优先复用现有 openid-client 依赖 不新增厂商专属 SDK
4 P26-2 门户首页 Portal Home 新增统一门户首页展示我的待办 我的申请 预算预警 公告和快捷入口 门户首页按权限显示卡片并可从单一路径进入审批 财务 采购 资产和差旅主入口 cd server && npm test -- tests/unit/routes/workflow.permissions.test.js tests/unit/routes/ai.test.js && cd ../client && npm run typecheck && npm run build manual TODO TODO TODO server/src/routes/portal.js|server/src/routes/dashboard.js|client/src/pages/PortalHomePage.tsx|client/src/layouts/AppShellLayout.tsx|client/src/router/index.tsx|client/src/api/dashboard.ts ["P26-1"] Portal Home 优先聚合现有待办 看板和通知数据 不单独建立新后端聚合服务
5 P26-3 IM 深链通知 2.0 将审批 付款 异常 催办统一为签名 deep link 与标准 targetPath 并覆盖移动入口 通知消息统一产出签名 targetPath 且过期校验 跨端跳转和移动分流语义一致 cd server && npm test -- tests/unit/routes/notifications.test.js tests/unit/services/imRouting.test.js tests/unit/services/imEnqueue.test.js && ./scripts/regression-im-notifier.sh && cd ../client && npm run typecheck && npm run build manual TODO TODO TODO server/src/routes/notifications.js|server/src/services/notifications|server/src/constants/notificationTypes.js|client/src/pages/NotificationsPage.tsx|client/src/router/index.tsx|client/src/pages/MobileApprovalsPage.tsx ["P26-2"] 继续使用页面处理型深链 不做 IM 回调审批和卡片动作回写
6 P26-4 通知模板与路由策略中心 为通知渠道补齐模板管理 目标受众 路由优先级与降级策略能力 通知模板和路由策略可配置且渠道失败时可按降级策略回退到次级通道或站内通知 cd server && npm test -- tests/unit/routes/notifications.test.js tests/unit/services/imRouting.test.js && cd ../client && npm run typecheck && npm run build manual TODO TODO TODO server/src/routes/notifications.js|server/src/services/notifications/channelConfig.js|server/src/services/notifications/imRouting.js|client/src/pages/NotificationChannelsPage.tsx|client/src/api/notificationChannels.ts ["P26-3"] 本期只扩展模板和路由策略 不新增飞书钉钉生产通道
7 P26-5 文档矩阵与回归同步 同步门户 SSO IM 深链能力到规格书 边界文档 Feature Matrix 与回归清单 规格书 边界文档 Feature Matrix 与回归清单对 Portal SSO IM 深链描述一致且事实源可追溯 python3 scripts/validate-feature-matrix.py && git diff --check manual TODO TODO TODO docs/requirements-specification.md|docs/integration-boundaries.md|docs/feature-matrix.md|docs/mobile/pwa-regression-checklist.md|issues/2026-03-21_09-20-00-p26-portal-sso-im-entry.csv ["P26-4"] 仅把已承诺的 OIDC 和深链入口纳入文档 不提前登记厂商扩展 backlog
8 P26-6 P26三个月里程碑验收 完成门户首页 SSO 统一入口和 IM 深链后的三个月阶段收口 门户 SSO IM 深链在试点部门可用且 server client 主回归绿灯 cd server && npm test && ./scripts/regression-im-notifier.sh && ./scripts/regression-all.sh && cd ../client && npm run typecheck && npm run build manual TODO TODO TODO issues/2026-03-21_09-20-00-p26-portal-sso-im-entry.csv|server/scripts/regression-im-notifier.sh|server/scripts/regression-all.sh|client/src/pages/PortalHomePage.tsx ["P26-5"] P26 是三个月里程碑收口阶段 验收以试点部门可用为准
@@ -0,0 +1,8 @@
ID,Title,Description,Acceptance,Test_Method,Tools,Dev_Status,Review1_Status,Regression_Status,Files,Dependencies,Notes
P27-0,P27执行合同建档与范围冻结,创建并校验合同 项目 WBS 执行合同 CSV 并冻结本轮经营对象主数据边界,CSV 通过校验且明确本期只做合同 项目 WBS 主数据与业务引用 不引入复杂项目核算引擎,python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-03-21_09-30-00-p27-contract-project-wbs.csv,manual,TODO,TODO,TODO,issues/2026-03-21_09-30-00-p27-contract-project-wbs.csv|server/prisma/schema.prisma|client/src/pages/MasterDataPage.tsx,[],P27 优先补经营对象主数据与费用归因 不做复杂项目结算与收入确认
P27-1,合同 项目 WBS 主数据模型,新增 Contract Project WbsNode 主数据模型和基础层级管理能力,可维护合同 项目 WBS 的启停用 编号 名称 层级与基础关联且 Prisma 校验通过,cd server && npm run prisma:validate && npm test -- tests/unit/constants/permissions.test.js tests/unit/permissions.entity.test.js,manual,TODO,TODO,TODO,server/prisma/schema.prisma|server/prisma/migrations|server/src/routes/contracts.js|server/src/routes/projects.js|server/src/routes/wbs.js|server/src/constants/permissions.js,"[""P27-0""]",优先复用 master data 的权限与列表模式 不单独设计新治理体系
P27-2,业务单据关联,为采购 差旅 报销补齐合同 项目 WBS 可选引用字段和前后端选择器,采购 差旅 报销可绑定合同 项目 WBS 且历史单据兼容无引用场景,cd server && npm run prisma:validate && npm test -- tests/unit/routes/travelRequests.test.js tests/unit/routes/invoicePool.travel-bind.test.js && cd ../client && npm run typecheck && npm run build,manual,TODO,TODO,TODO,server/prisma/schema.prisma|server/src/routes/reimbursements.js|server/src/routes/purchaseRequests.js|server/src/routes/travelRequests.js|client/src/pages/ReimbursementsPage.tsx|client/src/pages/PurchaseRequestsPage.tsx|client/src/pages/TravelRequestsPage.tsx,"[""P27-1""]",引用字段默认可空 不因历史数据缺失阻断已有单据展示
P27-3,预算与承诺应计联动,让采购承诺 差旅预算 报销归集可按项目和 WBS 进行聚合与摘要输出,预算和承诺应计摘要可按 projectId wbsId 聚合查询且不改写既有账本语义,cd server && npm test -- tests/unit/budgetPool.service.test.js tests/unit/services/purchaseBudget.test.js tests/unit/services/travelReconciliation.test.js,manual,TODO,TODO,TODO,server/src/services/budgetPool.js|server/src/services/purchaseBudget.js|server/src/routes/budgets.js|server/src/routes/exports.js|server/tests/unit/services,"[""P27-2""]",保持现有 reserve confirm release 和 authorize settle reverse 双账轨并存
P27-4,项目合同支出视图,新增项目和合同的支出视图展示预算 已申请 已支付 未核销与异常项,运营页可查看项目或合同维度的费用摘要 明细和异常项且权限边界正确,cd server && npm test -- tests/unit/routes/assets.search.test.js && cd ../client && npm run typecheck && npm run build,manual,TODO,TODO,TODO,server/src/routes/projects.js|server/src/routes/contracts.js|server/src/routes/exports.js|client/src/pages/ProjectSpendPage.tsx|client/src/api/exports.ts|client/src/api/masterData.ts,"[""P27-3""]",视图以聚合查询和导出为主 不引入项目门户二次导航体系
P27-5,文档矩阵与导出同步,同步经营对象能力到规格书 Feature Matrix 集成边界和导出契约说明,规格书 Feature Matrix 边界文档与导出契约对合同 项目 WBS 语义一致且可追溯,python3 scripts/validate-feature-matrix.py && git diff --check,manual,TODO,TODO,TODO,docs/requirements-specification.md|docs/feature-matrix.md|docs/integration-boundaries.md|docs/domain-events.md|issues/2026-03-21_09-30-00-p27-contract-project-wbs.csv,"[""P27-4""]",仅同步已实现主数据与费用归因能力 不提前承诺复杂项目核算
P27-6,P27回归与验收收口,完成合同 项目 WBS 主数据 业务引用 预算联动和视图后的整体验收收口,合同 项目 WBS 建档 引用 聚合 视图和既有采购 差旅 报销流程零回归全部通过,cd server && npm run prisma:validate && npm test && ./scripts/regression-budget.sh && ./scripts/regression-all.sh && cd ../client && npm run typecheck && npm run build,manual,TODO,TODO,TODO,issues/2026-03-21_09-30-00-p27-contract-project-wbs.csv|server/scripts/regression-budget.sh|server/scripts/regression-all.sh|client/src/pages/ProjectSpendPage.tsx,"[""P27-5""]",P27 完成标准以经营对象进入主链路且可聚合查看为准
1 ID Title Description Acceptance Test_Method Tools Dev_Status Review1_Status Regression_Status Files Dependencies Notes
2 P27-0 P27执行合同建档与范围冻结 创建并校验合同 项目 WBS 执行合同 CSV 并冻结本轮经营对象主数据边界 CSV 通过校验且明确本期只做合同 项目 WBS 主数据与业务引用 不引入复杂项目核算引擎 python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-03-21_09-30-00-p27-contract-project-wbs.csv manual TODO TODO TODO issues/2026-03-21_09-30-00-p27-contract-project-wbs.csv|server/prisma/schema.prisma|client/src/pages/MasterDataPage.tsx [] P27 优先补经营对象主数据与费用归因 不做复杂项目结算与收入确认
3 P27-1 合同 项目 WBS 主数据模型 新增 Contract Project WbsNode 主数据模型和基础层级管理能力 可维护合同 项目 WBS 的启停用 编号 名称 层级与基础关联且 Prisma 校验通过 cd server && npm run prisma:validate && npm test -- tests/unit/constants/permissions.test.js tests/unit/permissions.entity.test.js manual TODO TODO TODO server/prisma/schema.prisma|server/prisma/migrations|server/src/routes/contracts.js|server/src/routes/projects.js|server/src/routes/wbs.js|server/src/constants/permissions.js ["P27-0"] 优先复用 master data 的权限与列表模式 不单独设计新治理体系
4 P27-2 业务单据关联 为采购 差旅 报销补齐合同 项目 WBS 可选引用字段和前后端选择器 采购 差旅 报销可绑定合同 项目 WBS 且历史单据兼容无引用场景 cd server && npm run prisma:validate && npm test -- tests/unit/routes/travelRequests.test.js tests/unit/routes/invoicePool.travel-bind.test.js && cd ../client && npm run typecheck && npm run build manual TODO TODO TODO server/prisma/schema.prisma|server/src/routes/reimbursements.js|server/src/routes/purchaseRequests.js|server/src/routes/travelRequests.js|client/src/pages/ReimbursementsPage.tsx|client/src/pages/PurchaseRequestsPage.tsx|client/src/pages/TravelRequestsPage.tsx ["P27-1"] 引用字段默认可空 不因历史数据缺失阻断已有单据展示
5 P27-3 预算与承诺应计联动 让采购承诺 差旅预算 报销归集可按项目和 WBS 进行聚合与摘要输出 预算和承诺应计摘要可按 projectId wbsId 聚合查询且不改写既有账本语义 cd server && npm test -- tests/unit/budgetPool.service.test.js tests/unit/services/purchaseBudget.test.js tests/unit/services/travelReconciliation.test.js manual TODO TODO TODO server/src/services/budgetPool.js|server/src/services/purchaseBudget.js|server/src/routes/budgets.js|server/src/routes/exports.js|server/tests/unit/services ["P27-2"] 保持现有 reserve confirm release 和 authorize settle reverse 双账轨并存
6 P27-4 项目合同支出视图 新增项目和合同的支出视图展示预算 已申请 已支付 未核销与异常项 运营页可查看项目或合同维度的费用摘要 明细和异常项且权限边界正确 cd server && npm test -- tests/unit/routes/assets.search.test.js && cd ../client && npm run typecheck && npm run build manual TODO TODO TODO server/src/routes/projects.js|server/src/routes/contracts.js|server/src/routes/exports.js|client/src/pages/ProjectSpendPage.tsx|client/src/api/exports.ts|client/src/api/masterData.ts ["P27-3"] 视图以聚合查询和导出为主 不引入项目门户二次导航体系
7 P27-5 文档矩阵与导出同步 同步经营对象能力到规格书 Feature Matrix 集成边界和导出契约说明 规格书 Feature Matrix 边界文档与导出契约对合同 项目 WBS 语义一致且可追溯 python3 scripts/validate-feature-matrix.py && git diff --check manual TODO TODO TODO docs/requirements-specification.md|docs/feature-matrix.md|docs/integration-boundaries.md|docs/domain-events.md|issues/2026-03-21_09-30-00-p27-contract-project-wbs.csv ["P27-4"] 仅同步已实现主数据与费用归因能力 不提前承诺复杂项目核算
8 P27-6 P27回归与验收收口 完成合同 项目 WBS 主数据 业务引用 预算联动和视图后的整体验收收口 合同 项目 WBS 建档 引用 聚合 视图和既有采购 差旅 报销流程零回归全部通过 cd server && npm run prisma:validate && npm test && ./scripts/regression-budget.sh && ./scripts/regression-all.sh && cd ../client && npm run typecheck && npm run build manual TODO TODO TODO issues/2026-03-21_09-30-00-p27-contract-project-wbs.csv|server/scripts/regression-budget.sh|server/scripts/regression-all.sh|client/src/pages/ProjectSpendPage.tsx ["P27-5"] P27 完成标准以经营对象进入主链路且可聚合查看为准
@@ -0,0 +1,8 @@
ID,Title,Description,Acceptance,Test_Method,Tools,Dev_Status,Review1_Status,Regression_Status,Files,Dependencies,Notes
P28-0,P28执行合同建档与范围冻结,创建并校验门户搜索与工作台执行合同 CSV 并冻结本轮统一工作台边界,CSV 通过校验且明确本期优先基于 PostgreSQL 内建能力实现搜索 不引入独立搜索集群,python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-03-21_09-40-00-p28-portal-search-workbench.csv,manual,TODO,TODO,TODO,issues/2026-03-21_09-40-00-p28-portal-search-workbench.csv|client/src/pages/PortalHomePage.tsx|server/src/routes/dashboard.js,[],P28 以替代旧 OA 首页为目标 但不扩展为完整 CMS 或知识库系统
P28-1,全局搜索索引,为报销 请假 采购 差旅 资产 合同 项目建立统一搜索入口和权限过滤能力,搜索可命中编号 标题 主数据对象并按权限过滤返回统一命中结构,cd server && npm run prisma:validate && npm test -- tests/unit/routes/assets.search.test.js tests/unit/routes/workflow.permissions.test.js && cd ../client && npm run typecheck && npm run build,manual,TODO,TODO,TODO,server/src/routes/search.js|server/src/services/search.js|server/prisma/schema.prisma|client/src/api/search.ts|client/src/components/GlobalSearch.tsx|client/src/layouts/AppShellLayout.tsx,"[""P28-0""]",优先使用 PostgreSQL 内建全文或前缀匹配能力 不新增 ES 集群
P28-2,公告制度FAQ 聚合入口,为门户首页补齐公告卡片 制度链接 常见问题入口并支持基础发布上下线,可展示公告卡片 制度入口 常见问题链接和上下线状态 但不做完整 CMS 工作流,cd server && npm test -- tests/unit/routes/notifications.test.js && cd ../client && npm run typecheck && npm run build,manual,TODO,TODO,TODO,server/src/routes/announcements.js|server/prisma/schema.prisma|client/src/pages/PortalHomePage.tsx|client/src/api/announcements.ts|client/src/components/portal/AnnouncementCard.tsx,"[""P28-1""]",公告采用最小发布模型 仅支持文本 摘要 链接和上下线时间
P28-3,工作台个性化卡片,按权限显示审批 财务 采购 资产 运营卡片并支持卡片顺序和显隐配置,不同角色进入门户可看到差异化卡片且卡片显隐由权限和配置共同决定,cd server && npm test -- tests/unit/routes/ai.test.js && cd ../client && npm run typecheck && npm run build,manual,TODO,TODO,TODO,server/src/routes/portal.js|server/src/routes/configRead.js|client/src/pages/PortalHomePage.tsx|client/src/components/portal|client/src/auth/permissions.ts,"[""P28-2""]",个性化只做显隐与顺序 不做拖拽布局存储复杂化
P28-4,快捷操作与最近访问,补齐常用入口 最近访问 待办优先级排序等可替代旧 OA 首页的便捷能力,用户可查看最近访问 常用入口和高优先级待办排序且体验在 PC 与移动端一致,cd server && npm test -- tests/unit/routes/workflow.permissions.test.js && cd ../client && npm run typecheck && npm run build,manual,TODO,TODO,TODO,server/src/routes/portal.js|client/src/pages/PortalHomePage.tsx|client/src/layouts/AppShellLayout.tsx|client/src/router/index.tsx|client/src/lib/utils.ts,"[""P28-3""]",最近访问默认只保留本地最近记录 不同步到跨端画像系统
P28-5,文档矩阵与可观测性同步,同步搜索 工作台 公告能力到规格书 Feature Matrix SLO 与可观测文档,文档对搜索 工作台 公告能力和性能目标描述一致且事实源可追溯,python3 scripts/validate-feature-matrix.py && git diff --check,manual,TODO,TODO,TODO,docs/requirements-specification.md|docs/feature-matrix.md|docs/ops/slo.md|docs/ops/non-functional-baseline.md|issues/2026-03-21_09-40-00-p28-portal-search-workbench.csv,"[""P28-4""]",P28 必须同步性能与搜索权限边界 不把未来知识库能力写入当前事实源
P28-6,P28回归与验收收口,完成搜索 公告 工作台和快捷能力后的整体验收收口,搜索权限过滤 公告上下线 最近访问 快捷入口和门户首页性能均通过验收且零回归,cd server && npm test && ./scripts/regression-dashboard.sh && ./scripts/regression-all.sh && cd ../client && npm run typecheck && npm run build,manual,TODO,TODO,TODO,issues/2026-03-21_09-40-00-p28-portal-search-workbench.csv|server/scripts/regression-dashboard.sh|server/scripts/regression-all.sh|client/src/pages/PortalHomePage.tsx,"[""P28-5""]",P28 完成标准以统一工作台可替代旧 OA 首页常用入口为准
1 ID Title Description Acceptance Test_Method Tools Dev_Status Review1_Status Regression_Status Files Dependencies Notes
2 P28-0 P28执行合同建档与范围冻结 创建并校验门户搜索与工作台执行合同 CSV 并冻结本轮统一工作台边界 CSV 通过校验且明确本期优先基于 PostgreSQL 内建能力实现搜索 不引入独立搜索集群 python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-03-21_09-40-00-p28-portal-search-workbench.csv manual TODO TODO TODO issues/2026-03-21_09-40-00-p28-portal-search-workbench.csv|client/src/pages/PortalHomePage.tsx|server/src/routes/dashboard.js [] P28 以替代旧 OA 首页为目标 但不扩展为完整 CMS 或知识库系统
3 P28-1 全局搜索索引 为报销 请假 采购 差旅 资产 合同 项目建立统一搜索入口和权限过滤能力 搜索可命中编号 标题 主数据对象并按权限过滤返回统一命中结构 cd server && npm run prisma:validate && npm test -- tests/unit/routes/assets.search.test.js tests/unit/routes/workflow.permissions.test.js && cd ../client && npm run typecheck && npm run build manual TODO TODO TODO server/src/routes/search.js|server/src/services/search.js|server/prisma/schema.prisma|client/src/api/search.ts|client/src/components/GlobalSearch.tsx|client/src/layouts/AppShellLayout.tsx ["P28-0"] 优先使用 PostgreSQL 内建全文或前缀匹配能力 不新增 ES 集群
4 P28-2 公告制度FAQ 聚合入口 为门户首页补齐公告卡片 制度链接 常见问题入口并支持基础发布上下线 可展示公告卡片 制度入口 常见问题链接和上下线状态 但不做完整 CMS 工作流 cd server && npm test -- tests/unit/routes/notifications.test.js && cd ../client && npm run typecheck && npm run build manual TODO TODO TODO server/src/routes/announcements.js|server/prisma/schema.prisma|client/src/pages/PortalHomePage.tsx|client/src/api/announcements.ts|client/src/components/portal/AnnouncementCard.tsx ["P28-1"] 公告采用最小发布模型 仅支持文本 摘要 链接和上下线时间
5 P28-3 工作台个性化卡片 按权限显示审批 财务 采购 资产 运营卡片并支持卡片顺序和显隐配置 不同角色进入门户可看到差异化卡片且卡片显隐由权限和配置共同决定 cd server && npm test -- tests/unit/routes/ai.test.js && cd ../client && npm run typecheck && npm run build manual TODO TODO TODO server/src/routes/portal.js|server/src/routes/configRead.js|client/src/pages/PortalHomePage.tsx|client/src/components/portal|client/src/auth/permissions.ts ["P28-2"] 个性化只做显隐与顺序 不做拖拽布局存储复杂化
6 P28-4 快捷操作与最近访问 补齐常用入口 最近访问 待办优先级排序等可替代旧 OA 首页的便捷能力 用户可查看最近访问 常用入口和高优先级待办排序且体验在 PC 与移动端一致 cd server && npm test -- tests/unit/routes/workflow.permissions.test.js && cd ../client && npm run typecheck && npm run build manual TODO TODO TODO server/src/routes/portal.js|client/src/pages/PortalHomePage.tsx|client/src/layouts/AppShellLayout.tsx|client/src/router/index.tsx|client/src/lib/utils.ts ["P28-3"] 最近访问默认只保留本地最近记录 不同步到跨端画像系统
7 P28-5 文档矩阵与可观测性同步 同步搜索 工作台 公告能力到规格书 Feature Matrix SLO 与可观测文档 文档对搜索 工作台 公告能力和性能目标描述一致且事实源可追溯 python3 scripts/validate-feature-matrix.py && git diff --check manual TODO TODO TODO docs/requirements-specification.md|docs/feature-matrix.md|docs/ops/slo.md|docs/ops/non-functional-baseline.md|issues/2026-03-21_09-40-00-p28-portal-search-workbench.csv ["P28-4"] P28 必须同步性能与搜索权限边界 不把未来知识库能力写入当前事实源
8 P28-6 P28回归与验收收口 完成搜索 公告 工作台和快捷能力后的整体验收收口 搜索权限过滤 公告上下线 最近访问 快捷入口和门户首页性能均通过验收且零回归 cd server && npm test && ./scripts/regression-dashboard.sh && ./scripts/regression-all.sh && cd ../client && npm run typecheck && npm run build manual TODO TODO TODO issues/2026-03-21_09-40-00-p28-portal-search-workbench.csv|server/scripts/regression-dashboard.sh|server/scripts/regression-all.sh|client/src/pages/PortalHomePage.tsx ["P28-5"] P28 完成标准以统一工作台可替代旧 OA 首页常用入口为准
@@ -0,0 +1,8 @@
ID,Title,Description,Acceptance,Test_Method,Tools,Dev_Status,Review1_Status,Regression_Status,Files,Dependencies,Notes
P29-0,P29执行合同建档与切换边界冻结,创建并校验替代验收与切换治理执行合同 CSV 并冻结本轮共存 迁移 切换 回滚边界,CSV 通过校验且明确本期以 dry-run 共存 切换和回滚手册为主 不直接覆盖线上旧 OA 数据,python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-03-21_09-50-00-p29-replacement-readiness.csv,manual,TODO,TODO,TODO,issues/2026-03-21_09-50-00-p29-replacement-readiness.csv|deploy/trialrun/runbook.md|docs/feature-matrix.md,[],P29 以可切换 可回滚 可审计为目标 不追求一次性全量替换
P29-1,旧 OA 共存与数据映射清单,梳理旧 OA 与 hyb-oa 的用户 组织 单据 状态 编号 附件映射并形成可审计清单,映射清单覆盖用户 组织 单据 状态 编号 附件且可支撑试点范围共存与核对,git diff --check,manual,TODO,TODO,TODO,docs/migration-mapping.md|docs/integration-boundaries.md|issues/2026-03-21_09-50-00-p29-replacement-readiness.csv,"[""P29-0""]",映射清单只描述映射规则和差异 不直接导入真实生产数据
P29-2,迁移工具与 dry-run,新增 dry-run 导入 对账 差异报告和回滚清单能力用于替代前演练,迁移工具支持 dry-run 差异报告 正式导入前校验和回滚清单导出且不直接覆盖源系统数据,cd server && npm test -- tests/unit/services/integrations/outbox.test.js tests/unit/services/erpMasterData.test.js && git diff --check,manual,TODO,TODO,TODO,server/src/routes/migrationRuns.js|server/src/scripts|server/src/services/integrations|docs/migration-mapping.md|deploy/trialrun/runbook.md,"[""P29-1""]",所有迁移先 dry-run 后正式导入 正式导入必须有备份与回滚清单
P29-3,试点切换控制台,提供按部门 法体 业务域粒度启停新旧入口与回退开关的控制台,可按部门 法体 域启停新旧入口并记录切换审计 且不允许一次性全量切换,cd server && npm test -- tests/unit/services/featureFlags.test.js tests/unit/routes/ai.test.js && cd ../client && npm run typecheck && npm run build,manual,TODO,TODO,TODO,server/src/routes/cutover.js|server/src/routes/featureFlags.js|client/src/pages/CutoverConsolePage.tsx|client/src/api/featureFlags.ts|client/src/router/index.tsx,"[""P29-2""]",切换控制优先复用现有 feature flags 和审计能力 不单建配置中心
P29-4,替代验收脚本与 Runbook 补齐,补齐试点验收 灰度切换 故障回退 审计取证和备份恢复手册与脚本,形成可执行的试点验收清单 切换步骤 回退步骤 审计取证说明和备份恢复演练入口,cd server && ./scripts/regression-all.sh && git diff --check,manual,TODO,TODO,TODO,deploy/trialrun/runbook.md|deploy/trialrun/checklist.md|server/scripts/regression-all.sh|docs/ops/slo.md|issues/2026-03-21_09-50-00-p29-replacement-readiness.csv,"[""P29-3""]",回滚优先配置回退和备份恢复 不做 destructive 数据回滚
P29-5,文档矩阵与规格书收口,同步替代准备阶段到规格书 Feature Matrix 集成边界和运维文档事实源,文档可完整描述共存 迁移 切换 回滚与替代验收边界且事实源一致,python3 scripts/validate-feature-matrix.py && git diff --check,manual,TODO,TODO,TODO,docs/requirements-specification.md|docs/feature-matrix.md|docs/integration-boundaries.md|deploy/trialrun/runbook.md|issues/2026-03-21_09-50-00-p29-replacement-readiness.csv,"[""P29-4""]",只同步已承诺的切换治理与 runbook 不提前承诺全量替代完成态
P29-6,P29六个月最终验收,完成共存 映射 dry-run 切换 回滚和试点替代后的六个月最终验收收口,试点范围旧 OA 新单停用 新平台接管主链路且审计 SLO 回归 备份恢复 切换演练均留痕,cd server && npm test && ./scripts/regression-all.sh && cd ../client && npm run typecheck && npm run build && git diff --check,manual,TODO,TODO,TODO,issues/2026-03-21_09-50-00-p29-replacement-readiness.csv|deploy/trialrun/runbook.md|deploy/trialrun/checklist.md|server/scripts/regression-all.sh,"[""P29-5""]",P29 完成标准以试点范围可切换 可回滚 可审计为准
1 ID Title Description Acceptance Test_Method Tools Dev_Status Review1_Status Regression_Status Files Dependencies Notes
2 P29-0 P29执行合同建档与切换边界冻结 创建并校验替代验收与切换治理执行合同 CSV 并冻结本轮共存 迁移 切换 回滚边界 CSV 通过校验且明确本期以 dry-run 共存 切换和回滚手册为主 不直接覆盖线上旧 OA 数据 python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-03-21_09-50-00-p29-replacement-readiness.csv manual TODO TODO TODO issues/2026-03-21_09-50-00-p29-replacement-readiness.csv|deploy/trialrun/runbook.md|docs/feature-matrix.md [] P29 以可切换 可回滚 可审计为目标 不追求一次性全量替换
3 P29-1 旧 OA 共存与数据映射清单 梳理旧 OA 与 hyb-oa 的用户 组织 单据 状态 编号 附件映射并形成可审计清单 映射清单覆盖用户 组织 单据 状态 编号 附件且可支撑试点范围共存与核对 git diff --check manual TODO TODO TODO docs/migration-mapping.md|docs/integration-boundaries.md|issues/2026-03-21_09-50-00-p29-replacement-readiness.csv ["P29-0"] 映射清单只描述映射规则和差异 不直接导入真实生产数据
4 P29-2 迁移工具与 dry-run 新增 dry-run 导入 对账 差异报告和回滚清单能力用于替代前演练 迁移工具支持 dry-run 差异报告 正式导入前校验和回滚清单导出且不直接覆盖源系统数据 cd server && npm test -- tests/unit/services/integrations/outbox.test.js tests/unit/services/erpMasterData.test.js && git diff --check manual TODO TODO TODO server/src/routes/migrationRuns.js|server/src/scripts|server/src/services/integrations|docs/migration-mapping.md|deploy/trialrun/runbook.md ["P29-1"] 所有迁移先 dry-run 后正式导入 正式导入必须有备份与回滚清单
5 P29-3 试点切换控制台 提供按部门 法体 业务域粒度启停新旧入口与回退开关的控制台 可按部门 法体 域启停新旧入口并记录切换审计 且不允许一次性全量切换 cd server && npm test -- tests/unit/services/featureFlags.test.js tests/unit/routes/ai.test.js && cd ../client && npm run typecheck && npm run build manual TODO TODO TODO server/src/routes/cutover.js|server/src/routes/featureFlags.js|client/src/pages/CutoverConsolePage.tsx|client/src/api/featureFlags.ts|client/src/router/index.tsx ["P29-2"] 切换控制优先复用现有 feature flags 和审计能力 不单建配置中心
6 P29-4 替代验收脚本与 Runbook 补齐 补齐试点验收 灰度切换 故障回退 审计取证和备份恢复手册与脚本 形成可执行的试点验收清单 切换步骤 回退步骤 审计取证说明和备份恢复演练入口 cd server && ./scripts/regression-all.sh && git diff --check manual TODO TODO TODO deploy/trialrun/runbook.md|deploy/trialrun/checklist.md|server/scripts/regression-all.sh|docs/ops/slo.md|issues/2026-03-21_09-50-00-p29-replacement-readiness.csv ["P29-3"] 回滚优先配置回退和备份恢复 不做 destructive 数据回滚
7 P29-5 文档矩阵与规格书收口 同步替代准备阶段到规格书 Feature Matrix 集成边界和运维文档事实源 文档可完整描述共存 迁移 切换 回滚与替代验收边界且事实源一致 python3 scripts/validate-feature-matrix.py && git diff --check manual TODO TODO TODO docs/requirements-specification.md|docs/feature-matrix.md|docs/integration-boundaries.md|deploy/trialrun/runbook.md|issues/2026-03-21_09-50-00-p29-replacement-readiness.csv ["P29-4"] 只同步已承诺的切换治理与 runbook 不提前承诺全量替代完成态
8 P29-6 P29六个月最终验收 完成共存 映射 dry-run 切换 回滚和试点替代后的六个月最终验收收口 试点范围旧 OA 新单停用 新平台接管主链路且审计 SLO 回归 备份恢复 切换演练均留痕 cd server && npm test && ./scripts/regression-all.sh && cd ../client && npm run typecheck && npm run build && git diff --check manual TODO TODO TODO issues/2026-03-21_09-50-00-p29-replacement-readiness.csv|deploy/trialrun/runbook.md|deploy/trialrun/checklist.md|server/scripts/regression-all.sh ["P29-5"] P29 完成标准以试点范围可切换 可回滚 可审计为准
@@ -0,0 +1,6 @@
ID,Title,Description,Acceptance,Test_Method,Tools,Dev_Status,Review1_Status,Regression_Status,Files,Dependencies,Notes
R12-0,R12执行合同刷新建档与范围冻结,创建并校验内部 OA 够用版路线刷新合同 CSV 并冻结本轮以真实内部痛点和团队产能为优先的治理边界,R12 CSV 通过校验且明确目标为海音达内部 OA 够用 好用 稳用 不以替代飞书钉钉等 SaaS 平台为目标,python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-03-21_10-20-00-r12-internal-oa-roadmap-refresh.csv,manual,DONE,DONE,DONE,issues/2026-03-21_10-20-00-r12-internal-oa-roadmap-refresh.csv|issues/2026-03-21_09-00-00-p24-workflow-platformization.csv|issues/2026-03-21_09-10-00-p25-fee-control-ap.csv|issues/2026-03-21_09-20-00-p26-portal-sso-im-entry.csv|issues/2026-03-21_09-30-00-p27-contract-project-wbs.csv|issues/2026-03-21_09-40-00-p28-portal-search-workbench.csv|issues/2026-03-21_09-50-00-p29-replacement-readiness.csv,[],supersede 2026-03-21 初版 P24-P29 重平台化路线 保留旧 CSV 为不可变快照
R12-1,新阶段前置基线回归闸门,在任何新 phase 开发前先完成全量后端回归与 Playwright E2E 基线确认并沉淀结论,server regression-all 与关键 Playwright E2E 全绿后才能把后续 refresh 合同状态推进到 DOING,cd server && ./scripts/regression-all.sh && cd ../client && npm run test:e2e,manual,DONE,DONE,DONE,server/scripts/regression-all.sh|client/tests/e2e/main-flow.spec.ts|client/tests/e2e/procurement-flow.spec.ts|client/tests/e2e/travel-payment-flow.spec.ts|client/tests/e2e/mobile-approvals-offline.spec.ts,"[""R12-0""]",已完成基线修复与硬闸门验证:补 dev budget pool 种子、修主链路 E2E 取单据方式、补 invoice_pool travel_order 约束迁移、修差旅对账权限显隐、拆离线审批本地入队流、增加 OCR_CRON_ENABLED、回归脚本改为 env 默认值补齐且不覆盖外部变量、IM 回归默认测试密钥
R12-2,冻结内部 OA 主线优先级与降级 backlog,将主线固定为 P25-lite P26-lite P28-lite P24-lite P29 并明确 P24-3 P24-4 与 P27 进入 backlog,主线顺序和 backlog 边界可追溯且不再默认推进流程运行时平台化或 Project WBS 深改,python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-03-21_10-30-00-p25-fee-control-ap-refresh.csv && python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-03-21_10-40-00-p26-portal-sso-im-entry-refresh.csv && python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-03-21_10-50-00-p28-portal-search-workbench-refresh.csv && python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-03-21_11-00-00-p24-workflow-governance-refresh.csv && python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-03-21_11-10-00-p29-replacement-readiness-refresh.csv,manual,DONE,DONE,DONE,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,"[""R12-1""]",P27 当前不生成 refresh 合同 后续若业务强需求再单独建档
R12-3,刷新阶段合同并切断过度工程依赖链,为 P25 P26 P28 P24 P29 生成 superseding refresh 合同并打断原始重平台化依赖链避免状态卡死,刷新合同均通过校验且 P24 不再依赖运行时引擎升级 P27 不阻塞主线推进,python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-03-21_10-20-00-r12-internal-oa-roadmap-refresh.csv && git diff --check,manual,DONE,DONE,DONE,issues/2026-03-21_10-20-00-r12-internal-oa-roadmap-refresh.csv|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,"[""R12-2""]",refresh 合同按真实工作量拆分 不再机械固定每期 7 条 issue
R12-4,R12路线治理收口,完成内部 OA 路线刷新合同校验并把进入条件和阶段边界沉淀为后续开发纪律,所有 refresh CSV 通过校验且后续 phase 的进入条件以 R12 为准可直接审计,python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-03-21_10-20-00-r12-internal-oa-roadmap-refresh.csv && python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-03-21_10-30-00-p25-fee-control-ap-refresh.csv && python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-03-21_10-40-00-p26-portal-sso-im-entry-refresh.csv && python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-03-21_10-50-00-p28-portal-search-workbench-refresh.csv && python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-03-21_11-00-00-p24-workflow-governance-refresh.csv && python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-03-21_11-10-00-p29-replacement-readiness-refresh.csv && git diff --check,manual,DONE,DONE,DONE,issues/2026-03-21_10-20-00-r12-internal-oa-roadmap-refresh.csv|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,"[""R12-3""]",R12 只做治理收口与路线校正 不改运行时代码
1 ID Title Description Acceptance Test_Method Tools Dev_Status Review1_Status Regression_Status Files Dependencies Notes
2 R12-0 R12执行合同刷新建档与范围冻结 创建并校验内部 OA 够用版路线刷新合同 CSV 并冻结本轮以真实内部痛点和团队产能为优先的治理边界 R12 CSV 通过校验且明确目标为海音达内部 OA 够用 好用 稳用 不以替代飞书钉钉等 SaaS 平台为目标 python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-03-21_10-20-00-r12-internal-oa-roadmap-refresh.csv manual DONE DONE DONE issues/2026-03-21_10-20-00-r12-internal-oa-roadmap-refresh.csv|issues/2026-03-21_09-00-00-p24-workflow-platformization.csv|issues/2026-03-21_09-10-00-p25-fee-control-ap.csv|issues/2026-03-21_09-20-00-p26-portal-sso-im-entry.csv|issues/2026-03-21_09-30-00-p27-contract-project-wbs.csv|issues/2026-03-21_09-40-00-p28-portal-search-workbench.csv|issues/2026-03-21_09-50-00-p29-replacement-readiness.csv [] supersede 2026-03-21 初版 P24-P29 重平台化路线 保留旧 CSV 为不可变快照
3 R12-1 新阶段前置基线回归闸门 在任何新 phase 开发前先完成全量后端回归与 Playwright E2E 基线确认并沉淀结论 server regression-all 与关键 Playwright E2E 全绿后才能把后续 refresh 合同状态推进到 DOING cd server && ./scripts/regression-all.sh && cd ../client && npm run test:e2e manual DONE DONE DONE server/scripts/regression-all.sh|client/tests/e2e/main-flow.spec.ts|client/tests/e2e/procurement-flow.spec.ts|client/tests/e2e/travel-payment-flow.spec.ts|client/tests/e2e/mobile-approvals-offline.spec.ts ["R12-0"] 已完成基线修复与硬闸门验证:补 dev budget pool 种子、修主链路 E2E 取单据方式、补 invoice_pool travel_order 约束迁移、修差旅对账权限显隐、拆离线审批本地入队流、增加 OCR_CRON_ENABLED、回归脚本改为 env 默认值补齐且不覆盖外部变量、IM 回归默认测试密钥
4 R12-2 冻结内部 OA 主线优先级与降级 backlog 将主线固定为 P25-lite P26-lite P28-lite P24-lite P29 并明确 P24-3 P24-4 与 P27 进入 backlog 主线顺序和 backlog 边界可追溯且不再默认推进流程运行时平台化或 Project WBS 深改 python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-03-21_10-30-00-p25-fee-control-ap-refresh.csv && python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-03-21_10-40-00-p26-portal-sso-im-entry-refresh.csv && python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-03-21_10-50-00-p28-portal-search-workbench-refresh.csv && python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-03-21_11-00-00-p24-workflow-governance-refresh.csv && python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-03-21_11-10-00-p29-replacement-readiness-refresh.csv manual DONE DONE DONE 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 ["R12-1"] P27 当前不生成 refresh 合同 后续若业务强需求再单独建档
5 R12-3 刷新阶段合同并切断过度工程依赖链 为 P25 P26 P28 P24 P29 生成 superseding refresh 合同并打断原始重平台化依赖链避免状态卡死 刷新合同均通过校验且 P24 不再依赖运行时引擎升级 P27 不阻塞主线推进 python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-03-21_10-20-00-r12-internal-oa-roadmap-refresh.csv && git diff --check manual DONE DONE DONE issues/2026-03-21_10-20-00-r12-internal-oa-roadmap-refresh.csv|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 ["R12-2"] refresh 合同按真实工作量拆分 不再机械固定每期 7 条 issue
6 R12-4 R12路线治理收口 完成内部 OA 路线刷新合同校验并把进入条件和阶段边界沉淀为后续开发纪律 所有 refresh CSV 通过校验且后续 phase 的进入条件以 R12 为准可直接审计 python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-03-21_10-20-00-r12-internal-oa-roadmap-refresh.csv && python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-03-21_10-30-00-p25-fee-control-ap-refresh.csv && python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-03-21_10-40-00-p26-portal-sso-im-entry-refresh.csv && python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-03-21_10-50-00-p28-portal-search-workbench-refresh.csv && python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-03-21_11-00-00-p24-workflow-governance-refresh.csv && python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-03-21_11-10-00-p29-replacement-readiness-refresh.csv && git diff --check manual DONE DONE DONE issues/2026-03-21_10-20-00-r12-internal-oa-roadmap-refresh.csv|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 ["R12-3"] R12 只做治理收口与路线校正 不改运行时代码
@@ -0,0 +1,7 @@
ID,Title,Description,Acceptance,Test_Method,Tools,Dev_Status,Review1_Status,Regression_Status,Files,Dependencies,Notes
P25-0,P25执行合同刷新建档与范围收缩,创建并校验费控闭环 refresh 合同 CSV 并冻结本轮只做预算规则 precheck 付款批次和最小 AP 运营的边界,refresh CSV 通过校验且明确本期优先解决财务真实痛点 不做重型 AP 平台化或银企直连,python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-03-21_10-30-00-p25-fee-control-ap-refresh.csv,manual,TODO,TODO,TODO,issues/2026-03-21_10-30-00-p25-fee-control-ap-refresh.csv|issues/2026-03-21_09-10-00-p25-fee-control-ap.csv|server/src/services/budgetPool.js|server/src/routes/reimbursements.js,[],supersede 2026-03-21_09-10-00-p25-fee-control-ap.csv 并合并重型 AP 运营设计为最小可运营版本
P25-1,预算控制规则中心轻量落地,新增按法体 部门 成本中心 费用类型配置 warn block manual_review 的预算规则中心与 seed 基线,预算规则可查询 新增 更新 停用并在报销 采购 差旅三域按统一优先级生效,cd server && npm run prisma:validate && npm test -- tests/unit/budgetPool.service.test.js tests/unit/services/featureFlags.test.js,manual,TODO,TODO,TODO,server/prisma/schema.prisma|server/prisma/migrations|server/src/routes/budgetControlRules.js|server/src/services/budgetPool.js|server/src/scripts/seed-config.js|server/tests/unit/budgetPool.service.test.js,"[""P25-0""]",优先扩展现有 budgetPool 能力 不新引入独立预算服务
P25-2,统一 precheck API 前置提交风险,为报销 采购 差旅补齐统一 precheck API 在提交前返回预算 判重 绑定和必填风险摘要,precheck 仅返回风险和建议动作 不写业务终态 三个业务域接口返回结构一致,cd server && npm test -- tests/unit/routes/travelRequests.test.js tests/unit/routes/purchase.archive-erp.test.js tests/unit/routes/invoicePool.travel-bind.test.js,manual,TODO,TODO,TODO,server/src/routes/reimbursements.js|server/src/routes/purchaseRequests.js|server/src/routes/travelRequests.js|server/src/services/budgetPool.js|server/tests/unit/routes,"[""P25-1""]",返回结构固定包含 result riskHints blockingReasons nextActions budgetSnapshot
P25-3,付款批次与 maker-checker,将付款从单笔动作提升为批次创建 复核 执行 导出模型并对高风险支付启用 maker-checker,付款批次支持 create review execute export requeue 且复核人与发起人不可为同一人 执行保持幂等,cd server && npm run prisma:validate && npm test -- tests/unit/routes/travelRequests.payment-track.test.js tests/unit/routes/travelAuthorizations.test.js && cd ../client && npm run typecheck && npm run build,manual,TODO,TODO,TODO,server/prisma/schema.prisma|server/prisma/migrations|server/src/routes/paymentBatches.js|server/src/routes/reimbursements.js|server/src/routes/travelRequests.js|client/src/api/travelPayments.ts|client/src/pages/TravelRequestsPage.tsx,"[""P25-2""]",先实现最小批次付款运营 不做自动代付或自动冲销
P25-4,最小 AP 运营视图与风险预警,提供未付 部分匹配 异常交易 待导出 失败重试的最小运营视图并接入 Dashboard 预警,财务可查看最小 AP 摘要 异常列表和重试入口 预算超用与长时间未付款可进入看板或通知,cd server && npm test -- tests/unit/routes/travelReconciliation.test.js tests/unit/services/travelReconciliation.test.js tests/unit/routes/notifications.test.js && ./scripts/regression-dashboard.sh && cd ../client && npm run typecheck && npm run build,manual,TODO,TODO,TODO,server/src/routes/paymentBatches.js|server/src/routes/travelReconciliation.js|server/src/routes/dashboard.js|server/src/routes/notifications.js|client/src/pages/DashboardPage.tsx|client/src/pages/ApOperationsPage.tsx,"[""P25-3""]",只做最小可运营视图和告警 不做重型 AP 工作台平台化
P25-5,P25回归与验收收口,完成预算规则 precheck 付款批次和最小 AP 运营后的整体验收收口,预算三模式 precheck 前置 批次付款与最小 AP 运营通过验收且报销 采购 差旅零回归,cd server && npm run prisma:validate && npm test && ./scripts/regression-budget.sh && ./scripts/regression-all.sh && cd ../client && npm run typecheck && npm run build,manual,TODO,TODO,TODO,issues/2026-03-21_10-30-00-p25-fee-control-ap-refresh.csv|server/scripts/regression-budget.sh|server/scripts/regression-all.sh|server/tests|client/src/pages/DashboardPage.tsx,"[""P25-4""]",P25-lite 为当前内部 OA 主线第一优先级
1 ID Title Description Acceptance Test_Method Tools Dev_Status Review1_Status Regression_Status Files Dependencies Notes
2 P25-0 P25执行合同刷新建档与范围收缩 创建并校验费控闭环 refresh 合同 CSV 并冻结本轮只做预算规则 precheck 付款批次和最小 AP 运营的边界 refresh CSV 通过校验且明确本期优先解决财务真实痛点 不做重型 AP 平台化或银企直连 python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-03-21_10-30-00-p25-fee-control-ap-refresh.csv manual TODO TODO TODO issues/2026-03-21_10-30-00-p25-fee-control-ap-refresh.csv|issues/2026-03-21_09-10-00-p25-fee-control-ap.csv|server/src/services/budgetPool.js|server/src/routes/reimbursements.js [] supersede 2026-03-21_09-10-00-p25-fee-control-ap.csv 并合并重型 AP 运营设计为最小可运营版本
3 P25-1 预算控制规则中心轻量落地 新增按法体 部门 成本中心 费用类型配置 warn block manual_review 的预算规则中心与 seed 基线 预算规则可查询 新增 更新 停用并在报销 采购 差旅三域按统一优先级生效 cd server && npm run prisma:validate && npm test -- tests/unit/budgetPool.service.test.js tests/unit/services/featureFlags.test.js manual TODO TODO TODO server/prisma/schema.prisma|server/prisma/migrations|server/src/routes/budgetControlRules.js|server/src/services/budgetPool.js|server/src/scripts/seed-config.js|server/tests/unit/budgetPool.service.test.js ["P25-0"] 优先扩展现有 budgetPool 能力 不新引入独立预算服务
4 P25-2 统一 precheck API 前置提交风险 为报销 采购 差旅补齐统一 precheck API 在提交前返回预算 判重 绑定和必填风险摘要 precheck 仅返回风险和建议动作 不写业务终态 三个业务域接口返回结构一致 cd server && npm test -- tests/unit/routes/travelRequests.test.js tests/unit/routes/purchase.archive-erp.test.js tests/unit/routes/invoicePool.travel-bind.test.js manual TODO TODO TODO server/src/routes/reimbursements.js|server/src/routes/purchaseRequests.js|server/src/routes/travelRequests.js|server/src/services/budgetPool.js|server/tests/unit/routes ["P25-1"] 返回结构固定包含 result riskHints blockingReasons nextActions budgetSnapshot
5 P25-3 付款批次与 maker-checker 将付款从单笔动作提升为批次创建 复核 执行 导出模型并对高风险支付启用 maker-checker 付款批次支持 create review execute export requeue 且复核人与发起人不可为同一人 执行保持幂等 cd server && npm run prisma:validate && npm test -- tests/unit/routes/travelRequests.payment-track.test.js tests/unit/routes/travelAuthorizations.test.js && cd ../client && npm run typecheck && npm run build manual TODO TODO TODO server/prisma/schema.prisma|server/prisma/migrations|server/src/routes/paymentBatches.js|server/src/routes/reimbursements.js|server/src/routes/travelRequests.js|client/src/api/travelPayments.ts|client/src/pages/TravelRequestsPage.tsx ["P25-2"] 先实现最小批次付款运营 不做自动代付或自动冲销
6 P25-4 最小 AP 运营视图与风险预警 提供未付 部分匹配 异常交易 待导出 失败重试的最小运营视图并接入 Dashboard 预警 财务可查看最小 AP 摘要 异常列表和重试入口 预算超用与长时间未付款可进入看板或通知 cd server && npm test -- tests/unit/routes/travelReconciliation.test.js tests/unit/services/travelReconciliation.test.js tests/unit/routes/notifications.test.js && ./scripts/regression-dashboard.sh && cd ../client && npm run typecheck && npm run build manual TODO TODO TODO server/src/routes/paymentBatches.js|server/src/routes/travelReconciliation.js|server/src/routes/dashboard.js|server/src/routes/notifications.js|client/src/pages/DashboardPage.tsx|client/src/pages/ApOperationsPage.tsx ["P25-3"] 只做最小可运营视图和告警 不做重型 AP 工作台平台化
7 P25-5 P25回归与验收收口 完成预算规则 precheck 付款批次和最小 AP 运营后的整体验收收口 预算三模式 precheck 前置 批次付款与最小 AP 运营通过验收且报销 采购 差旅零回归 cd server && npm run prisma:validate && npm test && ./scripts/regression-budget.sh && ./scripts/regression-all.sh && cd ../client && npm run typecheck && npm run build manual TODO TODO TODO issues/2026-03-21_10-30-00-p25-fee-control-ap-refresh.csv|server/scripts/regression-budget.sh|server/scripts/regression-all.sh|server/tests|client/src/pages/DashboardPage.tsx ["P25-4"] P25-lite 为当前内部 OA 主线第一优先级
@@ -0,0 +1,7 @@
ID,Title,Description,Acceptance,Test_Method,Tools,Dev_Status,Review1_Status,Regression_Status,Files,Dependencies,Notes
P26-0,P26执行合同刷新建档与范围收缩,创建并校验门户 SSO 与 IM 入口 refresh 合同 CSV 并冻结本轮只做统一入口 OIDC 和深链体验的边界,refresh CSV 通过校验且明确本期只做海音达内部统一入口和轻量通知治理 不做消息卡片回调审批,python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-03-21_10-40-00-p26-portal-sso-im-entry-refresh.csv,manual,TODO,TODO,TODO,issues/2026-03-21_10-40-00-p26-portal-sso-im-entry-refresh.csv|issues/2026-03-21_09-20-00-p26-portal-sso-im-entry.csv|server/src/routes/auth.js|client/src/pages/LoginPage.tsx,[],supersede 2026-03-21_09-20-00-p26-portal-sso-im-entry.csv 并把通知模板路由中心收缩为轻量治理
P26-1,OIDC provider 列表与回退登录,补齐 OIDC provider 列表 账号绑定与本地密码回退登录的统一入口,支持查询 provider 列表 发起 OIDC 登录 回调绑定和密码登录回退且登录页展示一致,cd server && npm test -- tests/unit/routes/notifications.test.js && cd ../client && npm run typecheck && npm run build,manual,TODO,TODO,TODO,server/src/routes/auth.js|server/src/services/oidc/index.js|server/src/config.js|client/src/pages/LoginPage.tsx|client/src/auth/AuthContext.tsx|client/src/api/auth.ts,"[""P26-0""]",优先复用 openid-client 与现有登录体系 不新增厂商专属认证栈
P26-2,Portal Home 最小统一入口,新增统一门户首页展示我的待办 我的申请 预算预警 公告与快捷入口,门户首页按权限显示卡片并从单一路径进入审批 财务 采购 资产 差旅常用入口,cd server && npm test -- tests/unit/routes/workflow.permissions.test.js tests/unit/routes/ai.test.js && cd ../client && npm run typecheck && npm run build,manual,TODO,TODO,TODO,server/src/routes/portal.js|server/src/routes/dashboard.js|client/src/pages/PortalHomePage.tsx|client/src/layouts/AppShellLayout.tsx|client/src/router/index.tsx|client/src/api/dashboard.ts,"[""P26-1""]",Portal Home 优先聚合现有待办 看板和通知数据 不新建复杂门户后端
P26-3,IM 深链统一与移动分流,将审批 付款 异常 催办统一为签名 deep link 和标准 targetPath 并覆盖移动入口,通知消息统一产出签名 targetPath 且过期校验 跨端跳转和移动分流语义一致,cd server && npm test -- tests/unit/routes/notifications.test.js tests/unit/services/imRouting.test.js tests/unit/services/imEnqueue.test.js && ./scripts/regression-im-notifier.sh && cd ../client && npm run typecheck && npm run build,manual,TODO,TODO,TODO,server/src/routes/notifications.js|server/src/services/notifications|server/src/constants/notificationTypes.js|client/src/pages/NotificationsPage.tsx|client/src/router/index.tsx|client/src/pages/MobileApprovalsPage.tsx,"[""P26-2""]",继续坚持页面处理型深链 不引入 IM 回调审批
P26-4,轻量通知模板与路由策略,补齐通知模板和路由策略的最小治理能力以支持渠道禁用 降级和受众配置,通知模板和路由策略可配置且渠道失败时可降级到次级通道或站内通知 但不引入复杂编排,cd server && npm test -- tests/unit/routes/notifications.test.js tests/unit/services/imRouting.test.js && cd ../client && npm run typecheck && npm run build,manual,TODO,TODO,TODO,server/src/routes/notifications.js|server/src/services/notifications/channelConfig.js|server/src/services/notifications/imRouting.js|client/src/pages/NotificationChannelsPage.tsx|client/src/api/notificationChannels.ts,"[""P26-3""]",仅做轻量模板和路由治理 不扩展飞书钉钉生产通道
P26-5,P26回归与三个月里程碑收口,完成统一入口 OIDC 和 IM 深链后的三个月阶段收口,门户首页 OIDC 和 IM 深链在试点部门可用且 server client 主回归绿灯,cd server && npm test && ./scripts/regression-im-notifier.sh && ./scripts/regression-all.sh && cd ../client && npm run typecheck && npm run build,manual,TODO,TODO,TODO,issues/2026-03-21_10-40-00-p26-portal-sso-im-entry-refresh.csv|server/scripts/regression-im-notifier.sh|server/scripts/regression-all.sh|client/src/pages/PortalHomePage.tsx,"[""P26-4""]",P26-lite 为内部 OA 第二优先级阶段
1 ID Title Description Acceptance Test_Method Tools Dev_Status Review1_Status Regression_Status Files Dependencies Notes
2 P26-0 P26执行合同刷新建档与范围收缩 创建并校验门户 SSO 与 IM 入口 refresh 合同 CSV 并冻结本轮只做统一入口 OIDC 和深链体验的边界 refresh CSV 通过校验且明确本期只做海音达内部统一入口和轻量通知治理 不做消息卡片回调审批 python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-03-21_10-40-00-p26-portal-sso-im-entry-refresh.csv manual TODO TODO TODO issues/2026-03-21_10-40-00-p26-portal-sso-im-entry-refresh.csv|issues/2026-03-21_09-20-00-p26-portal-sso-im-entry.csv|server/src/routes/auth.js|client/src/pages/LoginPage.tsx [] supersede 2026-03-21_09-20-00-p26-portal-sso-im-entry.csv 并把通知模板路由中心收缩为轻量治理
3 P26-1 OIDC provider 列表与回退登录 补齐 OIDC provider 列表 账号绑定与本地密码回退登录的统一入口 支持查询 provider 列表 发起 OIDC 登录 回调绑定和密码登录回退且登录页展示一致 cd server && npm test -- tests/unit/routes/notifications.test.js && cd ../client && npm run typecheck && npm run build manual TODO TODO TODO server/src/routes/auth.js|server/src/services/oidc/index.js|server/src/config.js|client/src/pages/LoginPage.tsx|client/src/auth/AuthContext.tsx|client/src/api/auth.ts ["P26-0"] 优先复用 openid-client 与现有登录体系 不新增厂商专属认证栈
4 P26-2 Portal Home 最小统一入口 新增统一门户首页展示我的待办 我的申请 预算预警 公告与快捷入口 门户首页按权限显示卡片并从单一路径进入审批 财务 采购 资产 差旅常用入口 cd server && npm test -- tests/unit/routes/workflow.permissions.test.js tests/unit/routes/ai.test.js && cd ../client && npm run typecheck && npm run build manual TODO TODO TODO server/src/routes/portal.js|server/src/routes/dashboard.js|client/src/pages/PortalHomePage.tsx|client/src/layouts/AppShellLayout.tsx|client/src/router/index.tsx|client/src/api/dashboard.ts ["P26-1"] Portal Home 优先聚合现有待办 看板和通知数据 不新建复杂门户后端
5 P26-3 IM 深链统一与移动分流 将审批 付款 异常 催办统一为签名 deep link 和标准 targetPath 并覆盖移动入口 通知消息统一产出签名 targetPath 且过期校验 跨端跳转和移动分流语义一致 cd server && npm test -- tests/unit/routes/notifications.test.js tests/unit/services/imRouting.test.js tests/unit/services/imEnqueue.test.js && ./scripts/regression-im-notifier.sh && cd ../client && npm run typecheck && npm run build manual TODO TODO TODO server/src/routes/notifications.js|server/src/services/notifications|server/src/constants/notificationTypes.js|client/src/pages/NotificationsPage.tsx|client/src/router/index.tsx|client/src/pages/MobileApprovalsPage.tsx ["P26-2"] 继续坚持页面处理型深链 不引入 IM 回调审批
6 P26-4 轻量通知模板与路由策略 补齐通知模板和路由策略的最小治理能力以支持渠道禁用 降级和受众配置 通知模板和路由策略可配置且渠道失败时可降级到次级通道或站内通知 但不引入复杂编排 cd server && npm test -- tests/unit/routes/notifications.test.js tests/unit/services/imRouting.test.js && cd ../client && npm run typecheck && npm run build manual TODO TODO TODO server/src/routes/notifications.js|server/src/services/notifications/channelConfig.js|server/src/services/notifications/imRouting.js|client/src/pages/NotificationChannelsPage.tsx|client/src/api/notificationChannels.ts ["P26-3"] 仅做轻量模板和路由治理 不扩展飞书钉钉生产通道
7 P26-5 P26回归与三个月里程碑收口 完成统一入口 OIDC 和 IM 深链后的三个月阶段收口 门户首页 OIDC 和 IM 深链在试点部门可用且 server client 主回归绿灯 cd server && npm test && ./scripts/regression-im-notifier.sh && ./scripts/regression-all.sh && cd ../client && npm run typecheck && npm run build manual TODO TODO TODO issues/2026-03-21_10-40-00-p26-portal-sso-im-entry-refresh.csv|server/scripts/regression-im-notifier.sh|server/scripts/regression-all.sh|client/src/pages/PortalHomePage.tsx ["P26-4"] P26-lite 为内部 OA 第二优先级阶段
@@ -0,0 +1,7 @@
ID,Title,Description,Acceptance,Test_Method,Tools,Dev_Status,Review1_Status,Regression_Status,Files,Dependencies,Notes
P28-0,P28执行合同刷新建档与范围收缩,创建并校验门户搜索与工作台 refresh 合同 CSV 并冻结本轮只做替代旧 OA 首页所需最小能力的边界,refresh CSV 通过校验且明确本期只做搜索 工作台 常用入口 最近访问和轻量公告 不做完整 CMS 或知识库,python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-03-21_10-50-00-p28-portal-search-workbench-refresh.csv,manual,TODO,TODO,TODO,issues/2026-03-21_10-50-00-p28-portal-search-workbench-refresh.csv|issues/2026-03-21_09-40-00-p28-portal-search-workbench.csv|client/src/pages/PortalHomePage.tsx|server/src/routes/dashboard.js,[],supersede 2026-03-21_09-40-00-p28-portal-search-workbench.csv 并把个性化和公告能力收敛到最小可用版本
P28-1,全局搜索最小实现,为报销 请假 采购 差旅 资产和已落地经营对象提供统一搜索入口与权限过滤,搜索可命中编号 标题 主数据对象并按权限过滤返回统一 hit 结构 优先使用 PostgreSQL 内建能力,cd server && npm run prisma:validate && npm test -- tests/unit/routes/assets.search.test.js tests/unit/routes/workflow.permissions.test.js && cd ../client && npm run typecheck && npm run build,manual,TODO,TODO,TODO,server/src/routes/search.js|server/src/services/search.js|server/prisma/schema.prisma|client/src/api/search.ts|client/src/components/GlobalSearch.tsx|client/src/layouts/AppShellLayout.tsx,"[""P28-0""]",不引入独立搜索集群或额外基础设施
P28-2,工作台卡片与权限化首页,按权限展示审批 财务 采购 资产 运营卡片并形成统一工作台首页,不同角色进入门户可看到差异化卡片且工作台首页可替代旧 OA 常用入口,cd server && npm test -- tests/unit/routes/ai.test.js && cd ../client && npm run typecheck && npm run build,manual,TODO,TODO,TODO,server/src/routes/portal.js|server/src/routes/configRead.js|client/src/pages/PortalHomePage.tsx|client/src/components/portal|client/src/auth/permissions.ts,"[""P28-1""]",个性化仅做权限显隐与固定卡片 不做复杂拖拽布局
P28-3,快捷操作与最近访问,补齐常用入口 最近访问和待办优先级排序以提升内部使用效率,用户可查看最近访问 常用入口和高优先级待办排序且 PC 与移动端体验一致,cd server && npm test -- tests/unit/routes/workflow.permissions.test.js && cd ../client && npm run typecheck && npm run build,manual,TODO,TODO,TODO,server/src/routes/portal.js|client/src/pages/PortalHomePage.tsx|client/src/layouts/AppShellLayout.tsx|client/src/router/index.tsx|client/src/lib/utils.ts,"[""P28-2""]",最近访问默认使用本地记录 不做跨端画像和推荐系统
P28-4,轻量公告与 FAQ 聚合入口,为门户首页补齐公告卡片 制度链接 常见问题入口与基础上下线能力,可展示公告卡片 制度入口 FAQ 链接和上下线状态 但不引入完整内容管理系统,cd server && npm test -- tests/unit/routes/notifications.test.js && cd ../client && npm run typecheck && npm run build,manual,TODO,TODO,TODO,server/src/routes/announcements.js|server/prisma/schema.prisma|client/src/pages/PortalHomePage.tsx|client/src/api/announcements.ts|client/src/components/portal/AnnouncementCard.tsx,"[""P28-3""]",公告采用最小发布模型 仅支持文本 摘要 链接与上下线时间
P28-5,P28回归与验收收口,完成搜索 工作台 快捷入口与轻量公告后的整体验收收口,搜索权限过滤 工作台首页 最近访问 快捷入口与门户性能通过验收且零回归,cd server && npm test && ./scripts/regression-dashboard.sh && ./scripts/regression-all.sh && cd ../client && npm run typecheck && npm run build,manual,TODO,TODO,TODO,issues/2026-03-21_10-50-00-p28-portal-search-workbench-refresh.csv|server/scripts/regression-dashboard.sh|server/scripts/regression-all.sh|client/src/pages/PortalHomePage.tsx,"[""P28-4""]",P28-lite 以替代旧 OA 首页的最小可用能力为完成标准
1 ID Title Description Acceptance Test_Method Tools Dev_Status Review1_Status Regression_Status Files Dependencies Notes
2 P28-0 P28执行合同刷新建档与范围收缩 创建并校验门户搜索与工作台 refresh 合同 CSV 并冻结本轮只做替代旧 OA 首页所需最小能力的边界 refresh CSV 通过校验且明确本期只做搜索 工作台 常用入口 最近访问和轻量公告 不做完整 CMS 或知识库 python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-03-21_10-50-00-p28-portal-search-workbench-refresh.csv manual TODO TODO TODO issues/2026-03-21_10-50-00-p28-portal-search-workbench-refresh.csv|issues/2026-03-21_09-40-00-p28-portal-search-workbench.csv|client/src/pages/PortalHomePage.tsx|server/src/routes/dashboard.js [] supersede 2026-03-21_09-40-00-p28-portal-search-workbench.csv 并把个性化和公告能力收敛到最小可用版本
3 P28-1 全局搜索最小实现 为报销 请假 采购 差旅 资产和已落地经营对象提供统一搜索入口与权限过滤 搜索可命中编号 标题 主数据对象并按权限过滤返回统一 hit 结构 优先使用 PostgreSQL 内建能力 cd server && npm run prisma:validate && npm test -- tests/unit/routes/assets.search.test.js tests/unit/routes/workflow.permissions.test.js && cd ../client && npm run typecheck && npm run build manual TODO TODO TODO server/src/routes/search.js|server/src/services/search.js|server/prisma/schema.prisma|client/src/api/search.ts|client/src/components/GlobalSearch.tsx|client/src/layouts/AppShellLayout.tsx ["P28-0"] 不引入独立搜索集群或额外基础设施
4 P28-2 工作台卡片与权限化首页 按权限展示审批 财务 采购 资产 运营卡片并形成统一工作台首页 不同角色进入门户可看到差异化卡片且工作台首页可替代旧 OA 常用入口 cd server && npm test -- tests/unit/routes/ai.test.js && cd ../client && npm run typecheck && npm run build manual TODO TODO TODO server/src/routes/portal.js|server/src/routes/configRead.js|client/src/pages/PortalHomePage.tsx|client/src/components/portal|client/src/auth/permissions.ts ["P28-1"] 个性化仅做权限显隐与固定卡片 不做复杂拖拽布局
5 P28-3 快捷操作与最近访问 补齐常用入口 最近访问和待办优先级排序以提升内部使用效率 用户可查看最近访问 常用入口和高优先级待办排序且 PC 与移动端体验一致 cd server && npm test -- tests/unit/routes/workflow.permissions.test.js && cd ../client && npm run typecheck && npm run build manual TODO TODO TODO server/src/routes/portal.js|client/src/pages/PortalHomePage.tsx|client/src/layouts/AppShellLayout.tsx|client/src/router/index.tsx|client/src/lib/utils.ts ["P28-2"] 最近访问默认使用本地记录 不做跨端画像和推荐系统
6 P28-4 轻量公告与 FAQ 聚合入口 为门户首页补齐公告卡片 制度链接 常见问题入口与基础上下线能力 可展示公告卡片 制度入口 FAQ 链接和上下线状态 但不引入完整内容管理系统 cd server && npm test -- tests/unit/routes/notifications.test.js && cd ../client && npm run typecheck && npm run build manual TODO TODO TODO server/src/routes/announcements.js|server/prisma/schema.prisma|client/src/pages/PortalHomePage.tsx|client/src/api/announcements.ts|client/src/components/portal/AnnouncementCard.tsx ["P28-3"] 公告采用最小发布模型 仅支持文本 摘要 链接与上下线时间
7 P28-5 P28回归与验收收口 完成搜索 工作台 快捷入口与轻量公告后的整体验收收口 搜索权限过滤 工作台首页 最近访问 快捷入口与门户性能通过验收且零回归 cd server && npm test && ./scripts/regression-dashboard.sh && ./scripts/regression-all.sh && cd ../client && npm run typecheck && npm run build manual TODO TODO TODO issues/2026-03-21_10-50-00-p28-portal-search-workbench-refresh.csv|server/scripts/regression-dashboard.sh|server/scripts/regression-all.sh|client/src/pages/PortalHomePage.tsx ["P28-4"] P28-lite 以替代旧 OA 首页的最小可用能力为完成标准
@@ -0,0 +1,6 @@
ID,Title,Description,Acceptance,Test_Method,Tools,Dev_Status,Review1_Status,Regression_Status,Files,Dependencies,Notes
P24-0,P24执行合同刷新建档与非引擎边界冻结,创建并校验 Workflow 治理 refresh 合同 CSV 并冻结本轮只做流程定义管理和版本化不动运行时引擎的边界,refresh CSV 通过校验且明确本期不做条件分支 并行会签 抄送运行时 升级催办等高风险引擎改造,python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-03-21_11-00-00-p24-workflow-governance-refresh.csv,manual,TODO,TODO,TODO,issues/2026-03-21_11-00-00-p24-workflow-governance-refresh.csv|issues/2026-03-21_09-00-00-p24-workflow-platformization.csv|server/src/routes/workflow.js|server/prisma/schema.prisma,[],supersede 2026-03-21_09-00-00-p24-workflow-platformization.csv 并把 P24-3 和 P24-4 降级为 backlog
P24-1,WorkflowDefinition 版本化与兼容迁移,为现有流程定义补齐版本化 草稿发布态和 definition_json 兼容读取能力,流程定义支持版本管理和草稿发布态 旧 definition_json 仍可按 version=1 兼容读取且 Prisma 校验通过,cd server && npm run prisma:validate && npm test -- tests/unit/utils/workflow.test.js tests/unit/routes/workflow.permissions.test.js,manual,TODO,TODO,TODO,server/prisma/schema.prisma|server/prisma/migrations|server/src/utils/workflow.js|server/tests/unit/utils/workflow.test.js|server/tests/unit/routes/workflow.permissions.test.js,"[""P24-0""]",不改现有审批运行时语义 只补治理层和兼容层
P24-2,流程定义管理 API 与后台页,新增流程定义的列表 详情 草稿更新 发布 归档和版本查看能力并提供后台运营页,支持 GET POST PATCH publish archive 与版本查看 前后端联通且仅 system.settings 可操作,cd server && npm test -- tests/unit/routes/workflow.permissions.test.js && cd ../client && npm run typecheck && npm run build,manual,TODO,TODO,TODO,server/src/routes/workflowDefinitions.js|server/src/app.js|client/src/api/workflow.ts|client/src/pages/WorkflowDefinitionsPage.tsx|client/src/router/index.tsx|client/src/auth/permissions.ts,"[""P24-1""]",优先复用现有后台布局和 workflow API 风格 不引入新管理端框架
P24-3,流程配置与审批规则衔接治理,把现有 approval_rules 与流程定义管理建立清晰衔接口径并同步规格和操作说明,管理员可理解当前审批规则与流程定义之间的边界且文档和后台口径一致 不需要改运行时引擎,python3 scripts/validate-feature-matrix.py && git diff --check,manual,TODO,TODO,TODO,server/src/routes/approvalRules.js|docs/requirements-specification.md|docs/integration-boundaries.md|docs/feature-matrix.md|issues/2026-03-21_11-00-00-p24-workflow-governance-refresh.csv,"[""P24-2""]",重点是治理可解释性与后台可维护性 不做流程能力扩张
P24-4,P24回归与验收收口,完成流程定义版本化和后台治理能力后的整体验收收口,流程定义版本化 后台管理和旧线性流程兼容回归全部通过且 workflow 主流程零回归,cd server && npm run prisma:validate && npm test && ./scripts/regression-workflow-actions.sh && ./scripts/regression-all.sh && cd ../client && npm run typecheck && npm run build,manual,TODO,TODO,TODO,issues/2026-03-21_11-00-00-p24-workflow-governance-refresh.csv|server/scripts/regression-workflow-actions.sh|server/scripts/regression-all.sh|server/tests|client/src/pages/WorkflowTaskDetailPage.tsx,"[""P24-3""]",P24-lite 的完成标准是管理员可维护和旧流程稳定而非平台化引擎
1 ID Title Description Acceptance Test_Method Tools Dev_Status Review1_Status Regression_Status Files Dependencies Notes
2 P24-0 P24执行合同刷新建档与非引擎边界冻结 创建并校验 Workflow 治理 refresh 合同 CSV 并冻结本轮只做流程定义管理和版本化不动运行时引擎的边界 refresh CSV 通过校验且明确本期不做条件分支 并行会签 抄送运行时 升级催办等高风险引擎改造 python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-03-21_11-00-00-p24-workflow-governance-refresh.csv manual TODO TODO TODO issues/2026-03-21_11-00-00-p24-workflow-governance-refresh.csv|issues/2026-03-21_09-00-00-p24-workflow-platformization.csv|server/src/routes/workflow.js|server/prisma/schema.prisma [] supersede 2026-03-21_09-00-00-p24-workflow-platformization.csv 并把 P24-3 和 P24-4 降级为 backlog
3 P24-1 WorkflowDefinition 版本化与兼容迁移 为现有流程定义补齐版本化 草稿发布态和 definition_json 兼容读取能力 流程定义支持版本管理和草稿发布态 旧 definition_json 仍可按 version=1 兼容读取且 Prisma 校验通过 cd server && npm run prisma:validate && npm test -- tests/unit/utils/workflow.test.js tests/unit/routes/workflow.permissions.test.js manual TODO TODO TODO server/prisma/schema.prisma|server/prisma/migrations|server/src/utils/workflow.js|server/tests/unit/utils/workflow.test.js|server/tests/unit/routes/workflow.permissions.test.js ["P24-0"] 不改现有审批运行时语义 只补治理层和兼容层
4 P24-2 流程定义管理 API 与后台页 新增流程定义的列表 详情 草稿更新 发布 归档和版本查看能力并提供后台运营页 支持 GET POST PATCH publish archive 与版本查看 前后端联通且仅 system.settings 可操作 cd server && npm test -- tests/unit/routes/workflow.permissions.test.js && cd ../client && npm run typecheck && npm run build manual TODO TODO TODO server/src/routes/workflowDefinitions.js|server/src/app.js|client/src/api/workflow.ts|client/src/pages/WorkflowDefinitionsPage.tsx|client/src/router/index.tsx|client/src/auth/permissions.ts ["P24-1"] 优先复用现有后台布局和 workflow API 风格 不引入新管理端框架
5 P24-3 流程配置与审批规则衔接治理 把现有 approval_rules 与流程定义管理建立清晰衔接口径并同步规格和操作说明 管理员可理解当前审批规则与流程定义之间的边界且文档和后台口径一致 不需要改运行时引擎 python3 scripts/validate-feature-matrix.py && git diff --check manual TODO TODO TODO server/src/routes/approvalRules.js|docs/requirements-specification.md|docs/integration-boundaries.md|docs/feature-matrix.md|issues/2026-03-21_11-00-00-p24-workflow-governance-refresh.csv ["P24-2"] 重点是治理可解释性与后台可维护性 不做流程能力扩张
6 P24-4 P24回归与验收收口 完成流程定义版本化和后台治理能力后的整体验收收口 流程定义版本化 后台管理和旧线性流程兼容回归全部通过且 workflow 主流程零回归 cd server && npm run prisma:validate && npm test && ./scripts/regression-workflow-actions.sh && ./scripts/regression-all.sh && cd ../client && npm run typecheck && npm run build manual TODO TODO TODO issues/2026-03-21_11-00-00-p24-workflow-governance-refresh.csv|server/scripts/regression-workflow-actions.sh|server/scripts/regression-all.sh|server/tests|client/src/pages/WorkflowTaskDetailPage.tsx ["P24-3"] P24-lite 的完成标准是管理员可维护和旧流程稳定而非平台化引擎
@@ -0,0 +1,7 @@
ID,Title,Description,Acceptance,Test_Method,Tools,Dev_Status,Review1_Status,Regression_Status,Files,Dependencies,Notes
P29-0,P29执行合同刷新建档与试点切换边界冻结,创建并校验替代验收 refresh 合同 CSV 并冻结本轮以试点共存 切换 回滚为主的边界,refresh CSV 通过校验且明确目标为内部 OA 试点切换可控 不追求一次性全量替代,python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-03-21_11-10-00-p29-replacement-readiness-refresh.csv,manual,TODO,TODO,TODO,issues/2026-03-21_11-10-00-p29-replacement-readiness-refresh.csv|issues/2026-03-21_09-50-00-p29-replacement-readiness.csv|deploy/trialrun/runbook.md,[],supersede 2026-03-21_09-50-00-p29-replacement-readiness.csv 并把目标收敛为试点切换 readiness
P29-1,旧 OA 共存与数据映射清单,梳理旧 OA 与 hyb-oa 的用户 组织 单据 状态 编号和附件映射并形成共存清单,映射清单覆盖用户 组织 单据 状态 编号 附件并可支撑试点部门共存和人工核对,git diff --check,manual,TODO,TODO,TODO,docs/migration-mapping.md|docs/integration-boundaries.md|issues/2026-03-21_11-10-00-p29-replacement-readiness-refresh.csv,"[""P29-0""]",映射清单只描述规则和差异 不直接导入真实生产数据
P29-2,迁移工具与 dry-run 演练,新增 dry-run 导入 对账 差异报告和回滚清单能力用于试点替代前演练,迁移工具支持 dry-run 差异报告和回滚清单导出 正式导入前必须先完成演练,cd server && npm test -- tests/unit/services/integrations/outbox.test.js tests/unit/services/erpMasterData.test.js && git diff --check,manual,TODO,TODO,TODO,server/src/routes/migrationRuns.js|server/src/scripts|server/src/services/integrations|docs/migration-mapping.md|deploy/trialrun/runbook.md,"[""P29-1""]",所有迁移先 dry-run 后正式导入 不直接覆盖源系统数据
P29-3,试点切换控制台与回退开关,提供按部门 法体 业务域粒度启停新旧入口与回退开关的控制台,可按部门 法体 域启停新旧入口并记录切换审计 且不允许一次性全量切换,cd server && npm test -- tests/unit/services/featureFlags.test.js tests/unit/routes/ai.test.js && cd ../client && npm run typecheck && npm run build,manual,TODO,TODO,TODO,server/src/routes/cutover.js|server/src/routes/featureFlags.js|client/src/pages/CutoverConsolePage.tsx|client/src/api/featureFlags.ts|client/src/router/index.tsx,"[""P29-2""]",优先复用现有 feature flags 和审计能力 不新增独立配置中心
P29-4,试点验收脚本与 Runbook 补齐,补齐试点验收 灰度切换 故障回退 审计取证和备份恢复手册与脚本,形成可执行的试点验收清单 切换步骤 回退步骤 审计取证说明和备份恢复演练入口,cd server && ./scripts/regression-all.sh && git diff --check,manual,TODO,TODO,TODO,deploy/trialrun/runbook.md|deploy/trialrun/checklist.md|server/scripts/regression-all.sh|docs/ops/slo.md|issues/2026-03-21_11-10-00-p29-replacement-readiness-refresh.csv,"[""P29-3""]",回滚优先配置回退和备份恢复 不做 destructive 数据回滚
P29-5,P29试点替代验收收口,完成共存映射 dry-run 切换 回滚和试点替代后的整体验收收口,试点范围旧 OA 新单停用 新平台接管主链路且审计 SLO 回归 备份恢复和切换演练均留痕,cd server && npm test && ./scripts/regression-all.sh && cd ../client && npm run typecheck && npm run build && git diff --check,manual,TODO,TODO,TODO,issues/2026-03-21_11-10-00-p29-replacement-readiness-refresh.csv|deploy/trialrun/runbook.md|deploy/trialrun/checklist.md|server/scripts/regression-all.sh,"[""P29-4""]",P29-lite 的完成标准是试点范围可切换 可回滚 可审计
1 ID Title Description Acceptance Test_Method Tools Dev_Status Review1_Status Regression_Status Files Dependencies Notes
2 P29-0 P29执行合同刷新建档与试点切换边界冻结 创建并校验替代验收 refresh 合同 CSV 并冻结本轮以试点共存 切换 回滚为主的边界 refresh CSV 通过校验且明确目标为内部 OA 试点切换可控 不追求一次性全量替代 python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-03-21_11-10-00-p29-replacement-readiness-refresh.csv manual TODO TODO TODO issues/2026-03-21_11-10-00-p29-replacement-readiness-refresh.csv|issues/2026-03-21_09-50-00-p29-replacement-readiness.csv|deploy/trialrun/runbook.md [] supersede 2026-03-21_09-50-00-p29-replacement-readiness.csv 并把目标收敛为试点切换 readiness
3 P29-1 旧 OA 共存与数据映射清单 梳理旧 OA 与 hyb-oa 的用户 组织 单据 状态 编号和附件映射并形成共存清单 映射清单覆盖用户 组织 单据 状态 编号 附件并可支撑试点部门共存和人工核对 git diff --check manual TODO TODO TODO docs/migration-mapping.md|docs/integration-boundaries.md|issues/2026-03-21_11-10-00-p29-replacement-readiness-refresh.csv ["P29-0"] 映射清单只描述规则和差异 不直接导入真实生产数据
4 P29-2 迁移工具与 dry-run 演练 新增 dry-run 导入 对账 差异报告和回滚清单能力用于试点替代前演练 迁移工具支持 dry-run 差异报告和回滚清单导出 正式导入前必须先完成演练 cd server && npm test -- tests/unit/services/integrations/outbox.test.js tests/unit/services/erpMasterData.test.js && git diff --check manual TODO TODO TODO server/src/routes/migrationRuns.js|server/src/scripts|server/src/services/integrations|docs/migration-mapping.md|deploy/trialrun/runbook.md ["P29-1"] 所有迁移先 dry-run 后正式导入 不直接覆盖源系统数据
5 P29-3 试点切换控制台与回退开关 提供按部门 法体 业务域粒度启停新旧入口与回退开关的控制台 可按部门 法体 域启停新旧入口并记录切换审计 且不允许一次性全量切换 cd server && npm test -- tests/unit/services/featureFlags.test.js tests/unit/routes/ai.test.js && cd ../client && npm run typecheck && npm run build manual TODO TODO TODO server/src/routes/cutover.js|server/src/routes/featureFlags.js|client/src/pages/CutoverConsolePage.tsx|client/src/api/featureFlags.ts|client/src/router/index.tsx ["P29-2"] 优先复用现有 feature flags 和审计能力 不新增独立配置中心
6 P29-4 试点验收脚本与 Runbook 补齐 补齐试点验收 灰度切换 故障回退 审计取证和备份恢复手册与脚本 形成可执行的试点验收清单 切换步骤 回退步骤 审计取证说明和备份恢复演练入口 cd server && ./scripts/regression-all.sh && git diff --check manual TODO TODO TODO deploy/trialrun/runbook.md|deploy/trialrun/checklist.md|server/scripts/regression-all.sh|docs/ops/slo.md|issues/2026-03-21_11-10-00-p29-replacement-readiness-refresh.csv ["P29-3"] 回滚优先配置回退和备份恢复 不做 destructive 数据回滚
7 P29-5 P29试点替代验收收口 完成共存映射 dry-run 切换 回滚和试点替代后的整体验收收口 试点范围旧 OA 新单停用 新平台接管主链路且审计 SLO 回归 备份恢复和切换演练均留痕 cd server && npm test && ./scripts/regression-all.sh && cd ../client && npm run typecheck && npm run build && git diff --check manual TODO TODO TODO issues/2026-03-21_11-10-00-p29-replacement-readiness-refresh.csv|deploy/trialrun/runbook.md|deploy/trialrun/checklist.md|server/scripts/regression-all.sh ["P29-4"] P29-lite 的完成标准是试点范围可切换 可回滚 可审计