# exam_status 检查状态说明 ## 状态值定义 ### 正常业务流程状态 | 状态值 | 状态名称 | 说明 | 使用场景 | |--------|---------|------|---------| | **0** | 初始状态 | 检查记录初始化状态 | 数据初始化 | | **1** | 登记 | 检查已登记,等待检查 | 患者登记完成 | | **2** | 登记完成 | 登记流程完成 | 登记确认 | | **3** | 影像到达 | DICOM影像已上传到系统 | 影像采集完成 | | **7** | 已写报告 | 报告医生已完成报告书写 | 报告书写完成 | | **8** | 已审报告 | 审核医生已审核报告 | 报告审核完成 | | **9** | 已确认报告 | 确认医生已确认报告,报告最终完成 | 报告流程结束 | | **12** | 审核驳回 | 审核医生驳回报告,需要重新书写 | 报告质量不合格 | ### 特殊状态 | 状态值 | 状态名称 | 说明 | 使用场景 | |--------|---------|------|---------| | **-1** | 待处理 | 特殊待处理状态 | 影像质量问题等 | | **-99** | 已删除/无效 | 检查记录已删除或无效 | 删除操作 | ## 状态流转图 ``` 正常流程: 0/1 → 2 → 3 → 7 → 8 → 9 登记 完成 影像 写报告 审核 确认 驳回流程: 8 → 12 → 7 → 8 → 9 审核 驳回 重写 审核 确认 ``` ## 状态转换规则 ### 1. 书写报告 (save) **允许的前置状态**: - `3` - 影像到达 - `7` - 已写报告(重新编辑) - `12` - 审核驳回(驳回后重写) **转换后状态**:`7` - 已写报告 **代码验证**: ```php if($exam_status != 3 && $exam_status != 7 && $exam_status != 12){ throw new Error('流程顺序错误,无法书写报告'); } ``` ### 2. 审核报告 (audit) **允许的前置状态**: - `7` - 已写报告 - `8` - 已审报告(重新审核) **转换后状态**:`8` - 已审报告 **代码验证**: ```php if($exam_status != 8 && $exam_status != 7){ throw new Error('流程顺序错误,无法审核报告'); } ``` ### 3. 确认报告 (confirm) **允许的前置状态**: - `8` - 已审报告 **转换后状态**:`9` - 已确认报告 **代码验证**: ```php if($exam_status != 8){ throw new Error('流程顺序错误,无法确认报告'); } ``` ### 4. 驳回报告 (reject) **允许的前置状态**: - `7` - 已写报告 - `8` - 已审报告 **转换后状态**:`12` - 审核驳回 **操作**: - 清空审核医生信息 - 允许重新书写和审核 ## 权限与状态关系 ### 报告医生(权限ID=2) 可见状态:`7`, `8`, `9`, `12` - 可以书写状态为 `3`, `7`, `12` 的报告 ### 审核医生(权限ID=3) 可见状态:`7`, `8`, `9`, `12` - 可以审核状态为 `7`, `8` 的报告 - 可以驳回状态为 `7`, `8` 的报告 ### 确认医生(权限ID=4) 可见状态:`8`, `9` - 可以确认状态为 `8` 的报告 ## 查询过滤规则 ### 待书写报告列表 ```sql WHERE exam_status IN (3, 7, 12) ``` ### 待审核报告列表 ```sql WHERE exam_status IN (7, 12) ``` ### 待确认报告列表 ```sql WHERE exam_status = 8 ``` ### 已完成报告列表 ```sql WHERE exam_status = 9 ``` ### 有效检查列表(排除删除和登记中) ```sql WHERE exam_status NOT IN (0, 1, 2, -99) ``` ## Java实现对应关系 ```java public class ExamStatus { public static final int INIT = 0; // 初始状态 public static final int REGISTERED = 1; // 登记 public static final int REGISTER_COMPLETE = 2; // 登记完成 public static final int IMAGE_ARRIVED = 3; // 影像到达 public static final int REPORT_WRITTEN = 7; // 已写报告 public static final int REPORT_AUDITED = 8; // 已审报告 public static final int REPORT_CONFIRMED = 9; // 已确认报告 public static final int AUDIT_REJECTED = 12; // 审核驳回 public static final int PENDING = -1; // 待处理 public static final int DELETED = -99; // 已删除 } ``` ## 注意事项 1. **状态12(审核驳回)** 是驳回流程的关键状态,驳回后可以重新书写 2. **状态9(已确认报告)** 是最终状态,一般不允许修改 3. **状态跳跃**:正常情况下不应该跨状态更新(如从3直接到8) 4. **权限控制**:每个操作都需要验证医生权限和当前状态 5. **并发控制**:同一报告被多人编辑时需要检测冲突 ## 数据库字段定义 ```sql `exam_status` tinyint(1) DEFAULT '1' COMMENT '检查状态 1 登记 2 登记完成 3 影像到达 7 写报告 8 审核报告 9 确认报告 12 审核驳回' ```