# 데이터 정합성·정규화·역정규화 실행계약 ## L0~L7 | Layer | 내용 | 불변조건 | |---|---|---| | L0 | Source catalog/license/SLA/schema/timezone/unit | 승인 없는 소스 사용 금지 | | L1 | Raw payload/hash/event/published/ingested | overwrite 금지 | | L2 | Canonical PIT price/CA/fundamental/consensus/cost | revision+valid time | | L3 | DQ/quarantine/lineage/dataset manifest | QUARANTINED 추천 금지 | | L4 | Feature/Forecast/Risk/Evidence | data/model/config/code SHA | | L5 | Ledger/Decision/Review/Publish/Fill/Outcome | append/reversal/correction event | | L6 | UI/report Read Model | Owner/version/watermark/rebuild/staleness | | L7 | Backtest/ModelCard/Release artifact | artifact hash | ## 정규화 원장·현금·Lot·주문·체결은 3NF와 append/reversal을 기본으로 한다. 현재상태와 이력, 추천과 공개, 모델버전과 승격 이벤트, 수수료 설정과 유효기간을 분리한다. `current=true` 하나로 과거값을 잃지 않는다. ## 역정규화 Read Model에만 허용한다. 화면 성능을 이유로 Source Table을 임의 join하거나 현재값을 복사하지 않는다. Projection은 `ProjectionName, Version, SourceWatermark, LastEventId, BuiltAt, ContentHash`를 보존하고 재구축·diff가 가능해야 한다. ## PIT 최소 필드 `source_event_time, published_at, ingested_at, effective_from/to, revision_no, source_id, content_hash, quality_status, tradable_session, dataset_id`. ## DQ Release Blocker - same-session lookahead 0. - 기업행사 가격·수량·원가·배당 공식대사. - 가격수익/총수익 구분. - 당시 유니버스와 상폐수익 포함. - OHLC/단위/통화/비정상 gap 격리. - key 중복·거래일 결측·watermark 연속성. - Fee/Tax/FX valid-time. - 동일 dataset/code/config hash 결과 재현.