import {z} from 'zod' export type GetApiVVersionManageChangesDetailArgs = {employee_id: string, from?: string | undefined, to?: string | undefined, date_lookup_field?: ('LastModifiedOn' | 'LastSummarizedOn') | undefined, version: string}; export type GetApiVVersionManageChangesDetailOptions = {baseUrl: string, fetch?: typeof fetch | undefined}; export const dtosAddress = z.object({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(), region: z.string().optional()}); export const schema0KeyValuePairStringString = z.object({key: z.string().optional(), value: z.string().optional()}); export const dtosEnrollmentEmployee = z.object({id: z.string(), company_id: z.string(), first_name: z.string(), last_name: z.string(), middle_name: z.string(), birth_date: z.string(), ssn: z.string(), pay_periods: z.number().int(), address: dtosAddress, gender: z.enum(["Male", "Female", ""]).optional(), race: z.string().optional(), mobile_phone: z.string().optional(), home_phone: z.string().optional(), work_phone: z.string().optional(), eid: z.string().optional(), medical_pcc_id: z.string().optional(), medical_pcc_name: z.string().optional(), dental_pcc_id: z.string().optional(), dental_pcc_name: z.string().optional(), ipa: z.string().optional(), email: z.string().optional(), personal_email: z.string().optional(), marital_status: z.enum(["", "Single", "Married", "Divorced", "Domestic Partner", "Legally Separated", "Widowed"]).optional(), language: z.string().optional(), citizenship: z.string().optional(), custom_fields: z.array(schema0KeyValuePairStringString).optional(), status: z.string(), status_effective_date: z.string().optional(), status_reason: z.string().optional(), termination_type: z.enum(["Involuntary", "Voluntary", "Gross Misconduct"]).optional(), latest_hire_date: z.string().optional(), enrollment_status: z.enum(["Not Started", "In Progress", "Finished"]).optional(), location_id: z.string(), location: z.string(), division_id: z.string(), division: z.string(), department_id: z.string(), department: z.string(), job_class_id: z.string(), job_class: z.string(), type: z.enum(["Full-Time", "Part-Time", "Variable-Hour", "Contractor", "Seasonal", "Intern", ""]).optional(), job_title: z.string().optional(), hours: z.number().optional(), compensation_type: z.enum(["Salary", "Hourly"]).optional(), compensation: z.number().optional(), compensation_start_date: z.string().optional(), compensation_end_date: z.string().optional(), pay_cycle: z.enum(["Annually", "2 Pay Periods", "3 Pay Periods", "4 Pay Periods", "5 Pay Periods", "6 Pay Periods", "7 Pay Periods", "8 Pay Periods", "9 Pay Periods", "10 Pay Periods", "11 Pay Periods", "Monthly", "13 Pay Periods", "14 Pay Periods", "15 Pay Periods", "16 Pay Periods", "17 Pay Periods", "18 Pay Periods", "19 Pay Periods", "20 Pay Periods", "21 Pay Periods", "22 Pay Periods", "23 Pay Periods", "Semi-Monthly", "25 Pay Periods", "Bi-Weekly", "27 Pay Periods", "28 Pay Periods", "29 Pay Periods", "30 Pay Periods", "31 Pay Periods", "32 Pay Periods", "33 Pay Periods", "34 Pay Periods", "35 Pay Periods", "36 Pay Periods", "37 Pay Periods", "38 Pay Periods", "39 Pay Periods", "40 Pay Periods", "41 Pay Periods", "42 Pay Periods", "43 Pay Periods", "44 Pay Periods", "45 Pay Periods", "46 Pay Periods", "47 Pay Periods", "48 Pay Periods", "49 Pay Periods", "50 Pay Periods", "51 Pay Periods", "Weekly"]).optional(), benefit_eligible_date: z.string().optional(), hire_date: z.string().optional(), termination_date: z.string().optional(), cobra_date: z.string().optional(), retire_date: z.string().optional(), is_smoker: z.boolean().optional(), is_disabled: z.boolean().optional(), death_date: z.string().optional(), original_hire_date: z.string().optional(), termination_reason: z.string().optional(), is_cobra: z.boolean().optional(), cobra_event: z.string().optional(), cobra_end_date: z.string().optional(), salary: z.number().optional(), salary_effective_date: z.string().optional(), last_modified_on: z.string(), created_on: z.string()}); export const dtosEnrollmentDependent = z.object({id: z.string(), relationship: z.enum(["Employee", "Dependent", "Spouse", "Child", "Spouse-Ex", "Child-Domestic Partner", "Child-Adopted", "Child-Foster", "Child-Grandchild", "Child-Step", "Child-Legal Guardian", "Domestic Partner", "Domestic Partner-Ex", ""]), employee_id: z.string(), first_name: z.string(), last_name: z.string(), middle_name: z.string(), birth_date: z.string(), home_phone: z.string(), work_phone: z.string(), mobile_phone: z.string(), ssn: z.string(), address: dtosAddress, sex: z.enum(["Male", "Female", ""]).optional(), student_status: z.string(), school: z.string(), graduation_date: z.string(), is_disabled: z.boolean(), is_smoker: z.boolean(), is_student: z.boolean(), is_cobra: z.boolean(), cobra_start_date: z.string(), cobra_event: z.string(), cobra_end_date: z.string(), last_modified_on: z.string(), created_on: z.string(), deleted_on: z.string(), is_different_address: z.boolean().optional()}); export const dtosEnrollmentLink = z.object({href: z.string()}); export const schema0KeyValuePairEnrollmentRateTypeDecimal = z.object({key: z.enum(["TotalRate", "EmployeeRate", "SpouseRate", "ChildrenRate"]).optional(), value: z.number().optional()}); export const schema0KeyValuePairEnrollmentCostTypeDecimal = z.object({key: z.enum(["EmployerContributionDollar", "EmployerContributionPercent", "EmployeeContributionDollar", "EmployeeContributionPercent", "EmployerTotalCostPreTax", "EmployerTotalCostPostTax", "EmployerEmployeeCostPreTax", "EmployerEmployeeCostPostTax", "EmployerSpouseOrPartnerCostPreTax", "EmployerSpouseOrPartnerCostPostTax", "EmployerChildrenCostPreTax", "EmployerChildrenCostPostTax", "EmployeeTotalCostPreTax", "EmployeeTotalCostPostTax", "EmployeeEmployeeCostPreTax", "EmployeeEmployeeCostPostTax", "EmployeeSpouseOrPartnerCostPreTax", "EmployeeSpouseOrPartnerCostPostTax", "EmployeeChildrenCostPreTax", "EmployeeChildrenCostPostTax"]).optional(), value: z.number().optional()}); export const dtosEnrollmentLifeEvent = z.object({name: z.string(), details: z.string(), date: z.string(), create_date: z.string(), last_modified_date: z.string()}); export const dtosEnrollmentCoverage = z.object({id: z.string(), member_id: z.string(), dependent_id: z.string().optional(), effective_date: z.string(), termination_date: z.string().optional(), is_cobra_eligible: z.boolean(), status: z.enum(["", "Enrolled", "Waived"]), pcc_id: z.string().optional(), pcc_name: z.string().optional(), last_coverage_date: z.string(), amount_approved: z.number().optional(), amount_pending: z.number().optional(), benefit_amount_approved: z.number().optional(), benefit_amount_pending: z.number().optional(), age_reduction_percentage: z.number().optional(), change_type: z.enum(["Add", "Update", "Termination"]), is_cobra: z.boolean(), is_voided: z.boolean().optional(), last_modified_on: z.string(), created_on: z.string(), life_event: dtosEnrollmentLifeEvent.optional()}); export const dtosCarrier = z.object({id: z.string(), name: z.string(), group_number: z.string().optional()}); export const dtosPlanLink = z.object({start_date: z.string().optional(), end_date: z.string().optional(), type: z.string().optional(), carrier: dtosCarrier.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(), name: z.string(), id: z.string(), href: z.string()}); export const dtosEnrollment = z.object({effective_date: z.string(), signature_date: z.string(), plan_id: z.string(), employee_id: z.string(), rates: z.array(schema0KeyValuePairEnrollmentRateTypeDecimal), costs: z.array(schema0KeyValuePairEnrollmentCostTypeDecimal), deduction_periods: z.number().int(), original_effective_date: z.string(), policy_number: z.string(), sub_group_number: z.string(), coverage_tier: z.enum(["Employee Only", "Employee + 1 Child", "Employee + 2 Children", "Employee + 3 Children", "Employee + Spouse", "Employee + Spouse + 1 Child", "Employee + Spouse + 2 Children", "Employee + Spouse + 3 Children"]), is_terminated: z.boolean(), life_event: z.string(), life_event_date: z.string(), coverages: z.array(dtosEnrollmentCoverage), last_modified_on: z.string(), created_on: z.string(), eligibility_id: z.string().optional(), name: z.string().optional(), benefit_compensation_type: z.string().optional(), benefit_compensation_amount: z.number().optional(), is_voided: z.boolean().optional(), costs_deduction_period: z.enum(["Default", "Monthly", "Weekly", "PayCycle"]).optional(), plan: dtosPlanLink.optional(), carrier: z.string().optional(), plan_type: z.string().optional(), coverage_details_short_code: z.string().optional(), activity_date: z.string().optional(), change_date: z.string().optional()}); export const dtosEnrollmentChanges = z.object({action: z.string().optional(), enrollment_details: dtosEnrollmentLink.optional(), new_value: dtosEnrollment.optional(), old_value: dtosEnrollment.optional(), change_ids: z.array(z.string()).optional()}); export const dtosProfileChange = z.object({member_id: z.string().optional(), type: z.string().optional(), old_value: z.string().optional(), new_value: z.string().optional(), change_id: z.string().optional()}); export const dtosEmployeeFormLink = z.object({name: z.string(), id: z.string(), href: z.string()}); export const dtosDocumentLink = z.object({name: z.string(), id: z.string(), href: z.string()}); export const dtosManageChangeDetail = z.object({employee: dtosEnrollmentEmployee.optional(), dependents: z.array(dtosEnrollmentDependent).optional(), enrollment_changes: z.array(dtosEnrollmentChanges).optional(), profile_changes: z.array(dtosProfileChange).optional(), forms: z.array(dtosEmployeeFormLink).optional(), documents: z.array(dtosDocumentLink).optional(), changed_by: z.array(z.enum(["Ease-System", "Ease-Staff", "Carrier", "Partner", "Broker", "Employer"])).optional(), change_types: z.array(z.enum(["New Hire", "Termination", "Qualifying Event", "Member Profile", "Enrollments"])).optional(), detail_url: 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 }; /** * manage changes detail * * GET /v{version}/manage-changes-detail */ export const getApiVVersionManageChangesDetail = async (args: GetApiVVersionManageChangesDetailArgs, options: GetApiVVersionManageChangesDetailOptions) => { const {baseUrl, fetch: fetchFn = fetch} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") if (args.employee_id != null) query.append("employee_id", String(args.employee_id)) if (args.from != null) query.append("from", String(args.from)) if (args.to != null) query.append("to", String(args.to)) if (args.date_lookup_field != null) query.append("date_lookup_field", String(args.date_lookup_field)) const url = `${baseUrl.replace(/\/+$/, '')}/v${encodeURIComponent(String(args.version))}/manage-changes-detail${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(dtosManageChangeDetail, await res.json()) };