wing-ops/prediction/scat/models.py
leedano d9fb4506bc feat(scat): Pre-SCAT 관할서 필터링 + 해안조사 데이터 파이프라인 구축
- 백엔드: 관할서 목록 API, zone 필터링 쿼리 추가
- 프론트: ScatLeftPanel 관할서 드롭다운, ScatMap/ScatPopup 개선
- 기상탭: WeatherRightPanel 리팩토링
- prediction/scat: PDF 파싱 → 지오코딩 → ESI 매핑 파이프라인
- vite.config: proxy 설정 추가

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 10:53:19 +09:00

53 lines
1.9 KiB
Python

"""SCAT PDF 파싱 데이터 모델."""
from __future__ import annotations
from typing import List, Optional
from pydantic import BaseModel
class SensitiveItem(BaseModel):
"""민감자원 항목."""
t: str # 유형 (사회경제적 / 생물자원)
v: str # 내용
class PhotoInfo(BaseModel):
"""추출된 사진 정보."""
filename: str
page: int
index: int
class CoastalSection(BaseModel):
"""해안 구간 1건 (PDF 1페이지)."""
section_number: int = 0
sect_nm: str = '' # 지역명
sect_cd: str = '' # 코드명 (SSDD-1)
esi_cd: Optional[str] = None # ESI 등급 (1, 2, 3, 6A, 6B, 8A, 8B 등)
esi_num: Optional[int] = None # ESI 숫자 (1~8)
shore_tp: Optional[str] = None # 해안 형태 (폐쇄형/개방형)
cst_tp_cd: Optional[str] = None # 해안 구성 (투과성 인공호안, 모래 등)
len_m: Optional[float] = None # 해안길이 (m)
width_m: Optional[float] = None # 해안 폭 (m, 선택)
lat: Optional[float] = None # 위도
lng: Optional[float] = None # 경도
access_dc: Optional[str] = None # 접근방법 설명
access_pt: Optional[str] = None # 주요접근지점
sensitive_info: List[SensitiveItem] = [] # 민감자원
cleanup_methods: List[str] = [] # 권장 방제 방법
end_criteria: List[str] = [] # 권장 방제 중지 기준
notes: List[str] = [] # 해안 방제시 고려사항
photos: List[PhotoInfo] = [] # 추출된 사진
class ParseResult(BaseModel):
"""PDF 파싱 전체 결과."""
pdf_filename: str
zone_name: str = '' # PDF 헤더에서 추출한 구역명
jurisdiction: str = '' # 관할 (보령 해양경비안전서 등)
total_sections: int = 0
sections: List[CoastalSection] = []
skipped_pages: int = 0