export type Person = { name: string; age: number; email: string; } export interface User { id: number; name?: string | null; email: string; mobile: string; profilePicUrl?: string; address?: string; joinDate?: Date; specializations: DoctorSpecialization[] | null; qualifications?: string; hospital?: string; hospitalId?: number; consultationFee?: string; } export interface Hospital { id: number; name: string; description?: string; address: string; adminId?: number; adminName?: string; hospitalImages?: string[] } export interface DoctorSpecialization { id: number; name: string | null; description: string | null; } export interface DoctorInfo { id: number; qualifications: string | null; dailyTokenCount: number; consultationFee: number | string; } export interface Doctor { id: number; name: string; username?: string | null; email?: string | null; mobile?: string; doctorInfo?: DoctorInfo; specializations?: DoctorSpecialization[] | null; qualifications: string | null; } export interface DoctorDetails { id: number; name: string; username?: string | null; email?: string | null; mobile?: string; profilePicUrl?: string | null; address?: string | null; joinDate?: string | null; role: string; roles: string[]; doctorId: number; qualifications?: string | null; dailyTokenCount: number; consultationFee: number; hospital?: string; hospitalId?: number; description?: string | null; yearsOfExperience?: number | null; specializations: { id: number; name: string; description: string | null; }[]; isConsultationsPaused: boolean; pauseReason: string | null; } // Define local DashboardDoctor type based on the API response structure export interface DashboardDoctor { availableTokens: number; consultationFee: string; consultationsDone: number; currentConsultationNumber: number; id: number; isAvailable: boolean; name: string; profilePicUrl?: string | null; qualifications: string | null; tokensIssuedToday: number; totalTokenCount: number; } // Token types export interface TokenDoctor { id: number; name: string; mobile: string; profilePicUrl: string | null; } export interface UpcomingToken { id: number; tokenDate: string; queueNumber: number; description: string | null; createdAt: string; doctor: TokenDoctor; currentConsultationNumber?: number; // Current consultation number for the doctor } export interface PastToken { id: number; tokenDate: string; queueNumber: number; description: string | null; createdAt: string; doctor: TokenDoctor; status?: 'COMPLETED' | 'MISSED' | 'CANCELLED'; consultationNotes?: string | null; } export interface UpcomingAppointment { id: number; doctorName: string; doctorImageUrl?: string; date: string; hospital: string; queueNumber: number; status: string; } export interface MyTokensResponse { message: string; tokens: UpcomingToken[]; } export interface PastTokensResponse { message: string; tokens: PastToken[]; } export interface BookTokenPayload { doctorId: number; userId: number; tokenDate: string; description?: string; } export interface BookTokenResponse { message: string; token: { id: number; doctorId: number; userId: number; tokenDate: string; queueNumber: number; description: string | null; createdAt: string; }; } // Doctor availability types export interface DoctorAvailability { id: number; doctorId: number; date: string; totalTokenCount: number; filledTokenCount: number; consultationsDone: number; isStopped: boolean; availableTokens: number; isPaused: boolean; isLeave: boolean; pauseReason: string | null; } export interface DoctorAvailabilityWithDate { date: string; availability: DoctorAvailability | null; } export interface DoctorAvailabilityResponse { message: string; doctorId: number; availabilities: DoctorAvailabilityWithDate[]; } export interface DoctorAvailabilityPayload { doctorId: number; date: string; tokenCount: number; isStopped?: boolean; filledTokenCount?: number; consultationsDone?: number; } export interface token_user { id: number; name: string; mobile: string; age: number; gender: string; } export interface ProductSummary { id: number; name: string; shortDescription?: string; price: number; unit: string; isOutOfStock: boolean; nextDeliveryDate: string | null; images: string[]; } export interface GetSlotsProductIdsPayload { slotIds: number[]; } export interface GetSlotsProductIdsResponse { [slotId: number]: number[]; } export interface Order { id: string; orderId: string; readableId: string; customerName: string; address: string; totalAmount: number; items: { name: string; quantity: number; price: number; amount: number; unit: string; isPackaged: boolean; isPackageVerified: boolean; }[]; deliveryTime: string; status: 'pending' | 'delivered' | 'cancelled'; isPackaged: boolean; isDelivered: boolean; isCod: boolean; paymentMode: string; paymentStatus: string; slotId: number; } export interface Slot { id: number; deliveryTime: string; freezeTime: string; isActive: boolean; deliverySequence?: number[]; } export interface Coupon { id: number; couponCode: string; isUserBased: boolean; discountPercent: string | null; flatDiscount: string | null; minOrder: string | null; targetUser: { id: number; name: string | null; mobile: string; } | null; productIds: number[] | null; createdBy: number; creator: { id: number; name: string | null; } | null; maxValue: string | null; isApplyForAll: boolean; validTill: Date | null; maxLimitForUser: number | null; isInvalidated: boolean; createdAt: Date; } export interface CreateCouponPayload { couponCode: string; discountPercent?: number; flatDiscount?: number; minOrder?: number; maxValue?: number; validTill?: string; maxLimitForUser?: number; isApplyForAll: boolean; isUserBased: boolean; targetUsers?: number[]; productIds?: number[]; applicableUsers?: number[]; applicableProducts?: number[]; exclusiveApply?: boolean; } // Patient History Types export interface PatientHistoryToken { id: number; queueNum: number; tokenDate: string; doctorName: string; status: string; description: string; consultationNotes?: string; } export interface PatientHistory { id: number; name: string; mobile: string; age: number; gender: string; totalTokens: number; completedTokens: number; upcomingTokens: number; firstVisitDate: string; lastVisitDate: string; tokens: PatientHistoryToken[]; } export interface GetHospitalPatientHistoryResponse { message: string; patients: PatientHistory[]; totalCount: number; page: number; limit: number; } export interface PatientHistoryFilters { patientIds?: string[]; doctorIds?: string[]; statuses?: string[]; startDate?: string | null; endDate?: string | null; } // Export the types from token-types.ts export * from './token-types';