import {z} from 'zod' export type GetApiVVersionEligibilitiesIdArgs = {id: string, version: string}; export type GetApiVVersionEligibilitiesIdOptions = {baseUrl: string, fetch?: typeof fetch | undefined}; 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 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 }; /** * eligibility * * GET /v{version}/eligibilities/{id} */ export const getApiVVersionEligibilitiesId = async (args: GetApiVVersionEligibilitiesIdArgs, options: GetApiVVersionEligibilitiesIdOptions) => { 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))}/eligibilities/${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(dtosEligibility, await res.json()) };