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

8.8 KiB
Raw Permalink Blame History

HIS病例系统与日志系统使用指南

概述

本项目为HIS医院信息系统增加了两个重要功能

  1. 病例系统 (Patient Case System): 记录每个患者的所有医疗过程,包括诊断记录、药房记录和住院记录
  2. 日志系统 (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: 患者ID
  • doctorId: 医生ID
  • diagnosis: 诊断内容
  • prescription: (可选) 处方
  • remarks: (可选) 备注

示例:

case diagnosis add P001 D001 "高烧" "青霉素" "病毒性感染"

3.3 添加药房记录

case medicine add <patientId> <medicineId> <medicineName> <quantity> <usage> <unitPrice>

参数:

  • patientId: 患者ID
  • medicineId: 药物ID
  • medicineName: 药物名称
  • quantity: 数量(单位:个/盒)
  • usage: 用法(如:一日三次,饭后服用)
  • unitPrice: 单价(元)

示例:

case medicine add P001 M001 Amoxicillin 100 "一日三次,饭后服用" 5.5

3.4 添加住院记录

case admission add <patientId> <wardId> <bedId> [reason]

参数:

  • patientId: 患者ID
  • wardId: 病房ID
  • bedId: 床位ID
  • reason: (可选) 住院原因

示例:

case admission add P001 W1 B001 "高烧需要住院观察"

3.5 患者出院

case discharge <patientId> [summary]

为患者的最新住院记录标记为已出院。

参数:

  • patientId: 患者ID
  • summary: (可选) 出院小结

示例:

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: 初始化 PatientCaseService
  • include/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 张三 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. 编译与运行

编译

cd HIS
mkdir -p build
cd build
cmake ..
make

运行

./his

演示脚本

./demo_case_and_log.sh

9. 技术细节

时间戳处理

所有医疗记录都包含时间戳Unix时间便于按时间排序和查询。

数据完整性

  • 诊断和药物记录在添加时自动获取时间戳
  • 住院时间在入院时记录,出院时记录更新
  • 所有操作都被记录到日志

性能考虑

  • 病例数据存储在内存中LinkedList
  • 日志可配置自动刷新磁盘
  • 支持批量查询for_each

10. 扩展可能性

未来可增加的功能:

  1. 数据库存储: 将病例和日志持久化到数据库
  2. 查询系统: 按日期、医生、病症等条件查询
  3. 报表系统: 生成患者费用报表、医生工作量统计等
  4. 身份验证: 添加用户认证和权限管理
  5. 加密: 对敏感医疗信息进行加密存储
  6. 数据导入导出: 支持Excel/CSV格式

版本: 1.0
最后更新: 2026-04-01