Files
hms/docs/event-registry.md
iven 30a578ee00
Some checks failed
CI / rust-check (push) Has been cancelled
CI / rust-test (push) Has been cancelled
CI / frontend-build (push) Has been cancelled
CI / security-audit (push) Has been cancelled
fix(health): 客户试用前全局审计修复 — P0 权限旁路 + API 路径 + 事件注册
P0 阻塞修复:
- 修复 PrivateRoute 权限旁路: p.startsWith('auth.') 匹配不到任何权限码,
  改为基于实际权限码的路由级检查 (user.manage/role.manage/organization.manage)
- 修复 deviceReadings API 路径: /patients/{id}/device-readings/daily 改为
  /vital-signs/daily?patient_id=, 消除 404

P1 重要修复:
- 补全事件注册表: 新增 auth(11) + config(8) + workflow(4) + plugin(2) = 25 条
- article_article_tag 联表新增 tenant_id + deleted_at + 审计列 (迁移 107)
- vital_signs_hourly 新增 deleted_at 支持软删除过滤 (迁移 108)
- 6 个页面添加权限守卫 (AlertDashboard/AlertRuleList/DeviceManage/
  AiAnalysisList/AiUsageDashboard)
- DialysisModule 声明 auth 依赖
2026-05-04 11:02:25 +08:00

192 lines
8.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# HMS 事件注册表
> 生成日期: 2026-05-04 | 全系统审计后更新
## 概述
所有模块间通信通过 EventBus + DomainEvent 实现outbox 模式)。本文档记录每个事件类型的发布者、消费者和当前状态。
### 状态标记
- OK: 发布者和消费者均正常
- FIRE-AND-FORGET: 发布者正常,消费者为日志记录(无业务逻辑)
- PENDING: 常量已定义但功能未实现
---
## 事件清单
### 预约管理
| 事件类型 | 发布者 | 消费者 | 状态 |
|---------|--------|--------|------|
| `appointment.created` | appointment_service.rs | erp-message (预约创建通知) | OK |
| `appointment.confirmed` | appointment_service.rs | erp-message (预约确认通知患者) | OK |
| `appointment.cancelled` | appointment_service.rs | erp-message (预约取消通知) | OK |
| `appointment.reminder` | appointment_service.rs (后台任务) | erp-message (预约提醒) | OK |
### 咨询管理
| 事件类型 | 发布者 | 消费者 | 状态 |
|---------|--------|--------|------|
| `consultation.opened` | consultation_service.rs | erp-message (医生新会话通知) | OK |
| `consultation.closed` | consultation_service.rs | erp-message (患者会话结束通知) | OK |
| `consultation.new_message` | consultation_service.rs | erp-message (医生新消息通知) | OK |
### 随访管理
| 事件类型 | 发布者 | 消费者 | 状态 |
|---------|--------|--------|------|
| `follow_up.created` | follow_up_service.rs | erp-message (被分配人新任务通知) | OK |
| `follow_up.completed` | follow_up_service.rs | erp-message (患者随访完成通知) | OK |
| `follow_up.overdue` | follow_up_service.rs (后台6h扫描) | erp-message (逾期提醒) | OK |
### 化验与健康数据
| 事件类型 | 发布者 | 消费者 | 状态 |
|---------|--------|--------|------|
| `lab_report.uploaded` | health_data_service.rs | erp-message (审计日志) | FIRE-AND-FORGET |
| `lab_report.reviewed` | health_data_service.rs | erp-message (患者审核完成通知) | OK |
| `health_data.critical_alert` | health_data_service.rs | erp-message (医生危急值通知) | OK |
| `daily_monitoring.created` | daily_monitoring_service.rs | erp-message (审计日志) | FIRE-AND-FORGET |
### 患者管理
| 事件类型 | 发布者 | 消费者 | 状态 |
|---------|--------|--------|------|
| `patient.created` | patient_service.rs | erp-health event.rs (欢迎通知) | OK |
| `patient.updated` | patient_service.rs | erp-message (审计日志) | FIRE-AND-FORGET |
| `patient.verified` | — (功能未实现) | — | PENDING |
| `patient.deceased` | — (功能未实现) | — | PENDING |
### 积分系统
| 事件类型 | 发布者 | 消费者 | 状态 |
|---------|--------|--------|------|
| `points.earned` | points_service.rs | erp-message (患者积分到账通知) | OK |
| `points.exchanged` | points_service.rs | erp-message (患者兑换成功通知) | OK |
| `points.expired` | points_service.rs (后台24h清理) | erp-message (患者过期提醒) | OK |
### 内容管理
| 事件类型 | 发布者 | 消费者 | 状态 |
|---------|--------|--------|------|
| `article.published` | article_service.rs | erp-message (审计日志) | FIRE-AND-FORGET |
| `article.rejected` | article_service.rs | erp-message (作者审核驳回通知) | OK |
### 知情同意
| 事件类型 | 发布者 | 消费者 | 状态 |
|---------|--------|--------|------|
| `consent.granted` | consent_service.rs | erp-health event.rs (审计) | OK |
| `consent.revoked` | consent_service.rs | erp-health event.rs (审计) | OK |
### 设备数据
| 事件类型 | 发布者 | 消费者 | 状态 |
|---------|--------|--------|------|
| `device.readings.synced` | device_reading_service.rs | erp-health event.rs (告警引擎评估) | OK |
### 告警系统
| 事件类型 | 发布者 | 消费者 | 状态 |
|---------|--------|--------|------|
| `alert.triggered` | alert_engine.rs | erp-health (告警通知) + alert_aggregator (聚合检测) | OK |
| `alert.aggregated` | alert_aggregator | SSE 推送 (聚合通知) | OK |
### 医生管理
| 事件类型 | 发布者 | 消费者 | 状态 |
|---------|--------|--------|------|
| `doctor.online_status_changed` | doctor_service.rs | erp-message (审计日志) | FIRE-AND-FORGET |
### AI 模块
| 事件类型 | 发布者 | 消费者 | 状态 |
|---------|--------|--------|------|
| `ai.analysis.completed` | erp-ai/handler | erp-health event.rs (透析统计联动) | OK |
| `ai.analysis.failed` | erp-ai/handler | erp-message (医生失败通知) | OK |
| `dialysis.record.created` | erp-dialysis/service | erp-health event.rs (透析统计) | OK |
### 基础设施事件(非健康模块)
| 事件类型 | 发布者 | 消费者 | 状态 |
|---------|--------|--------|------|
| `workflow.task.completed` | erp-workflow | erp-health event.rs | OK |
| `message.sent` | erp-message | erp-health event.rs (日志) | FIRE-AND-FORGET |
| `message.send` (内部命令) | erp-health event.rs | erp-message (消息发送触发) | OK |
### 用户与认证erp-auth
| 事件类型 | 发布者 | 消费者 | 状态 |
|---------|--------|--------|------|
| `user.login` | auth_service.rs:161 | — | FIRE-AND-FORGET |
| `user.created` | user_service.rs:94 | — | FIRE-AND-FORGET |
| `user.deleted` | user_service.rs:284 | erp-workflow (终止用户流程实例) | OK |
| `role.created` | role_service.rs:129 | — | FIRE-AND-FORGET |
| `role.deleted` | role_service.rs:250 | — | FIRE-AND-FORGET |
| `organization.created` | org_service.rs:123 | — | FIRE-AND-FORGET |
| `organization.deleted` | org_service.rs:310 | — | FIRE-AND-FORGET |
| `department.created` | dept_service.rs:141 | — | FIRE-AND-FORGET |
| `department.deleted` | dept_service.rs:350 | — | FIRE-AND-FORGET |
| `position.created` | position_service.rs:109 | — | FIRE-AND-FORGET |
| `position.deleted` | position_service.rs:240 | — | FIRE-AND-FORGET |
### 系统配置erp-config
| 事件类型 | 发布者 | 消费者 | 状态 |
|---------|--------|--------|------|
| `setting.updated` | setting_service.rs:117 | — | FIRE-AND-FORGET |
| `setting.created` | setting_service.rs:163 | — | FIRE-AND-FORGET |
| `dictionary.created` | dictionary_service.rs:121 | — | FIRE-AND-FORGET |
| `dictionary.deleted` | dictionary_service.rs:240 | — | FIRE-AND-FORGET |
| `menu.created` | menu_service.rs:148 | — | FIRE-AND-FORGET |
| `menu.deleted` | menu_service.rs:284 | — | FIRE-AND-FORGET |
| `numbering_rule.created` | numbering_service.rs:142 | — | FIRE-AND-FORGET |
| `numbering_rule.deleted` | numbering_service.rs:276 | — | FIRE-AND-FORGET |
### 工作流引擎erp-workflow
| 事件类型 | 发布者 | 消费者 | 状态 |
|---------|--------|--------|------|
| `process_definition.created` | definition_service.rs:103 | — | FIRE-AND-FORGET |
| `process_definition.published` | definition_service.rs:266 | — | FIRE-AND-FORGET |
| `process_definition.deprecated` | definition_service.rs:325 | — | FIRE-AND-FORGET |
| `process_instance.started` | instance_service.rs:126 | — | FIRE-AND-FORGET |
| `task.completed` | task_service.rs:231 | erp-health (匹配 `workflow.task.completed`) | OK |
| `task.timeout` | module.rs:115 | — | FIRE-AND-FORGET |
### 插件系统erp-plugin
| 事件类型 | 发布者 | 消费者 | 状态 |
|---------|--------|--------|------|
| `plugin.trigger.{manifest_id}.{trigger_name}` | data_service.rs:79 | notification.rs (管理通知) | OK |
| `plugin.config.updated` | service.rs:477 | — | FIRE-AND-FORGET |
| *(WASM 动态事件)* | engine.rs:817 | 动态订阅manifest 声明) | OK |
---
## 统计
| 指标 | 数量 |
|------|------|
| 事件类型总数 | 51 |
| OK完整链路 | 24 |
| FIRE-AND-FORGET仅日志/审计) | 25 |
| PENDING未实现 | 2 |
| erp-health 域事件 | 26 |
| erp-auth 域事件 | 11 |
| erp-config 域事件 | 8 |
| erp-workflow 域事件 | 6 |
| erp-plugin 域事件 | 2+(含动态) |
---
## 后台任务
| 任务 | 间隔 | 模块 | 说明 |
|------|------|------|------|
| 随访逾期扫描 | 6h | erp-health | 标记过期任务并发布 follow_up.overdue |
| 积分过期清理 | 24h | erp-health | 批量过期积分并发布 points.expired |
| 预约提醒 | 1h | erp-health | 扫描明天预约并发布 appointment.reminder |