/** * @description * 사고 관리 탭의 도메인 인터페이스 모음. 사고 목록·상세·예측 실행·기상· * 미디어·주변 기관·항공 이미지 API 응답과 프런트 정규화 모델(IncidentCompat, * Incident), 선박 위치(AIS)·영역 조회 파라미터를 정의한다. * * @author dnlee (dnlee@gcsc.co.kr) */ /** 사고 관리 — 사고 목록 API 응답 아이템 */ export interface IncidentListItem { acdntSn: number; acdntCd: string; acdntNm: string; acdntTpCd: string; acdntSttsCd: string; lat: number; lng: number; locDc: string; occrnDtm: string; regionNm: string; officeNm: string; svrtCd: string | null; vesselTp: string | null; phaseCd: string; analystNm: string | null; oilTpCd: string | null; spilQty: number | null; spilUnitCd: string | null; fcstHr: number | null; hasPredCompleted: boolean; hasHnsCompleted: boolean; hasRescueCompleted: boolean; mediaCnt: number; hasImgAnalysis: boolean; } /** 사고 관리 — 사고 예측 실행 이력 (알고리즘/상태/시각) */ export interface PredExecItem { predExecSn: number; algoCd: string; execSttsCd: string; bgngDtm: string | null; cmplDtm: string | null; reqdSec: number | null; } /** 사고 관리 — 사고 발생 지점 기상 정보 (관측·예보·영향 설명) */ export interface WeatherInfo { locNm: string; obsDtm: string; icon: string; temp: string; weatherDc: string; wind: string; wave: string; humid: string; vis: string; sst: string; tide: string; highTide: string; lowTide: string; forecast: Array<{ hour: string; icon: string; temp: string }>; impactDc: string; } /** 사고 관리 — 사고 연관 미디어 메타데이터 (사진·영상·위성·CCTV) */ export interface MediaInfo { photoCnt: number; videoCnt: number; satCnt: number; cctvCnt: number; photoMeta: Record | null; droneMeta: Record | null; satMeta: Record | null; cctvMeta: Record | null; } /** 사고 관리 — 사고 상세 API 응답 (목록 아이템 + 예측·기상·미디어) */ export interface IncidentDetail extends IncidentListItem { predictions: PredExecItem[]; weather: WeatherInfo | null; media: MediaInfo | null; } /** 사고 관리 — 프런트 호환 사고 정규화 모델 (camelCase, 상태 union) */ export interface IncidentCompat { id: string; name: string; status: 'active' | 'investigating' | 'closed'; date: string; time: string; region: string; office: string; location: { lat: number; lon: number }; causeType?: string; oilType?: string; prediction?: string; vesselName?: string; mediaCount?: number; hasImgAnalysis?: boolean; } /** 사고 관리 — 좌측 패널/내부 컴포넌트 공유 사고 모델 (IncidentCompat와 동일 구조) */ export interface Incident { id: string; name: string; status: 'active' | 'investigating' | 'closed'; date: string; time: string; region: string; office: string; location: { lat: number; lon: number }; causeType?: string; oilType?: string; prediction?: string; vesselName?: string; mediaCount?: number; hasImgAnalysis?: boolean; } /** 사고 관리 — 사고 인근 기관 API 응답 (거리 포함) */ export interface NearbyOrgItem { orgSn: number; orgTp: string; jrsdNm: string; areaNm: string; orgNm: string; addr: string; tel: string; lat: number; lng: number; pinSize: string; vesselCnt: number; skimmerCnt: number; pumpCnt: number; vehicleCnt: number; sprayerCnt: number; totalAssets: number; distanceNm: number; } /** 사고 관리 — AIS 선박 위치 데이터 (외부 AIS API 응답) */ export interface VesselPosition { mmsi: string; imo?: string; shipName: string; callSign?: string; shipType: number; shipTypeText?: string; latitude: number; longitude: number; speed: number; course: number; heading: number; navStatus: number; navStatusText?: string; timestamp: string; destination?: string; eta?: string; draught?: number; length?: number; width?: number; } /** 사고 관리 — 선박 영역 조회 파라미터 (bounding box) */ export interface BoundingBox { minLat: number; maxLat: number; minLng: number; maxLng: number; }