Files
HIS-GUI/docs/usage/CASE_AND_LOG_GUIDE.md
2026-04-01 11:02:24 +08:00

419 lines
8.8 KiB
Markdown
Raw Permalink 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.
# 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<string, PatientCase> 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 <patientId>
```
显示患者的所有医疗记录(诊断、药物、住院)。
**示例**:
```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 <patientId> <doctorId> <diagnosis> [prescription] [remarks]
```
**参数**:
- `patientId`: 患者ID
- `doctorId`: 医生ID
- `diagnosis`: 诊断内容
- `prescription`: (可选) 处方
- `remarks`: (可选) 备注
**示例**:
```bash
case diagnosis add P001 D001 "高烧" "青霉素" "病毒性感染"
```
#### 3.3 添加药房记录
```bash
case medicine add <patientId> <medicineId> <medicineName> <quantity> <usage> <unitPrice>
```
**参数**:
- `patientId`: 患者ID
- `medicineId`: 药物ID
- `medicineName`: 药物名称
- `quantity`: 数量(单位:个/盒)
- `usage`: 用法(如:一日三次,饭后服用)
- `unitPrice`: 单价(元)
**示例**:
```bash
case medicine add P001 M001 Amoxicillin 100 "一日三次,饭后服用" 5.5
```
#### 3.4 添加住院记录
```bash
case admission add <patientId> <wardId> <bedId> [reason]
```
**参数**:
- `patientId`: 患者ID
- `wardId`: 病房ID
- `bedId`: 床位ID
- `reason`: (可选) 住院原因
**示例**:
```bash
case admission add P001 W1 B001 "高烧需要住院观察"
```
#### 3.5 患者出院
```bash
case discharge <patientId> [summary]
```
为患者的最新住院记录标记为已出院。
**参数**:
- `patientId`: 患者ID
- `summary`: (可选) 出院小结
**示例**:
```bash
case discharge P001 "体温恢复正常,已停药3天"
```
#### 3.6 查看病例统计
```bash
case stats <patientId>
```
显示患者的诊断、药物和住院记录统计信息。
**示例**:
```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 <file_path>
```
将日志导出到指定文件。
**示例**:
```bash
log export logs/backup.log
```
#### 3.10 设置日志格式
```bash
log format set <format_string>
```
自定义日志输出格式。
**支持的占位符**:
- `{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 张三 4513800000001
# 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