// 진행단계 12개 라벨. 백엔드는 숫자(1..12)만 저장하고 라벨은 여기서만 관리한다 - // OrgOverview(업무단계 현황 스트립·진행단계 변경 모달)와 Timeline(단계 변경 이벤트)이 // 같은 배열을 가져다 쓴다. 인덱스 0이 1단계다. export const STAGE_LABELS: string[] = [ '신청', '목록접수', '예비검토', '변호사 배당', '법률검토(권리확인)', 'RE:확인', '법률검토(권리확인) 완료', '법률검토(권리처리)', 'RE:처리', '법률검토(권리처리) 완료', '법률검토 최종완료', '보고서 작성', ] /** 1..12 단계 번호를 라벨로 바꾼다. 범위 밖이면 번호를 그대로 문자열로 돌려준다. */ export function stageLabel(stage: number): string { return STAGE_LABELS[stage - 1] ?? String(stage) } /** * 12단계를 업무 성격으로 묶은 구간. 대시보드의 "업무 구간" 필터와 칸반 카드 모양 * (권리확인 구간은 확인 진척 막대 1줄, 권리처리 구간은 확인+처리 2줄)이 이 묶음을 쓴다. */ export const STAGE_GROUPS: { key: string; label: string; stages: number[] }[] = [ { key: 'intake', label: '접수', stages: [1, 2, 3] }, { key: 'assign', label: '배당', stages: [4] }, { key: 'check', label: '권리확인', stages: [5, 6, 7] }, { key: 'process', label: '권리처리', stages: [8, 9, 10] }, { key: 'closing', label: '마감', stages: [11, 12] }, ] /** 단계 번호가 속한 구간 key. 범위 밖이거나 null이면 null. */ export function stageGroupKey(stage: number | null): string | null { if (stage === null) { return null } return STAGE_GROUPS.find((group) => group.stages.includes(stage))?.key ?? null }