---
schema_version: "unified_route_packet_v1"
generated: "2026-06-25"
description: "P4: 라우팅·서빙·판단 단일화"

# 목적: SCALP/SWING/MOMENTUM/POSITION 결정을 JSON으로 결정론화
# LLM 자유도 제거, 수량 결정 자동화

purpose: "SCALP/SWING/MOMENTUM/POSITION 판단을 결정론적 JSON으로 잠금"

route_dimensions:
  - "SCALP"
  - "SWING"
  - "MOMENTUM"
  - "POSITION"

# 스타일별 가중치 정의
style_weights:
  SCALP:
    technical: 0.50        # 기술지표 중시
    smart_money: 0.25
    liquidity: 0.15
    fundamental: 0.10

  SWING:
    smart_money: 0.35      # 스마트머니 중시
    technical: 0.30
    liquidity: 0.20
    fundamental: 0.15

  MOMENTUM:
    fundamental: 0.40      # 펀더멘탈 중시
    smart_money: 0.30
    technical: 0.20
    liquidity: 0.10

  POSITION:
    fundamental: 0.55      # 펀더멘탈 최우선
    smart_money: 0.20
    liquidity: 0.15
    technical: 0.10

# Conviction Score → 진입 수량 매핑
conviction_to_pct:
  "0-34": "진입 금지 (BLOCKED)"
  "35-49": "1.5% (PILOT 진입)"
  "50-64": "3% (표준 진입)"
  "65-79": "5% (강한 신호)"
  "80-100": "7% (매우 강한 신호)"

# 점수 계산 공식
route_formula: |
  score = weighted_score × data_quality × regime_scale × anti_chase × liquidity × cash_ratio

# 필수 출력 필드
mandatory_output:
  - "ticker: 종목코드"
  - "scalp_score: SCALP 점수 (0-100)"
  - "swing_score: SWING 점수 (0-100)"
  - "momentum_score: MOMENTUM 점수 (0-100)"
  - "position_score: POSITION 점수 (0-100)"
  - "best_style: 최우선 스타일"
  - "conviction_score: 최종 확신도"
  - "recommended_pct: 추천 진입 수량 (%)"
  - "blocked_reasons: 블록 이유 코드 (있으면)"
  - "timestamp: 생성 시간 (ISO 8601)"

# 구현 파일
implementation_files:
  - "src/google_apps_script/gas_data_feed.gs: buildRoutePacket_()"
  - "tools/validate_capital_style_allocation_v1.py (검증 스크립트)"

# 테스트 사례
test_case:
  ticker: "000660"  # SK하이닉스
  technical_score: 75
  smart_money_score: 65
  liquidity_score: 70
  fundamental_score: 60
  expected_best_style: "SCALP"
  expected_recommended_pct: 5.0
