419 lines
8.8 KiB
Markdown
419 lines
8.8 KiB
Markdown
# 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 张三 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
|