# spec/strategy/fundamental_quality_v3.yaml
# P1-011: FUNDAMENTAL_EVIDENCE_UPGRADE — engine_audit vs data_quality 충돌 해소
#
# 충돌 근거:
#   data_quality.schema_presence_score = 100  ← 필드 존재 여부만 확인
#   engine_audit.fundamental_score = ~62       ← 실제 값 존재 여부 + missing_penalty
#   conflict_gap_pct = 40.0 (OCF/FCF 0% 커버리지가 원인)
#
# 해소 방법:
#   1. OCF/FCF 데이터 HTS 캡처 (OPERATIONAL_ACTION)
#   2. data_quality=FULL 레이블 기준 강화 (OCF or FCF 필수) → v2에서 적용됨
#   3. fundamental_multifactor_v4 missing_penalty 적용

meta:
  formula_id: FUNDAMENTAL_QUALITY_V3
  version: "2026-06-06"
  python_tools:
    - tools/build_fundamental_raw_v2.py
    - tools/build_fundamental_multifactor_v4.py
  sources:
    - Temp/fundamental_raw_v1.json       # FUNDAMENTAL_RAW_INGEST_V1 출력
    - Temp/fundamental_raw_v2.json       # v2: field-level coverage 수정
    - Temp/fundamental_multifactor_v4.json

# ── 충돌 정의 ─────────────────────────────────────────────────────────────────
conflict_definition:
  issue: >
    v1에서 data_quality=FULL이지만 OCF/FCF=None인 tickers가 존재함.
    ROE/OPM/PER/PBR/EPS 5개 필드 기준으로 FULL 판정했으나
    multifactor 점수에서 OCF/FCF 합산 30점 비중이 빠지는 문제.
  v1_full_label_count: 7
  v2_reclassified_to_partial: 7   # 전원 PARTIAL로 재분류
  root_cause: OCF/FCF HTS 캡처 미완료 (OPERATIONAL_ACTION)

# ── 필드 가중치 ────────────────────────────────────────────────────────────────
field_weights:
  roe_pct:       25   # ROE
  opm_pct:       20   # 영업이익률
  ocf_krw:       15   # 영업현금흐름 ← 현재 0% 커버리지
  fcf_krw:       15   # 잉여현금흐름 ← 현재 0% 커버리지
  net_debt_krw:  10   # 순부채
  per:            8   # PER
  pbr:            7   # PBR
total_weight: 100

# ── data_quality 레이블 기준 (v2) ──────────────────────────────────────────────
data_quality_labels:
  FULL:         "ROE/OPM + 밸류에이션 + (OCF or FCF) 모두 있음"
  PARTIAL:      "ROE/OPM + 밸류에이션 있음, OCF/FCF 없음"
  SPARSE:       "ROE/OPM만 있음"
  MISSING:      "핵심 필드 없음"
  ETF_EXCLUDED: "ETF — 펀더멘털 미적용"

# ── missing_penalty ────────────────────────────────────────────────────────────
missing_penalty:
  ocf_krw: -5.0   # OCF 없을 때 감점
  fcf_krw: -5.0   # FCF 없을 때 감점
  note: "penalty는 quality_multiplier 적용 후 차감"

# ── 수락 기준 ─────────────────────────────────────────────────────────────────
acceptance_criteria:
  raw_field_coverage_pct:
    target: ">=90"
    current: 60.0
    status: FAIL
    remediation: "OCF/FCF HTS 캡처 → OPERATIONAL_ACTION"
  fundamental_score_not_available_count:
    target: "==0"
    current: 7
    status: FAIL
    remediation: "OCF/FCF 캡처 후 자동 해소"
  conflict_gap_pct:
    target: "<5"
    current: 40.0
    status: FAIL
    remediation: "field coverage 개선 후 자동 해소"

# ── 장기투자 제한 ──────────────────────────────────────────────────────────────
long_horizon_policy:
  condition: "OCF=None AND FCF=None"
  action: "long_horizon_buy_allowed=False"
  note: "현금흐름 근거 없이 장기투자 추천 금지"

# ── 금지 사항 ─────────────────────────────────────────────────────────────────
prohibitions:
  - "OCF/FCF 결측 상태에서 data_quality=FULL 레이블 사용 금지"
  - "fundamental_score 결측을 0점으로 대체해 등급 산출 금지"
  - "conflict_gap_pct >= 5인 상태에서 펀더멘털 기반 장기투자 추천 금지"
