"""chunk_section_analysis 테이블 ORM (PR-DocSrv-Hier-Section-Summary-1). per-절(hier_section is_leaf) Mac mini 분석 결과 저장. document_chunks(retrieval-hot) 와 분리된 절-레벨 분석 축. migration 286 에서 테이블 생성. ⚠ pilot 단계(scripts/section_summary_pilot.py)는 `./scripts` mount 로 rebuild 없이 돌지만, 이 모델은 `app/` 이라 baked — 즉 pilot script 는 이 모델을 import 하지 않고 raw SQL 을 쓴다. 본 모델은 (1) 스키마 문서화 (2) 향후 상시 worker 배선(별 PR, image rebuild 동반) 용도. 컬럼 정의는 migration 286 과 단일 진실로 동기 유지. """ from datetime import datetime from sqlalchemy import BigInteger, DateTime, Float, ForeignKey, Text, text from sqlalchemy.orm import Mapped, mapped_column from core.database import Base class ChunkSectionAnalysis(Base): __tablename__ = "chunk_section_analysis" id: Mapped[int] = mapped_column(BigInteger, primary_key=True) # FK CASCADE — document_chunks 에 종속된 분석 데이터(1:1). parent_id(self-FK, app-level)와 의도적 차이. chunk_id: Mapped[int] = mapped_column( BigInteger, ForeignKey("document_chunks.id", ondelete="CASCADE"), nullable=False ) # summarized | skipped_tiny | failed — skip 도 행으로 박제(미처리 vs 의도 skip 구분) status: Mapped[str] = mapped_column(Text, nullable=False) summary: Mapped[str | None] = mapped_column(Text) # 절-전용 역할 enum (느슨한 text, CHECK 미설정 — pilot 관찰 후 조임). # definition/requirement/procedure/formula/data_table/example/case_study/question/reference/overview/other section_type: Mapped[str | None] = mapped_column(Text) # doc-level taxonomy path(documents.ai_domain) 상속 스냅샷. domain: Mapped[str | None] = mapped_column(Text) confidence: Mapped[float | None] = mapped_column(Float) model: Mapped[str | None] = mapped_column(Text) prompt_version: Mapped[str] = mapped_column(Text, nullable=False) # 분석 시점 leaf chunk_content_hash 스냅샷 — 원문 변경(재분해) stale 탐지. source_content_hash: Mapped[str | None] = mapped_column(Text) error: Mapped[str | None] = mapped_column(Text) created_at: Mapped[datetime] = mapped_column( DateTime(timezone=True), server_default=text("now()"), nullable=False ) updated_at: Mapped[datetime] = mapped_column( DateTime(timezone=True), server_default=text("now()"), nullable=False ) # UNIQUE(chunk_id, prompt_version) 는 migration 286 에 정의 (ORM 미반영 — 조회/upsert 는 raw SQL).