wing-ops/frontend/src/interfaces/incidents/IncidentsInterface.ts

173 lines
4.2 KiB
TypeScript

/**
* @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<string, unknown> | null;
droneMeta: Record<string, unknown> | null;
satMeta: Record<string, unknown> | null;
cctvMeta: Record<string, unknown> | 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;
}