R79 收口公网部署与治理事实源

这个提交包含在:
2026-05-05 16:36:27 +08:00
父节点 449489d2e0
当前提交 6eaee753d7
共修改 12 个文件,包含 136 行新增和 59 行删除
+17 -6
查看文件
@@ -1,12 +1,22 @@
# hyb-oa 系统架构概览
**版本**:1.2
**日期**:2026-02-09
**目的**:描述系统当前实现(P5/F25 完备态)并为未来演进提供参考。
**版本**:1.3
**日期**:2026-05-04
**目的**:描述系统当前实现、当前部署基线和仍待外部环境闭环的部分,为试运行与后续演进提供参考。
**相关文档**:
- [需求规格说明书](./requirements-specification.md)
- [实现状态矩阵(P5-P10)](./feature-matrix.md)
- [实现状态矩阵](./feature-matrix.md)
- [试运行覆盖矩阵](../artifacts/r75/coverage-matrix.csv)
- [人工试运行报告](../artifacts/r70/manual-trialrun-report.md)
**2026-05-04 已核实部署基线**:
- 公网入口:`https://oa.hyinda.com`
- 反向代理:`caddy`,当前配置为 `oa.hyinda.com -> reverse_proxy 127.0.0.1:3000`
- 部署用户:`deploy`(常规) / `root`(系统配置),`shunli` 当前不可免密登录
- 部署目录:`/opt/hyb-oa-trialrun`
- 部署方式:本地执行 `deploy/trialrun/deploy.sh`,通过 `rsync` 同步到远端;远端目录不是 git 工作树
- 容器编排:脚本兼容 `docker compose` 与 `docker-compose`,当前服务器实际为 `docker-compose 1.29.2`
---
@@ -21,7 +31,7 @@ graph TB
end
subgraph Cluster["部署环境 (Docker Compose Profiles)"]
Proxy["可选:Nginx/Caddy\nTLS/反代/前端托管"]
Proxy["Caddy\nTLS/反代/前端托管"]
subgraph Server_Nodes["计算层"]
API["Fastify API\n(JOBS_ENABLED=false)"]
@@ -54,9 +64,10 @@ graph TB
```
**关键变更说明**:
- **Worker 进程独立**:支持通过 `docker compose --profile worker` 拆分 API 与定时作业进程。
- **Worker 进程独立**:支持通过 `docker compose --profile worker` 或 `docker-compose --profile worker` 拆分 API 与定时作业进程。
- **存储抽象层**:适配本地文件系统与 S3/MinIO,通过 `STORAGE_DRIVER` 切换。
- **治理接入**:内置 Prometheus 指标采集 `/metrics`。
- **远端发布模型**:当前生产化试运行通过 `deploy/trialrun/deploy.sh` 从本地 `rsync` 到服务器,不依赖远端 `git pull`。
---
+10 -3
查看文件
@@ -1,8 +1,15 @@
# hyb-oa 实现状态矩阵(P5-P19+IM-1+ERP-3+R10+MCP-1+AI-1+TRAVEL-1+TRAVEL-2+TRAVEL-3+PWA-1+PWA-2+PROD-1+R11)
# hyb-oa 实现状态矩阵(历史主表 + R70-R79 试运行补充)
**快照日期**:2026-03-13
**快照日期**:2026-05-04
**范围**:`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-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` + `artifacts/r75/coverage-matrix.csv`(执行合同与覆盖证据)
## R70-R79 试运行与外部环境补充(2026-04-28 至 2026-05-04)
- **本地核心链路**:员工/经理/管理员的本地 trialrun 主链路已在 R70/R71 通过;R73-R78 进一步补齐了真实 PDF OCR、深层业务辅助回归和财务支付尾链 focused regression。
- **当前公网部署基线**:`oa.hyinda.com` 已接到 `caddy -> 127.0.0.1:3000`,远端目录为 `/opt/hyb-oa-trialrun`,部署由本地 `rsync` 驱动,远端不是 git 工作树。
- **当前外部阻塞**:截至 2026-05-04,公网 `.env` 仍为 `WECOM_ENABLED=false`、`WECOM_ENTRY_ENABLED=false`、`WECOM_OAUTH_ENABLED=false`、`OCR_PROVIDER=mock`;同时远端 `feature_flags` 中 `announcements_v1`、`global_search_v1`、`wecom_entry_v1` 为 `force_off`,导致 runtime smoke 未通过。
- **阅读方式**:本文件的主表仍保留历史主线;与 trialrun、覆盖率、外部环境有关的现状判断,应结合 `artifacts/r75/coverage-matrix.csv` 与 `artifacts/r70/manual-trialrun-report.md` 一起看。
## R12 增量能力(2026-03-21)
+22 -5
查看文件
@@ -1,13 +1,30 @@
# hyb-oa 实施计划(Phase 1 / P0)
# hyb-oa 实施计划(历史 Phase 1 引导 + 当前执行口径)
**日期**:2026-02-06
**范围**:报销系统及其依赖模块(员工/权限/工作流/附件)
**日期**:2026-05-04
**范围**:保留 2026-02 的引导性实施计划,同时补充当前试运行收口与外部环境闭环口径。
## 当前阶段(2026-05-04)
- 当前系统已不处于 `Phase 1 / P0` 开发阶段;本地核心 happy path、真实 PDF OCR 和报销付款尾链已具备回归证据。
- 当前优先级不是继续堆新功能,而是:
1. 治理事实源刷新
2. 外部环境闭环(HTTPS / 企微 / live smoke / 并发)
3. 发布门禁与部署 runbook 收口
- 当前执行事实源优先级:
- 最新执行合同:`issues/*.csv`
- 业务覆盖:`artifacts/r75/coverage-matrix.csv`
- 试运行结论:`artifacts/r70/manual-trialrun-report.md`
- 全局状态矩阵:`docs/feature-matrix.md`
## 历史说明
下文保留的是 2026-02 的 Phase 1 引导计划,主要用于追溯设计出发点、资产复用和里程碑拆解;它**不是**当前最优先的执行合同。
## 0. 前置结论(不可再分叉)
- 技术栈:Fastify + Prisma + PostgreSQL(见 `docs/tech_stack_report.md`)
- 规格书:以 `docs/requirements-specification.md` 为单一事实源
## 1. 复用资产清单(从 shenzhou-business-suite 迁移到 hyb-oa)
## 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 事务 |
@@ -22,7 +39,7 @@
| UI 组件 | `shenzhou-business-suite/src/components/ui/*` | 实现阶段复制到 `client/src/` | 替换路由/样式变量;移除 Supabase 依赖 |
| 测试基建 | `playwright` + `vitest` 配置 | 实现阶段迁移 | P0 覆盖鉴权/工作流/判重核心路径 |
## 2. Phase 1(P0)里程碑拆解(按可开工顺序)
## 2. 历史:Phase 1(P0)里程碑拆解(按可开工顺序)
### Milestone 1:Prisma schema 草稿 + 评审
**目标**:把关键表结构确定下来(后续开发不再反复改 schema)。
+1 -1
查看文件
@@ -1303,7 +1303,7 @@ cancelled (作废/终止,终态)
| 响应式 | PC + 移动端(响应式 Web) |
| 性能 | 页面加载 <2s,API 响应 <500ms(P95) |
| 安全 | JWT(access+refresh rotation)、RBAC 权限码、审计日志、敏感字段加密与脱敏 |
| 部署 | Docker + Nginx(反向代理),域名 oa.hyinda.com |
| 部署 | Docker + Caddy/Nginx(反向代理),域名 oa.hyinda.com |
---
+1 -1
查看文件
@@ -13,7 +13,7 @@
| 认证 | JWT(access + refresh rotation),refresh 以 httpOnly Cookie 传输 |
| 权限 | RBAC(权限码) |
| 审计 | `workflow_history`(流程)+ `audit_logs`(安全与关键变更) |
| 部署 | Docker + Nginx(反向代理) |
| 部署 | Docker + Caddy/Nginx(反向代理) |
## 2. 关键取舍(为什么这么选)