kcg-ai-monitoring/frontend
htlee cbfed23823 feat(detection): 환적 의심 전용 탐지 페이지 신설 (Phase 0-3)
docs/prediction-analysis.md §7 P1 권고의 "UI 미노출 탐지" 해소 중 두 번째.
prediction algorithms/transshipment.py 5단계 필터 파이프라인 결과를 전체 목록·
집계·상세 수준으로 조회하는 READ 전용 대시보드.

### 배경
기존 features/vessel/TransferDetection.tsx 는 선박 상세 수준(특정 MMSI 의 환적
이력)이고, 환적 의심 선박 전체 목록을 보려면 ChinaFishing 의 탭 중 하나를 거쳐야
했다. /api/analysis/transship 엔드포인트는 이미 존재하나 전용 페이지가 없었음.

### 변경
- frontend/src/features/detection/TransshipmentDetection.tsx 신설 (405 라인)
  - PageContainer + PageHeader(ArrowLeftRight) + KPI 5장
    (Total / Transship tier CRITICAL/HIGH/MEDIUM / Risk CRITICAL)
  - DataTable 8컬럼 (analyzedAt / mmsi / pairMmsi / duration / tier / risk / zone)
  - features.transship_tier 읽어 Badge 로 심각도 표시
  - 필터: hours(1/6/12/24/48) / riskLevel / mmsi 검색
  - 상세 패널: 분석 피처 JSON 원본 + 좌표 + transship_score
  - 기존 analysisApi.getTransshipSuspects 재사용 — backend 변경 없음
- index.ts + componentRegistry.ts 등록
- detection.json (ko/en) transshipment.* 네임스페이스 추가 (각 44키)
- common.json (ko/en) nav.transshipment 추가
- V033__menu_transshipment_detection.sql
  - auth_perm_tree(detection:transshipment, nav_sort=910)
  - ADMIN 5 ops + OPERATOR/ANALYST/FIELD/VIEWER READ

### 권한 주의
/api/analysis/transship 의 @RequirePermission 은 현재 detection:dark-vessel.
이 메뉴 READ 만으로는 API 호출 불가. 현행 운영자 역할(OPERATOR/ANALYST/FIELD)
은 dark-vessel READ 도 보유하므로 실용 동작.
향후 VesselAnalysisController.listTransshipSuspects 의 @RequirePermission 을
detection:transshipment 로 교체하는 권한 일관화는 별도 MR (후속).

### 검증
- npx tsc --noEmit 통과
- pre-commit tsc + ESLint 통과 예정
- Flyway V033 자동 적용 (백엔드 재배포 필요)
2026-04-20 05:51:06 +09:00
..
public/dar03 feat: AI 모델관리 어구 탐지 탭에 DAR-03 5종 어구 구조 비교 추가 2026-04-14 16:54:20 +09:00
src feat(detection): 환적 의심 전용 탐지 페이지 신설 (Phase 0-3) 2026-04-20 05:51:06 +09:00
.node-version refactor: 모노레포 구조로 전환 (frontend/ + backend/ + database/) 2026-04-07 08:47:24 +09:00
.npmrc refactor: 모노레포 구조로 전환 (frontend/ + backend/ + database/) 2026-04-07 08:47:24 +09:00
.prettierignore refactor: 모노레포 구조로 전환 (frontend/ + backend/ + database/) 2026-04-07 08:47:24 +09:00
.prettierrc refactor: 모노레포 구조로 전환 (frontend/ + backend/ + database/) 2026-04-07 08:47:24 +09:00
design-system.html feat(frontend): 디자인 시스템 쇼케이스 페이지 + 신규 공통 컴포넌트 2026-04-08 11:09:36 +09:00
eslint.config.js refactor: 모노레포 구조로 전환 (frontend/ + backend/ + database/) 2026-04-07 08:47:24 +09:00
index.html refactor: 모노레포 구조로 전환 (frontend/ + backend/ + database/) 2026-04-07 08:47:24 +09:00
package-lock.json feat(frontend): UI 공통 인프라 + 19개 분류 카탈로그 구축 2026-04-08 10:53:40 +09:00
package.json feat(frontend): UI 공통 인프라 + 19개 분류 카탈로그 구축 2026-04-08 10:53:40 +09:00
postcss.config.mjs refactor: 모노레포 구조로 전환 (frontend/ + backend/ + database/) 2026-04-07 08:47:24 +09:00
system-flow.html feat: System Flow 뷰어 추가 (system-flow.html) — 102 노드, 133 엣지 2026-04-07 17:10:22 +09:00
tsconfig.json refactor: 모노레포 구조로 전환 (frontend/ + backend/ + database/) 2026-04-07 08:47:24 +09:00
vite.config.ts fix(backend): PredictionAlert 직렬화 500 에러 수정 + 로컬 프록시 Origin 헤더 보정 2026-04-08 20:34:56 +09:00