Files
HIS-GUI/include/models/patient_case.h
2026-04-07 17:18:33 +08:00

207 lines
7.2 KiB
C++
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.
#ifndef PATIENT_CASE_H
#define PATIENT_CASE_H
#include <string>
#include <vector>
#include <ctime>
class JsonValue;
/**
* 诊断记录
*/
struct DiagnosisRecord {
std::string DoctorID; // 医生ID
std::string Diagnosis; // 诊断内容
std::string Prescription; // 处方(可选)
std::string Remarks; // 备注
time_t Timestamp; // 时间戳
DiagnosisRecord();
DiagnosisRecord(const std::string& doctorId,
const std::string& diagnosis,
const std::string& prescription = "",
const std::string& remarks = "");
JsonValue toJson() const;
static DiagnosisRecord fromJson(const JsonValue& v);
};
/**
* 药房记录 - 记录给病人开的药物
*/
struct MedicineRecord {
std::string MedicineID; // 药物ID
std::string MedicineName; // 药物名称
int Quantity; // 数量
std::string Usage; // 用法(如:一日三次,饭后服用)
double UnitPrice; // 单价
std::string DoctorID; // 开药医生ID
time_t Timestamp; // 时间戳
MedicineRecord();
MedicineRecord(const std::string& medicineId,
const std::string& medicineName,
int quantity,
const std::string& usage,
double unitPrice,
const std::string& doctorId);
JsonValue toJson() const;
static MedicineRecord fromJson(const JsonValue& v);
double getTotalPrice() const { return Quantity * UnitPrice; }
};
/**
* 检查记录 - 记录给病人开的检查项目
*/
struct CheckRecord {
std::string CheckID; // 检查ID
std::string CheckName; // 检查名称
std::string DepartmentID; // 归属科室ID
double Price; // 检查价格
std::string DoctorID; // 开单医生ID
time_t Timestamp; // 时间戳
CheckRecord();
CheckRecord(const std::string& checkId,
const std::string& checkName,
const std::string& deptId,
double price,
const std::string& doctorId);
JsonValue toJson() const;
static CheckRecord fromJson(const JsonValue& v);
};
/**
* 住院记录
*/
struct AdmissionRecord {
std::string WardID; // 病房ID
std::string BedID; // 床位ID
time_t AdmissionTime; // 入院时间
time_t DischargeTime; // 出院时间0表示未出院
std::string Reason; // 住院原因
std::string DischargeSummary; // 出院小结
AdmissionRecord();
AdmissionRecord(const std::string& wardId,
const std::string& bedId,
const std::string& reason = "");
JsonValue toJson() const;
static AdmissionRecord fromJson(const JsonValue& v);
bool isCurrentlyAdmitted() const { return DischargeTime == 0; }
};
/**
* 手术记录
*/
struct SurgeryRecord {
std::string SurgeryName; // 手术名称
std::string SurgeryType; // 手术类型(如:微创、开放手术等)
std::string SurgeonID; // 主刀医生ID
std::string AssistantDoctorID; // 助手医生ID可选
std::string AnesthesiaType; // 麻醉方式
std::string AnesthesiologistID; // 麻醉医生ID
std::string WardID; // 病房ID术后观察用
std::string BedID; // 床位ID
std::string Diagnosis; // 术前诊断
std::string Procedure; // 手术过程
std::string Complications; // 术中并发症(如有)
std::string BloodLoss; // 出血量
std::string Remarks; // 备注
time_t SurgeryTime; // 手术时间
int Duration; // 手术时长(分钟)
double Fee; // 手术费用
SurgeryRecord();
SurgeryRecord(const std::string& surgeryName,
const std::string& surgeryType,
const std::string& surgeonId,
const std::string& anesthesiaType,
const std::string& diagnosis,
const std::string& procedure);
JsonValue toJson() const;
static SurgeryRecord fromJson(const JsonValue& v);
};
// ============= AppointmentRecord =============
struct AppointmentRecord {
std::string DoctorID;
std::string PatientID;
std::string AppointmentDate; // YYYY-MM-DD 或可读文本
std::string Notes;
time_t Timestamp;
AppointmentRecord();
AppointmentRecord(const std::string& doctorId,
const std::string& patientId,
const std::string& appointmentDate,
const std::string& notes = "");
JsonValue toJson() const;
static AppointmentRecord fromJson(const JsonValue& v);
};
/**
* 患者病例 - 包含患者的所有医疗记录
*/
class PatientCase {
public:
std::string PatientID; // 患者ID
std::vector<DiagnosisRecord> DiagnosisRecords; // 诊断记录
std::vector<MedicineRecord> MedicineRecords; // 药房记录
std::vector<CheckRecord> CheckRecords; // 检查记录
std::vector<AdmissionRecord> AdmissionRecords; // 住院记录
std::vector<AppointmentRecord> AppointmentRecords; // 预约记录
std::vector<SurgeryRecord> SurgeryRecords; // 手术记录
time_t CreatedTime; // 创建时间
time_t LastModifiedTime; // 最后修改时间
PatientCase();
explicit PatientCase(const std::string& patientID);
// 诊断记录操作
bool addDiagnosisRecord(const DiagnosisRecord& record);
size_t getDiagnosisRecordCount() const { return DiagnosisRecords.size(); }
const DiagnosisRecord* getLatestDiagnosis() const;
// 药房记录操作
bool addMedicineRecord(const MedicineRecord& record);
size_t getMedicineRecordCount() const { return MedicineRecords.size(); }
double getTotalMedicineCost() const;
// 检查录操作
bool addCheckRecord(const CheckRecord& record);
size_t getCheckRecordCount() const { return CheckRecords.size(); }
double getTotalCheckCost() const;
// 住院记录操作
bool addAdmissionRecord(const AdmissionRecord& record);
bool dischargeFromLatestAdmission(const std::string& summary);
size_t getAdmissionRecordCount() const { return AdmissionRecords.size(); }
const AdmissionRecord* getCurrentAdmission() const; // 获取当前住院记录(如果有)
const AdmissionRecord* getLatestAdmission() const; // 获取最后一次住院记录
// 手术记录操作
bool addSurgeryRecord(const SurgeryRecord& record);
size_t getSurgeryRecordCount() const { return SurgeryRecords.size(); }
const SurgeryRecord* getLatestSurgery() const;
// 预约记录操作
bool addAppointmentRecord(const AppointmentRecord& record);
size_t getAppointmentRecordCount() const { return AppointmentRecords.size(); }
const AppointmentRecord* getLatestAppointment() const;
// 序列化
JsonValue toJson() const;
static PatientCase fromJson(const JsonValue& v);
};
#endif