8.8 KiB
8.8 KiB
HIS病例系统与日志系统使用指南
概述
本项目为HIS(医院信息系统)增加了两个重要功能:
- 病例系统 (Patient Case System): 记录每个患者的所有医疗过程,包括诊断记录、药房记录和住院记录
- 日志系统 (Logging System): 记录所有系统操作,用于医疗数据审计和追踪
1. 病例系统架构
数据模型
1.1 诊断记录 (DiagnosisRecord)
struct DiagnosisRecord {
std::string DoctorID; // 医生ID
std::string Diagnosis; // 诊断内容
std::string Prescription; // 处方
std::string Remarks; // 备注
time_t Timestamp; // 时间戳
};
1.2 药房记录 (MedicineRecord)
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)
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. 日志系统架构
日志类型
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 查看病例
case view <patientId>
显示患者的所有医疗记录(诊断、药物、住院)。
示例:
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 添加诊断记录
case diagnosis add <patientId> <doctorId> <diagnosis> [prescription] [remarks]
参数:
patientId: 患者IDdoctorId: 医生IDdiagnosis: 诊断内容prescription: (可选) 处方remarks: (可选) 备注
示例:
case diagnosis add P001 D001 "高烧" "青霉素" "病毒性感染"
3.3 添加药房记录
case medicine add <patientId> <medicineId> <medicineName> <quantity> <usage> <unitPrice>
参数:
patientId: 患者IDmedicineId: 药物IDmedicineName: 药物名称quantity: 数量(单位:个/盒)usage: 用法(如:一日三次,饭后服用)unitPrice: 单价(元)
示例:
case medicine add P001 M001 Amoxicillin 100 "一日三次,饭后服用" 5.5
3.4 添加住院记录
case admission add <patientId> <wardId> <bedId> [reason]
参数:
patientId: 患者IDwardId: 病房IDbedId: 床位IDreason: (可选) 住院原因
示例:
case admission add P001 W1 B001 "高烧需要住院观察"
3.5 患者出院
case discharge <patientId> [summary]
为患者的最新住院记录标记为已出院。
参数:
patientId: 患者IDsummary: (可选) 出院小结
示例:
case discharge P001 "体温恢复正常,已停药3天"
3.6 查看病例统计
case stats <patientId>
显示患者的诊断、药物和住院记录统计信息。
示例:
case stats P001
输出:
=== Case Statistics for P001 ===
Diagnosis Records: 2
Medicine Records: 3
Total Medicine Cost: 950.00
Admission Records: 1
日志相关命令
3.7 查看日志
log view [count]
显示最近的N条日志(默认显示所有)。
示例:
log view 20 # 显示最后20条日志
log view # 显示所有日志
3.8 清空日志
log clear
清空内存中的日志(日志文件不受影响)。
示例:
log clear
3.9 导出日志
log export <file_path>
将日志导出到指定文件。
示例:
log export logs/backup.log
3.10 设置日志格式
log format set <format_string>
自定义日志输出格式。
支持的占位符:
{time}: 格式化时间(YYYY-MM-DD HH:MM:SS){type}: 日志类型{command}: 命令/操作{details}: 详细内容{objectId}: 操作对象ID{timestamp}: 原始时间戳
示例:
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: 初始化 PatientCaseServiceinclude/cli/repl_shell.h: 添加 logger_ 成员src/cli/repl_shell.cpp: 集成日志和病例命令CMakeLists.txt: 添加新源文件
5. 数据持久化
JSON序列化
所有病例记录支持JSON序列化,便于保存和加载:
// 病例转JSON
PatientCase pc = ...;
JsonValue json = pc.toJson();
// JSON转病例
PatientCase pc2 = PatientCase::fromJson(json);
日志导出
日志可以导出到文本文件进行存档和审计:
log export logs/monthly_audit.log
6. 使用示例
完整工作流程
# 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. 编译与运行
编译
cd HIS
mkdir -p build
cd build
cmake ..
make
运行
./his
演示脚本
./demo_case_and_log.sh
9. 技术细节
时间戳处理
所有医疗记录都包含时间戳(Unix时间),便于按时间排序和查询。
数据完整性
- 诊断和药物记录在添加时自动获取时间戳
- 住院时间在入院时记录,出院时记录更新
- 所有操作都被记录到日志
性能考虑
- 病例数据存储在内存中(LinkedList)
- 日志可配置自动刷新磁盘
- 支持批量查询(for_each)
10. 扩展可能性
未来可增加的功能:
- 数据库存储: 将病例和日志持久化到数据库
- 查询系统: 按日期、医生、病症等条件查询
- 报表系统: 生成患者费用报表、医生工作量统计等
- 身份验证: 添加用户认证和权限管理
- 加密: 对敏感医疗信息进行加密存储
- 数据导入导出: 支持Excel/CSV格式
版本: 1.0
最后更新: 2026-04-01