/** * Static business events that can trigger workflows and ACP agents. * * Availability still depends on the target company and execution role. The * manifest installation API is the authority for those checks. */ export const BusinessEvent = { EMPLOYEE_HIRING_INITIATED: 'EMPLOYEE_HIRING_INITIATED', EMPLOYEE_HIRING_OFFER_SENT: 'EMPLOYEE_HIRING_OFFER_SENT', EMPLOYEE_HIRING_OFFER_ACCEPTED: 'EMPLOYEE_HIRING_OFFER_ACCEPTED', EMPLOYEE_IS_TRANSITIONED: 'EMPLOYEE_IS_TRANSITIONED', EMPLOYEE_TERMINATION_INITIATED: 'EMPLOYEE_TERMINATION_INITIATED', EMPLOYEE_TERMINATION_FINALIZED: 'EMPLOYEE_TERMINATION_FINALIZED', EMPLOYEE_TERMINATION_APPLIED: 'EMPLOYEE_TERMINATION_APPLIED', EMPLOYEE_PROFILE_CHANGE_APPROVED: 'EMPLOYEE_PROFILE_CHANGE_APPROVED', EMPLOYEE_PROFILE_CHANGE_INITIATED: 'EMPLOYEE_PROFILE_CHANGE_INITIATED', LEAVE_REQUEST_CREATED: 'LEAVE_REQUEST_CREATED', LEAVE_REQUEST_APPROVED: 'LEAVE_REQUEST_APPROVED', LEAVE_REQUEST_REJECTED: 'LEAVE_REQUEST_REJECTED', LEAVE_REQUEST_STARTED: 'LEAVE_REQUEST_STARTED', LEAVE_REQUEST_FINISHED: 'LEAVE_REQUEST_FINISHED', LEAVE_REQUEST_CANCELED: 'LEAVE_REQUEST_CANCELED', DOCUMENT_DELETED: 'DOCUMENT_DELETED', DOCUMENT_EXPIRED: 'DOCUMENT_EXPIRED', DOCUMENT_SENT: 'DOCUMENT_SENT', DOCUMENT_SIGNED: 'DOCUMENT_SIGNED', DOCUMENT_UPLOADED: 'DOCUMENT_UPLOADED', DOCUMENT_VIEWED: 'DOCUMENT_VIEWED', OFFER_STATE_REACHED: 'OFFER_STATE_REACHED', REJECTED: 'REJECTED', MILESTONE_GREATER_THAN_OR_EQUAL_TO_SCREEN_STATE: 'MILESTONE_GREATER_THAN_OR_EQUAL_TO_SCREEN_STATE', STAGE_CHANGED: 'STAGE_CHANGED', APPLICANT_CREATED: 'APPLICANT_CREATED', INTERNAL_CANDIDATE_APPLIED: 'INTERNAL_CANDIDATE_APPLIED', REJECTION_REASON_CHANGED: 'REJECTION_REASON_CHANGED', JOB_REQ_CREATED: 'JOB_REQ_CREATED', APPLICATION_INTERVIEW_IS_CANCELLED: 'APPLICATION_INTERVIEW_IS_CANCELLED', ATS_OFFER_LETTER_SIGNED: 'ATS_OFFER_LETTER_SIGNED', ENROLMENT_COMPLETED: 'ENROLMENT_COMPLETED', ENROLMENT_STARTED: 'ENROLMENT_STARTED', LEARNING_PATH_COMPLETED: 'LEARNING_PATH_COMPLETED', EMPLOYEE_SURVEY_RESPONSE_SUBMITTED: 'EMPLOYEE_SURVEY_RESPONSE_SUBMITTED', APPLICANT_SURVEY_RESPONSE_SUBMITTED: 'APPLICANT_SURVEY_RESPONSE_SUBMITTED', FUNCTION_RUN_COMPLETED: 'FUNCTION_RUN_COMPLETED', CARD_AUTHORIZATION_CREATED: 'CARD_AUTHORIZATION_CREATED', CARD_TRANSACTION_DISPUTED: 'CARD_TRANSACTION_DISPUTED', CARD_TRANSACTION_ANOMALY_DETECTED: 'CARD_TRANSACTION_ANOMALY_DETECTED', CARD_REPAYMENT_REQUEST_CANCELLED: 'CARD_REPAYMENT_REQUEST_CANCELLED', INVOICE_STATEMENT_GENERATED: 'INVOICE_STATEMENT_GENERATED', SPEND_PROGRAM_BALANCE_UPDATED: 'SPEND_PROGRAM_BALANCE_UPDATED', VENDOR_ADDED: 'VENDOR_ADDED', VENDOR_BANK_ACCOUNT_ADDED: 'VENDOR_BANK_ACCOUNT_ADDED', PAYROLL_JOURNAL_ENTRY_POSTED: 'PAYROLL_JOURNAL_ENTRY_POSTED', FLIGHT_BOOKED: 'FLIGHT_BOOKED', } as const; export type StaticBusinessEventKey = (typeof BusinessEvent)[keyof typeof BusinessEvent]; /** Approval events are generated from the approval action type at runtime. */ export type ApprovalBusinessEventOutcome = 'approved' | 'rejected'; export type ApprovalBusinessEventKey = `approvals_${string}_request_is_${ApprovalBusinessEventOutcome}`; /** A public business-event key accepted in a manifest. */ export type BusinessEventKey = StaticBusinessEventKey | ApprovalBusinessEventKey; /** Builds the event key for an approval action type such as `leave_request_approval`. */ export function approvalBusinessEventKey( actionType: string, outcome: ApprovalBusinessEventOutcome, ): ApprovalBusinessEventKey { return `approvals_${actionType.toLowerCase()}_request_is_${outcome}`; }