/**
 * Decision type: APPROVE, REJECT, SEND_BACK, DELEGATE, WITHDRAW, CANCEL, or RESUBMIT
 */
export const ApprovalDecisionDecision = {
  "APPROVE": "APPROVE",
  "REJECT": "REJECT",
  "SEND_BACK": "SEND_BACK",
  "DELEGATE": "DELEGATE",
  "WITHDRAW": "WITHDRAW",
  "CANCEL": "CANCEL",
  "RESUBMIT": "RESUBMIT"
} as const;
export type ApprovalDecisionDecision = (typeof ApprovalDecisionDecision)[keyof typeof ApprovalDecisionDecision];

/**
 * Lifecycle status: DRAFT, ACTIVE, or INACTIVE (terminal)
 */
export const ApprovalPolicyStatus = {
  "DRAFT": "DRAFT",
  "ACTIVE": "ACTIVE",
  "INACTIVE": "INACTIVE"
} as const;
export type ApprovalPolicyStatus = (typeof ApprovalPolicyStatus)[keyof typeof ApprovalPolicyStatus];

/**
 * Role-assignee group semantics (meaningful only when roleId is set): ALL = every member must approve, ANY = a single member's approval suffices, null = no group-level constraint (only step.minimumApprovals applies)
 */
export const ApprovalPolicyStepAssigneeRoleQuorum = {
  "ALL": "ALL",
  "ANY": "ANY"
} as const;
export type ApprovalPolicyStepAssigneeRoleQuorum = (typeof ApprovalPolicyStepAssigneeRoleQuorum)[keyof typeof ApprovalPolicyStepAssigneeRoleQuorum];

/**
 * Lifecycle status: PENDING, APPROVED, REJECTED, REVISION_REQUESTED, CANCELLED, WITHDRAWN
 */
export const ApprovalRequestStatus = {
  "PENDING": "PENDING",
  "APPROVED": "APPROVED",
  "REJECTED": "REJECTED",
  "REVISION_REQUESTED": "REVISION_REQUESTED",
  "WITHDRAWN": "WITHDRAWN",
  "CANCELLED": "CANCELLED"
} as const;
export type ApprovalRequestStatus = (typeof ApprovalRequestStatus)[keyof typeof ApprovalRequestStatus];

/**
 * Step status: PENDING, IN_PROGRESS, APPROVED, or REJECTED
 */
export const ApprovalStepStatus = {
  "PENDING": "PENDING",
  "IN_PROGRESS": "IN_PROGRESS",
  "APPROVED": "APPROVED",
  "REJECTED": "REJECTED"
} as const;
export type ApprovalStepStatus = (typeof ApprovalStepStatus)[keyof typeof ApprovalStepStatus];

/**
 * Group semantics propagated from the originating role assignee (meaningful only when roleId is set): ALL = every group member must approve, ANY = any one suffices, null = no group-level constraint
 */
export const ApprovalStepAssigneeRoleQuorum = {
  "ALL": "ALL",
  "ANY": "ANY"
} as const;
export type ApprovalStepAssigneeRoleQuorum = (typeof ApprovalStepAssigneeRoleQuorum)[keyof typeof ApprovalStepAssigneeRoleQuorum];

/**
 * Per-assignee voting status: PENDING, APPROVED, REJECTED, or DELEGATED
 */
export const ApprovalStepAssigneeStatus = {
  "PENDING": "PENDING",
  "APPROVED": "APPROVED",
  "REJECTED": "REJECTED",
  "DELEGATED": "DELEGATED"
} as const;
export type ApprovalStepAssigneeStatus = (typeof ApprovalStepAssigneeStatus)[keyof typeof ApprovalStepAssigneeStatus];
