构建一个通用的规则引擎平台,支持传染病报卡、处方审核、病案质控等多个医疗业务场景,通过可视化界面配置规则,实现业务规则的灵活管理和高效执行。
- 前端: Vue 3.x + Element Plus + Query Builder
- 后端: Spring Boot 2.7.14 + JDK 11 + MyBatis-Plus + Drools
- 数据库: MySQL 8.0+
- 其他: Redis(缓存)、Maven(构建工具)
预计总工期:12周(3个月)
时间: 第1周 负责人: 产品经理 + 技术负责人
任务清单:
- 与业务方确认传染病报卡规则的详细需求
- 梳理处方审核、病案质控等其他业务场景需求
- 确认规则引擎的通用能力边界
- 整理字段元数据清单(诊断、检验、检查、手术等)
- 确认操作符支持范围(包含、不包含、大于、小于、between等)
- 明确权限控制需求
- 输出《需求规格说明书》
时间: 第2周 负责人: 架构师 + 技术负责人
任务清单:
- 设计系统总体架构图
- 设计规则引擎核心架构
- 设计业务适配器接口规范
- 设计数据库表结构(9张核心表)
- 设计API接口规范
- 设计前端组件架构
- 设计Query Builder组件与Drools DRL转换规则
- 制定技术选型方案
- 制定代码规范和开发规范
- 输出《系统架构设计文档》
- 输出《数据库设计文档》
- 输出《接口设计文档》
时间: 第2周 负责人: 运维工程师 + 后端开发
任务清单:
- 搭建开发环境(MySQL、Redis)
- 配置代码仓库(Git)
- 搭建CI/CD流水线
- 创建Spring Boot项目骨架
- 创建Vue 3项目骨架
- 配置MyBatis-Plus代码生成器
- 配置Drools依赖
- 配置Element Plus和相关组件
- 编写项目README和开发文档
时间: 第3周 负责人: 数据库工程师 + 后端开发
任务清单:
- 创建9张核心数据表
- rule_scene(业务场景定义表)
- rule_group(规则组表)
- rule_definition(规则定义表)
- rule_content(规则内容表)
- rule_condition(规则条件表)
- rule_action(规则动作表)
- rule_metadata(规则元数据表)
- rule_execution_log(规则执行记录表)
- rule_version(规则版本表)
- 创建索引和约束
- 准备初始化数据脚本
- 插入场景数据(传染病报卡、处方审核、病案质控)
- 插入元数据(诊断、检验、检查、手术等字段定义)
- 编写数据迁移脚本
时间: 第3-4周 负责人: 后端技术负责人
任务清单:
- 开发核心接口定义
- RuleEngine接口
- BusinessAdapter接口
- ActionHandler接口
- RuleContext、RuleResult等核心数据对象
- 开发规则引擎核心组件
- DroolsRuleEngine实现类
- KieBase缓存管理
- 规则加载和重载机制
- 开发规则编译器(RuleCompiler)
- 条件规则编译(JSON to DRL)
- 决策表规则编译
- 脚本规则编译
- 操作符转换逻辑(EQ、IN、LIKE、BETWEEN等)
- AND/OR条件组合逻辑
- 开发规则验证器(RuleValidator)
- 开发规则执行日志记录器
- 编写单元测试(覆盖率≥80%)
时间: 第5周 负责人: 后端开发工程师
任务清单:
- 开发传染病报卡适配器(InfectiousDiseaseAdapter)
- preProcess数据转换
- postProcess结果转换
- 自定义ActionHandler(生成报卡、发送通知)
- 开发处方审核适配器(PrescriptionAuditAdapter)
- preProcess数据转换
- postProcess结果转换
- 自定义ActionHandler(药品相互作用检查、剂量调整)
- 开发病案质控适配器(MedicalRecordQCAdapter)
- preProcess数据转换
- postProcess结果转换
- 质量评分计算逻辑
- 适配器自动注册机制
- 编写适配器单元测试
时间: 第5-6周 负责人: 后端开发工程师
任务清单:
- 开发规则执行API
- POST /api/rule-engine/execute(规则执行)
- POST /api/rule-engine/batch-execute(批量执行)
- POST /api/rule-engine/test(规则测试)
- POST /api/rule-engine/reload/{sceneCode}(重载缓存)
- 开发规则配置管理API
- POST /api/rule-engine/rule/create(创建规则)
- PUT /api/rule-engine/rule/update/{ruleId}(更新规则)
- DELETE /api/rule-engine/rule/delete/{ruleId}(删除规则)
- GET /api/rule-engine/rule/list(查询规则列表)
- GET /api/rule-engine/rule/{ruleId}(查询规则详情)
- POST /api/rule-engine/rule/copy/{ruleId}(复制规则)
- PUT /api/rule-engine/rule/status/{ruleId}(启用/禁用规则)
- 开发场景管理API
- GET /api/rule-engine/scene/list(场景列表)
- GET /api/rule-engine/metadata/{sceneCode}(场景元数据)
- 开发规则组管理API
- GET /api/rule-engine/group/list(规则组列表)
- POST /api/rule-engine/group/create(创建规则组)
- PUT /api/rule-engine/group/update/{groupId}(更新规则组)
- 开发规则版本管理API
- GET /api/rule-engine/version/list/{ruleId}(版本列表)
- POST /api/rule-engine/version/rollback(版本回滚)
- 开发规则执行日志查询API
- GET /api/rule-engine/log/list(执行日志列表)
- GET /api/rule-engine/log/{traceId}(日志详情)
- 统一异常处理和返回结构
- API文档生成(Swagger/OpenAPI)
- 编写API集成测试
时间: 第6周 负责人: 前端技术负责人
任务清单:
- 搭建Vue 3项目结构(Vite)
- 配置Element Plus
- 配置路由(Vue Router)
- 配置状态管理(Pinia)
- 配置Axios(HTTP请求)
- 开发通用布局组件
- 开发顶部导航栏
- 开发侧边菜单
- 开发面包屑导航
- 开发通用表格组件
- 开发通用表单组件
- 开发通用弹窗组件
- 开发通用分页组件
时间: 第7-8周 负责人: 前端开发工程师
任务清单:
-
规则列表页面(参考原型图rule4.jpg)
- 场景选择下拉框
- 规则搜索框(规则名称、传染病名称)
- 规则列表表格
- 显示规则名称、传染病名称、传染病编码、传染病级别等
- 启用/禁用开关
- 查看详情按钮
- 编辑按钮
- 删除按钮
- 新增规则按钮
- 导入/导出规则功能
- 分页组件
-
规则配置主页面(参考原型图rule1.jpg)
-
基本信息配置区
- 传染病名称(输入框)
- 传染病编码(输入框)
- 传染病级别(下拉框:乙类、丙类等)
- 报卡类型(下拉框)
- 重复报卡规则(天/内满足包含方重复)
- 是否启用(单选框)
-
诊断满足规则配置区
- "或者"/"并且"按钮组(支持逻辑切换)
- 门诊医生站、住院医生站等场景多选框
- 条件组配置区域
- 关联条件下拉(或者/并且)
- 关联因素下拉(诊断名称/诊断编码/诊断码等)
- 匹配符下拉(包含in/左匹配/模糊匹配)
- 匹配值输入(支持多选、自由输入)
- 添加/删除条件按钮
- 新增条件组按钮
- 删除条件组功能
-
满足提示规则配置区(橙色框区域)
- 提示文案输入
- 新增条件组按钮
- 条件组配置(同诊断满足规则)
- 关联条件(并且/或者)
- 关联因素(血常规/白细胞计数、CT/检查所见等)
- 匹配符(大于等于、包含、左匹配等)
- 匹配值(数值或文本输入)
- 添加/删除条件按钮
-
页面底部操作按钮
- 返回按钮
- 重置按钮
- 保存按钮
-
-
Query Builder组件开发(核心组件)
- 条件构建器组件
- 支持AND/OR逻辑切换
- 支持条件组嵌套
- 字段选择下拉(从元数据动态加载)
- 操作符选择下拉(根据字段类型动态变化)
- 值输入组件(支持单值、多值、范围等)
- 条件添加/删除功能
- 条件组添加/删除功能
- 逻辑表达式实时预览(参考rule2.jpg)
- JSON序列化/反序列化
-
字段配置对照实现(参考rule3.jpg)
- 诊断名称/编码:支持包含(in)、不包含(not in)、左匹配、模糊匹配
- 手术名称/编码:同诊断
- 检验项目(定量):支持>、<、>=、<=、between
- 检验项目(定性):支持包含、不包含、可选枚举
- 检验项目(文本):支持包含、不包含
- 检查所见/诊断:支持包含、不包含
- 病理所见/诊断:支持包含、不包含
- 医嘱名称:支持in、not in、左匹配、模糊匹配
-
规则测试对话框
- 输入测试数据表单
- 执行测试按钮
- 展示测试结果
- 展示匹配的规则
- 展示执行日志
-
规则详情/编辑对话框
- 查看模式和编辑模式切换
- 规则基本信息展示/编辑
- 条件详情展示/编辑
- 动作详情展示/编辑
时间: 第8-9周 负责人: 前端开发工程师
任务清单:
-
场景管理页面
- 场景列表
- 场景详情
- 场景元数据配置
-
规则组管理页面
- 规则组树形结构
- 规则组创建/编辑
- 规则组排序
- 执行模式配置(ALL/FIRST)
-
规则版本管理页面
- 版本历史列表
- 版本对比
- 版本回滚
-
规则执行日志页面
- 日志列表查询(按时间、场景、规则等过滤)
- 日志详情查看
- 输入数据展示
- 输出数据展示
- 执行时间统计
-
元数据管理页面
- 字段定义列表
- 字段新增/编辑
- 字段类型配置
- 值域配置
时间: 第9周 负责人: 前端开发 + 后端开发
任务清单:
- 封装API接口调用方法
- 实现请求拦截器(添加token)
- 实现响应拦截器(统一错误处理)
- 前后端联调测试
- 修复联调问题
- 优化用户体验
时间: 第9-10周 负责人: 后端技术负责人
任务清单:
-
JSON to DRL转换器完善
- 条件组AND/OR逻辑转换
- 嵌套条件组处理
- 各种操作符转换(in、not in、包含、左匹配、模糊匹配、between等)
- 数据类型转换(String、Number、Boolean、Date、Array)
- 特殊字符转义处理
-
Drools规则模板开发
- 条件规则模板
- 决策表规则模板
- 脚本规则模板
-
规则语法验证
- DRL语法校验
- 字段存在性校验
- 数据类型匹配校验
- 循环依赖检测
-
规则编译优化
- 增量编译支持
- 规则缓存策略
- 编译性能优化
-
编写转换测试用例(覆盖所有操作符)
时间: 第10周 负责人: 后端开发 + 前端开发
任务清单:
- 配置传染病报卡场景元数据
- 诊断字段(ICD-10编码)
- 检验字段(HIV、乙肝、梅毒等)
- 检查字段(CT、X光等)
- 患者字段(年龄、性别等)
- 创建示例规则
- 艾滋病报卡规则(参考原型图rule1.jpg)
- 新冠肺炎报卡规则
- 结核病报卡规则
- 手足口病报卡规则
- 实现报卡生成逻辑 。- [ ] 实现报卡通知发送
- 业务功能测试
时间: 第10周 负责人: 后端开发 + 前端开发
任务清单:
- 配置处方审核场景元数据
- 药品字段
- 诊断字段
- 患者字段(年龄、体重、肝肾功能等)
- 创建示例规则
- 超剂量用药规则
- 药品相互作用规则
- 禁忌症规则
- 适应症不符规则
- 实现审核问题提示
- 实现用药建议生成
- 业务功能测试
时间: 第10周 负责人: 后端开发 + 前端开发
任务清单:
- 配置病案质控场景元数据
- 病案字段(诊断、手术、费用等)
- 质控指标字段
- 创建示例规则
- 主要诊断缺失规则
- 手术记录完整性规则
- 药占比超标规则
- 平均住院日超标规则
- 实现质量评分计算
- 实现改进建议生成
- 业务功能测试
时间: 第11周 负责人: 测试工程师 + 开发团队
任务清单:
-
功能测试
- 规则创建、编辑、删除测试
- 规则执行测试(单条、批量)
- 规则缓存测试
- 规则版本管理测试
- 各业务场景端到端测试
-
性能测试
- 规则编译性能测试
- 规则执行性能测试(目标:<100ms)
- 批量执行性能测试(1000条/s)
- 并发测试(100并发用户)
- 缓存命中率测试
-
压力测试
- 大数据量规则测试(1000+规则)
- 复杂规则测试(10层嵌套)
- 长时间运行稳定性测试
-
异常测试
- 规则语法错误测试
- 数据格式异常测试
- 网络异常测试
- 数据库异常测试
-
编写测试报告
时间: 第11周 负责人: 开发团队
任务清单:
-
性能优化
- SQL语句优化(添加索引、优化查询)
- 规则编译优化(缓存DRL)
- 接口响应时间优化
- 前端渲染性能优化
- 打包体积优化
-
代码优化
- 代码重构
- 代码审查
- 统一代码风格
- 添加代码注释
-
用户体验优化
- 加载状态优化
- 错误提示优化
- 表单验证优化
- 操作提示优化
- 响应式布局优化
时间: 第11-12周 负责人: 全体团队
任务清单:
-
用户文档
- 用户操作手册
- 规则配置指南
- 常见问题FAQ
- 视频教程录制
-
开发文档
- API接口文档
- 数据库设计文档
- 架构设计文档
- 业务适配器开发指南
- 部署运维文档
-
测试文档
- 测试用例文档
- 测试报告
- 性能测试报告
时间: 第12周 负责人: 运维工程师 + 开发团队
任务清单:
-
准备生产环境
- 服务器配置
- 数据库配置(主从复制)
- Redis集群配置
- Nginx配置(反向代理、负载均衡)
- 防火墙配置
-
数据迁移
- 生产数据库初始化
- 元数据导入
- 示例规则导入
-
应用部署
- 后端应用部署(Docker)
- 前端应用部署
- 配置域名和SSL证书
-
监控配置
- 应用性能监控(APM)
- 日志监控(ELK)
- 告警配置
-
灰度发布
- 小范围用户试用
- 收集反馈
- 问题修复
- 全量发布
-
上线验证
- 生产环境功能验证
- 性能验证
- 安全验证
| 角色 | 人数 | 主要职责 |
|---|---|---|
| 产品经理 | 1 | 需求管理、产品设计、验收测试 |
| 架构师 | 1 | 架构设计、技术选型、技术攻关 |
| 后端开发(Java) | 2-3 | 后端服务开发、API开发、Drools集成 |
| 前端开发(Vue) | 2 | 前端页面开发、Query Builder组件开发 |
| 测试工程师 | 1-2 | 测试用例编写、功能测试、性能测试 |
| 运维工程师 | 1 | 环境搭建、部署上线、监控运维 |
| 合计 | 8-10人 |
- 负责需求分析和产品设计
- 组织需求评审和产品验收
- 协调业务方沟通
- 跟踪项目进度
- 负责系统架构设计
- 制定技术方案和开发规范
- 解决技术难点
- 代码审查和质量把控
- 核心模块开发(规则引擎、编译器)
- 实现规则引擎核心功能
- 开发业务适配器
- 实现API接口
- 编写单元测试
- 性能优化
- 实现规则配置界面
- 开发Query Builder组件
- 实现规则列表、日志查询等管理页面
- 前后端联调
- 用户体验优化
- 编写测试用例
- 执行功能测试、集成测试
- 执行性能测试、压力测试
- 问题跟踪和回归测试
- 输出测试报告
- 搭建开发、测试、生产环境
- 配置CI/CD流水线
- 应用部署和监控
- 数据库维护
- 故障处理
难点:
- 前端可视化配置转换为Drools规则语言
- 支持复杂的AND/OR嵌套逻辑
- 多种操作符的准确转换
解决方案:
- 设计JSON中间格式,前端生成JSON,后端解析
- 实现递归算法处理嵌套条件组
- 建立操作符映射表,覆盖所有场景
- 充分的单元测试保证转换正确性
难点:
- 规则修改后需要重新编译
- 保证缓存一致性
- 不影响正在执行的规则
解决方案:
- 使用KieBase缓存已编译的规则
- 规则更新时通知所有节点重载
- 使用版本号机制,新规则不影响旧会话
- 提供手动刷新缓存接口
难点:
- 不同业务场景数据结构差异大
- 业务逻辑各不相同
- 保持规则引擎的通用性
解决方案:
- 使用适配器模式
- 定义统一的数据接口(Map结构)
- 业务适配器负责数据转换
- 通过元数据配置实现灵活扩展
难点:
- 大量规则执行性能
- 复杂规则编译耗时
- 高并发场景响应时间
解决方案:
- 规则预编译和缓存
- 使用无状态会话(Stateless Session)
- 合理设计规则优先级(salience)
- 批量执行使用并行流
- 添加Redis缓存热点数据
- 数据库读写分离
| 阶段 | 时间节点 | 里程碑 | 主要交付物 |
|---|---|---|---|
| 第一阶段 | 第2周末 | 需求与架构设计完成 | 需求规格说明书、架构设计文档、数据库设计文档、接口设计文档 |
| 第二阶段 | 第2周末 | 开发环境就绪 | 项目骨架、开发环境、CI/CD流水线 |
| 第三阶段 | 第6周末 | 后端核心功能完成 | 规则引擎核心代码、业务适配器、API接口、单元测试 |
| 第四阶段 | 第9周末 | 前端功能完成 | 规则配置页面、Query Builder组件、管理页面 |
| 第五阶段 | 第10周末 | 规则转换集成完成 | JSON to DRL转换器、规则验证器、测试用例 |
| 第六阶段 | 第11周末 | 业务场景实现与测试完成 | 三个业务场景实现、测试报告 |
| 第七阶段 | 第12周末 | 系统上线 | 优化后的系统、用户手册、运维文档、生产环境部署 |
| 风险 | 概率 | 影响 | 应对措施 |
|---|---|---|---|
| Drools学习曲线陡峭 | 中 | 高 | 提前技术预研,组织技术培训 |
| Query Builder组件复杂度高 | 中 | 高 | 调研开源组件(vue-query-builder),或降低复杂度 |
| 规则转换逻辑复杂 | 高 | 高 | 充分的技术方案设计,增加测试覆盖 |
| 性能不达标 | 中 | 中 | 性能测试前置,预留优化时间 |
| 风险 | 概率 | 影响 | 应对措施 |
|---|---|---|---|
| 需求变更频繁 | 高 | 中 | 需求评审严格把关,控制需求变更 |
| 业务规则复杂度超预期 | 中 | 高 | 分阶段实现,先简单后复杂 |
| 用户体验不满意 | 中 | 中 | 原型评审,及时收集反馈 |
| 风险 | 概率 | 影响 | 应对措施 |
|---|---|---|---|
| 人员不足 | 中 | 高 | 提前储备人力,关键岗位双人配置 |
| 关键人员离职 | 低 | 高 | 知识沉淀和文档化,代码审查制度 |
| 开发进度延期 | 中 | 中 | 每周进度跟踪,及时调整计划 |
- 代码审查(Code Review)机制
- 单元测试覆盖率≥80%
- 使用SonarQube进行代码扫描
- 遵循阿里巴巴Java开发规范
- 使用ESLint进行前端代码检查
- 编写详细的测试用例
- 功能测试覆盖率100%
- 自动化测试覆盖核心功能
- 性能测试验证关键指标
- 安全测试(SQL注入、XSS等)
- API文档自动生成(Swagger)
- 关键代码必须有注释
- 每个模块必须有README
- 架构和设计文档及时更新
- 用户手册通俗易懂
- 支持决策表可视化配置
- 支持规则流(Rule Flow)配置
- 支持规则模板和规则库
- 支持规则导入导出(Excel)
- 支持规则A/B测试
- 支持规则效果评估
- 分布式规则引擎集群
- 规则热加载(不重启应用)
- 规则执行结果缓存
- 异步规则执行
- 规则执行监控大屏
- 规则性能分析
- 规则覆盖率统计
- 规则冲突检测
- 规则推荐(AI辅助)
- Drools官方文档:https://docs.drools.org/
- Vue 3官方文档:https://cn.vuejs.org/
- Element Plus文档:https://element-plus.org/
- Spring Boot文档:https://spring.io/projects/spring-boot
- MyBatis-Plus文档:https://baomidou.com/
{
"ruleCode": "HIV_001",
"ruleName": "艾滋病(HIV)报卡规则",
"sceneCode": "INFECTIOUS_DISEASE_REPORT",
"ruleType": "CONDITION",
"priority": 100,
"conditions": {
"logic": "OR",
"groups": [
{
"logic": "AND",
"conditions": [
{
"field": "diagnosis_code",
"operator": "IN",
"value": ["B22.100", "B22.200", "B22.700", "B22.701", "B23.100", "B23.200"]
}
]
},
{
"logic": "AND",
"conditions": [
{
"field": "diagnosis_name",
"operator": "LEFT_MATCH",
"value": "B20"
}
]
}
]
},
"actions": [
{
"actionType": "RETURN",
"params": {
"need_report": true,
"disease_code": "HIV",
"disease_name": "艾滋病"
}
}
]
}package rules.infectious_disease;
import java.util.Map;
import com.ruleengine.core.RuleContext;
import com.ruleengine.core.RuleResult;
global RuleResult ruleResult;
global RuleContext context;
rule "HIV_001"
salience 100
when
$data : Map(
this["diagnosis_code"] memberOf ["B22.100", "B22.200", "B22.700", "B22.701", "B23.100", "B23.200"]
|| this["diagnosis_name"].toString().startsWith("B20")
)
then
ruleResult.setMatched(true);
ruleResult.getOutputData().put("need_report", true);
ruleResult.getOutputData().put("disease_code", "HIV");
ruleResult.getOutputData().put("disease_name", "艾滋病");
end
- JDK 11+
- Node.js 16+
- MySQL 8.0+
- Redis 6.0+
- Maven 3.6+
- Git 2.0+
- IDE: IntelliJ IDEA / VS Code
文档版本: V1.0 编写日期: 2025-01-08 最后更新: 2025-01-08 编写人: 研发团队 审核人: 技术负责人 / 产品经理