kcg-ai-monitoring/frontend/src/data/mock/events.ts
htlee 4e6ac8645a feat: S5 프론트 실데이터 전환 — EventList/Statistics/EnforcementHistory/Dashboard KPI
이벤트 목록 (EventList):
- eventStore를 GET /api/events 호출로 전환
- 서버 필터링 (level/status/category), 페이지네이션
- 상태 배지 (NEW/ACK/IN_PROGRESS/RESOLVED/FALSE_POSITIVE)
- getEventStats() 기반 KPI 카드

단속 이력 (EnforcementHistory):
- 신규 services/enforcement.ts (GET/POST /enforcement/records, /plans)
- enforcementStore를 API 기반으로 전환
- KPI 카드 (총단속/처벌/AI일치/오탐) 클라이언트 계산

통계 (Statistics):
- kpi.ts를 GET /api/stats/kpi, /stats/monthly 실제 호출로 전환
- toMonthlyTrend/toViolationTypes 변환 헬퍼 추가
- BarChart/AreaChart 기존 구조 유지

대시보드 KPI:
- kpiStore를 API 기반으로 전환 (getKpiMetrics + getMonthlyStats)
- Dashboard KPI_UI_MAP에 kpiKey 기반 매핑 추가

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 12:14:53 +09:00

291 lines
8.0 KiB
TypeScript

/**
* @deprecated EventList, Dashboard, MonitoringDashboard는 실제 API로 전환 완료.
* 아직 AIAlert, MobileService가 AlertRecord mock을 참조하므로 삭제하지 마세요.
*
* Shared mock data: events & alerts
*
* Sources:
* - AIAlert.tsx DATA (5 alerts) — mock 유지
* - MobileService.tsx ALERTS (3) — mock 유지
*/
// ────────────────────────────────────────────
// Event record (EventList.tsx as primary, supplemented with Dashboard titles/details)
// ────────────────────────────────────────────
export interface EventRecord {
id: string;
time: string;
level: 'CRITICAL' | 'HIGH' | 'MEDIUM' | 'LOW';
type: string;
title: string;
detail: string;
vesselName?: string;
mmsi?: string;
area?: string;
lat?: number;
lng?: number;
speed?: number;
status?: string;
assignee?: string;
}
export const MOCK_EVENTS: EventRecord[] = [
{
id: 'EVT-0001',
time: '2026-04-03 08:47:12',
level: 'CRITICAL',
type: 'EEZ 침범',
title: 'EEZ 침범 탐지',
detail: '鲁荣渔56555 외 2척 — N37°12\' E124°38\' 진입',
vesselName: '鲁荣渔56555',
mmsi: '412345678',
area: 'EEZ 북부',
lat: 37.2012,
lng: 124.6345,
speed: 8.2,
status: '추적 중',
assignee: '3001함',
},
{
id: 'EVT-0002',
time: '2026-04-03 08:32:05',
level: 'HIGH',
type: '다크베셀',
title: '다크베셀 출현',
detail: 'MMSI 미상 선박 3척 — 서해 NLL 인근 AIS 소실',
vesselName: '미상선박-A',
mmsi: '미상',
area: '서해 NLL',
lat: 37.7512,
lng: 125.0234,
speed: 6.1,
status: '감시 중',
assignee: '상황실',
},
{
id: 'EVT-0003',
time: '2026-04-03 08:15:33',
level: 'CRITICAL',
type: '선단밀집',
title: '선단 밀집 경보',
detail: '중국어선 14척 밀집 — N36°48\' E124°22\' 반경 2nm',
vesselName: '선단(14척)',
mmsi: '다수',
area: 'EEZ 서부',
lat: 36.8001,
lng: 124.3678,
speed: 4.5,
status: '경보 발령',
assignee: '서해청',
},
{
id: 'EVT-0004',
time: '2026-04-03 07:58:44',
level: 'MEDIUM',
type: '불법환적',
title: '불법환적 의심',
detail: '冀黄港渔05001 + 운반선 접현 30분 이상',
vesselName: '冀黄港渔05001',
mmsi: '412987654',
area: '서해 중부',
lat: 36.4789,
lng: 124.2234,
speed: 0.3,
status: '확인 중',
assignee: '분석팀',
},
{
id: 'EVT-0005',
time: '2026-04-03 07:41:18',
level: 'HIGH',
type: 'MMSI 변조',
title: 'MMSI 변조 탐지',
detail: '浙甬渔60651 — MMSI 3회 변경 이력 감지',
vesselName: '浙甬渔60651',
mmsi: '412111222',
area: 'EEZ 남부',
lat: 35.8678,
lng: 125.5012,
speed: 5.8,
status: '감시 중',
assignee: '상황실',
},
{
id: 'EVT-0006',
time: '2026-04-03 07:23:01',
level: 'LOW',
type: '검문 완료',
title: '함정 검문 완료',
detail: '3009함 — 津塘渔03966 검문 완료, 경고 조치',
vesselName: '津塘渔03966',
mmsi: '412333444',
area: '서해 북부',
lat: 37.5012,
lng: 124.7890,
speed: 0,
status: '완료',
assignee: '3009함',
},
{
id: 'EVT-0007',
time: '2026-04-03 07:05:55',
level: 'MEDIUM',
type: 'AIS 재송출',
title: 'AIS 재송출',
detail: '辽庄渔55567 — 4시간 소실 후 재송출',
vesselName: '辽庄渔55567',
mmsi: '412555666',
area: 'EEZ 북부',
lat: 37.3456,
lng: 124.8901,
speed: 3.2,
status: '확인 완료',
assignee: '상황실',
},
{
id: 'EVT-0008',
time: '2026-04-03 06:48:22',
level: 'CRITICAL',
type: 'EEZ 침범',
title: '긴급 침범 경보',
detail: '浙岱渔02856 외 7척 — 서해 5도 수역 진입',
vesselName: '浙岱渔02856',
mmsi: '412777888',
area: '서해 5도',
lat: 37.0567,
lng: 124.9234,
speed: 4.5,
status: '추적 중',
assignee: '서특단',
},
{
id: 'EVT-0009',
time: '2026-04-03 06:30:00',
level: 'LOW',
type: '정기 보고',
title: '정기 보고',
detail: '전 해역 야간 감시 결과 보고 완료',
vesselName: undefined,
mmsi: undefined,
area: '전 해역',
status: '완료',
assignee: '상황실',
},
{
id: 'EVT-0010',
time: '2026-04-03 06:12:33',
level: 'HIGH',
type: '속력 이상',
title: '속력 이상 탐지',
detail: '鲁荣渔51277 — 18kt 고속 이동, 도주 패턴',
vesselName: '鲁荣渔51277',
mmsi: '412999000',
area: '동해 중부',
lat: 36.2512,
lng: 130.0890,
speed: 18.1,
status: '추적 중',
assignee: '동해청',
},
{
id: 'EVT-0011',
time: '2026-04-03 05:45:10',
level: 'MEDIUM',
type: 'AIS 소실',
title: 'AIS 소실',
detail: '浙甬渔30112 남해 외해 AIS 소실',
vesselName: '浙甬渔30112',
mmsi: '412444555',
area: '남해 외해',
lat: 34.1234,
lng: 128.5678,
status: '감시 중',
assignee: '남해청',
},
{
id: 'EVT-0012',
time: '2026-04-03 05:20:48',
level: 'HIGH',
type: '불법환적',
title: '불법환적 의심',
detail: '冀黄港渔03012 EEZ 서부 환적 의심',
vesselName: '冀黄港渔03012',
mmsi: '412666777',
area: 'EEZ 서부',
lat: 36.5678,
lng: 124.1234,
speed: 0.5,
status: '확인 중',
assignee: '분석팀',
},
{
id: 'EVT-0013',
time: '2026-04-03 04:55:30',
level: 'LOW',
type: '구역 이탈',
title: '구역 이탈',
detail: '한국어선-12 연안 구역 이탈 경고',
vesselName: '한국어선-12',
mmsi: '440123456',
area: '연안 구역',
lat: 35.4567,
lng: 129.3456,
speed: 7.0,
status: '경고 완료',
assignee: '포항서',
},
{
id: 'EVT-0014',
time: '2026-04-03 04:30:15',
level: 'CRITICAL',
type: 'EEZ 침범',
title: 'EEZ 침범 — 나포 작전',
detail: '鲁威渔15028 EEZ 북부 나포 작전 진행',
vesselName: '鲁威渔15028',
mmsi: '412888999',
area: 'EEZ 북부',
lat: 37.4012,
lng: 124.5567,
speed: 6.9,
status: '나포 작전',
assignee: '3001함',
},
{
id: 'EVT-0015',
time: '2026-04-03 04:10:00',
level: 'MEDIUM',
type: 'MMSI 변조',
title: 'MMSI 변조 의심',
detail: '浙甬渔99871 남해 연안 MMSI 변조 의심',
vesselName: '浙甬渔99871',
mmsi: '412222333',
area: '남해 연안',
lat: 34.5678,
lng: 127.8901,
speed: 4.2,
status: '확인 중',
assignee: '상황실',
},
];
// ────────────────────────────────────────────
// Alert records (AIAlert.tsx as primary)
// ────────────────────────────────────────────
export interface AlertRecord {
id: string;
time: string;
type: string;
location: string;
confidence: number;
target: string;
status: string;
}
export const MOCK_ALERTS: AlertRecord[] = [
{ id: 'ALR-001', time: '08:47:12', type: 'EEZ 침범', location: 'N37.20 E124.63', confidence: 96, target: '3001함, 상황실', status: '수신확인' },
{ id: 'ALR-002', time: '08:32:05', type: '다크베셀', location: 'N37.75 E125.02', confidence: 91, target: '상황실', status: '수신확인' },
{ id: 'ALR-003', time: '08:15:33', type: '선단밀집', location: 'N36.80 E124.37', confidence: 88, target: '서특단, 상황실', status: '발송완료' },
{ id: 'ALR-004', time: '07:58:44', type: '불법환적', location: 'N36.48 E124.22', confidence: 82, target: '3005함', status: '수신확인' },
{ id: 'ALR-005', time: '07:41:18', type: 'MMSI변조', location: 'N35.87 E125.50', confidence: 94, target: '상황실', status: '미수신' },
];