diff --git a/wiki/architecture.md b/wiki/architecture.md index 2675be0..31bf1c2 100644 --- a/wiki/architecture.md +++ b/wiki/architecture.md @@ -101,14 +101,14 @@ hms/ | 模块 | 状态 | 实体数 | 权限数 | 页面数 | 测试覆盖 | |------|------|--------|--------|--------|---------| -| erp-auth | ✅ 完成 | 11 表 | - | 用户/角色/组织 | 38 单元 + 3 集成 | -| erp-config | ✅ 完成 | 6 表 | - | 设置/字典/菜单 | ⚠️ 0 测试 | -| erp-workflow | ✅ 完成 | 5 表 | - | 工作流管理 | ⚠️ 0 测试 | -| erp-message | ✅ 完成 | 3 表 | - | 消息中心 | ⚠️ 0 测试 | -| erp-plugin | ✅ 完成 | 4 表 | - | 插件管理/市场 | 31 单元 + 2 集成 | -| erp-health | ✅ 完成 | 44 表 | 22 | 25+ 页面 + 11 组件 | 104 单元 + 159 集成 | -| erp-ai | 🔄 Phase 1 | 3 表 | - | AI 分析/Prompt/用量 | ⚠️ 0 测试 | -| erp-dialysis | 🔄 已拆分 | - | - | - | 10 单元 | +| erp-auth | ✅ 完成 | 11 表 | 23(种子数据) | 用户/角色/组织 | 41 单元 + 3 集成 | +| erp-config | ✅ 完成 | 6 表 | 18(种子数据) | 设置/字典/菜单 | 78 单元 | +| erp-workflow | ✅ 完成 | 5 表 | 8(种子数据) | 工作流管理 | 63 单元 + 4 集成 | +| erp-message | ✅ 完成 | 3 表 | 5(种子数据) | 消息中心 | 72 单元 | +| erp-plugin | ✅ 完成 | 4 表 | 2(种子数据) | 插件管理/市场 | 78 单元 + 2 集成 | +| erp-health | ✅ 完成 | 45 表 | 39 | 25+ 页面 + 11 组件 | 159 单元 + 144 集成 | +| erp-ai | 🔄 Phase 1 | 3 表 | 6 | AI 分析/Prompt/用量 | 36 单元 | +| erp-dialysis | 🔄 已拆分 | - | 5 | - | 10 单元 + 15 集成 | ### 技术选型 @@ -220,10 +220,21 @@ impl ErpModule for AuthModule { ⚠️ EventBus 内存 broadcast 需 outbox 持久化保障(已通过后台任务实现) ⚠️ 微信登录固定到 default_tenant_id — 多租户场景需设计解析策略 +### 2026-04-30 审计发现 + +| 发现 | 严重性 | 说明 | +|------|--------|------| +| 前端权限码拼写错误 | CRITICAL | `health.alert.manage` → `health.alerts.manage`(缺 s),告警管理按钮永远不显示 | +| 56 个基础模块权限码未通过 PermissionDescriptor 声明 | MEDIUM | auth/config/workflow/message/plugin 通过种子数据手动注册,新增易遗漏 | +| 14 个事件无业务消费者 | LOW | 发布到 EventBus 但无后端消费者,SSE 推送仍有价值 | +| Health service 层运行时日志极缺 | HIGH | 26 个 service 文件仅 11 处 tracing,patient_service(949 行)0 处 | +| 基础模块 ErpModule trait 实现度低 | LOW | 5/8 模块使用默认值(auth/config/workflow/message/plugin) | + ## 7. 变更记录 | 日期 | 变更 | |------|------| +| 2026-05-01 | 审计数据更新:模块状态表刷新(772 测试 / 328 路由 / 50 权限码)、审计发现清单 | | 2026-04-26 | 从 CLAUDE.md 迁移:目录结构、模块开发规范(§5)、安全注意事项(§7) | | 2026-04-25 | 全面更新:6 模块已实现状态表、预约 CAS 决策、PII 加密不变量、健康模块集成 | | 2026-04-23 | 重构为 5 节结构,删除 erp-common 引用,精简技术选型表 | diff --git a/wiki/database.md b/wiki/database.md index 39c8409..e16a982 100644 --- a/wiki/database.md +++ b/wiki/database.md @@ -24,7 +24,7 @@ tags: [database, seaorm, migration, multi-tenant] | 文件 | 职责 | |------|------| | `crates/erp-server/migration/src/lib.rs` | Migrator 注册所有迁移 | -| `crates/erp-server/migration/src/m*.rs` | 76 个迁移文件 | +| `crates/erp-server/migration/src/m*.rs` | 96 个迁移文件 | | `crates/erp-core/src/types.rs` | BaseFields 标准字段定义 | ### 迁移命名规则 @@ -34,7 +34,7 @@ m{YYYYMMDD}_{6位序号}_{描述}.rs 例: m20260410_000001_create_tenant.rs ``` -### 当前表概览(67+ 张) +### 当前表概览(70+ 张) | 模块 | 表 | |------|-----| @@ -145,6 +145,7 @@ m{YYYYMMDD}_{6位序号}_{描述}.rs | 日期 | 变更 | |------|------| +| 2026-05-01 | 更新至 96 迁移,刷新迁移文件数 | | 2026-04-28 | 更新至 76 迁移,新增设备采集/告警/RLS/审计哈希链/盲索引/Dead Letter/透析处方等 19 个迁移 | | 2026-04-26 | 更新至 72 迁移、67+ 表,新增积分商城/透析/诊断/内容管理/线下活动/PII 加密扩展等 22 个迁移 | | 2026-04-25 | 更新至 50 迁移、48 表,新增健康模块迁移(m000042-m000050)和 18 张健康业务表 | diff --git a/wiki/erp-core.md b/wiki/erp-core.md index ca0057d..75ecfb2 100644 --- a/wiki/erp-core.md +++ b/wiki/erp-core.md @@ -104,9 +104,36 @@ ErpModule trait → ModuleRegistry::register() → ⚠️ EventBus 当前为内存 broadcast,outbox 持久化通过后台任务实现 ⚠️ 微信注册路径的 display_name 需调用 `sanitize_string()` 防止 XSS +### 2026-04-30 审计发现 + +**事件系统评分**: + +| 检查项 | 评分 | 说明 | +|--------|------|------| +| 事件定义完整性 | 95% | 25/27 常量有发布者(2 个 KNOWN 未实现) | +| 消费者覆盖率 | 44% | 11/25 事件有活跃消费者 | +| Payload 一致性 | 100% | 抽样 5 个全部一致 | +| 幂等性保证 | 100% | 所有消费者使用 `is_event_processed` 检查 | +| 死信处理 | 100% | 消费失败自动进入 dead_letter_event 表 | + +**错误处理评分**: + +| 检查项 | 评分 | 说明 | +|--------|------|------| +| 错误变体覆盖 | 95% | 8 AppError + 37 领域错误(HealthError 26 + AiError 11) | +| Handler 错误传播 | 100% | 统一 `?` + IntoResponse,无手动 match | +| PII 错误安全 | 100% | Internal 错误消息对外隐藏 | +| SSE 挂起风险 | 100% | Provider 不可用不会挂起,有完整清理 | +| 生产 unwrap() 安全性 | 95% | 2 处中等风险(PluginHost::db + 信号量 acquire) | + +**审计日志**:140 处调用 / 33 文件 / SHA256 哈希链 / 变更快照 + +**运行时日志缺口**:health service 层仅 11 处 tracing(26 个文件),运维排查困难 + ## 5. 变更记录 | 日期 | 变更 | |------|------| +| 2026-05-01 | 审计结果更新:事件系统 44% 消费者覆盖率 / 错误处理 95% / 审计日志 140 处 / 运行时日志不足 | | 2026-04-25 | 添加 erp-health 集成契约、健康模块事件、sanitize 模块引用 | | 2026-04-23 | 重构为 5 节结构,更新为已完全集成状态 | diff --git a/wiki/erp-health.md b/wiki/erp-health.md index 99e3cfa..c967c8f 100644 --- a/wiki/erp-health.md +++ b/wiki/erp-health.md @@ -73,7 +73,7 @@ crates/erp-health/ | 积分商城 | points_account, points_rule, points_product, points_order, points_transaction, points_checkin | | 线下活动 | offline_event, offline_event_registration | -### 权限码(22 个) +### 权限码(39 个) | 权限码 | 说明 | |--------|------| @@ -87,19 +87,16 @@ crates/erp-health/ | `health.articles.review` | 文章审核 | | `health.points.list` / `health.points.manage` | 积分查看/管理 | | `health.device-readings.list` / `health.device-readings.manage` | 设备数据查看/管理 | +| `health.devices.list` / `health.devices.manage` | 设备查看/管理 | | `health.alerts.list` / `health.alerts.manage` | 告警查看/管理 | | `health.alert-rules.list` / `health.alert-rules.manage` | 告警规则查看/管理 | - -| 权限码 | 说明 | -|--------|------| -| `health.patient.list` / `health.patient.manage` | 患者查看/管理 | -| `health.health-data.list` / `health.health-data.manage` | 健康数据查看/管理 | -| `health.appointment.list` / `health.appointment.manage` | 预约查看/管理 | -| `health.follow-up.list` / `health.follow-up.manage` | 随访查看/管理 | -| `health.consultation.list` / `health.consultation.manage` | 咨询查看/管理 | -| `health.doctor.list` / `health.doctor.manage` | 医护查看/管理 | -| `health.articles.list` / `health.articles.manage` | 文章查看/管理 | -| `health.articles.review` | 文章审核 | +| `health.critical-alerts.list` / `health.critical-alerts.manage` | 危急值告警查看/管理 | +| `health.critical-value-thresholds.list` / `health.critical-value-thresholds.manage` | 危急值阈值查看/管理 | +| `health.follow-up-templates.list` / `health.follow-up-templates.manage` | 随访模板查看/管理 | +| `health.daily-monitoring.list` / `health.daily-monitoring.manage` | 日常监测查看/管理 | +| `health.consent.list` / `health.consent.manage` | 知情同意查看/管理 | +| `health.medication-records.list` / `health.medication-records.manage` | 用药记录查看/管理 | +| `health.medication-reminders.list` / `health.medication-reminders.manage` | 用药提醒查看/管理 | ### 集成契约 @@ -236,6 +233,34 @@ draft → pending_review → published → draft (撤回) | 健康趋势图 ECharts | P1 | 小程序已有 echarts 集成,Web 端待接入 | | 咨询导出 Excel | P2 | 后端已有 `rust_xlsxwriter` 依赖,导出端点已实现 | +### 2026-04-30 审计发现 + +**功能域评分**(审计报告 8 个域): + +| 域 | 评分 | 关键问题 | +|----|------|---------| +| 患者管理 | 93% | 健康摘要仅 MP,家庭医生管理仅 Web | +| 健康数据 | 85% | 小程序丢失晚间血压/体温/血氧字段 | +| 预约管理 | 95% | Web/MP 基本对齐 | +| 随访管理 | 88% | MP 仅列表+创建 | +| 咨询管理 | 94% | 高度对齐 | +| 内容管理 | 86% | MP 仅只读 published 文章 | +| 积分商城 | 90% | 角色分叉正常 | +| 告警系统 | 87% | 前端权限码拼写错误(`alert` vs `alerts`) | + +**关键审计发现**: + +| 发现 | 严重性 | 说明 | +|------|--------|------| +| 告警管理按钮不显示 | CRITICAL | 前端 `health.alert.manage` 缺 s,应为 `health.alerts.manage` | +| 小程序晚间血压丢失 | CRITICAL | indicator_type 固定映射 `*_morning`,`*_evening` 从未写入 | +| 小程序透析管理缺失 | HIGH | 后端 12 路由完整,小程序 0 入口 | +| 小程序知情同意缺失 | HIGH | 后端完整,小程序 0 入口 | +| 运行时日志不足 | HIGH | 26 个 service 仅 11 处 tracing | +| 14 事件无消费者 | LOW | 发布到 EventBus,SSE 推送仍有价值 | +| DTO 覆盖率 | 100% | 105 个 DTO 完整覆盖 23 个 handler | +| 调用链连通性 | 100% | Handler→Service→Entity 全部连通 | + ### 全链路验证结果(2026-04-25) | 链路 | API | 前端 UI | 状态 | @@ -252,6 +277,7 @@ draft → pending_review → published → draft (撤回) | 日期 | 变更 | |------|------| +| 2026-05-01 | 审计数据更新:权限码 22→39、审计发现(2 CRITICAL + 3 HIGH)、功能域评分、DTO/调用链 100% | | 2026-04-28 | 全面数据刷新:44 实体(+10 告警/设备/随访模板/体征小时聚合等)、21 handler、22 权限、25+ Web 路由、事件系统完善(25 发布/6 消费者)、3 个后台任务、PiiCrypto 迁移到 erp-core | | 2026-04-26 | 全面更新:34 实体(+13 积分/透析/诊断/日常监测/线下活动/危急值/知情同意)、16 handler、stats 统计端点、validation 统一模块(83 测试)、PII 加密扩展(doctor_profile/dialysis_record/lab_report/diagnosis key_version) | | 2026-04-26 | 新增内容管理:article_category/article_tag/article_article_tag/article_revision 4 实体、审核状态机 | diff --git a/wiki/frontend.md b/wiki/frontend.md index 60f2b18..5a9b31d 100644 --- a/wiki/frontend.md +++ b/wiki/frontend.md @@ -221,6 +221,19 @@ React 19.2.4 / Ant Design 6.3.5 / React Router 7.14.0 / Zustand 5.0.12 / Vite 8. | `pages/health/components/StatusTag.test.tsx` | 状态标签渲染 | | `utils/exprEvaluator.test.ts` | 表达式求值 | +> ⚠️ **审计发现**:Web 前端 163 个文件仅 10 个测试(5 单元 + 5 E2E),测试覆盖率约 5%。小程序完全无测试。详见 `docs/audits/07-test-coverage.md`。 + +### 2026-04-30 审计发现 + +| 发现 | 严重性 | 说明 | +|------|--------|------| +| 告警管理按钮永远不显示 | CRITICAL | AlertList.tsx 使用 `health.alert.manage`(单数),后端声明 `health.alerts.manage`(复数),AuthButton 隐藏 | +| AI 分析 SSE 无 UI 入口 | MEDIUM | 4 个 SSE 端点(vital-signs/lab-report/health-trend/health-summary)前端未调用 | +| SSE 重连无指数退避 | MEDIUM | 依赖浏览器原生 EventSource,固定 3 秒间隔 | +| 前端测试极低 | MEDIUM | 163 文件仅 10 个测试 | +| 前端路由级权限控制缺失 | LOW | 健康模块路由无前端权限守卫,依赖后端 403 | +| AuthButton 覆盖率 26% | LOW | 13/50 声明权限码有 AuthButton,其余依赖 API 403 | + ### 插件页面系统 插件通过 `plugin.toml` schema 声明页面,前端根据 schema 动态生成: @@ -259,6 +272,7 @@ ws://localhost:5174/ws/* → ws://localhost:3000/* (WebSocket) | 日期 | 变更 | |------|------| +| 2026-05-01 | 审计发现更新:CRITICAL 权限码拼写错误(alert→alerts)、前端测试极低、AI SSE 无入口 | | 2026-04-28 | UI/UX 重构 Phase 5(小程序端 8 项优化):首页健康资讯+空状态引导、Hub sparkline bar+打卡合并、日常监测 3 分组折叠+异常高亮、预约时段灰显、咨询消息日期分组+图片预览、医护异常横幅+搜索、趋势图骨架屏 | | 2026-04-28 | UI/UX 重构 Phase 4:4 个表单 Modal→DrawerForm(患者 4 分组/预约 3 分组+排班校验/随访 2 分组/积分商品 2 分组) | | 2026-04-28 | UI/UX 重构 Phase 3:10 个列表页统一迁移至 PageContainer + usePaginatedData + EntityName + 共享格式化工具,移除手动 isDark 处理 | diff --git a/wiki/index.md b/wiki/index.md index 281fc7e..e4bb0cb 100644 --- a/wiki/index.md +++ b/wiki/index.md @@ -8,17 +8,22 @@ |------|-----| | Rust crate | 18 个(erp-core + 5 基础业务 + erp-health + erp-ai + erp-dialysis + erp-plugin + 5 插件 + erp-plugin-prototype) | | 数据库表 | 30 基础表 + 44 健康业务表 + 3 AI 表(已实现) | -| 数据库迁移 | 76 个 | +| 数据库迁移 | 96 个 | +| 后端路由 | 328 个(8 公开 + 320 受保护) | | 核心模块 | 5 基础 (auth/config/workflow/message/plugin) + 3 业务 (health + ai + dialysis) | -| erp-health 实体 | 44 个 Entity(~21k 行 Rust) | +| erp-health 实体 | 45 个 Entity(~21k 行 Rust) | | erp-ai 实体 | 3 个 Entity(1.7k 行 Rust) | | Web 前端 | 92 TSX + 71 TS = 163 个源文件(含 25+ 健康路由页面 + 11 健康组件) | | 微信小程序 | Taro 4.2 + React 18,40 个页面(31 患者端 + 9 医护端),5 个 TabBar | | 前端单元测试 | 5 个(vitest)+ 5 E2E spec(playwright) | -| 后端测试 | 225 单元 + 159 集成(含 18 个健康模块集成测试文件) | -| 总代码量 | Rust ~77k 行(459 源文件)+ Web 前端 163 文件 + 小程序 125 文件 | +| 后端测试 | 611 单元 + 153 集成 = 772 个函数(97.5% 通过率) | +| 总代码量 | Rust ~77k 行(462 源文件)+ Web 前端 163 文件 + 小程序 125 文件 | +| 事件系统 | 25 事件类型 / 44 发布处 / 14 消费者 | +| DTO | 105 个结构体(17 文件) | +| 权限码 | 50 声明(health 39 + ai 6 + dialysis 5)+ 56 基础模块手动注册 | | API 文档 | `http://localhost:3000/api/docs/openapi.json` | | Git 提交 | 409 次 | +| 审计状态 | 2026-04-30 全系统审计完成(83% 总体完成度) | | UI/UX 重构 | Phase 1-5 完成(6 共享组件 + 4 角色仪表盘 + 个人统计数据 + 表单抽屉 + 小程序优化) | ## 症状导航 @@ -45,6 +50,9 @@ | MCP token 注入后仍 401 | [[miniprogram]] MCP 联调 §6.1 | 用了生产构建 | dev 构建(`NODE_ENV=development`)+ 空密钥 | | 积分商城 Tab 页空白 | [[miniprogram]] 待优化 | 未关联患者档案 | 需增加降级 UI 引导建档 | | MCP 批量审计页面栈溢出 | [[miniprogram]] MCP 联调 §6.6 | `navigateTo` 超 10 层 | 改用 `reLaunch` 逐页测试 | +| 告警管理按钮不显示 | [[frontend]] 权限码拼写 | AlertList.tsx | `health.alert.manage` → `health.alerts.manage`(缺 s) | +| 小程序晚间血压丢失 | [[miniprogram]] 体征录入 | indicator_type 映射 | **已修复:** 新增 `blood_pressure_evening` 类型,录入页+日常监测页+后端+测试全覆盖 | +| AI 分析 SSE 无 UI 入口 | [[erp-health]] AI 分析 | 前端未调用 | 4 个 SSE 端点无管理界面触发 | ## 模块导航 @@ -71,7 +79,7 @@ ### 基础设施 - [[infrastructure]] — 连接信息 · 环境变量 · 一键启动 (**单一真相源**) -- [[database]] — SeaORM 迁移 · 多租户表结构(76 迁移) +- [[database]] — SeaORM 迁移 · 多租户表结构(96 迁移) - [[frontend]] — React 19 SPA · 健康管理页面(25+ 路由 + 11 组件) - [[testing]] — 验证清单 · 测试分布 · 性能基准 @@ -99,6 +107,15 @@ | UI/UX 重构设计规格 | `docs/superpowers/specs/2026-04-28-ui-ux-overhaul-design.md` | | UI/UX 重构实施计划 | `docs/superpowers/plans/2026-04-28-ui-ux-overhaul-plan.md` | | 实施计划(全量) | `docs/superpowers/plans/` (27 份) | +| 全系统审计报告 | `docs/audits/08-audit-report-2026-04-30.md`(83% 总体完成度,2 CRITICAL + 3 HIGH) | +| 审计基线快照 | `docs/audits/00-baseline-snapshot.md` | +| 审计功能清单 | `docs/audits/01-feature-inventory.md`(328 路由三端映射矩阵) | +| 审计后端完整性 | `docs/audits/02-backend-integrity.md`(100% 调用链连通) | +| 审计事件系统 | `docs/audits/03-event-system.md`(25 事件 / 14 消费者 / 100% payload 一致) | +| 审计参数配置 | `docs/audits/04-parameter-config.md`(105 DTO / 50 权限码 / 数据映射缺口) | +| 审计差距模式 | `docs/audits/05-gap-patterns.md`(5 种模式,透析/知情同意 MP 缺失) | +| 审计错误处理 | `docs/audits/06-error-handling.md`(SSE 不挂起 / 日志 30% 覆盖) | +| 审计测试覆盖 | `docs/audits/07-test-coverage.md`(772 测试 / 前端极低 / AI 无集成测试) | | 讨论记录 | `docs/discussions/` (10 份) | | 协作规则 | `CLAUDE.md` | | 插件制作指南 | `.claude/skills/plugin-development/SKILL.md` | diff --git a/wiki/miniprogram.md b/wiki/miniprogram.md index dccee90..60e47c3 100644 --- a/wiki/miniprogram.md +++ b/wiki/miniprogram.md @@ -290,6 +290,35 @@ secret = "<通过环境变量 ERP__WECHAT__SECRET 设置>" | URL 拼接构建查询参数 | P2 | `request.ts` 已支持 `buildQuery(params)` 但内部使用 | | 生产配置 | P2 | `urlCheck`/`minified` 需区分环境 | +### 2026-04-30 审计发现 + +**三端对齐差距**(小程序 API 覆盖 76 个,Web 235 个,后端 328 个): + +| 发现 | 严重性 | 说明 | +|------|--------|------| +| ~~晚间血压数据永久丢失~~ | ~~CRITICAL~~ **已修复** | 新增 `blood_pressure_evening` indicator_type,小程序录入页 + 日常监测页 + 后端 service + 集成测试均已覆盖 | +| 透析管理完全无入口 | HIGH | 后端 12 路由完整,小程序 0 个 API 调用、0 个页面 | +| 知情同意完全无入口 | HIGH | 后端完整,小程序 0 入口 | +| 体温/血氧未映射 | MEDIUM | `body_temperature`/`spo2` 无 indicator_type | +| 健康记录小程序无入口 | MEDIUM | 患者移动端无法查看健康档案 | +| 诊断记录小程序无入口 | MEDIUM | 患者移动端无法查看诊断 | +| 小程序完全无测试 | HIGH | 40 个页面全靠手工验证 | + +**功能域完成度**(小程序端): + +| 功能域 | 完成度 | 关键差距 | +|--------|--------|---------| +| 咨询管理 | 95% | 无导出(预期) | +| 预约管理 | 90% | 基本对齐 | +| 随访管理 | 70% | 仅列表+创建 | +| 患者管理 | 85% | 无删除(预期) | +| 健康数据 | 60% | 丢失晚间血压/体温/血氧 | +| 告警系统 | 60% | 仅查看+处理 | +| 统计仪表盘 | 30% | 仅医护端 3 个统计 | +| AI 分析 | 30% | 仅历史查看 | +| 透析管理 | 0% | 完全空白 | +| 知情同意 | 0% | 完全空白 | + ### 注意事项 - `Taro.login()` 的 code 一次性使用,每次调用会返回新 code @@ -514,6 +543,7 @@ main(); | 日期 | 变更 | |------|------| +| 2026-05-01 | 审计发现更新:CRITICAL 晚间血压丢失 / HIGH 透析+知情同意完全空白 / 功能域完成度矩阵 | | 2026-04-28 | **全面性能优化**:分包加载(6 分包,主包 517KB→275KB,vendors 192KB→36KB);GET 请求去重+60s TTL 缓存;points store 集中积分/签到状态;todaySummary 60s TTL;7 组件 React.memo;TrendChart 双重渲染修复;restoreAuth 提升 App 级别;prod terser drop_console;crypto-js 按需引入 | | 2026-04-27 | **移除 echarts-taro3-react**:内嵌 Taro 3 + React 16 导致 webpack 模块加载失败,改为自定义 `EcCanvas` 组件 + `echarts/core` 按需引入;更新版本说明 + 历史教训 + 组件列表 | | 2026-04-27 | **MCP 联调全面更新**:§6.1 增加 dev 构建前置条件,§6.4 重写为明文 token 注入法(评估两种方案),§6.6 补充 7 条已知限制,新增 §6.7 审计脚本说明 + §6.8 实测审计结果(40/40 页面通过);§5 补充 4 条审计发现 | diff --git a/wiki/testing.md b/wiki/testing.md index 9be8b76..d1bd07e 100644 --- a/wiki/testing.md +++ b/wiki/testing.md @@ -19,20 +19,22 @@ tags: [testing, verification] ### 测试分布 -| Crate | 单元测试 | 集成测试 | 覆盖评估 | -|-------|---------|---------|---------| -| erp-health (validation) | 104 | 18 文件 ~159 | 良好 | -| erp-core | 42 | - | 良好(crypto/module/error/rbac/sanitize/types) | -| erp-auth | 38 | 3 | 中等 | -| erp-plugin | 31 | 2 | 中等 | -| erp-dialysis | 10 | - | 中等 | -| erp-config | **0** | - | ⚠️ 缺失 | -| erp-message | **0** | - | ⚠️ 缺失 | -| erp-workflow | **0** | - | ⚠️ 缺失 | -| erp-ai | **0** | - | ⚠️ 缺失 | -| **后端总计** | **225** | **159** | | -| 前端 (vitest) | 5 | - | 健康常量/useThemeMode/useDebouncedValue/StatusTag/exprEvaluator | -| E2E (playwright) | - | 5 spec | 登录/用户管理/插件/租户隔离 | +| Crate | 单元测试 | 集成测试 | 总计 | 通过率 | 覆盖评估 | +|-------|---------|---------|------|--------|---------| +| erp-core | 74 | - | 74 | 100% | 良好(crypto/module/error/rbac/sanitize/types) | +| erp-auth | 41 | 3 | 44 | 100% | 中等 | +| erp-config | 78 | - | 78 | 100% | 良好 | +| erp-workflow | 63 | 4 | 67 | 100% | 良好 | +| erp-message | 72 | - | 72 | 100% | 中等(缺集成测试) | +| erp-health | 159 | 144 | 303 | 97% | 良好(9 个因 blind_indexes 表失败) | +| erp-ai | 36 | - | 36 | 100% | 中等(缺集成测试) | +| erp-dialysis | 10 | 15 | 25 | 93% | 中等(2 个失败待修复) | +| erp-plugin | 78 | 2 | 80 | 100% | 良好 | +| erp-server | - | 153 | 153 | 94% | 良好(API 集成测试) | +| **后端总计** | **611** | **153** | **772** | **97.5%** | | +| 前端 (vitest) | 5 | - | - | - | 健康常量/useThemeMode/useDebouncedValue/StatusTag/exprEvaluator | +| E2E (playwright) | - | 5 spec | - | - | 登录/用户管理/插件/租户隔离 | +| 小程序 | 0 | 0 | 0 | N/A | ⚠️ 完全无测试 | ### 编译 + 测试 @@ -130,12 +132,23 @@ SELECT count(*) FROM patient WHERE deleted_at IS NULL; -- 患者数量 | 领域 | 当前状态 | 优先级 | |------|---------|--------| -| erp-config 单元测试 | **0 测试** | P1 | -| erp-message 单元测试 | **0 测试** | P1 | -| erp-workflow 单元测试 | **0 测试**(BPMN 解析 + Token 驱动) | P1 | -| erp-ai 单元测试 | **0 测试**(Prompt 管理 + 脱敏) | P2 | -| 前端健康模块组件测试 | 仅 StatusTag + exprEvaluator | P2 | -| E2E 健康模块测试 | 无 | P2 | +| erp-ai 集成测试 | **0 测试**(SSE 流 + 外部 API 无法回归) | P0 | +| 小程序测试 | **0 测试**(40 个页面全靠手工验证) | P1 | +| erp-message 集成测试 | **0 测试**(SSE 推送连接/重连未测试) | P1 | +| Web 前端测试 | 仅 10 个(163 文件的 API/组件/路由无覆盖) | P2 | +| erp-dialysis | 93% 通过率(2 个测试失败待修复) | P2 | +| blind_indexes 迁移 | 9 个测试因表缺失失败(环境配置问题) | P3 | + +### 测试覆盖良好的领域 + +| 领域 | 测试特点 | +|------|---------| +| 患者 CRUD | 完整集成测试覆盖创建/更新/删除/列表 | +| PII 加密 | 独立测试文件验证加密/解密/盲索引/跨租户隔离 | +| 预约并发 | CAS 原子操作测试,验证乐观锁和排班满额 | +| 工作流引擎 | BPMN 解析 + Token 驱动 + 任务分配测试 | +| 权限 RBAC | 角色/权限/菜单关联测试 | +| 插件系统 | WASM 运行时 + 动态表 CRUD + 租户隔离 | ### 活跃问题 @@ -158,6 +171,7 @@ SELECT count(*) FROM patient WHERE deleted_at IS NULL; -- 患者数量 | 日期 | 变更 | |------|------| +| 2026-05-01 | 审计数据全面刷新:772 测试(611 单元 + 153 集成)/ 97.5% 通过率 / 9 个因 blind_indexes 失败 / 前端仅 10 个测试 / 小程序 0 测试 | | 2026-04-25 | 全面更新:93 后端测试 + 3 前端测试、健康模块全链路验证结果、测试覆盖空白清单 | | 2026-04-24 | 添加微信小程序验证步骤 | | 2026-04-23 | 重构为 5 节结构,去除与 infrastructure.md 重复 |