207 lines
7.2 KiB
C++
207 lines
7.2 KiB
C++
#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
|