import {z} from 'zod' export type PriorAuthorizationExpand = 'requesting_provider' | 'servicing_provider' | 'servicing_location' | 'files'; export type GetApiV1PriorAuthorizationsIdArgs = {id: string, 'expand[]'?: (Array | null) | undefined}; export type GetApiV1PriorAuthorizationsIdOptions = {baseUrl: string, APIKeyHeader?: string | undefined, fetch?: typeof fetch | undefined}; export const priorAuthorizationTypeEnum = z.enum(["assessment", "treatment", "reassessment", "reassessment_and_treatment"]); export const priorAuthorizationStatusEnum = z.enum(["pending", "submitted", "information_needed", "decided", "cancelled"]); export const priorAuthorizationDecisionEnum = z.enum(["approved", "partially_approved", "denied", "no_authorization_required"]); export const priorAuthorizationAppealStatusEnum = z.enum(["requested", "appealing", "appeal_approved", "appeal_denied", "not_appealing"]); export const appealAvailabilitySlot = z.object({day: z.string(), start: z.string(), end: z.string()}); export const priorAuthorizationInsurance = z.object({id: z.string(), name: z.string(), trading_partner_service_id: z.string().nullable().optional()}); export const priorAuthorizationProviderLocation = z.object({id: z.string(), name: z.string()}); export const priorAuthorizationProvider = z.object({id: z.string(), name: z.string(), npi: z.string(), tax_id: z.string().nullable().optional(), type: z.string(), is_active: z.boolean(), location: priorAuthorizationProviderLocation.nullable().optional()}); export const priorAuthorizationServicingLocation = z.object({id: z.string(), name: z.string(), address: z.string(), address_2: z.string().nullable().optional(), city: z.string(), state: z.string(), zip_code: z.string()}); export const priorAuthorizationUser = z.object({id: z.string(), name: z.string().nullable().optional(), email: z.string().nullable().optional(), image: z.string().nullable().optional(), user_type: z.string().nullable().optional()}); export const priorAuthorizationSpecialtyEnum = z.enum(["aba", "speech_therapy", "occupational_therapy", "physical_therapy", "mental_behavioral_health"]); export const priorAuthorizationUnitTypeEnum = z.enum(["units", "visits", "hours"]); export const cptModifier = z.enum(["cf", "hm", "ho", "hn", "ad", "ae", "pt", "af", "ot", "hp", "gt", "u1", "u2", "u3", "u4", "u5", "u6", "u7", "u8", "gp", "go", "gn", "cq", "co", "kx", "gq", "fq", "ga", "gx", "gy", "gz", "lt", "rt", "xe", "xs", "xu", "59", "76", "77", "93", "95", "96", "97"]); export const serviceCptCode = z.object({code: z.string(), units: z.string(), unit_type: priorAuthorizationUnitTypeEnum.optional(), modifiers: z.array(cptModifier).nullable().optional()}); export const placeOfService = z.enum(["telehealth_other_home", "school", "telehealth_home", "office", "home", "independent_clinic", "community_mental_health_center", "other"]); export const priorAuthorizationServiceResponse = z.object({specialty: priorAuthorizationSpecialtyEnum.nullable().optional(), service_type_codes: z.array(z.string()).nullable().optional(), start_date: z.string().nullable().optional(), end_date: z.string().nullable().optional(), requested_visits: z.number().int().nullable().optional(), requested_weeks: z.number().int().nullable().optional(), cpt_codes: z.array(serviceCptCode).nullable().optional(), locations: z.array(placeOfService).nullable().optional()}); export const priorAuthorizationResultResponse = z.object({start_date: z.string().nullable().optional(), end_date: z.string().nullable().optional(), approved_visits: z.number().int().nullable().optional(), approved_weeks: z.number().int().nullable().optional(), cpt_codes: z.array(serviceCptCode).nullable().optional(), locations: z.array(placeOfService).nullable().optional(), authorization_number: z.string().nullable().optional(), cpt_authorization_numbers: z.record(z.string(), z.string()).nullable().optional(), reference_number: z.string().nullable().optional(), notes: z.string().nullable().optional(), ai_summary: z.string().nullable().optional(), ai_summary_generated_at: z.string().nullable().optional()}); export const documentType = z.enum(["referral", "authorization", "intake_documents", "legal_documents", "financial_documents", "insurance_card", "billing", "spam", "plan_of_care", "diagnosis", "medical_records", "other"]); export const priorAuthorizationFile = z.object({id: z.string(), name: z.string(), display_name: z.string().nullable().optional(), path: z.string(), type: z.string().nullable().optional(), size: z.number().int().nullable().optional(), document_type: documentType.nullable().optional(), metadata: z.record(z.string(), z.unknown()).nullable().optional(), created_at: z.string(), url: z.string().nullable().optional()}); export const priorAuthorizationCancellationReasonEnum = z.enum(["duplicate_already_submitted", "no_longer_needed", "submitted_directly_to_payor", "patient_no_longer_active", "entered_in_error", "other"]); export const priorAuthorizationResponse = z.object({id: z.string(), company_id: z.string(), created_by_user_id: z.string().nullable().optional(), type: priorAuthorizationTypeEnum, status: priorAuthorizationStatusEnum, decision: priorAuthorizationDecisionEnum.nullable().optional(), appeal_status: priorAuthorizationAppealStatusEnum.nullable().optional(), appeal_notes: z.string().nullable().optional(), appeal_number: z.string().nullable().optional(), appeal_availability: z.array(appealAvailabilitySlot).nullable().optional(), notes: z.string().nullable().optional(), patient_id: z.string(), patient_first_name: z.string(), patient_last_name: z.string(), patient_date_of_birth: z.string(), payor_member_id: z.string().nullable().optional(), payor_insurance_id: z.string().nullable().optional(), payor_insurance_display_name: z.string().nullable().optional(), payor_insurance: priorAuthorizationInsurance.nullable().optional(), requesting_provider_id: z.string().nullable().optional(), servicing_provider_id: z.string().nullable().optional(), servicing_location_id: z.string().nullable().optional(), organization_id: z.string().nullable().optional(), requesting_provider: priorAuthorizationProvider.nullable().optional(), servicing_provider: priorAuthorizationProvider.nullable().optional(), servicing_location: priorAuthorizationServicingLocation.nullable().optional(), created_by_user: priorAuthorizationUser.nullable().optional(), service: priorAuthorizationServiceResponse.nullable().optional(), result: priorAuthorizationResultResponse.nullable().optional(), files: z.array(priorAuthorizationFile).nullable().optional(), file_count: z.number().int().nullable().optional(), submitted_at: z.string().nullable().optional(), decided_at: z.string().nullable().optional(), appeal_submitted_at: z.string().nullable().optional(), last_followed_up_at: z.string().nullable().optional(), scheduled_submission_date: z.string().nullable().optional(), completed: z.boolean().optional(), completed_at: z.string().nullable().optional(), completed_by_user_id: z.string().nullable().optional(), completed_by_user: priorAuthorizationUser.nullable().optional(), cancellation_reason: priorAuthorizationCancellationReasonEnum.nullable().optional(), cancellation_note: z.string().nullable().optional(), cancelled_at: z.string().nullable().optional(), active: z.boolean(), created_at: z.string(), updated_at: z.string()}); 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 }; /** * Retrieve a prior authorization * * GET /v1/prior-authorizations/{id} * * Also accepts auth: HTTPBearer */ export const getApiV1PriorAuthorizationsId = async (args: GetApiV1PriorAuthorizationsIdArgs, options: GetApiV1PriorAuthorizationsIdOptions) => { const {baseUrl, fetch: fetchFn = fetch, APIKeyHeader} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") for (const item of args['expand[]'] ?? []) query.append("expand[]", String(item)) if (APIKeyHeader !== undefined) headers.set("X-API-Key", APIKeyHeader) const url = `${baseUrl.replace(/\/+$/, '')}/v1/prior-authorizations/${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(priorAuthorizationResponse, await res.json()) };