# HIS病例系统与日志系统使用指南 ## 概述 本项目为HIS(医院信息系统)增加了两个重要功能: 1. **病例系统 (Patient Case System)**: 记录每个患者的所有医疗过程,包括诊断记录、药房记录和住院记录 2. **日志系统 (Logging System)**: 记录所有系统操作,用于医疗数据审计和追踪 ## 1. 病例系统架构 ### 数据模型 #### 1.1 诊断记录 (DiagnosisRecord) ```cpp struct DiagnosisRecord { std::string DoctorID; // 医生ID std::string Diagnosis; // 诊断内容 std::string Prescription; // 处方 std::string Remarks; // 备注 time_t Timestamp; // 时间戳 }; ``` #### 1.2 药房记录 (MedicineRecord) ```cpp struct MedicineRecord { std::string MedicineID; // 药物ID std::string MedicineName; // 药物名称 int Quantity; // 数量 std::string Usage; // 用法(如:一日三次,饭后服用) double UnitPrice; // 单价 std::string DoctorID; // 开药医生ID time_t Timestamp; // 时间戳 }; ``` #### 1.3 住院记录 (AdmissionRecord) ```cpp struct AdmissionRecord { std::string WardID; // 病房ID std::string BedID; // 床位ID time_t AdmissionTime; // 入院时间 time_t DischargeTime; // 出院时间(0=未出院) std::string Reason; // 住院原因 std::string DischargeSummary; // 出院小结 }; ``` #### 1.4 患者病例 (PatientCase) 每个患者有一个`PatientCase`对象,包含历史诊断、药房和住院记录。 ### 核心类 - **PatientCase**: 患者病例类,管理所有医疗记录 - **PatientCaseService**: 服务层,提供病例CRUD操作 - **HisContext**: 增强了`LinkedList patientCases` ## 2. 日志系统架构 ### 日志类型 ```cpp enum class LogEntryType { SHELL_COMMAND, // shell命令 PATIENT_OPERATION, // 患者操作 DOCTOR_OPERATION, // 医生操作 MEDICINE_OPERATION, // 药物操作 WARD_OPERATION, // 病房操作 DIAGNOSIS_RECORD, // 诊断记录 MEDICINE_RECORD, // 药房记录 ADMISSION_RECORD, // 住院记录 DISCHARGE_RECORD, // 出院记录 SYSTEM_EVENT // 系统事件 }; ``` ### 日志条目格式 每条日志包含: - 时间戳 - 日志类型 - 命令/操作 - 详细内容 - 用户ID(可选) - 操作对象ID ### 核心方法 - **log()**: 记录日志条目 - **logShellCommand()**: 记录shell命令 - **logPatientOperation()**: 记录患者操作 - **logDiagnosisRecord()**: 记录诊断操作 - **logMedicineRecord()**: 记录药物操作 - **logAdmissionRecord()**: 记录住院操作 - **logDischargeRecord()**: 记录出院操作 - **exportToFile()**: 导出日志到文件 - **setLogFormat()**: 自定义日志格式 ## 3. Shell命令使用 ### 病例相关命令 #### 3.1 查看病例 ```bash case view ``` 显示患者的所有医疗记录(诊断、药物、住院)。 **示例**: ```bash case view P001 ``` **输出**: ``` === Patient Case: P001 === Diagnosis Records: 2 - Doctor: D001 | Diagnosis: High fever - Doctor: D002 | Diagnosis: Common cold Medicine Records: 3 (Total Cost: 150.50) - Amoxicillin x100 @ 5.50 = 550.00 - Cough syrup x50 @ 8.00 = 400.00 Admission Records: 1 - Ward: W1 | Bed: B001 | Status: Discharged ``` #### 3.2 添加诊断记录 ```bash case diagnosis add [prescription] [remarks] ``` **参数**: - `patientId`: 患者ID - `doctorId`: 医生ID - `diagnosis`: 诊断内容 - `prescription`: (可选) 处方 - `remarks`: (可选) 备注 **示例**: ```bash case diagnosis add P001 D001 "高烧" "青霉素" "病毒性感染" ``` #### 3.3 添加药房记录 ```bash case medicine add ``` **参数**: - `patientId`: 患者ID - `medicineId`: 药物ID - `medicineName`: 药物名称 - `quantity`: 数量(单位:个/盒) - `usage`: 用法(如:一日三次,饭后服用) - `unitPrice`: 单价(元) **示例**: ```bash case medicine add P001 M001 Amoxicillin 100 "一日三次,饭后服用" 5.5 ``` #### 3.4 添加住院记录 ```bash case admission add [reason] ``` **参数**: - `patientId`: 患者ID - `wardId`: 病房ID - `bedId`: 床位ID - `reason`: (可选) 住院原因 **示例**: ```bash case admission add P001 W1 B001 "高烧需要住院观察" ``` #### 3.5 患者出院 ```bash case discharge [summary] ``` 为患者的最新住院记录标记为已出院。 **参数**: - `patientId`: 患者ID - `summary`: (可选) 出院小结 **示例**: ```bash case discharge P001 "体温恢复正常,已停药3天" ``` #### 3.6 查看病例统计 ```bash case stats ``` 显示患者的诊断、药物和住院记录统计信息。 **示例**: ```bash case stats P001 ``` **输出**: ``` === Case Statistics for P001 === Diagnosis Records: 2 Medicine Records: 3 Total Medicine Cost: 950.00 Admission Records: 1 ``` ### 日志相关命令 #### 3.7 查看日志 ```bash log view [count] ``` 显示最近的N条日志(默认显示所有)。 **示例**: ```bash log view 20 # 显示最后20条日志 log view # 显示所有日志 ``` #### 3.8 清空日志 ```bash log clear ``` 清空内存中的日志(日志文件不受影响)。 **示例**: ```bash log clear ``` #### 3.9 导出日志 ```bash log export ``` 将日志导出到指定文件。 **示例**: ```bash log export logs/backup.log ``` #### 3.10 设置日志格式 ```bash log format set ``` 自定义日志输出格式。 **支持的占位符**: - `{time}`: 格式化时间(YYYY-MM-DD HH:MM:SS) - `{type}`: 日志类型 - `{command}`: 命令/操作 - `{details}`: 详细内容 - `{objectId}`: 操作对象ID - `{timestamp}`: 原始时间戳 **示例**: ```bash log format set "{timestamp} | {type} | {command} | {objectId}" log format set "[{time}] {type}: {details}" ``` ## 4. 文件结构 ### 新增文件 ``` include/models/patient_case.h src/models/patient_case.cpp include/core/patient_case_service.h src/core/patient_case_service.cpp include/utils/logger.h src/utils/logger.cpp ``` ### 修改的文件 - `include/core/his_context.h`: 添加 patientCases 集合 - `include/core/his_core.h`: 添加 PatientCaseService 成员 - `src/core/his_core.cpp`: 初始化 PatientCaseService - `include/cli/repl_shell.h`: 添加 logger_ 成员 - `src/cli/repl_shell.cpp`: 集成日志和病例命令 - `CMakeLists.txt`: 添加新源文件 ## 5. 数据持久化 ### JSON序列化 所有病例记录支持JSON序列化,便于保存和加载: ```cpp // 病例转JSON PatientCase pc = ...; JsonValue json = pc.toJson(); // JSON转病例 PatientCase pc2 = PatientCase::fromJson(json); ``` ### 日志导出 日志可以导出到文本文件进行存档和审计: ```bash log export logs/monthly_audit.log ``` ## 6. 使用示例 ### 完整工作流程 ```bash # 1. 加载初始数据 doctor load medicine load ward load patient load # 2. 添加患者 patient add P001 张三 45 男 13800000001 # 3. 添加诊断记录 case diagnosis add P001 D001 "高烧" "青霉素" "病毒感染" # 4. 添加药房记录 case medicine add P001 M001 Amoxicillin 100 "一日三次" 5.5 # 5. 添加住院记录 case admission add P001 W1 B001 "高烧住院" # 6. 查看病例 case view P001 # 7. 查看统计 case stats P001 # 8. 患者出院 case discharge P001 "体温恢复正常" # 9. 查看操作日志 log view 20 # 10. 导出日志 log export logs/patient_P001.log ``` ## 7. 日志文件位置 - **实时日志**: `logs/his_operation.log` - **导出日志**: 由用户指定(如 `log export logs/backup.log`) ## 8. 编译与运行 ### 编译 ```bash cd HIS mkdir -p build cd build cmake .. make ``` ### 运行 ```bash ./his ``` ### 演示脚本 ```bash ./demo_case_and_log.sh ``` ## 9. 技术细节 ### 时间戳处理 所有医疗记录都包含时间戳(Unix时间),便于按时间排序和查询。 ### 数据完整性 - 诊断和药物记录在添加时自动获取时间戳 - 住院时间在入院时记录,出院时记录更新 - 所有操作都被记录到日志 ### 性能考虑 - 病例数据存储在内存中(LinkedList) - 日志可配置自动刷新磁盘 - 支持批量查询(for_each) ## 10. 扩展可能性 未来可增加的功能: 1. **数据库存储**: 将病例和日志持久化到数据库 2. **查询系统**: 按日期、医生、病症等条件查询 3. **报表系统**: 生成患者费用报表、医生工作量统计等 4. **身份验证**: 添加用户认证和权限管理 5. **加密**: 对敏感医疗信息进行加密存储 6. **数据导入导出**: 支持Excel/CSV格式 --- **版本**: 1.0 **最后更新**: 2026-04-01