feat(detection): 불법 조업 이벤트 전용 페이지 신설 (Phase 0-2) #85

병합
htlee feature/phase0-2-illegal-fishing-pattern 에서 develop 로 2 commits 를 머지했습니다 2026-04-20 05:47:18 +09:00
소유자

변경 사항

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

event_generator 가 생산하는 카테고리 중 "불법 조업" 에 해당하는 3종을 통합 조회하는 READ 전용 대시보드 추가. 이 이벤트들은 DB(prediction_events) 와 백엔드(/api/events) 까지 도달하지만 그간 EventList(/event-list) 에서만 볼 수 있어 전용 탐지 화면이 부재했다.

대상 카테고리

category 포함 rule 의미
GEAR_ILLEGAL g01_zone_gear_violation, g05_gear_drift, g06_pair_trawl G-코드 어구 위반
EEZ_INTRUSION territorial_sea_violation, contiguous_zone_high_risk 영해/접속수역 침범
ZONE_DEPARTURE special_zone_entry 관심 수역(ZONE_I~IV) 진입 + risk≥40

주요 변경

  1. frontend/src/services/illegalFishingPatternApi.ts 신설 (77 라인)

    • 기존 /api/events?category=X 를 그대로 쓰되, 3 카테고리를 병렬로 호출 후 머지
    • backend 변경 없음
    • category='' 이면 3 카테고리 통합, 지정 시 단일 카테고리만
    • byCategory / byLevel 집계 포함
  2. frontend/src/features/detection/IllegalFishingPattern.tsx 신설 (391 라인)

    • PageContainer + PageHeader(Ban) + Section (design-system SSOT 준수)
    • KPI 5장 (Total / CRITICAL / HIGH / MEDIUM / LOW) + 카테고리별 3장
    • DataTable 7컬럼 (발생/심각도/카테고리/제목/MMSI/수역/상태)
    • 필터: category / level / mmsi 검색
    • row 클릭 → 상세 패널 (JSON features 포함) + EventList 네비게이션 링크
    • 모든 Badge 는 intent 경유, text-heading/label/hint 시맨틱 토큰 사용
  3. 등록index.ts export + componentRegistry.ts lazy 등록

  4. i18ndetection.jsonillegalPattern.* 네임스페이스 60키 (ko/en), common.json nav.illegalFishing 추가

  5. V032 마이그레이션auth_perm_tree 엔트리(detection:illegal-fishing, nav_sort=920, 평탄화 parent_cd=NULL) + 전 역할 READ 부여

    • ADMIN 5 ops (READ/CREATE/UPDATE/DELETE/EXPORT)
    • OPERATOR/ANALYST/FIELD/VIEWER READ 만
    • 처리 액션(ack/status)은 EventList 에서 수행하므로 이 페이지는 READ 전용

테스트

  • npx tsc --noEmit 통과 (0 에러)
  • pre-commit (tsc + ESLint) 통과
  • (운영) 백엔드 재배포 → Flyway V032 자동 적용 → kcg.auth_perm_tree WHERE rsrc_cd='detection:illegal-fishing' 1건 확인
  • (운영) 프런트 재배포 → 좌측 메뉴 "불법 조업 이벤트" 노출 확인
  • (운영) 페이지 접속 → 3 카테고리 병렬 조회 + KPI/카테고리 카드 렌더링 + DataTable 표시 확인

관련

  • docs/prediction-analysis.md §7 P1 권고의 "UI 미노출 탐지" (환적 전용 페이지는 Phase 0-3 에서 이어짐)
  • Phase 0-1 (PR #83) 과 독립적으로 동작 (prediction 변경 없음, frontend + 메뉴 권한만)

범위 밖 (다음 MR)

  • Phase 0-3: Transshipment 전용 탐지 페이지
## 변경 사항 **docs/prediction-analysis.md §7 P1 권고의 "UI 미노출 탐지" 해소 — Phase 0-2** event_generator 가 생산하는 카테고리 중 "불법 조업" 에 해당하는 3종을 통합 조회하는 READ 전용 대시보드 추가. 이 이벤트들은 DB(`prediction_events`) 와 백엔드(`/api/events`) 까지 도달하지만 그간 EventList(`/event-list`) 에서만 볼 수 있어 전용 탐지 화면이 부재했다. ### 대상 카테고리 | category | 포함 rule | 의미 | |---|---|---| | `GEAR_ILLEGAL` | `g01_zone_gear_violation`, `g05_gear_drift`, `g06_pair_trawl` | G-코드 어구 위반 | | `EEZ_INTRUSION` | `territorial_sea_violation`, `contiguous_zone_high_risk` | 영해/접속수역 침범 | | `ZONE_DEPARTURE` | `special_zone_entry` | 관심 수역(ZONE_I~IV) 진입 + risk≥40 | ### 주요 변경 1. **`frontend/src/services/illegalFishingPatternApi.ts`** 신설 (77 라인) - 기존 `/api/events?category=X` 를 그대로 쓰되, 3 카테고리를 병렬로 호출 후 머지 - backend 변경 **없음** - `category=''` 이면 3 카테고리 통합, 지정 시 단일 카테고리만 - `byCategory` / `byLevel` 집계 포함 2. **`frontend/src/features/detection/IllegalFishingPattern.tsx`** 신설 (391 라인) - `PageContainer` + `PageHeader(Ban)` + `Section` (design-system SSOT 준수) - KPI 5장 (Total / CRITICAL / HIGH / MEDIUM / LOW) + 카테고리별 3장 - `DataTable` 7컬럼 (발생/심각도/카테고리/제목/MMSI/수역/상태) - 필터: category / level / mmsi 검색 - row 클릭 → 상세 패널 (JSON features 포함) + EventList 네비게이션 링크 - **모든 Badge 는 intent 경유**, `text-heading/label/hint` 시맨틱 토큰 사용 3. **등록** — `index.ts` export + `componentRegistry.ts` lazy 등록 4. **i18n** — `detection.json` 에 `illegalPattern.*` 네임스페이스 60키 (ko/en), `common.json` `nav.illegalFishing` 추가 5. **V032 마이그레이션** — `auth_perm_tree` 엔트리(`detection:illegal-fishing`, nav_sort=920, 평탄화 parent_cd=NULL) + 전 역할 READ 부여 - ADMIN 5 ops (READ/CREATE/UPDATE/DELETE/EXPORT) - OPERATOR/ANALYST/FIELD/VIEWER **READ 만** - 처리 액션(ack/status)은 EventList 에서 수행하므로 이 페이지는 READ 전용 ## 테스트 - [x] `npx tsc --noEmit` 통과 (0 에러) - [x] pre-commit (tsc + ESLint) 통과 - [ ] (운영) 백엔드 재배포 → Flyway V032 자동 적용 → `kcg.auth_perm_tree WHERE rsrc_cd='detection:illegal-fishing'` 1건 확인 - [ ] (운영) 프런트 재배포 → 좌측 메뉴 "불법 조업 이벤트" 노출 확인 - [ ] (운영) 페이지 접속 → 3 카테고리 병렬 조회 + KPI/카테고리 카드 렌더링 + DataTable 표시 확인 ## 관련 - docs/prediction-analysis.md §7 P1 권고의 "UI 미노출 탐지" (환적 전용 페이지는 Phase 0-3 에서 이어짐) - Phase 0-1 (PR #83) 과 독립적으로 동작 (prediction 변경 없음, frontend + 메뉴 권한만) ## 범위 밖 (다음 MR) - Phase 0-3: Transshipment 전용 탐지 페이지
htlee added 2 commits 2026-04-20 05:47:08 +09:00
docs/prediction-analysis.md §7 P1 권고의 "UI 미노출 탐지" 해소. event_generator
가 생산하는 카테고리 중 불법 조업 관련 3종을 READ 전용 대시보드로 통합.

대상 카테고리:
- GEAR_ILLEGAL   — G-01 수역·어구 / G-05 고정어구 drift / G-06 쌍끌이
- EEZ_INTRUSION  — 영해 침범 / 접속수역 + 고위험
- ZONE_DEPARTURE — 특정수역 진입 (risk ≥ 40)

### 변경
- frontend/src/services/illegalFishingPatternApi.ts 신설
  - 기존 /api/events 를 category 다중 병렬 조회 후 머지 (backend 변경 없음)
  - category '' 이면 3 카테고리 통합, 지정 시 단일 카테고리만
  - size 기본 200 × 3 categories = 최대 600건, occurredAt desc 정렬
  - byCategory / byLevel 집계 포함
- frontend/src/features/detection/IllegalFishingPattern.tsx 신설 (391 라인)
  - PageContainer + PageHeader(Ban 아이콘) + Section + KPI 5장 + 카테고리별 3장
  - DataTable (occurredAt/level/category/title/mmsi/zone/status 7컬럼)
  - 필터: category / level / mmsi (최근 DEFAULT_SIZE 건 범위)
  - 상세 패널: JSON features 포함, EventList 로 네비게이션 링크
  - design-system SSOT 준수: Badge intent, Select aria-label, text-* 시맨틱 토큰
- index.ts + componentRegistry.ts export/lazy 등록
- detection.json (ko/en) illegalPattern.* 네임스페이스 추가 (각 60키)
- common.json (ko/en) nav.illegalFishing 추가
- V032__menu_illegal_fishing_pattern.sql
  - auth_perm_tree 엔트리 (rsrc_cd=detection:illegal-fishing, nav_sort=920)
  - ADMIN 5 ops + OPERATOR/ANALYST/FIELD/VIEWER READ
  - READ 전용 페이지 (처리 액션은 EventList 경유)

### 검증
- npx tsc --noEmit 통과 (0 에러)
- 백엔드 변경 없음 (기존 /api/events category 필터 재사용)
- Flyway V032 자동 적용 (백엔드 재배포 필요)
claude-bot 이 변경사항을 승인하였습니다. 2026-04-20 05:47:17 +09:00
claude-bot left a comment
멤버

Phase 0-2 불법 조업 이벤트 페이지 승인 (docs/prediction-analysis.md P1 UI 미노출 탐지 해소)

Phase 0-2 불법 조업 이벤트 페이지 승인 (docs/prediction-analysis.md P1 UI 미노출 탐지 해소)
htlee merged commit f2d145c9a2 into develop 2026-04-20 05:47:18 +09:00
htlee 삭제된 브랜치 feature/phase0-2-illegal-fishing-pattern 2026-04-20 05:47:18 +09:00
"로그인하여 이 대화에 참여"
No reviewers
레이블 없음
마일스톤 없음
담당자 없음
참여자 2명
알림
마감일
기한이 올바르지 않거나 범위를 벗어났습니다. 'yyyy-mm-dd'형식을 사용해주십시오.

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

의존성

No dependencies set.

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