import {z} from 'zod' export type GetApiV1OrgOrgIdCompReviewCompReviewIdAssociatedEntitiesArgs = {orgId: string, compReviewId: string}; export type GetApiV1OrgOrgIdCompReviewCompReviewIdAssociatedEntitiesOptions = {baseUrl?: string | undefined, fetch?: typeof fetch | undefined}; export const money = z.object({amount: z.number(), currency: z.string(), places: z.number().int().optional()}); export const payInterval = z.object({interval: z.enum(["YEARLY", "MONTHLY", "WEEKLY", "DAILY", "HOURLY"]), pay: money, hoursPerWeek: z.number().int().optional(), weeksPerYear: z.number().int().optional(), monthsPerYear: z.number().int().optional(), daysPerYear: z.number().int().optional()}); export const variableComp = z.object({type: z.enum(["BONUS", "COMMISSION"]), interval: z.literal("YEARLY")}); export const comp = z.object({baseComp: payInterval.optional(), variableTargets: z.array(variableComp).optional(), grantShares: z.number().int().optional(), grantValue: z.number().int().optional(), grantType: z.enum(["ISO", "NSO", "RSU", "SAR", "PERFORMANCE_SHARES", "PHANTOM_STOCK", "RSA"]).optional()}); export const jobRelationship = z.object({jobId: z.string(), type: z.enum(["MANAGER", "DIRECT", "INDIRECT_MANAGER", "INDIRECT", "NONE"])}); export const upcomingChange = z.object({id: z.string().optional(), type: z.enum(["HIRE", "DEPART", "MOVE", "UPCOMING", "CREATE", "UPDATE", "DATA", "DELETE", "RELATE", "BACKFILL"]).optional(), date: z.string(), announceDate: z.string().optional(), personId: z.string().optional(), otherPersonId: z.string().optional()}); export const job = z.object({jobId: z.string(), orgId: z.string(), title: z.string(), comp: comp.optional(), sensitive: z.enum(["GLOBAL", "ORG", "SENSITIVE", "PERSONAL", "MANAGER", "HIGH", "PRIVATE"]).optional(), relationships: z.array(jobRelationship).optional(), managerIds: z.array(z.string()).optional(), groupIds: z.array(z.string()), placement: z.enum(["NORMAL", "ASSISTANT"]).optional(), employment: z.enum(["FULL", "PART", "TEMP", "CONTRACT", "INTERN", "EXPAT"]).optional(), fields: z.record(z.string(), z.object({})), startDate: z.string().optional(), startDatePlanned: z.string().optional(), personStartDate: z.string().optional(), personEndDate: z.string().optional(), personJobStartDate: z.string().optional(), personJobEndDate: z.string().optional(), personId: z.string().optional(), upcoming: z.array(upcomingChange).optional(), scenarioId: z.string().optional(), backfillPersonId: z.string().optional()}); export const name = z.object({first: z.string().optional(), middle: z.string().optional(), last: z.string(), pref: z.string().optional(), prefLast: z.string().optional()}); export const contact = z.object({type: z.enum(["ADP", "BAMBOO", "EMPLOYEE", "GREENHOUSE", "GOOGLE", "GUSTO", "HUMAANS", "JOBVITE", "JUSTWORKS", "JUSTWORKS_MEMBER_ID", "LEVER", "NAMELY", "OKTA", "PAYLOCITY", "SAPLING", "PRISM", "SUCCESSFACTORS", "RIPPLING", "TRINET", "ULTIPRO", "UKG_READY", "WORKDAY", "ZENEFITS", "LINKEDIN", "TWITTER", "GITHUB", "GITLAB", "SLACK", "TIMETASTIC", "FINCH", "ALPHASTAFF", "DEEL", "ADP_ASSOCIATE_ID", "ADP_WORKER_ID", "HIBOB", "GUSTO_UUID", "MSTEAMS", "ENTRA", "DAYFORCE", "HOME_EMAIL", "MOBILE_PHONE", "WORK_EMAIL", "HOME_PHONE", "WORK_PHONE", "WORK_FAX"]), value: z.string().optional(), format: z.enum(["PHONE", "EMAIL", "ID"])}); export const geopoint = z.object({type: z.string(), coordinates: z.array(z.number())}); export const address = z.object({street1: z.string().optional(), street2: z.string().optional(), street3: z.string().optional(), city: z.string().optional(), state: z.string().optional(), country: z.string(), postal: z.string().optional(), geo: geopoint.optional(), approxGeo: geopoint.optional()}); export const attribution = z.object({principalUserId: z.string().optional(), agentUserIds: z.array(z.string()).optional(), eventId: z.string().optional(), aiChatId: z.string().optional(), aiToolUseId: z.string().optional(), channel: z.enum(["WEB", "MOBILE", "SLACK", "TEAMS", "MCP"]).optional()}); export const orgAccess = z.object({orgId: z.string(), personId: z.string().optional(), access: z.enum(["NONE", "PREBOARDING", "VIEW", "LIMITED", "MEMBER_LIMITED_COMP", "MEMBER", "CUSTOM", "TECH_OWNER", "TIMEOFF", "CONTACT", "COMP_CASH", "COMP_EQUITY", "COMP_ALL", "RECRUIT_SENSITIVE", "RECRUIT_PRIMARY", "SENSITIVE_LIMITED_COMP", "SENSITIVE", "PRIMARY", "PEOPLE_OPS_ADMIN", "PEOPLE_OPS_ADMIN_NO_COMP_DATA", "PEOPLE_OPS_ADMIN_NO_SENSITIVE_DATA", "OWNER"]), groupIds: z.array(z.string()).optional(), expr: z.string().optional(), expireAt: z.string().optional(), roleId: z.string().optional(), policyIds: z.array(z.string()).optional(), status: z.enum(["INACTIVE", "PREBOARDING", "ACTIVATION", "ACTIVE", "OFFBOARDED"]).optional(), homeEmail: z.string().optional(), workEmail: z.string().optional(), workRoleId: z.string().optional()}); export const person = z.object({id: z.string(), orgId: z.string().optional(), name: name, contacts: z.array(contact).optional(), address: address.optional(), remoteWorkAddress: address.optional(), birthDate: z.string().optional(), startDate: z.string().optional(), endDate: z.string().optional(), imagePath: z.string().optional(), nameAudioPath: z.string().optional(), gender: z.enum(["MALE", "FEMALE", "NONBINARY", "PREFER_NOT"]).optional(), ethnicity: z.enum(["HISPANIC", "WHITE", "BLACK", "PACIFIC", "ASIAN", "NATIVE", "TWO", "PREFER_NOT"]).optional(), fields: z.record(z.string(), z.object({})).optional(), sensitiveFields: z.record(z.string(), z.enum(["GLOBAL", "ORG", "SENSITIVE", "PERSONAL", "MANAGER", "HIGH", "PRIVATE"])).optional(), createId: z.string().optional(), createBehalfId: z.string().optional(), createAttribution: attribution.optional(), createAt: z.string().optional(), updateId: z.string().optional(), updateBehalfId: z.string().optional(), updateAttribution: attribution.optional(), updateAt: z.string().optional(), inviteOptions: orgAccess.optional(), state: z.enum(["PRIMARY", "SCENARIO", "PENDING", "INACTIVE"]).optional()}); export const translations = z.object({values: z.record(z.string(), z.string())}); export const enumValue = z.object({name: z.string(), label: z.string(), color: z.string().optional(), expr: z.string().optional(), num: z.number().optional(), sort: z.number().int().optional(), rank: z.number().int().optional(), id: z.string().optional(), labelTr: translations.optional()}); export const fieldOptions = z.object({min: z.string().optional(), max: z.string().optional(), minItems: z.number().int().optional(), maxItems: z.number().int().optional(), stackRank: z.boolean().optional(), step: z.number().optional(), enableEditDialog: z.boolean().optional(), requiredJobField: z.boolean().optional(), excludeTargetPersonId: z.boolean().optional(), maxLength: z.number().int().optional(), readOnly: z.boolean().optional(), includeFormer: z.boolean().optional(), groupTypeIds: z.array(z.string()).optional(), effectiveDated: z.boolean().optional(), unique: z.boolean().optional(), required: z.boolean().optional()}); export const tableRef = z.object({tableId: z.string().optional(), tableName: z.string().optional()}); export const autoIncFieldPart = z.object({type: z.enum(["LITERAL_STRING", "GROUP_CODE"]), value: z.object({}), defaultValue: z.string().optional()}); export const autoIncFieldConfig = z.object({upperCase: z.boolean(), padDigits: z.number().int(), separator: z.enum(["HYPHEN", "UNDERSCORE", "SPACE", "NONE"]), prefixParts: z.array(autoIncFieldPart)}); export const dtValue = z.object({value: z.object({}).optional()}); export const field = z.object({id: z.string(), orgId: z.string().optional(), name: z.string(), label: z.string(), labelTr: translations.optional(), description: z.string().optional(), inUse: z.boolean().optional(), expr: z.string().optional(), exprType: z.enum(["ADDRESS", "ALLOCATIONS", "AUDIO", "BOOLEAN", "COMP", "COMPOUND", "COMP_BAND", "CONTACTS", "CURRENCY", "DATE", "DECIMAL", "ELAPSED_DAYS", "ELAPSED_MONTHS", "ELAPSED_YEARS", "EMAIL", "ENUM", "ENUM_EXPR", "ENUM_MULTI", "ENUM_SCALE", "EXPR", "FILE", "GROUP", "GROUPS", "GROUP_ASSIGNMENTS", "GROUP_TYPE", "GROUP_POSITION_ASSIGNMENTS", "IMAGE", "INTEGER", "JOB", "JOB_CODE", "JOBS", "JOB_TIER", "LIST", "MAP", "MONEY", "NAME", "OBJECT", "PAY_INTERVAL", "PERCENT", "PERSON", "PERSONS", "PHONE", "STOCKGRANT", "STRING", "TABLE_REF", "TEXT", "TIMEOFF", "TIMESTAMP", "TRACKED_GROUP", "URL", "USER", "VARIABLE_COMP", "VARIABLE_COMPS"]).optional(), type: z.enum(["ADDRESS", "ALLOCATIONS", "AUDIO", "BOOLEAN", "COMP", "COMPOUND", "COMP_BAND", "CONTACTS", "CURRENCY", "DATE", "DECIMAL", "ELAPSED_DAYS", "ELAPSED_MONTHS", "ELAPSED_YEARS", "EMAIL", "ENUM", "ENUM_EXPR", "ENUM_MULTI", "ENUM_SCALE", "EXPR", "FILE", "GROUP", "GROUPS", "GROUP_ASSIGNMENTS", "GROUP_TYPE", "GROUP_POSITION_ASSIGNMENTS", "IMAGE", "INTEGER", "JOB", "JOB_CODE", "JOBS", "JOB_TIER", "LIST", "MAP", "MONEY", "NAME", "OBJECT", "PAY_INTERVAL", "PERCENT", "PERSON", "PERSONS", "PHONE", "STOCKGRANT", "STRING", "TABLE_REF", "TEXT", "TIMEOFF", "TIMESTAMP", "TRACKED_GROUP", "URL", "USER", "VARIABLE_COMP", "VARIABLE_COMPS"]), plural: z.enum(["SINGLE", "LIST", "SET"]), values: z.array(enumValue).optional(), defaultValue: z.object({}).optional(), options: fieldOptions.optional(), entityType: z.enum(["JOB", "JOB_OPEN", "JOB_FILLED", "PERSON", "CHANGE", "TABLE", "ORG", "USER", "NONE"]).optional(), isUnique: z.boolean(), isRequired: z.boolean(), isEffectiveDated: z.boolean().optional(), aliases: z.array(z.string()).optional(), groupTypeId: z.string().optional(), calc: z.enum(["ADDRESS", "AGE", "ALLOCATIONS", "ALLOCATIONS_COUNT", "ALLOCATIONS_IS_OVERALLOCATED", "ALLOCATIONS_IS_UNDERALLOCATED", "ALLOCATIONS_TOTAL", "ANNIVERSARY", "ANNUAL_BASE_MONEY", "BACKFILL", "BACKFILLED_BY", "BAND", "BAND_RANGE", "BASE", "BASE_CAL_YEAR_PRORATED", "BASE_CAL_YTD", "BASE_COMP", "BASE_COMP_AMOUNT", "BASE_COMP_ANNUALIZED", "BASE_COMP_ANNUALIZED_AS_ORG_CURRENCY", "BASE_COMP_AS_ORG_CURRENCY", "BASE_COMP_CHANGES", "BASE_COMP_CURRENCY", "BASE_COMP_HOURS_PER_WEEK", "BASE_COMP_INTERVAL", "BASE_COMP_LAST_RAISE_DATE", "BASE_COMP_LAST_RAISE_MONTHS_SINCE", "BASE_COMP_LAST_RAISE_PAY", "BASE_COMP_LAST_RAISE_PAY_AS_ORG_CURRENCY", "BASE_COMP_LAST_RAISE_PERCENT", "BASE_COMP_LAST_RAISE_TYPE", "BASE_COMP_PAY", "BASE_COMP_PAY_AS_ORG_CURRENCY", "BASE_COMP_WEEKS_PER_YEAR", "BASE_FISCAL_YEAR_PRORATED", "BASE_FISCAL_YTD", "BASE_PRIMARY", "BASE_RAISE_AMOUNT", "BASE_RAISE_DATE", "BASE_RAISE_PERCENT", "BIRTH_DATE", "BIRTHDAY", "BONUS_TARGET", "BUDGET_COST", "CAL_YEAR_VEST_SHARES", "CAL_YEAR_VEST_VALUE", "CAN_APPROVE_CHANGE", "CAN_EDIT_JOB", "CASH_COMP", "CASH_COMP_LOCAL", "CHANGE", "CHANGE_ID", "COMMISSION_TARGET", "COMP", "COMP_CHANGE_PERCENT", "COMPA_RATIO_MID", "COMPA_RATIO_TARGET", "CONTACT", "CONTACTS", "COST", "COST_STATUS", "CREATE_DATE", "CURRENCY", "DATA", "DATE", "DATE_OF", "DAYS_ACTIVE", "DAYS_OFF", "DAYS_OFF_TAKEN", "DAYS_OFF_UPCOMING", "DAYS_OPEN", "DB", "DEPART", "DEPARTMENT", "DEPARTMENT_FUNC", "DIRECT_JOBS", "DIRECT_JOB_COUNT", "DIRECT_PERSON_COUNT", "DIRECT_PERSONS", "EMPLOYMENT", "END_DATE_JOB", "END_DATE_ORG", "ETHNICITY", "FISCAL_YEAR_COST", "GENDER", "GEOIP", "GEOIP_ADDRESS", "GRAND_MANAGER", "GRANT_SHARES", "GRANT_TYPE", "GRANT_VALUE", "GRANTS", "GROUP_IDS", "GROUPS_BY_TYPE", "GROUP_GOALS", "HEADCOUNT", "HISTORIC_BACKFILL", "HOUR", "HOURLY", "HOURLY_PRIMARY", "HOURS_PER_WEEK", "IMAGE", "INDIRECT", "INDIRECT_JOBS", "JOB", "JOB_ID", "JOB_CODE", "JOBCOUNT", "LAST_GRANT", "LAST_GRANT_DATE", "LAST_GRANT_ORIGINAL_VALUE", "LOCATION", "MANAGE_JOBS", "MANAGE_PERSONS", "MANAGER", "MANAGER_COUNT", "MANAGER_FILLED", "MANAGER_ID", "MANAGERS", "MANAGER_PERSON", "MANAGER_PERSONS", "ME", "MERGE_SCENARIO_ID", "NAME", "NAME_AUDIO", "NAME_TITLE", "NEXT_DAY_OFF", "NEXT_TIME_OFF", "NEXT_YEAR_VEST_SHARES", "NEXT_YEAR_VEST_VALUE", "NOTE", "NOOP", "OPEN", "ORG", "OWNER_GOALS", "PERSON", "PERSON_ID", "PLACEMENT", "PREV_DAY_OFF", "PREV_TIME_OFF", "PROMOTION", "PROMOTION_DATE", "PROPOSED", "Q", "RAISE_AMOUNT", "RAISE_DATE", "RAISE_PERCENT", "RAISE_PROMOTION_DATE", "REASON", "REGRET", "RELATIONSHIPS", "REMOTE_WORK_ADDRESS", "SCENARIO", "SCENARIO_CHANGED", "SENSITIVE", "SENSITIVE_FIELDS", "START_DATE", "START_DATE_JOB", "START_DATE_ORG", "START_DATE_LIFETIME", "START_DATE_PLANNED", "STATE", "STRIKE_PRICE", "SUPPORTER_GOALS", "TARGET_HOURS_PER_WEEK", "TARGET_WEEKS_PER_YEAR", "TEAM", "TENURE_JOB", "TENURE_ORG", "TENURE_LIFETIME", "TIMEZONE_OFFSET", "TITLE", "TITLE_DATE", "TODAY", "TOTAL_COMP", "TOTAL_COMP_LOCAL", "TOTAL_ORG_SHARES", "TOTAL_SHARES", "TOTAL_SHARES_VALUE", "UNDER_JOBS", "UNVESTED_SHARES", "UNVESTED_VALUE", "UPDATE", "USER_ACTIVE_DAYS", "USER_ACTIVE_DAYS_CONSECUTIVE", "USER_CAN_EDIT_COMP_FOR_JOB", "USER", "VARIABLE", "VARIABLE_AMOUNT", "VARIABLE_INTERVAL", "VARIABLE_PERCENT", "VARIABLE_PRIMARY", "VARIABLE_TARGET", "VARIABLE_TARGET_AMOUNT", "VARIABLE_TARGET_ANNUALIZED", "VARIABLE_TARGET_CURRENCY", "VARIABLE_TARGET_PERCENT", "VARIABLE_TARGET_TYPE", "VARIABLE_TARGETS", "VARIABLE_TARGETS_LAST_RAISE_DATE", "VARIABLE_TARGETS_LAST_RAISE_MONTHS_SINCE", "VARIABLE_TARGETS_LAST_RAISE_PAY", "VARIABLE_TARGETS_LAST_RAISE_PERCENT", "VARIABLE_COMP_CHANGES", "VARIABLE_TYPE", "VESTED_DATE", "VESTED_SHARES", "VESTED_VALUE", "WEEKS_PER_YEAR", "WORK_ADDRESS", "UPCOMING"]).optional(), classification: z.literal("COMPOUND").optional(), sensitive: z.enum(["GLOBAL", "ORG", "SENSITIVE", "PERSONAL", "MANAGER", "HIGH", "PRIVATE"]), hideExpr: z.boolean().optional(), expireDays: z.number().int().optional(), categoryId: z.string().optional(), categoryIds: z.array(z.string()).optional(), status: z.enum(["ACTIVE", "HIDDEN"]).optional(), tableId: z.string().optional(), tableName: z.string().optional(), tableRef: tableRef.optional(), readonly: z.boolean().optional(), builtIn: z.boolean().optional(), canOverrideSensitivity: z.boolean().optional(), places: z.number().int().optional(), isAutoIncrement: z.boolean().optional(), autoIncConfig: autoIncFieldConfig.optional(), shouldAutoAddValue: z.boolean().optional(), overrideRevert: z.record(z.string(), dtValue).optional(), overrideName: z.string().optional(), hasSubfields: z.boolean().optional(), createId: z.string().optional(), createAt: z.string().optional(), updateId: z.string().optional(), updateAt: z.string().optional(), deleteId: z.string().optional(), deleteAt: z.string().optional()}); export const partialAppEntities = z.object({jobs: z.record(z.string(), job), persons: z.record(z.string(), person), personToJobMap: z.record(z.string(), job), fields: z.array(field)}); 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 }; /** * Get the necessary caches on a specific date for a compensation review * * GET /v1/org/{orgId}/comp-review/{compReviewId}/associated-entities */ export const getApiV1OrgOrgIdCompReviewCompReviewIdAssociatedEntities = async (args: GetApiV1OrgOrgIdCompReviewCompReviewIdAssociatedEntitiesArgs, options?: GetApiV1OrgOrgIdCompReviewCompReviewIdAssociatedEntitiesOptions) => { const {baseUrl = "https://localhost", fetch: fetchFn = fetch} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") const url = `${baseUrl.replace(/\/+$/, '')}/v1/org/${encodeURIComponent(String(args.orgId))}/comp-review/${encodeURIComponent(String(args.compReviewId))}/associated-entities${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(partialAppEntities, await res.json()) };