import {z} from 'zod' export type GetApiHospitalstaysIdArgs = {id: string}; export type GetApiHospitalstaysIdOptions = {baseUrl?: string | undefined, Bearer?: string | undefined, fetch?: typeof fetch | undefined}; export const hospitalStayAcuity = z.enum(["stable", "watch", "critical"]); export const hospitalStayStatus = z.enum(["Active", "Discharged", "Closed"]); export const treatmentAuthorizationDto = z.object({approvedMin: z.union([z.number(), z.string()]).nullable().optional(), approvedMax: z.union([z.number(), z.string()]).nullable().optional(), deliveredAmount: z.union([z.number(), z.string()]).optional(), projectedAmount: z.union([z.number(), z.string()]).optional(), unapprovedAmount: z.union([z.number(), z.string()]).optional(), currency: z.string().optional()}); export const hospitalStayDto = z.object({id: z.string().optional(), patientId: z.string().optional(), clientId: z.string().optional(), appointmentId: z.string().nullable().optional(), caseId: z.string().nullable().optional(), locationId: z.string().nullable().optional(), locationName: z.string().nullable().optional(), attendingUserId: z.string().nullable().optional(), attendingName: z.string().nullable().optional(), assignedUserIds: z.array(z.string()).optional(), assignedNames: z.array(z.string()).optional(), acuity: hospitalStayAcuity.optional(), status: hospitalStayStatus.optional(), admittedAt: z.string().optional(), dischargedAt: z.string().nullable().optional(), closedAt: z.string().nullable().optional(), estimateId: z.string().nullable().optional(), reasonForStay: z.string().nullable().optional(), note: z.string().nullable().optional(), createdAt: z.string().optional(), updatedAt: z.string().optional(), authorization: treatmentAuthorizationDto.nullable().optional()}); export const treatmentBoardPatientDto = z.object({id: z.string().optional(), name: z.string().optional(), species: z.string().nullable().optional(), breed: z.string().nullable().optional(), sex: z.string().nullable().optional(), ageDisplay: z.string().nullable().optional(), dateOfBirth: z.string().nullable().optional(), weightKg: z.union([z.number(), z.string()]).nullable().optional(), weightTakenAt: z.string().nullable().optional(), photoUrl: z.string().nullable().optional(), clientName: z.string().nullable().optional()}); export const treatmentOrderKind = z.enum(["medication", "fluid", "diagnostic", "monitoring", "procedure", "nursing", "nutrition", "communication", "task"]); export const treatmentOrderState = z.enum(["active", "held", "discontinued", "completed"]); export const treatmentPriority = z.enum(["routine", "important", "critical"]); export const treatmentScheduleType = z.enum(["once", "interval", "times", "continuous", "prn"]); export const treatmentMedicationDetailsDto = z.object({drug: z.string().nullable().optional(), dose: z.union([z.number(), z.string()]).nullable().optional(), doseUnit: z.string().nullable().optional(), calculatedDose: z.union([z.number(), z.string()]).nullable().optional(), calculatedDoseUnit: z.string().nullable().optional(), concentration: z.union([z.number(), z.string()]).nullable().optional(), concentrationUnit: z.string().nullable().optional(), calculatedVolumeMl: z.union([z.number(), z.string()]).nullable().optional(), route: z.string().nullable().optional(), maxDose: z.union([z.number(), z.string()]).nullable().optional()}); export const treatmentFluidDetailsDto = z.object({fluid: z.string().nullable().optional(), rateMlHr: z.union([z.number(), z.string()]).nullable().optional(), bolusMlKg: z.union([z.number(), z.string()]).nullable().optional(), calculatedBolusMl: z.union([z.number(), z.string()]).nullable().optional(), additives: z.array(z.string()).nullable().optional()}); export const treatmentOccurrenceStatus = z.enum(["pending", "completed", "skipped", "held"]); export const treatmentOccurrenceKind = z.enum(["clinical", "billing"]); export const treatmentOccurrenceDto = z.object({id: z.string().optional(), orderId: z.string().optional(), dueAt: z.string().optional(), status: treatmentOccurrenceStatus.optional(), kind: treatmentOccurrenceKind.optional(), completedAt: z.string().nullable().optional(), completedById: z.string().nullable().optional(), completedBy: z.string().nullable().optional(), actualValue: z.string().nullable().optional(), note: z.string().nullable().optional(), skippedReason: z.string().nullable().optional(), heldAt: z.string().nullable().optional(), occurrenceKey: z.string().optional(), estimateLineItemId: z.string().nullable().optional()}); export const treatmentOrderEventAction = z.enum(["created", "edited", "completed", "skipped", "held", "resumed", "discontinued", "delayed", "charge_captured", "charge_capture_failed"]); export const treatmentOrderEventDto = z.object({id: z.string().optional(), orderId: z.string().optional(), occurrenceId: z.string().nullable().optional(), action: treatmentOrderEventAction.optional(), at: z.string().optional(), actor: z.string().optional(), actorUserId: z.string().nullable().optional(), detail: z.string().nullable().optional()}); export const treatmentOrderDto = z.object({id: z.string().optional(), stayId: z.string().optional(), kind: treatmentOrderKind.optional(), title: z.string().optional(), subtitle: z.string().nullable().optional(), state: treatmentOrderState.optional(), priority: treatmentPriority.optional(), scheduleType: treatmentScheduleType.optional(), scheduleLabel: z.string().nullable().optional(), intervalMinutes: z.union([z.number().int(), z.string()]).nullable().optional(), startAt: z.string().nullable().optional(), endAt: z.string().nullable().optional(), times: z.array(z.string()).optional(), maxOccurrences: z.union([z.number().int(), z.string()]).nullable().optional(), medication: treatmentMedicationDetailsDto.nullable().optional(), fluid: treatmentFluidDetailsDto.nullable().optional(), instructions: z.string().nullable().optional(), resultUnit: z.string().nullable().optional(), serviceCatalogItemId: z.string().nullable().optional(), inventoryItemId: z.string().nullable().optional(), billableItemId: z.string().nullable().optional(), createdBy: z.string().optional(), createdById: z.string().nullable().optional(), createdAt: z.string().optional(), updatedAt: z.string().optional(), heldAt: z.string().nullable().optional(), discontinuedAt: z.string().nullable().optional(), completedAt: z.string().nullable().optional(), occurrences: z.array(treatmentOccurrenceDto).optional(), events: z.array(treatmentOrderEventDto).optional()}); export const treatmentBoardEntryDto = z.object({stay: hospitalStayDto.optional(), patient: treatmentBoardPatientDto.optional(), orders: z.array(treatmentOrderDto).optional(), lastSeenAt: z.string().nullable().optional(), changedSinceLastSeen: z.union([z.number().int(), z.string()]).optional()}); export const validateResponse = async ( schema: { readonly '~standard': { readonly validate: (value: unknown) => ({ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }) | Promise<{ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }> } }, value: unknown ): Promise => { const result = await schema['~standard'].validate(value) if (result.issues !== undefined) { const detail = result.issues .map(({ message, path }) => path?.length ? `${path.map((segment) => String(typeof segment === 'object' ? segment.key : segment)).join('.')}: ${message}` : message ) .join('; ') throw new Error(`Response does not match the schema: ${detail}`, { cause: { issues: result.issues } }) } return result.value }; /** * GET /hospitalstays/{id} */ export const getApiHospitalstaysId = async (args: GetApiHospitalstaysIdArgs, options?: GetApiHospitalstaysIdOptions) => { const {baseUrl = "https://api.clinicos.vet/backend/business", fetch: fetchFn = fetch, Bearer} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") if (Bearer !== undefined) headers.set('authorization', `Bearer ${Bearer}`) const url = `${baseUrl.replace(/\/+$/, '')}/hospitalstays/${encodeURIComponent(String(args.id))}${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "GET", headers}) if (!res.ok) throw new Error(`Request failed with status ${res.status}`, {cause: {status: res.status, body: await res.text()}}) return validateResponse(treatmentBoardEntryDto, await res.json()) };