feat(detection): 환적 의심 전용 탐지 페이지 신설 (Phase 0-3) #86

병합
htlee feature/phase0-3-transshipment-detection 에서 develop 로 2 commits 를 머지했습니다 2026-04-20 05:52:05 +09:00
소유자

변경 사항

docs/prediction-analysis.md §7 P1 권고의 "UI 미노출 탐지" 해소 — Phase 0-3 (2/2, 마지막)

prediction algorithms/transshipment.py 의 5단계 필터 파이프라인(이종 쌍 → 감시영역 → RENDEZVOUS 90분+ → 점수 50+ → 밀집 방폭) 결과를 전체 목록·집계·상세 수준으로 조회하는 READ 전용 대시보드.

기존 환적 관련 화면과의 차이

화면 수준 용도
features/vessel/TransferDetection.tsx 선박 상세 특정 MMSI 의 환적 이력 확인
features/detection/ChinaFishing.tsx (탭 2 "환적접촉탐지") 중국 선박 전용 MMSI 412 prefix 만 필터
신규 /transshipment 운영 대시보드 전 선박 환적 의심 목록·집계

주요 변경

  1. frontend/src/features/detection/TransshipmentDetection.tsx 신설 (405 라인)

    • PageContainer + PageHeader(ArrowLeftRight) + KPI 5장
      • Total / Transship CRITICAL / Transship HIGH / Transship MEDIUM / Risk CRITICAL
      • features.transship_tier 읽어 tier 분류, riskLevel 로 종합 위험 분리
    • DataTable 8컬럼 (analyzed_at / mmsi / pair_mmsi / duration_min / tier / risk_score / risk_level / zone)
    • 필터: hours(1/6/12/24/48) / riskLevel / mmsi 검색
    • 상세 패널: JSON features 원본 + transship_score + 좌표
    • design-system SSOT 준수 (Badge intent / text-* 시맨틱 토큰)
  2. 등록index.ts export + componentRegistry.ts lazy

  3. i18ndetection.jsontransshipment.* 44키 (ko/en), common.json nav.transshipment

  4. V033 마이그레이션auth_perm_tree(detection:transshipment, nav_sort=910) + 전 역할 READ

권한 주의 (후속 개선 필요)

/api/analysis/transship 의 @RequirePermission 은 현재 detection:dark-vessel 에 묶여 있음. 이 신규 메뉴의 READ 만으로는 API 호출 불가. 현행 운영자 역할(OPERATOR/ANALYST/FIELD)은 양쪽 READ 모두 보유하므로 실용 동작하나, 권한 일관성 관점에서는 VesselAnalysisController.listTransshipSuspects 의 @RequirePermission 을 detection:transshipment 로 교체하는 별도 MR 이 후속이다.

테스트

  • npx tsc --noEmit 통과 (0 에러)
  • pre-commit (tsc + ESLint) 통과
  • (운영) 백엔드 재배포 → Flyway V033 자동 적용
  • (운영) 프런트 재배포 → 좌측 메뉴 "환적 의심 탐지" 노출 확인
  • (운영) 페이지 접속 → /api/analysis/transship?hours=6 응답 기반 렌더링 + KPI 집계 확인

관련

  • Phase 0-2 (PR #85) 와 쌍을 이루어 docs/prediction-analysis.md P1 UI 미노출 탐지 전체 해소
  • Phase 0-1 (PR #83) + Phase 0-2 (PR #85) + Phase 0-3 (본 MR) 로 Phase 0 전체 완료
  • 다음: Phase 1 (DB 스키마 V034 + models_core + DAG Executor)
## 변경 사항 **docs/prediction-analysis.md §7 P1 권고의 "UI 미노출 탐지" 해소 — Phase 0-3 (2/2, 마지막)** prediction `algorithms/transshipment.py` 의 5단계 필터 파이프라인(이종 쌍 → 감시영역 → RENDEZVOUS 90분+ → 점수 50+ → 밀집 방폭) 결과를 전체 목록·집계·상세 수준으로 조회하는 READ 전용 대시보드. ### 기존 환적 관련 화면과의 차이 | 화면 | 수준 | 용도 | |---|---|---| | `features/vessel/TransferDetection.tsx` | 선박 상세 | 특정 MMSI 의 환적 이력 확인 | | `features/detection/ChinaFishing.tsx` (탭 2 "환적접촉탐지") | 중국 선박 전용 | MMSI 412 prefix 만 필터 | | **신규 `/transshipment`** | **운영 대시보드** | **전 선박 환적 의심 목록·집계** | ### 주요 변경 1. **`frontend/src/features/detection/TransshipmentDetection.tsx`** 신설 (405 라인) - `PageContainer` + `PageHeader(ArrowLeftRight)` + KPI 5장 - Total / Transship CRITICAL / Transship HIGH / Transship MEDIUM / Risk CRITICAL - `features.transship_tier` 읽어 tier 분류, `riskLevel` 로 종합 위험 분리 - `DataTable` 8컬럼 (analyzed_at / mmsi / pair_mmsi / duration_min / tier / risk_score / risk_level / zone) - 필터: hours(1/6/12/24/48) / riskLevel / mmsi 검색 - 상세 패널: JSON `features` 원본 + transship_score + 좌표 - design-system SSOT 준수 (Badge intent / text-* 시맨틱 토큰) 2. **등록** — `index.ts` export + `componentRegistry.ts` lazy 3. **i18n** — `detection.json` 에 `transshipment.*` 44키 (ko/en), `common.json` `nav.transshipment` 4. **V033 마이그레이션** — `auth_perm_tree(detection:transshipment, nav_sort=910)` + 전 역할 READ ### 권한 주의 (후속 개선 필요) `/api/analysis/transship` 의 @RequirePermission 은 현재 `detection:dark-vessel` 에 묶여 있음. 이 신규 메뉴의 READ 만으로는 API 호출 불가. 현행 운영자 역할(OPERATOR/ANALYST/FIELD)은 양쪽 READ 모두 보유하므로 실용 동작하나, **권한 일관성 관점에서는 VesselAnalysisController.listTransshipSuspects 의 @RequirePermission 을 `detection:transshipment` 로 교체하는 별도 MR 이 후속**이다. ### 테스트 - [x] `npx tsc --noEmit` 통과 (0 에러) - [x] pre-commit (tsc + ESLint) 통과 - [ ] (운영) 백엔드 재배포 → Flyway V033 자동 적용 - [ ] (운영) 프런트 재배포 → 좌측 메뉴 "환적 의심 탐지" 노출 확인 - [ ] (운영) 페이지 접속 → `/api/analysis/transship?hours=6` 응답 기반 렌더링 + KPI 집계 확인 ### 관련 - Phase 0-2 (PR #85) 와 쌍을 이루어 docs/prediction-analysis.md P1 UI 미노출 탐지 전체 해소 - Phase 0-1 (PR #83) + Phase 0-2 (PR #85) + Phase 0-3 (본 MR) 로 Phase 0 전체 완료 - 다음: Phase 1 (DB 스키마 V034 + models_core + DAG Executor)
htlee added 2 commits 2026-04-20 05:51:57 +09:00
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 자동 적용 (백엔드 재배포 필요)
claude-bot 이 변경사항을 승인하였습니다. 2026-04-20 05:52:05 +09:00
claude-bot left a comment
멤버

Phase 0-3 환적 의심 전용 탐지 페이지 승인 (Phase 0 UI 미노출 탐지 해소 완료 2/2)

Phase 0-3 환적 의심 전용 탐지 페이지 승인 (Phase 0 UI 미노출 탐지 해소 완료 2/2)
htlee merged commit 2395ef1613 into develop 2026-04-20 05:52:05 +09:00
htlee 삭제된 브랜치 feature/phase0-3-transshipment-detection 2026-04-20 05:52:06 +09:00
"로그인하여 이 대화에 참여"
No reviewers
레이블 없음
마일스톤 없음
담당자 없음
참여자 2명
알림
마감일
기한이 올바르지 않거나 범위를 벗어났습니다. 'yyyy-mm-dd'형식을 사용해주십시오.

마감일이 설정되지 않았습니다.

의존성

No dependencies set.

Reference: gc/kcg-ai-monitoring#86
No description provided.