import {z} from 'zod' export type GetApiConfigurationArgs = {'version-datavant'?: string | undefined}; export type GetApiConfigurationOptions = {baseUrl?: string | undefined, oauth2?: string | undefined, fetch?: typeof fetch | undefined}; export const requesterType = z.enum(["attorney", "datavant", "disability", "continuing_care", "copya", "copyi", "facility", "government", "insurance", "patient", "payd", "payi", "pro", "fac"]); export const primaryReason = z.enum(["attorney", "hospital_lien", "patient_directive", "personal_injury", "social_security_disability", "subpoena", "workers_comp", "illinois_industrial_commission_subpoena", "florida_statute", "veterans_disability", "ssa_appeal_representative_form_1696", "patient_social_security_appeal", "life_sciences", "audit_of_claims", "clinical_research", "disability", "insurance", "medicare_medicaid", "rac", "revenue_cycle_management", "business_office_copy_risk_management", "special_project", "drg_payment_integrity", "hedis_audit", "hix", "radv", "standard_insurance_claim_payment", "utilization_review", "disability_gov_benefits", "forms_completion_by_provider", "patient_personal", "patient_transfer", "second_request_not_work_comp", "agency", "government_audit", "medicaid_dds", "non_profit", "state_dds", "workers_comp_board", "continuity_of_care", "ciox_audit", "mra", "ciox_real_world_data_team_request", "aca_hix", "drg", "underwriting", "claim", "general_attorney", "general_attorney_subpoena", "workers_comp_subpoena", "ssa_appeal", "pro_medicaid", "standard_pro", "value_based_care", "payd", "payer", "attestation", "unknown"]); export const secondaryReason = z.enum(["aca", "defense_attorney", "defense_subpoena", "personal_injury", "state_attorney_office", "represent_indignant", "subpoena_second_request", "disability_gov_benefits", "ssi_claim_second_request", "hospital_per_admission", "no", "second_request", "social_security_appeal", "patient_social_security_appeal", "social_security_claim_appeal_second_request", "forms_completion_by_provider", "attorney_rep_pat", "appeal_second_request", "court_issued", "criminal", "subpoena", "workers_comp_subpoena", "subpoena_deposition_trial_testimony_with_records", "workers_comp_second_request", "workers_comp", "workers_comp_self_insured", "requested_by_patient", "requested_by_attorney", "drg_payment_integrity", "hedis_audit", "hix", "mra", "radv", "utilization_review", "short_term_long_term_claim", "second_request_insurance", "bc_bs_claim", "non_medical_insurance_claim", "standard_insurance_claim_payment", "underwriting", "pharmacy", "aps", "medicare_medicaid_utl_review", "medicare_medicaid_eligibility", "rac_medicaid", "second_request_workers_comp", "standard_workers_comp", "county", "dept_of_health_human_services", "dept_of_welfare", "family_and_child", "omap", "probation", "public_schools", "social_security_application", "veterans_affairs", "voc_rehab", "mi_family", "nc_prison", "attorney_general", "state_attorney", "federal_public_defender", "utilization_review_medicare_and_medicaid", "home_risk_assessment", "in_office_assessment", "payment_integrity", "post_payment_denials", "pre_payment_denials", "provider_as_requester", "switchboard_for_acos", "whole_person_understanding"]); export const retrievalSources = z.enum(["api", "embedded_manual", "nonembedded_manual", "athena", "healthjump", "mock_retrieval", "moxe", "office_ally", "particle", "ses", "share_arkansas", "sidus", "veradigm", "vim", "iatric", "c3hie", "ghhc", "healow", "mdland"]); export const allowBlockGroup = z.object({data_foundation_health_system_ids: z.array(z.string()).optional()}); export const retrievalAllowBlockConfiguration = z.object({allow: allowBlockGroup.optional(), block: allowBlockGroup.optional()}); export const orderMetadata = z.object({hs_requester_id: z.string().optional(), od_client_id: z.string().optional(), od_client_username: z.string().optional(), od_client_password: z.string().optional()}); export const deliveryFrequency = z.enum(["continuous", "daily", "weekly", "biweekly", "monthly", "order_due_date", "each_document"]); export const deliveryFrequencyDay = z.union([z.literal(0), z.literal(1), z.literal(2), z.literal(3), z.literal(4), z.literal(5), z.literal(6)]); export const address = z.object({normalizations: z.array(z.unknown()).optional(), line1: z.string().optional(), line2: z.string().optional(), city: z.string().optional(), country: z.string().optional(), state: z.string().optional(), postal_code: z.string().optional()}); export const legalEntity = z.object({phone_number: z.string().optional(), full_name: z.string().optional(), first_name: z.string().optional(), alternate_first_name: z.string().optional(), middle_name: z.string().optional(), last_name: z.string().optional(), prefix: z.string().optional(), suffix: z.string().optional(), id: z.string(), order_id: z.string().optional(), address: address.optional(), health_plan: z.string().optional()}); export const mail = z.object({method: z.literal("mail"), entity: legalEntity}); export const sftp = z.object({method: z.literal("sftp"), entity: legalEntity}); export const alternateDelivery = z.object({alternate: z.discriminatedUnion("method", [mail, sftp]).optional(), use_only_alternate: z.boolean().optional()}); export const deliveryType = z.enum(["pdf", "xml", "json"]); export const deliveryLocation = z.enum(["api", "sftp", "s3"]); export const deliveryFormat = z.enum(["individual", "zipped"]); export const dailyDeliveryOptions = z.object({delivery_frequency_sub_option: z.unknown(), delivery_frequency: z.literal("daily")}); export const weeklyDeliveryOptions = z.object({delivery_frequency_sub_option: z.array(deliveryFrequencyDay), delivery_frequency: z.literal("weekly")}); export const biweeklyDeliveryOptions = z.object({delivery_frequency_sub_option: z.array(deliveryFrequencyDay), delivery_frequency: z.literal("biweekly")}); export const monthlyDeliveryOptions = z.object({delivery_frequency_sub_option: z.number().int(), delivery_frequency: z.literal("monthly")}); export const dueDateDeliveryOptions = z.object({delivery_frequency_sub_option: z.unknown(), delivery_frequency: z.literal("order_due_date")}); export const eachDocumentDeliveryOptions = z.object({delivery_frequency_sub_option: z.unknown(), delivery_frequency: z.literal("each_document")}); export const structuredDataExtractionReportConfiguration = z.object({delivery_schedule: z.array(z.string()).optional(), deliver_automatically: z.boolean().optional(), delivery_schedule_options: z.discriminatedUnion("delivery_frequency", [dailyDeliveryOptions, weeklyDeliveryOptions, biweeklyDeliveryOptions, monthlyDeliveryOptions, dueDateDeliveryOptions, eachDocumentDeliveryOptions]).optional(), filename_prefix: z.string(), include_npi: z.boolean().optional(), include_diagnosis: z.boolean().optional(), filter_encounters_by_requested_dos: z.boolean().optional(), write_empty_encounters: z.boolean().optional()}); export const clientInfo = z.object({id: z.number().int().optional(), name: z.string().optional()}); export const codingConfiguration = z.object({deliver_records: z.boolean(), deliver_only_codeable_records: z.boolean().optional(), deliver_records_before_coding: z.boolean().optional()}); export const chartFinderConfiguration = z.object({coding: z.boolean().optional(), audit_type: z.number().int().optional(), review_type: z.union([z.string(), z.number().int()]).optional(), idsb_handling_qa: z.union([z.literal(0), z.literal(1)]).optional(), idsb_retrieving: z.union([z.literal(0), z.literal(1)]).optional(), idsb_retrieving_embedded: z.union([z.literal(0), z.literal(1)]).optional(), account_manager_id: z.number().int().optional()}); export const configOptions = z.object({type: requesterType.optional(), primary_reason: primaryReason.optional(), secondary_reason: secondaryReason.optional(), retrieval_sources: z.array(retrievalSources).optional(), retrieval_allow_block_configuration: retrievalAllowBlockConfiguration.optional(), due_date: z.union([z.number().int(), z.string()]).optional(), metadata: orderMetadata.optional(), delivery_frequency: deliveryFrequency.optional(), delivery_frequency_sub_option: z.union([z.array(deliveryFrequencyDay), z.number().int()]).optional(), alternate_delivery: alternateDelivery.optional(), merge_charts: z.boolean().optional(), delivery_type: z.array(deliveryType).optional(), delivery_location: deliveryLocation.optional(), delivery_format: deliveryFormat.optional(), structured_data_file_delivery_format: deliveryFormat.optional(), delivery_filename_template: z.string().optional(), delivery_manifest_file_extension: z.enum([".csv", ".txt", ".dat"]).optional(), delivery_manifest_delimiter: z.enum([",", "|", " ", "~"]).optional(), delivery_manifest_included: z.boolean().optional(), delivery_manifest_filename_template: z.string().optional(), delivery_zip_filename_template: z.string().optional(), coding_required: z.boolean().optional(), coding_required_v2: z.boolean().optional(), structured_data_extraction_report_configuration: structuredDataExtractionReportConfiguration.optional(), provider_information_included: z.boolean().optional(), demand_id: z.number().int().optional(), zip_password: z.string().optional(), delivery_manifest_configuration: z.unknown(), is_traditional_project: z.boolean().optional(), client: clientInfo.optional(), wave: z.number().int().gt(0).lt(100).optional(), chart_review_year: z.number().int().optional(), target_yield: z.number().optional(), yield_type: z.number().int().optional(), project_type: z.number().int().optional(), ticket_number: z.string().optional(), coding_configuration: codingConfiguration.optional(), chart_finder_config: chartFinderConfiguration.optional(), validation_failures_threshold: z.number().int().optional(), qa_workflow_id: z.number().int().optional()}); export const configurationResponse = z.object({config_options: configOptions, created_at: z.string().optional(), updated_at: 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 customer-level configuration * * GET /configuration/ */ export const getApiConfiguration = async (args: GetApiConfigurationArgs, options?: GetApiConfigurationOptions) => { const {baseUrl = "https://api.datavant.io/v2", fetch: fetchFn = fetch, oauth2} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") if (args['version-datavant'] != null) headers.set("version-datavant", String(args['version-datavant'])) if (oauth2 !== undefined) headers.set('authorization', `Bearer ${oauth2}`) const url = `${baseUrl.replace(/\/+$/, '')}/configuration/${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(configurationResponse, await res.json()) };