"""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