173 lines
4.2 KiB
TypeScript
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;
|
|
}
|