2025-04-30 17:28:58 +01:00

231 lines
5.0 KiB
TypeScript

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
}
}