통합 플랫폼에서 가장 분기가 많은 기능입니다. 티켓 타입 4종 × 권한(역할·조직) × 진행 상태의 곱을 단일 화면 프레임과 다단계 입력 폼으로 수렴시킨 과정을 정리했습니다.
※ "티켓"은 일반적인 이슈 트래킹 용어로만 사용하며, 사내 타입 실명·조직명은 포함하지 않습니다.
결과 조회 페이지는 티켓 타입 4종이 하나의 레이아웃을 공유하고, 타입별 차이는 어댑터가 데이터로 흡수합니다. 입력 화면으로 넘어가는 길목에는 버튼 노출 판정과 라우트 접근 가드가 이중으로 서 있습니다.

버튼을 숨기는 것(UX)과 라우트를 막는 것(방어)을 분리하되, 두 관문이 같은 판정 로직을 공유하므로 "보이는데 못 들어가는" 불일치가 없습니다. URL 직접 접근 시에도 같은 규칙이 적용되고, 차단 시에는 사유를 안내한 뒤 결과 페이지로 복귀시킵니다.
이 매트릭스가 페이지마다 if문으로 흩어지지 않도록, 판정을 중앙 판정 함수와 가드 컴포넌트로 수렴시켰습니다. 행이 늘어나도 수정 지점은 판정 로직 한 곳입니다.
| 조건 | 입력 버튼 | 입력 화면 진입 | 결과 필드 편집 |
|---|---|---|---|
| 담당 조직 일치 (진행 중) | ✅ 노출 | ✅ 허용 | 지정 조직 소속만 활성 |
| 담당 조직 불일치 | ❌ 숨김 | ❌ 가드 차단 → 복귀 | — |
| 종료된 건 | 관리 권한만 노출 | ❌ 차단 다이얼로그 | — |
| 담당 조직 미지정 건 | ✅ 전체 노출 | ✅ 허용 | 지정 조직 소속만 활성 |
폼의 공통 골격(RHF FormProvider + Zod 검증 + 제출 오케스트레이션)을 베이스 컴포넌트 하나로 만들고, 타입별 페이지는 스텝 조합만 선언합니다.
