import {z} from 'zod' export type GetApiVVersionCompaniesCompanyIdPlansArgs = {company_id: string, version: string}; export type GetApiVVersionCompaniesCompanyIdPlansOptions = {baseUrl: string, fetch?: typeof fetch | undefined}; export const dtosCarrier = z.object({id: z.string(), name: z.string(), group_number: z.string().optional()}); export const dtosPlanBenefits = z.object({deductible: z.string().optional(), office_visit: z.string().optional(), inpatient: z.string().optional(), outpatient: z.string().optional(), emergency_room: z.string().optional(), rx: z.string().optional(), lab_x_ray: z.string().optional(), out_of_network: z.string().optional(), out_of_pocket_max: z.string().optional(), preventive: z.string().optional(), basic: z.string().optional(), major: z.string().optional(), ortho: z.string().optional(), annual_benefit_max: z.string().optional(), exam: z.string().optional(), materials: z.string().optional(), eye_glass_lenses: z.string().optional(), frame_allowance: z.string().optional(), contact_lenses: z.string().optional(), exam_service_interval: z.string().optional(), lenses_and_frame_service_interval: z.string().optional(), coinsurance: z.string().optional(), other: z.string().optional(), ee_benefit_type: z.enum(["NONE", "Flat Amount", "X Earnings", "% Employee", "Increments", "Custom", "Custom (Based Off Employee Selection)"]).optional(), is_volume_plan: z.boolean().optional(), volume_basis_percent: z.string().optional(), ee_earnings_min: z.string().optional(), ee_earnings_max: z.string().optional(), ee_increment_from: z.string().optional(), ee_increment_to: z.string().optional(), ee_increment_by: z.string().optional(), ee_flat_amount: z.string().optional(), ee_guaranteed_issue: z.string().optional(), sp_percentage: z.string().optional(), ch_percentage: z.string().optional(), request_primary_care_provider_id: z.boolean().optional(), request_primary_care_provider_name: z.boolean().optional()}); export const dtosPlanDocument = z.object({id: z.string(), name: z.string(), url: z.string().optional(), requires_review: z.boolean().optional(), type: z.string().optional(), system_type: z.string().optional()}); export const dtosEligibilityRates = z.object({rate_type: z.enum(["Table", "Tier-Table", "Tier"]), plan_type: z.string().optional(), rate_basis: z.string().optional(), rate_adjustment_factor: z.string().optional(), per_unit: z.number().optional(), tier_employee: z.string().optional(), tier_spouse: z.string().optional(), tier_children: z.string().optional(), tier_dependents: z.string().optional(), tier_ee: z.string().optional(), tier_es: z.string().optional(), tier_e_s1c: z.string().optional(), tier_e_s2c: z.string().optional(), tier_e_s3c: z.string().optional(), tier_e1c: z.string().optional(), tier_e2c: z.string().optional(), tier_e3c: z.string().optional(), tier_rates_tobacco: z.array(z.string()).optional(), tier_table_rates_ee_only: z.array(z.string()).optional(), tier_table_rates_eesp: z.array(z.string()).optional(), tier_table_rates_e_e1ch: z.array(z.string()).optional(), tier_table_rates_eech: z.array(z.string()).optional(), tier_table_rates_family: z.array(z.string()).optional(), tier_table_rates_ee_only_tobacco: z.array(z.string()).optional(), tier_table_rates_eesp_tobacco: z.array(z.string()).optional(), tier_table_rates_e_e1ch_tobacco: z.array(z.string()).optional(), tier_table_rates_eech_tobacco: z.array(z.string()).optional(), tier_table_rates_family_tobacco: z.array(z.string()).optional(), tier_table_rates_ee_only_male: z.array(z.string()).optional(), tier_table_rates_eesp_male: z.array(z.string()).optional(), tier_table_rates_e_e1ch_male: z.array(z.string()).optional(), tier_table_rates_eech_male: z.array(z.string()).optional(), tier_table_rates_family_male: z.array(z.string()).optional(), tier_table_rates_ee_only_female: z.array(z.string()).optional(), tier_table_rates_eesp_female: z.array(z.string()).optional(), tier_table_rates_e_e1ch_female: z.array(z.string()).optional(), tier_table_rates_eech_female: z.array(z.string()).optional(), tier_table_rates_family_female: z.array(z.string()).optional(), table_columns: z.enum(["Rates", "Employee & Spouse Rates", "Gender Rates", "Tobacco Rates", "Gender & Tobacco Rates", "Employee & Spouse & Tobacco Rates", "Employee & Spouse & Child Rates"]).optional(), tier_table_columns: z.enum(["Rates", "Gender Rates", "Tobacco Rates"]).optional(), table_rates: z.array(z.string()).optional(), table_employee: z.array(z.string()).optional(), table_spouse: z.array(z.string()).optional(), table_employee_tobacco: z.array(z.string()).optional(), table_spouse_tobacco: z.array(z.string()).optional(), table_child: z.array(z.string()).optional(), table_male: z.array(z.string()).optional(), table_female: z.array(z.string()).optional(), table_tobacco: z.array(z.string()).optional(), table_male_tobacco: z.array(z.string()).optional(), table_female_tobacco: z.array(z.string()).optional(), table_child1: z.string().optional(), table_child2: z.string().optional(), table_child3: z.string().optional(), age_band_type: z.enum(["All Ages (starting with 0-17)", "All Ages", "5 Year Age Bands", "10 Year Age Bands"]).optional(), base_spouse_age_off_employee: z.boolean().optional(), base_spouse_tobacco_off_employee: z.boolean().optional(), base_adult_children_off_age: z.boolean().optional(), rate_library_plan_id: z.string().optional(), rate_library_name: z.string().optional()}); export const dtosEligibilityContributions = z.object({contribution_detail: z.enum(["Table", "Tier", "Custom", "Tier-Tobacco"]), contribution_type: z.enum(["Employee", "Employer", "Base Plan"]), base_plan_id: z.string().optional(), dependents: z.string().optional(), ee: z.string().optional(), es: z.string().optional(), e_s1c: z.string().optional(), e_s2c: z.string().optional(), e_s3c: z.string().optional(), e1c: z.string().optional(), e2c: z.string().optional(), e3c: z.string().optional(), ee_tobacco: z.string().optional(), es_tobacco: z.string().optional(), e_s1c_tobacco: z.string().optional(), e_s2c_tobacco: z.string().optional(), e_s3c_tobacco: z.string().optional(), e1c_tobacco: z.string().optional(), e2c_tobacco: z.string().optional(), e3c_tobacco: z.string().optional(), employee: z.string().optional(), spouse: z.string().optional(), children: z.string().optional(), employee_tobacco: z.string().optional(), spouse_tobacco: z.string().optional(), child1: z.string().optional(), child2: z.string().optional(), child3: z.string().optional(), family: z.string().optional(), overall_max: z.string().optional(), apply_base_plan_amount_to_employee_only: z.boolean().optional()}); export const dtosJobClassLink = z.object({name: z.string(), id: z.string(), href: z.string()}); export const dtosLocation = z.object({id: z.string(), name: z.string(), created: z.string(), last_modified: z.string(), addr1: z.string().optional(), addr2: z.string().optional(), city: z.string().optional(), state: z.string().optional(), zip: z.string().optional(), county: z.string().optional(), country: z.enum(["Afghanistan", "Albania", "Algeria", "Argentina", "Armenia", "Australia", "Austria", "Azerbaijan", "Bahrain", "Bangladesh", "Belarus", "Belgium", "Belize", "Benin", "Bhutan", "Bolivarian Republic of Venezuela", "Bolivia", "Bosnia and Herzegovina", "Botswana", "Brazil", "Brunei Darussalam", "Bulgaria", "Burundi", "Cambodia", "Cameroon", "Canada", "Caribbean", "Chile", "Colombia", "Congo (DRC)", "Costa Rica", "Côte d'Ivoire", "Croatia", "Cuba", "Cyprus", "Czech Republic", "Denmark", "Djibouti", "Dominican Republic", "Ecuador", "Egypt", "El Salvador", "Eritrea", "Estonia", "Ethiopia", "Faroe Islands", "Fiji", "Finland", "France", "Gambia", "Georgia", "Germany", "Ghana", "Greece", "Greenland", "Guatemala", "Haiti", "Honduras", "Hong Kong S.A.R.", "Hungary", "Iceland", "India", "Indonesia", "Iran", "Iraq", "Ireland", "Islamic Republic of Pakistan", "Israel", "Italy", "Jamaica", "Japan", "Jordan", "Kazakhstan", "Kenya", "Korea", "Kuwait", "Kyrgyzstan", "Lao P.D.R.", "Latin America", "Latvia", "Lebanon", "Liberia", "Libya", "Liechtenstein", "Lithuania", "Luxembourg", "Macao S.A.R.", "Malaysia", "Maldives", "Mali", "Malta", "Mexico", "Moldova", "Mongolia", "Montenegro", "Morocco", "Myanmar", "Namibia", "Nepal", "Netherlands", "New Zealand", "Nicaragua", "Nigeria", "North Macedonia", "Norway", "Oman", "Palestine", "Panama", "Paraguay", "People's Republic of China", "Peru", "Philippines", "Poland", "Portugal", "Principality of Monaco", "Puerto Rico", "Qatar", "Réunion", "Romania", "Russia", "Rwanda", "Saudi Arabia", "Senegal", "Serbia", "Sierra Leone", "Singapore", "Slovakia", "Slovenia", "Somalia", "South Africa", "Spain", "Sri Lanka", "Sudan", "Sweden", "Switzerland", "Syria", "Taiwan", "Tajikistan", "Tanzania", "Thailand", "Trinidad and Tobago", "Tunisia", "Turkey", "Turkmenistan", "U.A.E.", "Uganda", "Ukraine", "United Kingdom", "United States", "Uruguay", "Uzbekistan", "Vietnam", "Yemen", "Zambia", "Zimbabwe"]).optional(), phone: z.string().optional(), ein: z.string().optional(), fax: z.string().optional(), headquarters: z.boolean().optional()}); export const dtosEligibility = z.object({id: z.string().optional(), rates: dtosEligibilityRates.optional(), contributions: dtosEligibilityContributions.optional(), job_classes: z.array(dtosJobClassLink).optional(), children_age_min: z.number().int().optional(), children_age_max: z.number().int().optional(), children_student_age_min: z.number().int().optional(), children_student_age_max: z.number().int().optional(), children_disabled_age_min: z.number().int().optional(), children_disabled_age_max: z.number().int().optional(), locations: z.array(dtosLocation).optional(), name: z.string().optional(), policy_number: z.string().optional(), subgroup_number: z.string().optional(), scheduled_hours: z.string().optional(), waiting_period_amount: z.number().int().optional(), waiting_period_type: z.enum(["Days", "Months", ""]).optional(), entry_date: z.enum(["First of the Month", "First of the Month Next Following", "Immediate", "Semi-Annual", "Quarterly", "15th of the Month", "First of the Month (Coinciding)"]).optional(), term_date: z.enum(["End of the Month", "End of Second Month", "Immediate", "15th of the Month"]).optional(), rate_type: z.string().optional(), rate_age_band_type: z.string().optional(), tax: z.enum(["Pre-Tax", "Post-Tax"]).optional(), is_spouse_eligible: z.boolean().optional(), is_different_gender_partner_eligible: z.boolean().optional(), is_same_gender_partner_eligible: z.boolean().optional(), is_child_eligible: z.boolean().optional()}); export const schema0KeyValuePairEmployeeStatusPlanStats = z.object({key: z.enum(["Active", "Leave of Absence", "COBRA", "Terminated", "Resigned", "Deceased", "Retired", "Applicant", "Test"]).optional(), value: z.lazy(() => dtosPlanStats.optional())}); export const dtosPlanStats: z.ZodType = z.object({eligible_count: z.number().int().optional(), enrolled_count: z.number().int().optional(), waived_count: z.number().int().optional(), employee_premium_total: z.number().optional(), spouse_premium_total: z.number().optional(), child_premium_total: z.number().optional(), total_premium_total: z.number().optional(), employer_cost_total: z.number().optional(), integration_premium_total: z.number().optional(), integration_enrolled_total: z.number().int().optional(), integration_assisted_total: z.number().int().optional(), employee_statuses: z.array(schema0KeyValuePairEmployeeStatusPlanStats).optional()}); export const dtosPlan = z.object({id: z.string().optional(), carrier: dtosCarrier.optional(), group_number: z.string().optional(), contribution_type: z.string().optional(), name: z.string().optional(), admin_name: z.string().optional(), import_id: z.string().optional(), type: z.string().optional(), start_date: z.string().optional(), end_date: z.string().optional(), created: z.string().optional(), cobra_eligibility: z.string().optional(), provides_minimum_value: z.boolean().optional(), provides_creditable_coverage: z.boolean().optional(), self_funded: z.boolean().optional(), is_open_enrollment_plan: z.boolean().optional(), benefits: dtosPlanBenefits.optional(), documents: z.array(dtosPlanDocument).optional(), eligibilities: z.array(dtosEligibility).optional(), plan_stats: dtosPlanStats.optional(), connect_status: z.enum(["Not Connected", "Pending", "Pending (New)", "Ease Review", "Ease Review (New)", "Carrier Review", "Connected", "Self-Bill", "EOI", "EOI & Self-Bill", "Disabled", "Broker Submitted", "Suspended"]).optional(), external_plan_id: z.string().optional(), previous_plan_id: z.string().optional()}); export const schema0WrappedArrayPlan = z.object({data: z.array(dtosPlan), error: 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 }; /** * company plans * * GET /v{version}/companies/{company_id}/plans */ export const getApiVVersionCompaniesCompanyIdPlans = async (args: GetApiVVersionCompaniesCompanyIdPlansArgs, options: GetApiVVersionCompaniesCompanyIdPlansOptions) => { const {baseUrl, fetch: fetchFn = fetch} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") const url = `${baseUrl.replace(/\/+$/, '')}/v${encodeURIComponent(String(args.version))}/companies/${encodeURIComponent(String(args.company_id))}/plans${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(schema0WrappedArrayPlan, await res.json()) };