Skip to content

Latest commit

 

History

History
854 lines (715 loc) · 25 KB

File metadata and controls

854 lines (715 loc) · 25 KB

通用规则引擎研发计划 V1.0

一、项目概述

1.1 项目目标

构建一个通用的规则引擎平台,支持传染病报卡、处方审核、病案质控等多个医疗业务场景,通过可视化界面配置规则,实现业务规则的灵活管理和高效执行。

1.2 技术栈

  • 前端: Vue 3.x + Element Plus + Query Builder
  • 后端: Spring Boot 2.7.14 + JDK 11 + MyBatis-Plus + Drools
  • 数据库: MySQL 8.0+
  • 其他: Redis(缓存)、Maven(构建工具)

1.3 项目周期

预计总工期:12周(3个月)


二、项目阶段规划

第一阶段:需求分析与架构设计(第1-2周)

2.1 需求确认与细化

时间: 第1周 负责人: 产品经理 + 技术负责人

任务清单:

  • 与业务方确认传染病报卡规则的详细需求
  • 梳理处方审核、病案质控等其他业务场景需求
  • 确认规则引擎的通用能力边界
  • 整理字段元数据清单(诊断、检验、检查、手术等)
  • 确认操作符支持范围(包含、不包含、大于、小于、between等)
  • 明确权限控制需求
  • 输出《需求规格说明书》

2.2 架构设计

时间: 第2周 负责人: 架构师 + 技术负责人

任务清单:

  • 设计系统总体架构图
  • 设计规则引擎核心架构
  • 设计业务适配器接口规范
  • 设计数据库表结构(9张核心表)
  • 设计API接口规范
  • 设计前端组件架构
  • 设计Query Builder组件与Drools DRL转换规则
  • 制定技术选型方案
  • 制定代码规范和开发规范
  • 输出《系统架构设计文档》
  • 输出《数据库设计文档》
  • 输出《接口设计文档》

第二阶段:基础环境搭建(第2周)

2.3 开发环境准备

时间: 第2周 负责人: 运维工程师 + 后端开发

任务清单:

  • 搭建开发环境(MySQL、Redis)
  • 配置代码仓库(Git)
  • 搭建CI/CD流水线
  • 创建Spring Boot项目骨架
  • 创建Vue 3项目骨架
  • 配置MyBatis-Plus代码生成器
  • 配置Drools依赖
  • 配置Element Plus和相关组件
  • 编写项目README和开发文档

第三阶段:数据库与后端核心开发(第3-6周)

2.4 数据库实施

时间: 第3周 负责人: 数据库工程师 + 后端开发

任务清单:

  • 创建9张核心数据表
    • rule_scene(业务场景定义表)
    • rule_group(规则组表)
    • rule_definition(规则定义表)
    • rule_content(规则内容表)
    • rule_condition(规则条件表)
    • rule_action(规则动作表)
    • rule_metadata(规则元数据表)
    • rule_execution_log(规则执行记录表)
    • rule_version(规则版本表)
  • 创建索引和约束
  • 准备初始化数据脚本
  • 插入场景数据(传染病报卡、处方审核、病案质控)
  • 插入元数据(诊断、检验、检查、手术等字段定义)
  • 编写数据迁移脚本

2.5 后端核心接口开发

时间: 第3-4周 负责人: 后端技术负责人

任务清单:

  • 开发核心接口定义
    • RuleEngine接口
    • BusinessAdapter接口
    • ActionHandler接口
    • RuleContext、RuleResult等核心数据对象
  • 开发规则引擎核心组件
    • DroolsRuleEngine实现类
    • KieBase缓存管理
    • 规则加载和重载机制
  • 开发规则编译器(RuleCompiler)
    • 条件规则编译(JSON to DRL)
    • 决策表规则编译
    • 脚本规则编译
    • 操作符转换逻辑(EQ、IN、LIKE、BETWEEN等)
    • AND/OR条件组合逻辑
  • 开发规则验证器(RuleValidator)
  • 开发规则执行日志记录器
  • 编写单元测试(覆盖率≥80%)

2.6 后端业务适配器开发

时间: 第5周 负责人: 后端开发工程师

任务清单:

  • 开发传染病报卡适配器(InfectiousDiseaseAdapter)
    • preProcess数据转换
    • postProcess结果转换
    • 自定义ActionHandler(生成报卡、发送通知)
  • 开发处方审核适配器(PrescriptionAuditAdapter)
    • preProcess数据转换
    • postProcess结果转换
    • 自定义ActionHandler(药品相互作用检查、剂量调整)
  • 开发病案质控适配器(MedicalRecordQCAdapter)
    • preProcess数据转换
    • postProcess结果转换
    • 质量评分计算逻辑
  • 适配器自动注册机制
  • 编写适配器单元测试

2.7 后端API开发

时间: 第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-9周)

2.8 前端基础组件开发

时间: 第6周 负责人: 前端技术负责人

任务清单:

  • 搭建Vue 3项目结构(Vite)
  • 配置Element Plus
  • 配置路由(Vue Router)
  • 配置状态管理(Pinia)
  • 配置Axios(HTTP请求)
  • 开发通用布局组件
  • 开发顶部导航栏
  • 开发侧边菜单
  • 开发面包屑导航
  • 开发通用表格组件
  • 开发通用表单组件
  • 开发通用弹窗组件
  • 开发通用分页组件

2.9 规则配置页面开发(核心)

时间: 第7-8周 负责人: 前端开发工程师

任务清单:

  • 规则列表页面(参考原型图rule4.jpg)

    • 场景选择下拉框
    • 规则搜索框(规则名称、传染病名称)
    • 规则列表表格
      • 显示规则名称、传染病名称、传染病编码、传染病级别等
      • 启用/禁用开关
      • 查看详情按钮
      • 编辑按钮
      • 删除按钮
    • 新增规则按钮
    • 导入/导出规则功能
    • 分页组件
  • 规则配置主页面(参考原型图rule1.jpg)

    • 基本信息配置区

      • 传染病名称(输入框)
      • 传染病编码(输入框)
      • 传染病级别(下拉框:乙类、丙类等)
      • 报卡类型(下拉框)
      • 重复报卡规则(天/内满足包含方重复)
      • 是否启用(单选框)
    • 诊断满足规则配置区

      • "或者"/"并且"按钮组(支持逻辑切换)
      • 门诊医生站、住院医生站等场景多选框
      • 条件组配置区域
        • 关联条件下拉(或者/并且)
        • 关联因素下拉(诊断名称/诊断编码/诊断码等)
        • 匹配符下拉(包含in/左匹配/模糊匹配)
        • 匹配值输入(支持多选、自由输入)
        • 添加/删除条件按钮
      • 新增条件组按钮
      • 删除条件组功能
    • 满足提示规则配置区(橙色框区域)

      • 提示文案输入
      • 新增条件组按钮
      • 条件组配置(同诊断满足规则)
        • 关联条件(并且/或者)
        • 关联因素(血常规/白细胞计数、CT/检查所见等)
        • 匹配符(大于等于、包含、左匹配等)
        • 匹配值(数值或文本输入)
        • 添加/删除条件按钮
    • 页面底部操作按钮

      • 返回按钮
      • 重置按钮
      • 保存按钮
  • Query Builder组件开发(核心组件)

    • 条件构建器组件
    • 支持AND/OR逻辑切换
    • 支持条件组嵌套
    • 字段选择下拉(从元数据动态加载)
    • 操作符选择下拉(根据字段类型动态变化)
    • 值输入组件(支持单值、多值、范围等)
    • 条件添加/删除功能
    • 条件组添加/删除功能
    • 逻辑表达式实时预览(参考rule2.jpg)
    • JSON序列化/反序列化
  • 字段配置对照实现(参考rule3.jpg)

    • 诊断名称/编码:支持包含(in)、不包含(not in)、左匹配、模糊匹配
    • 手术名称/编码:同诊断
    • 检验项目(定量):支持>、<、>=、<=、between
    • 检验项目(定性):支持包含、不包含、可选枚举
    • 检验项目(文本):支持包含、不包含
    • 检查所见/诊断:支持包含、不包含
    • 病理所见/诊断:支持包含、不包含
    • 医嘱名称:支持in、not in、左匹配、模糊匹配
  • 规则测试对话框

    • 输入测试数据表单
    • 执行测试按钮
    • 展示测试结果
    • 展示匹配的规则
    • 展示执行日志
  • 规则详情/编辑对话框

    • 查看模式和编辑模式切换
    • 规则基本信息展示/编辑
    • 条件详情展示/编辑
    • 动作详情展示/编辑

2.10 其他管理页面开发

时间: 第8-9周 负责人: 前端开发工程师

任务清单:

  • 场景管理页面

    • 场景列表
    • 场景详情
    • 场景元数据配置
  • 规则组管理页面

    • 规则组树形结构
    • 规则组创建/编辑
    • 规则组排序
    • 执行模式配置(ALL/FIRST)
  • 规则版本管理页面

    • 版本历史列表
    • 版本对比
    • 版本回滚
  • 规则执行日志页面

    • 日志列表查询(按时间、场景、规则等过滤)
    • 日志详情查看
    • 输入数据展示
    • 输出数据展示
    • 执行时间统计
  • 元数据管理页面

    • 字段定义列表
    • 字段新增/编辑
    • 字段类型配置
    • 值域配置

2.11 前端API对接与联调

时间: 第9周 负责人: 前端开发 + 后端开发

任务清单:

  • 封装API接口调用方法
  • 实现请求拦截器(添加token)
  • 实现响应拦截器(统一错误处理)
  • 前后端联调测试
  • 修复联调问题
  • 优化用户体验

第五阶段:规则转换与Drools集成(第9-10周)

2.12 规则转换引擎开发

时间: 第9-10周 负责人: 后端技术负责人

任务清单:

  • JSON to DRL转换器完善

    • 条件组AND/OR逻辑转换
    • 嵌套条件组处理
    • 各种操作符转换(in、not in、包含、左匹配、模糊匹配、between等)
    • 数据类型转换(String、Number、Boolean、Date、Array)
    • 特殊字符转义处理
  • Drools规则模板开发

    • 条件规则模板
    • 决策表规则模板
    • 脚本规则模板
  • 规则语法验证

    • DRL语法校验
    • 字段存在性校验
    • 数据类型匹配校验
    • 循环依赖检测
  • 规则编译优化

    • 增量编译支持
    • 规则缓存策略
    • 编译性能优化
  • 编写转换测试用例(覆盖所有操作符)


第六阶段:业务场景实现与测试(第10-11周)

2.13 传染病报卡场景实现

时间: 第10周 负责人: 后端开发 + 前端开发

任务清单:

  • 配置传染病报卡场景元数据
    • 诊断字段(ICD-10编码)
    • 检验字段(HIV、乙肝、梅毒等)
    • 检查字段(CT、X光等)
    • 患者字段(年龄、性别等)
  • 创建示例规则
    • 艾滋病报卡规则(参考原型图rule1.jpg)
    • 新冠肺炎报卡规则
    • 结核病报卡规则
    • 手足口病报卡规则
  • 实现报卡生成逻辑 。- [ ] 实现报卡通知发送
  • 业务功能测试

2.14 处方审核场景实现

时间: 第10周 负责人: 后端开发 + 前端开发

任务清单:

  • 配置处方审核场景元数据
    • 药品字段
    • 诊断字段
    • 患者字段(年龄、体重、肝肾功能等)
  • 创建示例规则
    • 超剂量用药规则
    • 药品相互作用规则
    • 禁忌症规则
    • 适应症不符规则
  • 实现审核问题提示
  • 实现用药建议生成
  • 业务功能测试

2.15 病案质控场景实现

时间: 第10周 负责人: 后端开发 + 前端开发

任务清单:

  • 配置病案质控场景元数据
    • 病案字段(诊断、手术、费用等)
    • 质控指标字段
  • 创建示例规则
    • 主要诊断缺失规则
    • 手术记录完整性规则
    • 药占比超标规则
    • 平均住院日超标规则
  • 实现质量评分计算
  • 实现改进建议生成
  • 业务功能测试

2.16 系统集成测试

时间: 第11周 负责人: 测试工程师 + 开发团队

任务清单:

  • 功能测试

    • 规则创建、编辑、删除测试
    • 规则执行测试(单条、批量)
    • 规则缓存测试
    • 规则版本管理测试
    • 各业务场景端到端测试
  • 性能测试

    • 规则编译性能测试
    • 规则执行性能测试(目标:<100ms)
    • 批量执行性能测试(1000条/s)
    • 并发测试(100并发用户)
    • 缓存命中率测试
  • 压力测试

    • 大数据量规则测试(1000+规则)
    • 复杂规则测试(10层嵌套)
    • 长时间运行稳定性测试
  • 异常测试

    • 规则语法错误测试
    • 数据格式异常测试
    • 网络异常测试
    • 数据库异常测试
  • 编写测试报告


第七阶段:优化与上线准备(第11-12周)

2.17 系统优化

时间: 第11周 负责人: 开发团队

任务清单:

  • 性能优化

    • SQL语句优化(添加索引、优化查询)
    • 规则编译优化(缓存DRL)
    • 接口响应时间优化
    • 前端渲染性能优化
    • 打包体积优化
  • 代码优化

    • 代码重构
    • 代码审查
    • 统一代码风格
    • 添加代码注释
  • 用户体验优化

    • 加载状态优化
    • 错误提示优化
    • 表单验证优化
    • 操作提示优化
    • 响应式布局优化

2.18 文档编写

时间: 第11-12周 负责人: 全体团队

任务清单:

  • 用户文档

    • 用户操作手册
    • 规则配置指南
    • 常见问题FAQ
    • 视频教程录制
  • 开发文档

    • API接口文档
    • 数据库设计文档
    • 架构设计文档
    • 业务适配器开发指南
    • 部署运维文档
  • 测试文档

    • 测试用例文档
    • 测试报告
    • 性能测试报告

2.19 部署上线

时间: 第12周 负责人: 运维工程师 + 开发团队

任务清单:

  • 准备生产环境

    • 服务器配置
    • 数据库配置(主从复制)
    • Redis集群配置
    • Nginx配置(反向代理、负载均衡)
    • 防火墙配置
  • 数据迁移

    • 生产数据库初始化
    • 元数据导入
    • 示例规则导入
  • 应用部署

    • 后端应用部署(Docker)
    • 前端应用部署
    • 配置域名和SSL证书
  • 监控配置

    • 应用性能监控(APM)
    • 日志监控(ELK)
    • 告警配置
  • 灰度发布

    • 小范围用户试用
    • 收集反馈
    • 问题修复
    • 全量发布
  • 上线验证

    • 生产环境功能验证
    • 性能验证
    • 安全验证

三、团队配置与职责

3.1 人员配置

角色 人数 主要职责
产品经理 1 需求管理、产品设计、验收测试
架构师 1 架构设计、技术选型、技术攻关
后端开发(Java) 2-3 后端服务开发、API开发、Drools集成
前端开发(Vue) 2 前端页面开发、Query Builder组件开发
测试工程师 1-2 测试用例编写、功能测试、性能测试
运维工程师 1 环境搭建、部署上线、监控运维
合计 8-10人

3.2 关键角色职责

产品经理

  • 负责需求分析和产品设计
  • 组织需求评审和产品验收
  • 协调业务方沟通
  • 跟踪项目进度

架构师/技术负责人

  • 负责系统架构设计
  • 制定技术方案和开发规范
  • 解决技术难点
  • 代码审查和质量把控
  • 核心模块开发(规则引擎、编译器)

后端开发工程师

  • 实现规则引擎核心功能
  • 开发业务适配器
  • 实现API接口
  • 编写单元测试
  • 性能优化

前端开发工程师

  • 实现规则配置界面
  • 开发Query Builder组件
  • 实现规则列表、日志查询等管理页面
  • 前后端联调
  • 用户体验优化

测试工程师

  • 编写测试用例
  • 执行功能测试、集成测试
  • 执行性能测试、压力测试
  • 问题跟踪和回归测试
  • 输出测试报告

运维工程师

  • 搭建开发、测试、生产环境
  • 配置CI/CD流水线
  • 应用部署和监控
  • 数据库维护
  • 故障处理

四、关键技术难点与解决方案

4.1 Query Builder与Drools DRL转换

难点:

  • 前端可视化配置转换为Drools规则语言
  • 支持复杂的AND/OR嵌套逻辑
  • 多种操作符的准确转换

解决方案:

  • 设计JSON中间格式,前端生成JSON,后端解析
  • 实现递归算法处理嵌套条件组
  • 建立操作符映射表,覆盖所有场景
  • 充分的单元测试保证转换正确性

4.2 规则缓存与动态更新

难点:

  • 规则修改后需要重新编译
  • 保证缓存一致性
  • 不影响正在执行的规则

解决方案:

  • 使用KieBase缓存已编译的规则
  • 规则更新时通知所有节点重载
  • 使用版本号机制,新规则不影响旧会话
  • 提供手动刷新缓存接口

4.3 多业务场景解耦

难点:

  • 不同业务场景数据结构差异大
  • 业务逻辑各不相同
  • 保持规则引擎的通用性

解决方案:

  • 使用适配器模式
  • 定义统一的数据接口(Map结构)
  • 业务适配器负责数据转换
  • 通过元数据配置实现灵活扩展

4.4 性能优化

难点:

  • 大量规则执行性能
  • 复杂规则编译耗时
  • 高并发场景响应时间

解决方案:

  • 规则预编译和缓存
  • 使用无状态会话(Stateless Session)
  • 合理设计规则优先级(salience)
  • 批量执行使用并行流
  • 添加Redis缓存热点数据
  • 数据库读写分离

五、里程碑与交付物

阶段 时间节点 里程碑 主要交付物
第一阶段 第2周末 需求与架构设计完成 需求规格说明书、架构设计文档、数据库设计文档、接口设计文档
第二阶段 第2周末 开发环境就绪 项目骨架、开发环境、CI/CD流水线
第三阶段 第6周末 后端核心功能完成 规则引擎核心代码、业务适配器、API接口、单元测试
第四阶段 第9周末 前端功能完成 规则配置页面、Query Builder组件、管理页面
第五阶段 第10周末 规则转换集成完成 JSON to DRL转换器、规则验证器、测试用例
第六阶段 第11周末 业务场景实现与测试完成 三个业务场景实现、测试报告
第七阶段 第12周末 系统上线 优化后的系统、用户手册、运维文档、生产环境部署

六、风险管理

6.1 技术风险

风险 概率 影响 应对措施
Drools学习曲线陡峭 提前技术预研,组织技术培训
Query Builder组件复杂度高 调研开源组件(vue-query-builder),或降低复杂度
规则转换逻辑复杂 充分的技术方案设计,增加测试覆盖
性能不达标 性能测试前置,预留优化时间

6.2 需求风险

风险 概率 影响 应对措施
需求变更频繁 需求评审严格把关,控制需求变更
业务规则复杂度超预期 分阶段实现,先简单后复杂
用户体验不满意 原型评审,及时收集反馈

6.3 进度风险

风险 概率 影响 应对措施
人员不足 提前储备人力,关键岗位双人配置
关键人员离职 知识沉淀和文档化,代码审查制度
开发进度延期 每周进度跟踪,及时调整计划

七、质量保障措施

7.1 代码质量

  • 代码审查(Code Review)机制
  • 单元测试覆盖率≥80%
  • 使用SonarQube进行代码扫描
  • 遵循阿里巴巴Java开发规范
  • 使用ESLint进行前端代码检查

7.2 测试质量

  • 编写详细的测试用例
  • 功能测试覆盖率100%
  • 自动化测试覆盖核心功能
  • 性能测试验证关键指标
  • 安全测试(SQL注入、XSS等)

7.3 文档质量

  • API文档自动生成(Swagger)
  • 关键代码必须有注释
  • 每个模块必须有README
  • 架构和设计文档及时更新
  • 用户手册通俗易懂

八、后续规划(V2.0)

8.1 功能增强

  • 支持决策表可视化配置
  • 支持规则流(Rule Flow)配置
  • 支持规则模板和规则库
  • 支持规则导入导出(Excel)
  • 支持规则A/B测试
  • 支持规则效果评估

8.2 性能优化

  • 分布式规则引擎集群
  • 规则热加载(不重启应用)
  • 规则执行结果缓存
  • 异步规则执行

8.3 运维增强

  • 规则执行监控大屏
  • 规则性能分析
  • 规则覆盖率统计
  • 规则冲突检测
  • 规则推荐(AI辅助)

九、附录

9.1 参考文档

9.2 关键配置示例

示例1:传染病报卡规则JSON结构

{
  "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": "艾滋病"
      }
    }
  ]
}

示例2:生成的Drools DRL规则

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

9.3 开发环境要求

  • 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 编写人: 研发团队 审核人: 技术负责人 / 产品经理