sn.ts 1.73 KB
export const SN_STATUS_VALUES = [
  'pending',
  'in_process',
  'completed',
  'frozen',
  'scrapped'
] as const

export const SN_EXCEPTION_STATUS_VALUES = [
  'none',
  'open',
  'rework',
  'closed'
] as const

export const SN_ACTION_VALUES = [
  'import',
  'freeze',
  'unfreeze',
  'scrap'
] as const

export type SnStatus = (typeof SN_STATUS_VALUES)[number]
export type SnExceptionStatus = (typeof SN_EXCEPTION_STATUS_VALUES)[number]
export type SnAction = (typeof SN_ACTION_VALUES)[number]

export interface SnFlowEvent {
  id: string
  action: SnAction
  fromStatus: SnStatus | null
  toStatus: SnStatus
  operator: string
  at: string
  reason?: string
  evidencePath?: string
  currentStep: string
  exceptionStatus: SnExceptionStatus
}

export interface SnAuditSummary {
  createdBy: string
  createdAt: string
  updatedBy: string
  updatedAt: string
  lastAction: SnAction
  lastActionAt: string
  lastActionBy: string
}

export interface SnItem {
  id: number
  sn: string
  workOrderNo: string
  status: SnStatus
  currentStep: string
  exceptionStatus: SnExceptionStatus
  freezeReason?: string
  scrapReason?: string
  audit: SnAuditSummary
  events: SnFlowEvent[]
}

export interface SnListQuery {
  sn?: string
  workOrderNo?: string
  status?: SnStatus
  currentStep?: string
  exceptionStatus?: SnExceptionStatus
}

export interface SnImportPayload {
  workOrderNo: string
  currentStep: string
  snList: string[]
  operator: string
}

export interface SnActionPayload {
  operator: string
  reason: string
}

export interface SnMutationResponse {
  success: boolean
  errorCode: string | null
  message: string
}

export interface SnImportResponse extends SnMutationResponse {
  importedCount: number
  skippedCount: number
  duplicateSnList: string[]
}