import {z} from 'zod' export type RequesterType = 'attorney' | 'datavant' | 'disability' | 'continuing_care' | 'copya' | 'copyi' | 'facility' | 'government' | 'insurance' | 'patient' | 'payd' | 'payi' | 'pro' | 'fac'; export type PrimaryReason = '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 type SecondaryReason = '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 type RetrievalSources = '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 type AllowBlockGroup = {data_foundation_health_system_ids?: Array | undefined}; export type RetrievalAllowBlockConfiguration = {allow?: AllowBlockGroup | undefined, block?: AllowBlockGroup | undefined}; export type OrderMetadata = {hs_requester_id?: string | undefined, od_client_id?: string | undefined, od_client_username?: string | undefined, od_client_password?: string | undefined}; export type DeliveryFrequency = 'continuous' | 'daily' | 'weekly' | 'biweekly' | 'monthly' | 'order_due_date' | 'each_document'; export type DeliveryFrequencyDay = 0 | 1 | 2 | 3 | 4 | 5 | 6; export type Address = {normalizations?: Array | undefined, line1?: string | undefined, line2?: string | undefined, city?: string | undefined, country?: string | undefined, state?: string | undefined, postal_code?: string | undefined}; export type LegalEntity = {phone_number?: string | undefined, full_name?: string | undefined, first_name?: string | undefined, alternate_first_name?: string | undefined, middle_name?: string | undefined, last_name?: string | undefined, prefix?: string | undefined, suffix?: string | undefined, id: string, order_id?: string | undefined, address?: Address | undefined, health_plan?: string | undefined}; export type Mail = {method: 'mail', entity: LegalEntity}; export type Sftp = {method: 'sftp', entity: LegalEntity}; export type AlternateDelivery = {alternate?: (Mail | Sftp) | undefined, use_only_alternate?: boolean | undefined}; export type DeliveryType = 'pdf' | 'xml' | 'json'; export type DeliveryLocation = 'api' | 'sftp' | 's3'; export type DeliveryFormat = 'individual' | 'zipped'; export type DailyDeliveryOptions = {delivery_frequency_sub_option: unknown, delivery_frequency: 'daily'}; export type WeeklyDeliveryOptions = {delivery_frequency_sub_option: Array, delivery_frequency: 'weekly'}; export type BiweeklyDeliveryOptions = {delivery_frequency_sub_option: Array, delivery_frequency: 'biweekly'}; export type MonthlyDeliveryOptions = {delivery_frequency_sub_option: number, delivery_frequency: 'monthly'}; export type DueDateDeliveryOptions = {delivery_frequency_sub_option: unknown, delivery_frequency: 'order_due_date'}; export type EachDocumentDeliveryOptions = {delivery_frequency_sub_option: unknown, delivery_frequency: 'each_document'}; export type StructuredDataExtractionReportConfiguration = {delivery_schedule?: Array | undefined, deliver_automatically?: boolean | undefined, delivery_schedule_options?: (DailyDeliveryOptions | WeeklyDeliveryOptions | BiweeklyDeliveryOptions | MonthlyDeliveryOptions | DueDateDeliveryOptions | EachDocumentDeliveryOptions) | undefined, filename_prefix: string, include_npi?: boolean | undefined, include_diagnosis?: boolean | undefined, filter_encounters_by_requested_dos?: boolean | undefined, write_empty_encounters?: boolean | undefined}; export type ClientInfo = {id?: number | undefined, name?: string | undefined}; export type CodingConfiguration = {deliver_records: boolean, deliver_only_codeable_records?: boolean | undefined, deliver_records_before_coding?: boolean | undefined}; export type ChartFinderConfiguration = {coding?: boolean | undefined, audit_type?: number | undefined, review_type?: (string | number) | undefined, idsb_handling_qa?: (0 | 1) | undefined, idsb_retrieving?: (0 | 1) | undefined, idsb_retrieving_embedded?: (0 | 1) | undefined, account_manager_id?: number | undefined}; export type ConfigOptions = {type?: RequesterType | undefined, primary_reason?: PrimaryReason | undefined, secondary_reason?: SecondaryReason | undefined, retrieval_sources?: Array | undefined, retrieval_allow_block_configuration?: RetrievalAllowBlockConfiguration | undefined, due_date?: (number | string) | undefined, metadata?: OrderMetadata | undefined, delivery_frequency?: DeliveryFrequency | undefined, delivery_frequency_sub_option?: (Array | number) | undefined, alternate_delivery?: AlternateDelivery | undefined, merge_charts?: boolean | undefined, delivery_type?: Array | undefined, delivery_location?: DeliveryLocation | undefined, delivery_format?: DeliveryFormat | undefined, structured_data_file_delivery_format?: DeliveryFormat | undefined, delivery_filename_template?: string | undefined, delivery_manifest_file_extension?: ('.csv' | '.txt' | '.dat') | undefined, delivery_manifest_delimiter?: (',' | '|' | ' ' | '~') | undefined, delivery_manifest_included?: boolean | undefined, delivery_manifest_filename_template?: string | undefined, delivery_zip_filename_template?: string | undefined, coding_required?: boolean | undefined, coding_required_v2?: boolean | undefined, structured_data_extraction_report_configuration?: StructuredDataExtractionReportConfiguration | undefined, provider_information_included?: boolean | undefined, demand_id?: number | undefined, zip_password?: string | undefined, delivery_manifest_configuration: unknown, is_traditional_project?: boolean | undefined, client?: ClientInfo | undefined, wave?: number | undefined, chart_review_year?: number | undefined, target_yield?: number | undefined, yield_type?: number | undefined, project_type?: number | undefined, ticket_number?: string | undefined, coding_configuration?: CodingConfiguration | undefined, chart_finder_config?: ChartFinderConfiguration | undefined, validation_failures_threshold?: number | undefined, qa_workflow_id?: number | undefined}; export type CreateProjectRequest = {id: string, name: string, config_options?: ConfigOptions | undefined, delivery_email_recipients?: Array | undefined}; export type CreateApiProjectsArgs = {'version-datavant'?: string | undefined, body: CreateProjectRequest}; export type CreateApiProjectsOptions = {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 projectResponse = z.object({pk_id: z.number().int().optional(), uuid: z.string(), id: z.string().min(1).max(100), name: z.string(), config_options: configOptions, delivery_email_recipients: z.array(z.string()).optional(), created_at: z.string(), updated_at: z.string().optional(), order_count: z.number().int().optional(), package_configuration_pk_id: z.number().int().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 }; /** * Create a project * * POST /projects/ */ export const createApiProjects = async (args: CreateApiProjectsArgs, options?: CreateApiProjectsOptions) => { const {baseUrl = "https://api.datavant.io/v2", fetch: fetchFn = fetch, oauth2} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('content-type', "application/json") 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(/\/+$/, '')}/projects/${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "POST", headers, body: JSON.stringify(args.body)}) if (!res.ok) throw new Error(`Request failed with status ${res.status}`, {cause: {status: res.status, body: await res.text()}}) return validateResponse(projectResponse, await res.json()) };