-- 286_chunk_section_analysis.sql
-- PR-DocSrv-Hier-Section-Summary-1: per-절(leaf) Mac mini 분석 결과 저장 테이블.
--
-- document_chunks(retrieval-hot: ivfflat + 2 gin + 6 btree)와 분리된 "절-레벨 분석 축".
-- hot 테이블 무손상 + builder/replace 재작성과 무관. 검색 코퍼스와 완전 분리(additive).
--
-- 컬럼 설계 (사용자 review 2026-05-24):
--   status              : summarized | skipped_tiny | failed  — skip 도 행으로 박제(미처리 vs 의도 skip 구분)
--   summary/section_type/domain/confidence : 분석 결과 (skip/failed 행은 NULL 가능)
--   section_type        : 절-전용 역할 enum (느슨한 text, CHECK 미설정 — pilot 관찰 후 조임)
--   domain              : doc-level taxonomy path(d.ai_domain) 상속 스냅샷
--   model/prompt_version: 모델·프롬프트 변경 추적
--   source_content_hash : 분석 시점 leaf chunk_content_hash 스냅샷 — 원문 변경(재분해) stale 탐지
--
-- chunk_id = FK CASCADE: chunk_section_analysis 는 document_chunks 에 종속된 분석 데이터.
--   parent_id(자기참조 트리, cascade 모호성 회피 위해 app-level)와 달리 여기는 단순 1:1 종속 → FK 정당.
--
-- UNIQUE(chunk_id, prompt_version): 같은 절을 같은 프롬프트로 1행. 원문 변경 시 동일 키 ON CONFLICT 갱신.
--   (chunk_id 단독 조회는 이 복합 UNIQUE 의 leftmost prefix btree 로 커버 → 별 인덱스 불필요)
--
-- ⚠ 단일 statement (migration runner exec_driver_sql). BEGIN/COMMIT/ROLLBACK 금지.
CREATE TABLE IF NOT EXISTS chunk_section_analysis (
    id                  BIGSERIAL PRIMARY KEY,
    chunk_id            BIGINT      NOT NULL REFERENCES document_chunks(id) ON DELETE CASCADE,
    status              TEXT        NOT NULL,
    summary             TEXT,
    section_type        TEXT,
    domain              TEXT,
    confidence          REAL,
    model               TEXT,
    prompt_version      TEXT        NOT NULL,
    source_content_hash TEXT,
    error               TEXT,
    created_at          TIMESTAMPTZ NOT NULL DEFAULT now(),
    updated_at          TIMESTAMPTZ NOT NULL DEFAULT now(),
    UNIQUE (chunk_id, prompt_version)
);
