import {z} from 'zod' export type GetApiApi20MedicationsArgs = {discontinued?: boolean | undefined, document_date__gt?: string | undefined, document_date__gte?: string | undefined, document_date__lt?: string | undefined, document_date__lte?: string | undefined, limit?: number | undefined, offset?: number | undefined, order_by?: string | undefined, patient?: Array | undefined, permanent?: boolean | undefined, practice?: Array | undefined, thread?: Array | undefined}; export type GetApiApi20MedicationsOptions = {baseUrl?: string | undefined, oauth2?: string | undefined, fetch?: typeof fetch | undefined}; export const serviceLocationPlaceOfServiceEnum = z.enum(["Ambulance - Air or Water", "Ambulance - Land", "Ambulatory Surgical Center", "Assisted Living Facility", "Birthing Center", "Community Mental Health Center", "Comprehensive Inpatient Rehabilitation Facility", "Comprehensive Outpatient Rehabilitation Facility", "Custodial Care Facility", "Emergency Room - Hospital", "End-Stage Renal Disease Treatment Facility", "Federally Qualified Health Center", "Group Home", "Home", "Homeless Shelter", "Hospice", "Independent Clinic", "Independent Laboratory", "Indian Health ServiceFree-standing Facility", "Indian Health ServiceProvider-based Facility", "Inpatient Hospital", "Inpatient Psychiatric Facility", "Intermediate Care Facility/Individuals with Intellectual Disabilities", "Mass Immunization Center", "Military Treatment Facility", "Mobile Unit", "Non-residential Substance Abuse Treatment Facility", "Nursing Facility", "Off Campus Outpatient-Hospital", "Office", "On Campus-Outpatient Hospital", "Other Place of Service", "Outreach Site/Street", "Pharmacy", "Place of Employment-Worksite", "Prison/Correctional Facility", "Programs of All-Inclusive Care for the Elderly (PACE) Center", "Psychiatric Facility-Partial Hospitalization", "Psychiatric Residential Treatment Center", "Public Health Clinic", "Residential Substance Abuse Treatment Facility", "Rural Health Clinic", "School", "Skilled Nursing Facility", "Telehealth Provided Other than in Patient’s Home", "Telehealth Provided in Patient’s Home", "Temporary Lodging", "Tribal 638Free-standingFacility", "Tribal 638Provider-basedFacility", "Urgent Care Facility", "Walk-in Retail Health Clinic"]); export const serviceLocationStatusEnum = z.enum(["active", "inactive", "suspended"]); export const timezoneEnum = z.enum(["Africa/Abidjan", "Africa/Accra", "Africa/Addis_Ababa", "Africa/Algiers", "Africa/Asmara", "Africa/Bamako", "Africa/Bangui", "Africa/Banjul", "Africa/Bissau", "Africa/Blantyre", "Africa/Brazzaville", "Africa/Bujumbura", "Africa/Cairo", "Africa/Casablanca", "Africa/Ceuta", "Africa/Conakry", "Africa/Dakar", "Africa/Dar_es_Salaam", "Africa/Djibouti", "Africa/Douala", "Africa/El_Aaiun", "Africa/Freetown", "Africa/Gaborone", "Africa/Harare", "Africa/Johannesburg", "Africa/Juba", "Africa/Kampala", "Africa/Khartoum", "Africa/Kigali", "Africa/Kinshasa", "Africa/Lagos", "Africa/Libreville", "Africa/Lome", "Africa/Luanda", "Africa/Lubumbashi", "Africa/Lusaka", "Africa/Malabo", "Africa/Maputo", "Africa/Maseru", "Africa/Mbabane", "Africa/Mogadishu", "Africa/Monrovia", "Africa/Nairobi", "Africa/Ndjamena", "Africa/Niamey", "Africa/Nouakchott", "Africa/Ouagadougou", "Africa/Porto-Novo", "Africa/Sao_Tome", "Africa/Tripoli", "Africa/Tunis", "Africa/Windhoek", "America/Adak", "America/Anchorage", "America/Anguilla", "America/Antigua", "America/Araguaina", "America/Argentina/Buenos_Aires", "America/Argentina/Catamarca", "America/Argentina/Cordoba", "America/Argentina/Jujuy", "America/Argentina/La_Rioja", "America/Argentina/Mendoza", "America/Argentina/Rio_Gallegos", "America/Argentina/Salta", "America/Argentina/San_Juan", "America/Argentina/San_Luis", "America/Argentina/Tucuman", "America/Argentina/Ushuaia", "America/Aruba", "America/Asuncion", "America/Atikokan", "America/Bahia", "America/Bahia_Banderas", "America/Barbados", "America/Belem", "America/Belize", "America/Blanc-Sablon", "America/Boa_Vista", "America/Bogota", "America/Boise", "America/Cambridge_Bay", "America/Campo_Grande", "America/Cancun", "America/Caracas", "America/Cayenne", "America/Cayman", "America/Chicago", "America/Chihuahua", "America/Ciudad_Juarez", "America/Costa_Rica", "America/Creston", "America/Cuiaba", "America/Curacao", "America/Danmarkshavn", "America/Dawson", "America/Dawson_Creek", "America/Denver", "America/Detroit", "America/Dominica", "America/Edmonton", "America/Eirunepe", "America/El_Salvador", "America/Fort_Nelson", "America/Fortaleza", "America/Glace_Bay", "America/Goose_Bay", "America/Grand_Turk", "America/Grenada", "America/Guadeloupe", "America/Guatemala", "America/Guayaquil", "America/Guyana", "America/Halifax", "America/Havana", "America/Hermosillo", "America/Indiana/Indianapolis", "America/Indiana/Knox", "America/Indiana/Marengo", "America/Indiana/Petersburg", "America/Indiana/Tell_City", "America/Indiana/Vevay", "America/Indiana/Vincennes", "America/Indiana/Winamac", "America/Inuvik", "America/Iqaluit", "America/Jamaica", "America/Juneau", "America/Kentucky/Louisville", "America/Kentucky/Monticello", "America/Kralendijk", "America/La_Paz", "America/Lima", "America/Los_Angeles", "America/Lower_Princes", "America/Maceio", "America/Managua", "America/Manaus", "America/Marigot", "America/Martinique", "America/Matamoros", "America/Mazatlan", "America/Menominee", "America/Merida", "America/Metlakatla", "America/Mexico_City", "America/Miquelon", "America/Moncton", "America/Monterrey", "America/Montevideo", "America/Montserrat", "America/Nassau", "America/New_York", "America/Nome", "America/Noronha", "America/North_Dakota/Beulah", "America/North_Dakota/Center", "America/North_Dakota/New_Salem", "America/Nuuk", "America/Ojinaga", "America/Panama", "America/Paramaribo", "America/Phoenix", "America/Port-au-Prince", "America/Port_of_Spain", "America/Porto_Velho", "America/Puerto_Rico", "America/Punta_Arenas", "America/Rankin_Inlet", "America/Recife", "America/Regina", "America/Resolute", "America/Rio_Branco", "America/Santarem", "America/Santiago", "America/Santo_Domingo", "America/Sao_Paulo", "America/Scoresbysund", "America/Sitka", "America/St_Barthelemy", "America/St_Johns", "America/St_Kitts", "America/St_Lucia", "America/St_Thomas", "America/St_Vincent", "America/Swift_Current", "America/Tegucigalpa", "America/Thule", "America/Tijuana", "America/Toronto", "America/Tortola", "America/Vancouver", "America/Whitehorse", "America/Winnipeg", "America/Yakutat", "Antarctica/Casey", "Antarctica/Davis", "Antarctica/DumontDUrville", "Antarctica/Macquarie", "Antarctica/Mawson", "Antarctica/McMurdo", "Antarctica/Palmer", "Antarctica/Rothera", "Antarctica/Syowa", "Antarctica/Troll", "Antarctica/Vostok", "Arctic/Longyearbyen", "Asia/Aden", "Asia/Almaty", "Asia/Amman", "Asia/Anadyr", "Asia/Aqtau", "Asia/Aqtobe", "Asia/Ashgabat", "Asia/Atyrau", "Asia/Baghdad", "Asia/Bahrain", "Asia/Baku", "Asia/Bangkok", "Asia/Barnaul", "Asia/Beirut", "Asia/Bishkek", "Asia/Brunei", "Asia/Chita", "Asia/Choibalsan", "Asia/Colombo", "Asia/Damascus", "Asia/Dhaka", "Asia/Dili", "Asia/Dubai", "Asia/Dushanbe", "Asia/Famagusta", "Asia/Gaza", "Asia/Hebron", "Asia/Ho_Chi_Minh", "Asia/Hong_Kong", "Asia/Hovd", "Asia/Irkutsk", "Asia/Jakarta", "Asia/Jayapura", "Asia/Jerusalem", "Asia/Kabul", "Asia/Kamchatka", "Asia/Karachi", "Asia/Kathmandu", "Asia/Khandyga", "Asia/Kolkata", "Asia/Krasnoyarsk", "Asia/Kuala_Lumpur", "Asia/Kuching", "Asia/Kuwait", "Asia/Macau", "Asia/Magadan", "Asia/Makassar", "Asia/Manila", "Asia/Muscat", "Asia/Nicosia", "Asia/Novokuznetsk", "Asia/Novosibirsk", "Asia/Omsk", "Asia/Oral", "Asia/Phnom_Penh", "Asia/Pontianak", "Asia/Pyongyang", "Asia/Qatar", "Asia/Qostanay", "Asia/Qyzylorda", "Asia/Riyadh", "Asia/Sakhalin", "Asia/Samarkand", "Asia/Seoul", "Asia/Shanghai", "Asia/Singapore", "Asia/Srednekolymsk", "Asia/Taipei", "Asia/Tashkent", "Asia/Tbilisi", "Asia/Tehran", "Asia/Thimphu", "Asia/Tokyo", "Asia/Tomsk", "Asia/Ulaanbaatar", "Asia/Urumqi", "Asia/Ust-Nera", "Asia/Vientiane", "Asia/Vladivostok", "Asia/Yakutsk", "Asia/Yangon", "Asia/Yekaterinburg", "Asia/Yerevan", "Atlantic/Azores", "Atlantic/Bermuda", "Atlantic/Canary", "Atlantic/Cape_Verde", "Atlantic/Faroe", "Atlantic/Madeira", "Atlantic/Reykjavik", "Atlantic/South_Georgia", "Atlantic/St_Helena", "Atlantic/Stanley", "Australia/Adelaide", "Australia/Brisbane", "Australia/Broken_Hill", "Australia/Darwin", "Australia/Eucla", "Australia/Hobart", "Australia/Lindeman", "Australia/Lord_Howe", "Australia/Melbourne", "Australia/Perth", "Australia/Sydney", "Canada/Atlantic", "Canada/Central", "Canada/Eastern", "Canada/Mountain", "Canada/Newfoundland", "Canada/Pacific", "Europe/Amsterdam", "Europe/Andorra", "Europe/Astrakhan", "Europe/Athens", "Europe/Belgrade", "Europe/Berlin", "Europe/Bratislava", "Europe/Brussels", "Europe/Bucharest", "Europe/Budapest", "Europe/Busingen", "Europe/Chisinau", "Europe/Copenhagen", "Europe/Dublin", "Europe/Gibraltar", "Europe/Guernsey", "Europe/Helsinki", "Europe/Isle_of_Man", "Europe/Istanbul", "Europe/Jersey", "Europe/Kaliningrad", "Europe/Kirov", "Europe/Kyiv", "Europe/Lisbon", "Europe/Ljubljana", "Europe/London", "Europe/Luxembourg", "Europe/Madrid", "Europe/Malta", "Europe/Mariehamn", "Europe/Minsk", "Europe/Monaco", "Europe/Moscow", "Europe/Oslo", "Europe/Paris", "Europe/Podgorica", "Europe/Prague", "Europe/Riga", "Europe/Rome", "Europe/Samara", "Europe/San_Marino", "Europe/Sarajevo", "Europe/Saratov", "Europe/Simferopol", "Europe/Skopje", "Europe/Sofia", "Europe/Stockholm", "Europe/Tallinn", "Europe/Tirane", "Europe/Ulyanovsk", "Europe/Vaduz", "Europe/Vatican", "Europe/Vienna", "Europe/Vilnius", "Europe/Volgograd", "Europe/Warsaw", "Europe/Zagreb", "Europe/Zurich", "GMT", "Indian/Antananarivo", "Indian/Chagos", "Indian/Christmas", "Indian/Cocos", "Indian/Comoro", "Indian/Kerguelen", "Indian/Mahe", "Indian/Maldives", "Indian/Mauritius", "Indian/Mayotte", "Indian/Reunion", "Pacific/Apia", "Pacific/Auckland", "Pacific/Bougainville", "Pacific/Chatham", "Pacific/Chuuk", "Pacific/Easter", "Pacific/Efate", "Pacific/Fakaofo", "Pacific/Fiji", "Pacific/Funafuti", "Pacific/Galapagos", "Pacific/Gambier", "Pacific/Guadalcanal", "Pacific/Guam", "Pacific/Honolulu", "Pacific/Kanton", "Pacific/Kiritimati", "Pacific/Kosrae", "Pacific/Kwajalein", "Pacific/Majuro", "Pacific/Marquesas", "Pacific/Midway", "Pacific/Nauru", "Pacific/Niue", "Pacific/Norfolk", "Pacific/Noumea", "Pacific/Pago_Pago", "Pacific/Palau", "Pacific/Pitcairn", "Pacific/Pohnpei", "Pacific/Port_Moresby", "Pacific/Rarotonga", "Pacific/Saipan", "Pacific/Tahiti", "Pacific/Tarawa", "Pacific/Tongatapu", "Pacific/Wake", "Pacific/Wallis", "US/Alaska", "US/Arizona", "US/Central", "US/Eastern", "US/Hawaii", "US/Mountain", "US/Pacific", "UTC"]); export const blankEnum = z.literal(""); export const nullEnum = z.unknown(); export const serviceLocation = z.object({address_line1: z.string(), address_line2: z.string().optional(), city: z.string().max(50).optional(), created_date: z.string().nullable().optional(), deleted_date: z.string().nullable().optional(), email: z.string().max(254).nullable().optional(), fax: z.string().max(20).nullable().optional(), id: z.number().int().optional(), is_primary: z.boolean().optional(), name: z.string().max(200), phone: z.string().max(20).nullable().optional(), place_of_service: serviceLocationPlaceOfServiceEnum.optional(), place_of_service_code: z.number().int().optional(), practice: z.number().int(), state: z.string(), status: serviceLocationStatusEnum.optional(), timezone: z.union([timezoneEnum, blankEnum, nullEnum]).optional(), zip: z.string().max(10).optional()}); export const fulfillmentTypeEnum = z.enum(["surescripts", "surescripts_cancel", "surescripts_change", "surescripts_nonfillable", "paper", "paper_nonfillable", "fax", "phone", "mdtoolboxepcs"]); export const fulfillment = z.object({detail: z.string().nullable().optional(), pharmacy_ncpdpid: z.string().max(21).nullable().optional(), service_location: serviceLocation, state: z.string().max(128).optional(), time_completed: z.string(), type: fulfillmentTypeEnum}); export const iCD10Code = z.object({code: z.string().max(50), description: z.string().max(500).nullable().optional()}); export const medicationDrugType = z.enum(["user", "medispan", "ss", "disp"]); export const medicationType = z.enum(["otc", "prescription", "discontinued"]); export const medication = z.object({active_ndcs: z.array(z.string()).optional(), brand_name: z.string().optional(), created_date: z.string().nullable().optional(), creation_type: medicationDrugType.optional(), form: z.string().optional(), generic_name: z.string().optional(), id: z.number().int().optional(), is_controlled: z.boolean().optional(), market_end_date: z.string().nullable().optional(), name: z.string().optional(), ndcs: z.array(z.string()).optional(), obsolete_date: z.string().nullable().optional(), practice: z.number().int().optional(), route: z.string().optional(), rxnorm_cuis: z.array(z.string()).optional(), strength: z.string().max(255).nullable().optional(), type: medicationType.optional()}); export const medicationTypeEnum = z.enum(["otc", "prescription"]); export const orderTypeEnum = z.enum(["New", "Refill", "DoseChange"]); export const qtyUnitsEnum = z.enum(["BAG", "BOTTLE", "BOX", "CAPSULE", "CARTRIDGE", "CONTAINER", "DROP", "GRAM", "INHALER", "INTERNATIONAL UNITE", "KIT", "LITER", "LOZENGE", "MILLIGRAM", "MILLILITER", "MILLION UNITS", "MUTUALLY DEFINED", "FLUID OUNCE", "NOT SPECIFIED", "PACK", "PACKET", "PINT", "SUPPOSITORY", "SYRINGE", "TABLESPOON", "TABLET", "TEASPOON", "TRANSDERMAL PATCH", "TUBE", "UNIT", "VIAL", "EACH", "GUM", "AMPULE", "APPLICATOR", "APPLICATORFUL", "BAR", "BEAD", "BLISTER", "BLOCK", "BOLUS", "CAN", "CANISTER", "CAPLET", "CARTON", "CASE", "CASSETTE", "CYLINDER", "DISK", "DOSE PACK", "DUAL PACK", "FILM", "GALLON", "IMPLANT", "INHALATION", "INHALER REFILL", "INSERT", "INTRAVENOUS BAG", "KILOGRAM", "METRIC DROP", "MILLIMETER", "NEBULE", "NEEDLE FREE INJECTION", "OCULAR SYSTEM", "OUNCE", "PACKAGE", "PAD", "PAPER", "PATCH", "PEN NEEDLE", "POUCH", "POUND", "PRE-FILLED PEN SYRINGE", "PUFF", "QUART", "RING", "SACHET", "SCOOPFUL", "SPONGE", "SPRAY", "STICK", "STRIP", "SWAB", "TABMINDER", "TAMPON", "TRAY", "TROCHE", "WAFER"]); export const thread = z.object({dc_date: z.string().nullable().optional(), id: z.number().int().optional(), is_permanent: z.boolean()}); export const medOrder = z.object({allow_substitutions: z.boolean().nullable().optional(), auth_refills: z.number().int().gte(0).nullable(), chart_date: z.string().optional(), created_date: z.string().nullable().optional(), days_supply: z.number().int().gte(0).lte(65535).nullable().optional(), deleted_date: z.string().nullable().optional(), directions: z.string().max(1000).nullable().optional(), document_date: z.string().optional(), documenting_personnel: z.number().int().nullable().optional(), fulfillment: fulfillment.nullable().optional(), icd10_codes: z.array(iCD10Code), id: z.number().int().optional(), is_doc_med: z.boolean(), last_modified: z.string().optional(), medication: medication, medication_type: medicationTypeEnum, notes: z.string().nullable().optional(), num_samples: z.string().max(50).nullable().optional(), order_type: orderTypeEnum, patient: z.number().int(), pharmacy_instructions: z.string().nullable().optional(), practice: z.number().int(), prescribing_physician: z.number().int(), qty: z.string().nullable(), qty_units: z.union([qtyUnitsEnum, blankEnum]), send_rx_reminder: z.boolean().optional(), show_in_chart_feed: z.boolean().optional(), signed_by: z.number().int().nullable().optional(), signed_date: z.string().nullable().optional(), start_date: z.string(), thread: thread}); export const paginatedMedOrderList = z.object({count: z.number().int().optional(), next: z.string().nullable().optional(), previous: z.string().nullable().optional(), results: z.array(medOrder)}); 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 }; /** * List Medications * * GET /api/2.0/medications/ */ export const getApiApi20Medications = async (args: GetApiApi20MedicationsArgs, options?: GetApiApi20MedicationsOptions) => { const {baseUrl = "https://sandbox.elationemr.com/api/2.0", fetch: fetchFn = fetch, oauth2} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") if (args.discontinued != null) query.append("discontinued", String(args.discontinued)) if (args.document_date__gt != null) query.append("document_date__gt", String(args.document_date__gt)) if (args.document_date__gte != null) query.append("document_date__gte", String(args.document_date__gte)) if (args.document_date__lt != null) query.append("document_date__lt", String(args.document_date__lt)) if (args.document_date__lte != null) query.append("document_date__lte", String(args.document_date__lte)) if (args.limit != null) query.append("limit", String(args.limit)) if (args.offset != null) query.append("offset", String(args.offset)) if (args.order_by != null) query.append("order_by", String(args.order_by)) if (args.patient != null) query.append("patient", args.patient.join(',')) if (args.permanent != null) query.append("permanent", String(args.permanent)) if (args.practice != null) query.append("practice", args.practice.join(',')) if (args.thread != null) query.append("thread", args.thread.join(',')) if (oauth2 !== undefined) headers.set('authorization', `Bearer ${oauth2}`) const url = `${baseUrl.replace(/\/+$/, '')}/api/2.0/medications/${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(paginatedMedOrderList, await res.json()) };