- 백엔드: 관할서 목록 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>
53 lines
1.9 KiB
Python
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
|