Files
his/MD/specs/IRON_RULES.md
华佗 76f090d2af docs(iron-rules): 新增铁律15+16 + 业务逻辑设计文档 + 后端增强
铁律15: 模块设计必须分析业务逻辑,不能只做CRUD
- 必须查阅标准规范、梳理业务流程、设计状态流转、定义业务规则
- 附设计文档模板和医疗HIS参考标准清单

铁律16: 模块优化必须分析现有业务流并说明促进作用
- 必须回答5个问题:位置/关联/促进/兼容/冲突
- 附业务逻辑分析文档模板

业务逻辑设计文档:
- MD/specs/SURGERY_MANAGEMENT_DESIGN.md (139行)
  - 状态机: 待申请→待审批→已审批→待手术→手术中→已完成
  - 7条业务规则: 分级权限/术前讨论/术前评估/手术室冲突/禁食/随访/安全核查
- MD/specs/ORDER_MANAGEMENT_DESIGN.md
  - 状态机: 新开→签发→执行中→已完成/已停止/已签退
  - 6条业务规则: 停止时限/用药审核/查对/紧急标识/修改限制/皮试联动
- MD/specs/BED_MANAGEMENT_DESIGN.md
  - 状态机: 空闲↔占用↔清洁中↔维修中
  - 5条业务规则: 分配校验/科室匹配/自动清洁/使用率统计/预约

后端业务逻辑增强:
- SurgeryAppService: +手术室冲突校验 +手术统计
- BedController: +床位使用率统计 +分配校验 +出院自动清洁
- EsbMessageController: +消息路由校验 +消息轨迹 +死信队列处理
2026-06-06 14:11:50 +08:00

466 lines
14 KiB
Markdown
Raw 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.

# HealthLink-HIS 执行铁律
> **文档类型**: 技术规范
> **适用范围**: 全项目开发流程
> **版本**: v2.0
> **编制日期**: 2026-06-06
> **最后更新**: 2026-06-06
---
## 一、铁律总览
| 编号 | 铁律名称 | 优先级 | 适用范围 |
|------|---------|--------|---------|
| #1 | 修改完必须测试 | P0 | 全量代码 |
| #2 | Flyway 数据库迁移 | P0 | 数据库变更 |
| #3 | 先分解再行动 | P1 | 非平凡任务 |
| #4 | 验证后信 | P1 | 编译/构建 |
| #5 | 文档统一管理 | P1 | 文档产出 |
| #6 | 测试通过后才提交 | P0 | 代码提交 |
| #7 | 前后端API路径对齐 | P0 | 接口开发 |
| #8 | 铁律和规范文档放MD目录 | P1 | 规范文档 |
| #9 | 开发前必须审核原有代码 | P0 | 全量开发 |
| #10 | 设计文档必须包含UI设计和调用流程 | P0 | 设计文档/前端开发 |
| #11 | 模块设计必须分析业务逻辑不能只做CRUD | P0 | 全量模块设计 |
| #12 | 模块优化必须分析现有业务流并说明促进作用 | P0 | 全量模块优化 |
---
## 二、铁律详细说明
### 铁律 #1: 修改完必须测试
**任何代码修改后,必须完成以下测试才能提交:**
#### 白盒测试
- `mvn clean compile` 编译通过无ERROR
- 单元测试全部通过(如有)
- 代码无新增编译警告(或有书面说明可忽略)
#### 黑盒测试
- 启动应用,验证无启动报错
- 测试关键接口(登录、核心业务接口)
- 验证请求响应结构正确(`{code, msg, data}`
- 验证业务逻辑正确性非仅HTTP状态码
#### 冒烟测试
- 应用正常启动(端口监听)
- 健康检查接口返回正常
- 基础 CRUD 操作正常
- 登录→获取菜单→核心业务流程通畅
#### 前端测试
- `npm run build:dev` 构建成功
- ESLint 无错误
- 页面无控制台报错
- 核心业务页面功能正常
---
### 铁律 #2: Flyway 数据库迁移
**但凡遇到有新建表和字段的,必须通过 Flyway 框架去实现。**
#### 操作规范
1.`healthlink-his-domain/src/main/resources/db/migration/` 下创建迁移脚本
2. 命名格式:`V{版本号}__{描述}.sql`(双下划线分隔)
3. 示例:`V2.0.1__add_patient_allergy_table.sql`
4. 迁移脚本必须包含完整的 DDLCREATE TABLE / ALTER TABLE
5. 必须提供回滚方案(文档记录,非自动回滚)
#### 禁止事项
- ❌ 直接在数据库执行 SQL 不走 Flyway
- ❌ 修改已执行的迁移脚本
- ❌ 迁移脚本中使用 `DROP TABLE`(除非明确需要)
- ❌ 跳过版本号
---
### 铁律 #3: 先分解再行动
**任何非平凡任务先出 plan 再执行。**
#### 触发条件
- 修改超过 3 个文件的任务
- 涉及多个模块的变更
- 数据库结构变更
- 新功能开发
#### 执行步骤
1. 分析现有代码和架构
2. 制定分步计划(使用 `update_plan`
3. 确认测试方案
4. 逐步执行并验证
---
### 铁律 #4: 验证后信
**每次修改后必须验证编译通过,不信记忆。**
#### 验证命令
```bash
# 后端编译
export JAVA_HOME=/opt/jdk-25
mvn clean compile -DskipTests
# 完整构建
mvn install -DskipTests
# 前端构建
cd healthlink-his-ui && npm run build:dev
```
---
### 铁律 #5: 文档统一管理
**所有文档必须存储在 `MD/` 目录中,遵循文档规范。**
#### 目录结构
```
MD/
├── DOCUMENTATION_STANDARD.md # 文档管理规范
├── architecture/ # 架构设计
├── development/ # 开发计划与记录
├── standards/ # 国家/行业标准
├── specs/ # 技术规范与流程
├── bugs/ # Bug分析与修复记录
├── guides/ # 使用指南
└── upgrade/ # 升级记录
```
#### 命名规范
- 文件名使用 **大写英文+下划线**(如 `GRADE3A_DETAILED_DESIGN.md`
- 不使用中文作文件名
- 不使用空格分隔单词
- 版本号标注在文件名末尾(如 `_V2`
#### 格式要求
- 文档头部必须包含元数据块(文档类型、版本、日期)
- 代码块必须标注语言类型
- 表格使用标准Markdown格式
#### 详细规范
参见 `MD/DOCUMENTATION_STANDARD.md`
---
### 铁律 #6: 测试通过后才提交
**代码修改必须通过完整测试后才能提交到远程仓库。**
#### 提交前检查
1. `mvn clean compile` 编译通过
2. 接口测试全部通过88/88
3. 前端构建成功
4. 无新增编译警告
5. 代码变更范围已确认(`git status`
#### 提交规范
- 使用标准 Commit Message 格式
- 参见 `MD/specs/COMMIT_TEMPLATE.md`
- 不提交未完成的功能
- 不提交调试代码和临时文件
---
### 铁律 #7: 前后端API路径对齐
**前后端API路径必须保持一致。**
#### 规范要求
1. 后端接口路径统一前缀:`/healthlink-his/`
2. 前端 `request.js` 中配置的 `baseURL` 必须与后端匹配
3. 接口变更必须同步更新前后端代码
4. 新增接口必须在 Swagger 文档中注册
5. 接口路径命名使用小写字母和连字符kebab-case
---
### 铁律 #11: 设计文档确认后自主开发(铁律)
**设计文档一旦确认,后续开发必须按文档自主执行。**
#### 核心要求
- **禁止反复询问**"是否继续""下一步做什么""是否开始"——直接按计划推进
- 每完成一个 Sprint自动提交推送然后立即开始下一个 Sprint
- 设计文档是"**已签合同**",不是"参考意见"
- 只在遇到**无法解决的阻塞**时才暂停询问
#### 触发条件
- 设计文档已确认(如 `MD/architecture/GRADE3A_GAP_ANALYSIS_AND_DESIGN.md`
- Sprint 计划已制定
- 代码编译通过
#### 禁止事项
- ❌ 完成一个模块后问"继续吗?"
- ❌ 完成一个 Sprint 后问"下一步?"
- ❌ 每次工具调用前问"开始了吗?"
### 铁律 #8: 铁律和规范文档放MD目录
**所有铁律和规范文档统一存放在 `MD/specs/` 目录中。**
#### 已有规范文档
| 文档 | 路径 | 说明 |
|------|------|------|
| 执行铁律 | `MD/specs/IRON_RULES.md` | 本文档 |
| 后端开发规范 | `MD/specs/BACKEND_DEVELOPMENT_STANDARD.md` | 后端编码规范 |
| 前端开发规范 | `MD/specs/FRONTEND_DEVELOPMENT_STANDARD.md` | 前端编码规范 |
| 后端检查清单 | `MD/specs/BACKEND_CHECKLIST.md` | 发布前检查 |
| 前端检查清单 | `MD/specs/FRONTEND_CHECKLIST.md` | 发布前检查 |
| CI/CD门禁 | `MD/specs/CICD_GATEKEEPER.md` | 构建门禁 |
| 提交模板 | `MD/specs/COMMIT_TEMPLATE.md` | Commit规范 |
| 发布清单 | `MD/specs/RELEASE_CHECKLIST.md` | 发布流程 |
| E2E测试计划 | `MD/specs/PLAYWRIGHT_TESTING_PLAN.md` | Playwright测试 |
#### AGENTS.md 同步
- 后端 `healthlink-his-server/AGENTS.md` 必须引用本文档
- 新增铁律必须同步更新本文档和 AGENTS.md
---
## 三、违规处理
| 级别 | 描述 | 处理方式 |
|------|------|---------|
| P0 违规 | 跳过测试直接提交 | 必须回滚并重新测试 |
| P0 违规 | 数据库变更不走Flyway | 回滚数据库变更重新用Flyway执行 |
| P1 违规 | 未分解就行动 | 补充分析和计划文档 |
| P1 违规 | 文档不规范 | 补充元数据和格式 |
---
## 四、快速参考
### 后端开发速查
```bash
# 编译
export JAVA_HOME=/opt/jdk-25 && mvn clean compile -DskipTests
# 完整构建
mvn install -DskipTests
# 运行测试
mvn test -pl healthlink-his-application -Dtest="ClassName" -Dsurefire.failIfNoSpecifiedTests=false
# 启动应用
java -jar healthlink-his-application/target/*.jar --spring.profiles.active=dev
```
### 前端开发速查
```bash
# 开发模式
npm run dev
# 构建
npm run build:dev
# 测试
npm run test:run
# Lint
npm run lint
```
---
> **文档版本**: v2.0
> **最后更新**: 2026-06-06
---
---
### 铁律 #9: 开发前必须审核原有代码
**任何新功能开发前,必须先搜索项目中是否已有相关代码。**
#### 搜索清单
| 搜索目标 | 搜索路径 | 命令 |
|---------|---------|------|
| 后端Controller | `healthlink-his-server/**/controller/` | `rg -l "关键词" ...` |
| AppService | `healthlink-his-server/**/appservice/` | 同上 |
| Service/ServiceImpl | `healthlink-his-server/**/service/` | 同上 |
| Mapper | `healthlink-his-server/**/mapper/` | 同上 |
| Entity/Domain | `healthlink-his-server/**/domain/` | 同上 |
| 前端页面 | `healthlink-his-ui/src/views/` | 同上 |
| 前端API | `healthlink-his-ui/src/api/` | 同上 |
| 数据库表 | Flyway迁移脚本 | `rg "CREATE TABLE" ...` |
#### 判定规则
| 情况 | 处理方式 |
|------|---------|
| 后端+前端都已有 | 审查现有实现,找出缺陷/遗漏,在原基础上优化 |
| 只有后端,前端缺失 | 只补前端页面调用现有API |
| 只有前端,后端缺失 | 只补后端接口前端API对齐 |
| 前端壳子存在但功能不完整 | 分析壳子现有逻辑,补充完善 |
| 后端接口存在但业务逻辑不完整 | 在原Service基础上扩展不新建 |
| 完全没有 | 从零开发,但先检查是否有可复用的组件/工具类 |
#### 禁止行为
- ❌ 不看代码就新建Controller/Service
- ❌ 已有功能重复实现
- ❌ 废弃原有代码另写一套
- ❌ 创建与现有模块功能重叠的新模块
---
---
---
### 铁律 #12: 模块优化必须分析现有业务流并说明促进作用
**任何模块新增/优化前,必须先分析现有业务流程全貌。**
#### 必须回答的5个问题
| # | 问题 | 说明 |
|---|------|------|
| 1 | 该模块在整体业务流中处于什么位置? | 上游/下游/并行 |
| 2 | 该模块与哪些现有模块有数据流转关系? | 列出所有关联模块 |
| 3 | 优化对上下游模块有什么促进作用? | 减少重复、提升一致性、加快流程 |
| 4 | 变更是否影响现有业务流程? | 兼容性评估 |
| 5 | 业务规则是否与现有模块冲突? | 规则一致性检查 |
#### 业务逻辑分析文档模板
```
# 模块名 — 业务逻辑分析
## 1. 整体业务流程定位
[该模块在HIS系统中的位置上下游关系图]
## 2. 关联模块分析
| 关联模块 | 数据流向 | 交互方式 | 影响程度 |
|---------|---------|---------|---------|
## 3. 优化促进作用
| 维度 | 优化前 | 优化后 | 提升效果 |
|------|--------|--------|---------|
## 4. 兼容性评估
- 对现有模块的影响
- 数据迁移需求
- 接口变更影响
## 5. 规则一致性检查
- 新增规则是否与现有规则冲突
- 状态流转是否与现有状态机兼容
```
---
### 铁律 #11: 模块设计必须分析业务逻辑不能只做CRUD
**任何新模块/功能开发前,必须先进行业务逻辑分析和梳理。**
#### 禁止行为
- ❌ 拿到需求就直接写CRUD不思考业务流程
- ❌ 不查阅标准规范就开发医疗业务模块
- ❌ 没有设计文档就直接编码
- ❌ 把"能增删改查"当成"功能完成"
#### 必须完成的设计步骤
| # | 步骤 | 产出物 | 说明 |
|---|------|--------|------|
| 1 | 查阅标准规范 | 参考文档清单 | 国家卫健委标准、医保局规范、HL7/FHIR、三甲评审标准 |
| 2 | 梳理业务流程 | 流程图/文字描述 | 正常流程 + 异常流程 + 边界场景 |
| 3 | 设计状态流转 | 状态机图 | 每个实体的生命周期、状态转换条件 |
| 4 | 定义业务规则 | 规则清单 | 如:药品相互作用规则、医保审核规则、危急值判定规则 |
| 5 | 设计交互时序 | 时序图 | 用户操作 → 前端事件 → API → 后端处理 → 持久化 → 响应 |
| 6 | 编写设计文档 | MD文件 | 保存到 `MD/specs/``MD/architecture/` |
#### 医疗HIS业务逻辑参考标准
| 标准/规范 | 适用模块 | 获取途径 |
|----------|---------|---------|
| 三级医院评审标准(2022版) | 全量 | 卫健委官网 |
| 电子病历应用水平分级评价 | 电子病历/质控 | 卫健委官网 |
| 互联互通标准化成熟度测评 | ESB/集成平台 | 卫健委官网 |
| 医保基金使用监督管理条例 | 医保审核/结算 | 医保局官网 |
| HL7 FHIR R4 | 数据交换/ESB | hl7.org |
| 处方管理办法 | 合理用药/处方 | 卫健委官网 |
| 抗菌药物临床应用管理办法 | 抗菌药物管理 | 卫健委官网 |
| 医院感染管理办法 | 院感管理 | 卫健委官网 |
| 病案管理与质量控制标准 | 病案管理 | 卫健委官网 |
#### 设计文档模板
```
# 模块名 设计文档
## 1. 业务背景
- 依据什么标准/规范
- 解决什么业务问题
## 2. 业务流程
### 2.1 正常流程
[流程描述/流程图]
### 2.2 异常流程
[异常场景及处理方式]
### 2.3 边界场景
[特殊情况处理]
## 3. 状态流转
| 状态 | 值 | 触发条件 | 下一状态 |
|------|-----|---------|---------|
## 4. 业务规则
| 规则编号 | 规则名称 | 规则描述 | 触发时机 |
|---------|---------|---------|---------|
## 5. 数据模型
[实体关系图/表结构设计]
## 6. 接口设计
[API列表+参数+返回值]
## 7. 前端页面设计
[UI布局+交互+调用流程]
## 8. 测试用例
[关键业务场景测试]
```
---
### 铁律 #10: 设计文档必须包含UI设计和调用流程
**所有新模块/页面的设计文档必须包含以下要素,缺一不可:**
#### 必备要素
| # | 要素 | 说明 |
|---|------|------|
| 1 | 页面UI布局 | 每个区域放什么组件、尺寸比例、栅格布局(文字描述或线框图) |
| 2 | 交互效果清单 | 每个按钮/操作触发什么效果(弹窗、抽屉、跳转、动画) |
| 3 | 前后端调用流程 | 每个用户操作 → 对应API → 参数 → 返回数据 → 前端渲染 |
| 4 | 系统调用关系 | Controller → AppService → Service → Mapper 完整链路 |
| 5 | 方法函数调用关系 | 关键方法签名、参数、返回值、异常处理 |
| 6 | 状态流转图 | 数据状态变化 → UI如何响应 |
| 7 | 异常/边界处理 | 空数据、加载中、错误状态的UI表现 |
#### 前后端调用流程模板
```
用户操作: [具体按钮/操作]
→ 前端: [HTTP方法] [API路径] {参数}
→ 后端: Controller.method() → AppService.method() → Service.method() → Mapper.method()
→ 返回: {code, msg, data}
→ 前端: [渲染逻辑]
```
#### 详细规范
参见 `MD/specs/UI_DESIGN_IRON_RULES.md`