#ifndef PATIENT_CASE_H #define PATIENT_CASE_H #include #include #include 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 DiagnosisRecords; // 诊断记录 std::vector MedicineRecords; // 药房记录 std::vector CheckRecords; // 检查记录 std::vector AdmissionRecords; // 住院记录 std::vector AppointmentRecords; // 预约记录 std::vector 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