import {z} from 'zod' export type GetApiGroupPoliciesGroupPolicyIdArgs = {group_policy_id: string}; export type GetApiGroupPoliciesGroupPolicyIdOptions = {baseUrl?: string | undefined, bearerAuth?: string | undefined, fetch?: typeof fetch | undefined}; export const groupPolicyStatus = z.enum(["scheduled", "active", "expired", "cancelled"]); export const policyType = z.enum(["health_insurance", "life_assurance"]); export const policyProviderResponse = z.object({id: z.string(), name: z.string(), description: z.string(), logo_url: z.string(), employer_portal_url: z.string().nullable().optional(), employee_portal_url: z.string().nullable().optional(), support_phone_number: z.string().nullable().optional()}); export const currencyCode = z.enum(["eur", "aed", "afn", "xcd", "all", "amd", "aoa", "ars", "usd", "aud", "awg", "azn", "bam", "bbd", "bdt", "xof", "bgn", "bhd", "bif", "bmd", "bnd", "bob", "bov", "brl", "bsd", "inr", "btn", "nok", "bwp", "byn", "bzd", "cad", "xaf", "cdf", "chf", "che", "chw", "nzd", "clp", "clf", "cny", "cop", "cou", "crc", "cup", "cuc", "cve", "ang", "czk", "djf", "dkk", "dop", "dzd", "egp", "mad", "ern", "etb", "fjd", "fkp", "mdl", "gbp", "gel", "ghs", "gip", "gmd", "gnf", "gtq", "gyd", "hkd", "hnl", "hrk", "htg", "huf", "idr", "xdr", "ils", "iqd", "irr", "isk", "jmd", "jod", "jpy", "kes", "kgs", "khr", "kmf", "kpw", "krw", "kwd", "kyd", "kzt", "lak", "lbp", "lkr", "lrd", "lsl", "zar", "lyd", "mga", "mkd", "mmk", "mnt", "mop", "mru", "mur", "mvr", "mwk", "mxn", "mxv", "myr", "mzn", "nad", "xpf", "ngn", "nio", "npr", "omr", "pab", "pen", "pgk", "php", "pkr", "pln", "pyg", "qar", "ron", "rsd", "rub", "rwf", "sar", "sbd", "scr", "sdg", "sek", "sgd", "shp", "sll", "sos", "srd", "ssp", "stn", "svc", "xsu", "syp", "twd", "szl", "thb", "tjs", "tmt", "tnd", "top", "try", "ttd", "tzs", "uah", "ugx", "usn", "uyu", "uyi", "uyw", "uzs", "ves", "vnd", "vuv", "wst", "yer", "xua", "zmw", "zwl"]); export const planDocumentType = z.enum(["ipid", "table_of_cover", "waiting_periods", "hospital_list", "plan_summary", "terms_and_conditions", "other"]); export const planDocumentResponse = z.object({type: planDocumentType.optional(), title: z.string(), link: z.string()}); export const planCoverageOptionScope = z.enum(["group_policy", "policy", "member"]); export const planCoverageOptionInputType = z.enum(["single_select", "multi_select"]); export const planCoverageOptionBenefitResponse = z.object({name: z.string(), description: z.string().nullable().optional()}); export const employerEligibilityCriterionType = z.enum(["employees_count", "members_count", "industry_exclusions"]); export const employeesCountDetails = z.object({min: z.number().int().nullable().optional(), max: z.number().int().nullable().optional()}); export const membersCountDetails = z.object({min: z.number().int().nullable().optional(), max: z.number().int().nullable().optional()}); export const industryExclusionsDetails = z.object({excluded_industries: z.array(z.string())}); export const employerEligibilityCriterionResponse = z.object({type: employerEligibilityCriterionType, description: z.string(), employees_count: employeesCountDetails.optional(), members_count: membersCountDetails.optional(), industry_exclusions: industryExclusionsDetails.optional()}); export const planCoverageOptionResponse: z.ZodType = z.object({id: z.string(), name: z.string(), description: z.string().nullable().optional(), learn_more_url: z.string().nullable().optional(), from_price: z.number().nullable().optional(), benefits: z.array(planCoverageOptionBenefitResponse).nullable().optional(), sub_options: z.array(z.lazy(() => planCoverageOptionResponse)).nullable().optional(), eligibility_criteria: z.array(employerEligibilityCriterionResponse).nullable().optional()}); export const planCoverageResponse = z.object({id: z.string(), name: z.string(), description: z.string().nullable().optional(), scope: planCoverageOptionScope, input_type: planCoverageOptionInputType, required: z.boolean(), min_selections: z.number().int().nullable().optional(), max_selections: z.number().int().nullable().optional(), sort_order: z.number().int().nullable().optional(), group_label: z.string().nullable().optional(), options: z.array(planCoverageOptionResponse)}); export const policyPlanResponse = z.object({id: z.string(), name: z.string(), description: z.string(), currency: currencyCode, documents: z.array(planDocumentResponse), coverage_options: z.array(planCoverageResponse).nullable().optional()}); export const healthInsurancePolicyRenewalStatus = z.enum(["upcoming", "open", "renewed", "cancelled"]); export const healthInsurancePolicyRenewalResponse = z.object({renewal_date: z.string(), window_start_date: z.string(), window_end_date: z.string(), status: healthInsurancePolicyRenewalStatus, renewed_policy_id: z.string().nullable().optional()}); export const costSharingType = z.enum(["member_count", "member_selection", "member_selection_percentage_based", "percentage", "policyholder_only", "family_type", "fixed_amount", "full_coverage", "pooled_member_count"]); export const memberCountCostSharingConfigurationResponse = z.object({adults: z.number().int(), children: z.number().int()}); export const memberSelectionCostSharingConfigurationResponse = z.object({partner: z.boolean(), children: z.boolean()}); export const memberSelectionPercentageBasedCostSharingConfigurationResponse = z.object({partner: z.boolean(), children: z.boolean(), percentage: z.number().int()}); export const percentageCostSharingConfigurationResponse = z.object({percentage: z.number().int()}); export const familyCostSharingType = z.enum(["single", "couple", "single_with_children", "family"]); export const familyTypeCostSharingConfigurationResponse = z.object({type: familyCostSharingType}); export const fixedAmountCostSharingConfigurationResponse = z.object({monthly_amount: z.number()}); export const pooledMemberCountCostSharingConfigurationResponse = z.object({dependents: z.number().int()}); export const costSharingConfigurationResponse = z.object({type: costSharingType, member_count: memberCountCostSharingConfigurationResponse.optional(), member_selection: memberSelectionCostSharingConfigurationResponse.optional(), member_selection_percentage_based: memberSelectionPercentageBasedCostSharingConfigurationResponse.optional(), percentage: percentageCostSharingConfigurationResponse.optional(), family_type: familyTypeCostSharingConfigurationResponse.optional(), fixed_amount: fixedAmountCostSharingConfigurationResponse.optional(), pooled_member_count: pooledMemberCountCostSharingConfigurationResponse.optional()}); export const healthInsuranceGroupPolicyConfigurationResponse = z.object({cost_sharing: costSharingConfigurationResponse, max_dependents: z.number().int().nullable()}); export const healthInsuranceGroupPolicyResponse = z.object({group_policy_number: z.string().nullable().optional(), renewal: healthInsurancePolicyRenewalResponse, configuration: healthInsuranceGroupPolicyConfigurationResponse}); export const lifeAssurancePolicyRenewalResponse = z.object({renewal_date: z.string(), window_start_date: z.string(), window_end_date: z.string(), status: healthInsurancePolicyRenewalStatus, renewed_policy_id: z.string().nullable().optional()}); export const lifeAssuranceGroupPolicyConfigurationResponse = z.object({cost_sharing: costSharingConfigurationResponse}); export const lifeAssuranceGroupPolicyResponse = z.object({group_policy_number: z.string().nullable().optional(), renewal: lifeAssurancePolicyRenewalResponse, configuration: lifeAssuranceGroupPolicyConfigurationResponse}); export const disclosureCategory = z.enum(["regulatory", "provider", "intermediary"]); export const disclosureType = z.enum(["intermediary_role", "intermediary_commission", "underwriter_disclaimer", "anti_selection_notice", "statement_of_needs", "product_information", "pre_existing_conditions", "statutory_warning", "privacy_policy", "terms_of_business"]); export const disclosureLinkResponse = z.object({token: z.string(), type: disclosureType, label: z.string(), url: z.string(), version: z.string()}); export const disclosureResponse = z.object({category: disclosureCategory, type: disclosureType, title: z.string(), text: z.string(), links: z.array(disclosureLinkResponse)}); export const groupPolicyResponse = z.object({id: z.string(), group_id: z.string().optional(), employer_id: z.string().optional(), start_date: z.string(), end_date: z.string().nullable().optional(), cancellation_date: z.string().nullable().optional(), status: groupPolicyStatus, type: policyType, provider: policyProviderResponse, plan: policyPlanResponse, health_insurance: healthInsuranceGroupPolicyResponse.optional(), life_assurance: lifeAssuranceGroupPolicyResponse.optional(), linked_group_policy_ids: z.array(z.string()), disclosures: z.array(disclosureResponse), object: 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 }; /** * Retrieve a group policy * * GET /group_policies/{group_policy_id} */ export const getApiGroupPoliciesGroupPolicyId = async (args: GetApiGroupPoliciesGroupPolicyIdArgs, options?: GetApiGroupPoliciesGroupPolicyIdOptions) => { const {baseUrl = "https://test.api.kota.io", fetch: fetchFn = fetch, bearerAuth} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") if (bearerAuth !== undefined) headers.set('authorization', `Bearer ${bearerAuth}`) const url = `${baseUrl.replace(/\/+$/, '')}/group_policies/${encodeURIComponent(String(args.group_policy_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(groupPolicyResponse, await res.json()) };