import {DashboardPageType, Departments, DoctorGrade, UserPermissionLevel, UserType} from "./hms_enums"; export const SORT_SYMBOLS = { asc: "▲", desc: "▼", } export const WardTypes = { "GENERAL": "General Ward", // 普通病房 "ICU": "Intensive Care Unit", // 重症监护室 "ISOLATION": "Isolation", // 隔离病房 "MATERNITY": "Maternity", // 产科病房 "PEDIATRIC": "Pediatric" // 儿科病房 } export interface OutletContextType { loginUserInfo: LoginUserInfo | null; refreshMyInfo: () => void; changePage: (pageType: DashboardPageType, navigateTo?: string) => void; } interface IKeyString { [key: string]: any; } export interface BaseRetData extends IKeyString { success: boolean, message: string, data?: any } export interface BaseUserData extends IKeyString { birth_date: string, email: string, gender: string, id: number, name: string, phone: string, title: string, } export interface PatientData extends BaseUserData { address: string postcode: string } export interface DoctorData extends BaseUserData { grade: DoctorGrade, is_resigned: boolean } export interface DoctorTeam extends IKeyString { consultant_id: number, department: Departments, id: number, is_admin_team: boolean, } export interface LoginUserInfo extends IKeyString { user_type: UserType, user_permission: UserPermissionLevel, patient_data?: PatientData doctor_data?: DoctorDataWithPermission doctor_teams?: DoctorTeamInfo[] } export interface Login extends BaseRetData { data?: { token: string, expire_at: number, user_info: LoginUserInfo } } export interface UserInfo extends BaseRetData { data?: LoginUserInfo } export interface WardInfo extends IKeyString { current_occupancy: number, id: number, name: string, total_capacity: number, type: keyof typeof WardTypes, } export interface WardListInfo extends IKeyString { wards: WardInfo[], total_pages: number } export interface GetWardList extends BaseRetData { data: WardListInfo } export interface GetWardPatients extends BaseRetData { data: { patients: PatientData[], total_pages: number, ward: WardInfo } } export interface DoctorDataWithPermission extends DoctorData { is_admin: boolean } export interface DoctorListInfo extends IKeyString { doctors: DoctorDataWithPermission[], total_pages: number } export interface GetDoctorList extends BaseRetData { data: DoctorListInfo } export interface UserLoginNameAndPwd extends BaseRetData { data?: { username: string, password: string } } export interface PatientDataWithWard extends PatientData { ward?: WardInfo } export interface PatientDataWithWardAndAdmission extends PatientDataWithWard { admission?: AdmissionInfo } export interface GetPatientList extends BaseRetData { data: { patients: PatientDataWithWardAndAdmission[], total_pages: number } } export interface DoctorTeamInfo extends DoctorTeam { members: DoctorData[] } export interface GetTeamList extends BaseRetData { data: { teams: DoctorTeamInfo[], total_pages: number } } export interface GetTeamInfo extends BaseRetData { data: { members: DoctorData[], team: DoctorTeamInfo, } } export interface PatientBookingInfo extends IKeyString { id: number, patient_id: number, category: string, appointment_time: number, // timestamp description: string, approved: boolean, feedback: string | null, assigned_team: number | null, admitted: boolean, discharged: boolean, } export interface AdmissionInfo extends IKeyString { admitted_at: number, // timestamp appointment_id: number, consultant_id: number, id: number, patient_id: number, team_id: number, ward_id: number } export interface PatientBookingInfoWithAdmission extends PatientBookingInfo { admission: AdmissionInfo } export interface GetPatientBookingList extends BaseRetData { data: { appointments: PatientBookingInfo[], total_pages: number } } export interface GetAppointments extends BaseRetData { data: { appointments: PatientBookingInfo[], "total_pages": number } } export interface GetDoctorAppointments extends BaseRetData { data: { appointments: PatientBookingInfoWithAdmission[] } } export interface TreatmentInfo extends IKeyString { appointment_id: number, doctor_id: number, id: number, patient_id: number, treat_info: string, treated_at: number, // timestamp } export interface TreatmentInfoWithDoctorInfo extends TreatmentInfo { doctor_info: DoctorData, team: DoctorTeamInfo } export interface GetTreatmentRecords extends BaseRetData { data: { // patient: PatientData, treatments: TreatmentInfoWithDoctorInfo[], total_pages: number } } export interface GetMyWard extends BaseRetData { data: { ward?: WardInfo } }