meta:
  title: 은퇴자산포트폴리오 — LLM 실행용 필드 사전
  parent_file: RetirementAssetPortfolio.yaml
  version: 2026-05-20-HARNESS_V4
  language: ko-KR
  timezone: Asia/Seoul
  role: canonical
  has_code_implementation: true
  code_path: spec/14_raw_workbook_mapping.yaml
  purpose: 'LLM이 동일 필드를 여러 이름으로 해석하지 않도록 canonical field, alias, 타입, 단위, 누락 정책을 고정한다.
    알고리즘 파일은 이 사전의 canonical_name을 사용한다.

    '
field_dictionary:
  policy:
    canonical_name_required: true
    alias_resolution_order:
    - exact canonical_name
    - aliases
    - source_column
    unknown_field_action: DATA_MISSING으로 처리하고 임의 추정 금지
    unit_conflict_action: DATA_CONFLICT. 계산·수량 산출 금지
  fields:
    ticker:
      canonical_name: ticker
      type: string
      unit: none
      aliases:
      - Ticker
      - 종목코드
      - code
    name:
      canonical_name: name
      type: string
      unit: none
      aliases:
      - Name
      - 종목명
    close_price:
      canonical_name: close_price
      type: number
      unit: KRW_per_share
      aliases:
      - 현재가
    velocity_1d:
      canonical_name: velocity_1d
      type: number
      unit: percent
      aliases:
      - Velocity_1D
      - v1d
      note: VELOCITY_V1 산출 — 1일 가격 속도
    velocity_5d:
      canonical_name: velocity_5d
      type: number
      unit: percent
      aliases:
      - Velocity_5D
      - v5d
      note: VELOCITY_V1 산출 — 5일 가격 속도
    open_price:
      canonical_name: open_price
      type: number
      unit: KRW_per_share
      aliases:
      - Open
      - 시가
      - open
    previous_close_price:
      canonical_name: previous_close_price
      type: number
      unit: KRW_per_share
      aliases:
      - PrevClose
      - 전일종가
      - previous_close
    volume:
      canonical_name: volume
      type: number
      unit: shares
      aliases:
      - Volume
      - 거래량
      - volume_shares
    entry_price:
      canonical_name: entry_price
      type: number
      unit: KRW_per_share
      aliases:
      - 지정가
      - 진입가
      - entry
      - Entry_Price
    limit_price:
      canonical_name: limit_price
      type: number
      unit: KRW_per_share
      aliases:
      - limit
      - 주문지정가
    stop_price:
      canonical_name: stop_price
      type: number
      unit: KRW_per_share
      aliases:
      - 손절가
      - stop
      - stop_loss_price
    spsv2_verdict:
      canonical_name: spsv2_verdict
      type: enum
      unit: none
      aliases:
      - SPSV2 판정
      - sell_price_sanity_verdict
    target_price:
      canonical_name: target_price
      type: number
      unit: KRW_per_share
      aliases:
      - 목표가
      - 익절가
      - take_profit_price
      - Target_Price
    quantity:
      canonical_name: quantity
      type: integer
      unit: shares
      aliases:
      - 수량
      - 보유수량
      - confirmed_holding_quantity
    atr20:
      canonical_name: atr20
      type: number
      unit: KRW_per_share
      aliases:
      - ATR20
      - 20일 ATR
      - atr_20
    total_asset:
      canonical_name: total_asset
      type: number
      unit: KRW
      aliases:
      - 총자산
      - portfolio_value
      - account_total_asset
    available_cash:
      canonical_name: available_cash
      type: number
      unit: KRW
      aliases:
      - 주문가능현금
      - buy_power_cash
      - 예수금
      - Cash_Available
    avg_trade_value_5d:
      canonical_name: avg_trade_value_5d
      type: number
      unit: KRW
      aliases:
      - AvgTradeValue_5D_KRW
      - AvgTradeValue_5D_M
      - 5D평균거래대금
      - avg_daily_value_5d
    avg_trade_value_20d:
      canonical_name: avg_trade_value_20d
      type: number
      unit: KRW
      aliases:
      - AvgTradeValue_20D_KRW
      - AvgTradeValue_20D_M
      - 20D평균거래대금
    avg_volume_5d:
      canonical_name: avg_volume_5d
      type: number
      unit: shares
      aliases:
      - AvgVolume_5D
      - AvgVolume_5D_shares
      - 5D평균거래량
    frg_5d_sh:
      canonical_name: frg_5d_sh
      type: number
      unit: shares
      aliases:
      - Frg_5D(sh)
      - Frg_5D_sh
      - 외국인5D
    frg_20d_sh:
      canonical_name: frg_20d_sh
      type: number
      unit: shares
      aliases:
      - Frg_20D(sh)
      - Frg_20D
      - 외국인20D
    inst_5d_sh:
      canonical_name: inst_5d_sh
      type: number
      unit: shares
      aliases:
      - Inst_5D(sh)
      - Inst_5D_sh
      - 기관5D
    inst_20d_sh:
      canonical_name: inst_20d_sh
      type: number
      unit: shares
      aliases:
      - Inst_20D(sh)
      - 기관20D
    beta:
      canonical_name: beta
      type: number
      unit: ratio
      aliases:
      - Beta
      - 종목베타
      - stock_beta
    flow_rows:
      canonical_name: flow_rows
      type: integer
      unit: rows
      aliases:
      - Flow_Rows
      - 수급행수
    flow_ok:
      canonical_name: flow_ok
      type: boolean
      unit: none
      aliases:
      - Flow_OK
      - flow_valid
    flow_credit:
      canonical_name: flow_credit
      type: number
      unit: ratio_0_1
      aliases:
      - Flow_Credit
      - 수급점수_가중치
    ma20:
      canonical_name: ma20
      type: number
      unit: KRW_per_share
      aliases:
      - MA20
      - 20일선
      - moving_average_20
    vwap:
      canonical_name: vwap
      type: number
      unit: KRW_per_share
      aliases:
      - VWAP
      - 거래량가중평균가
    rsi_15m:
      canonical_name: rsi_15m
      type: number
      unit: points
      aliases:
      - RSI_15M
      - 15분봉RSI
    volume_climax:
      canonical_name: volume_climax
      type: boolean
      unit: none
      aliases:
      - Volume_Climax
      - 거래량폭증
    total_asset_ma10:
      canonical_name: total_asset_ma10
      type: number
      unit: KRW
      aliases:
      - 자산MA10
      - total_equity_ma10
    sea_action_tag:
      canonical_name: sea_action_tag
      type: string
      unit: none
      aliases:
      - SEA액션태그
    equity_curve_status:
      canonical_name: equity_curve_status
      type: enum
      unit: none
      aliases:
      - 자산곡선상태
    relative_strength_1m_percentile:
      canonical_name: relative_strength_1m_percentile
      type: number
      unit: percentile
      aliases:
      - RS_Pct_20D_Percentile
      - 상대강도_백분위
    rsi_14:
      canonical_name: rsi_14
      type: number
      unit: points
      aliases:
      - RSI
      - RSI_14
      - 상대강도지수
    cash_shortfall_krw:
      canonical_name: cash_shortfall_krw
      type: number
      unit: KRW
      aliases:
      - 현금부족액
      - cash_deficit
    data_integrity_score:
      canonical_name: data_integrity_score
      type: number
      unit: score_0_100
      aliases:
      - schema_presence_score
      - data_quality_score
    data_maturity_score:
      canonical_name: data_maturity_score
      type: number
      unit: score_0_100
      aliases:
      - data_maturity
      - maturity_score
    pending_critical_category_count:
      canonical_name: pending_critical_category_count
      type: integer
      unit: count
      aliases:
      - pending_categories_count
      - critical_pending_count
    pending_critical_categories:
      canonical_name: pending_critical_categories
      type: array
      unit: none
      aliases:
      - pending_categories
      - missing_critical_categories
    stock_close_5d_return:
      canonical_name: stock_close_5d_return
      type: number
      unit: percent
      aliases:
      - 종목5D수익률
    kospi_close_5d_return:
      canonical_name: kospi_close_5d_return
      type: number
      unit: percent
      aliases:
      - 코스피5D수익률
    sector_smartmoney_5d:
      canonical_name: sector_smartmoney_5d
      type: number
      unit: normalized_score
      aliases:
      - sector_flow.SmartMoney_5D_Norm_Score
      - 섹터스마트머니5D
    sector_rank:
      canonical_name: sector_rank
      type: integer
      unit: none
      aliases:
      - sector_flow.Rank
      - 섹터순위
    sector_top2_names:
      canonical_name: sector_top2_names
      type: list
      unit: none
      aliases:
      - sector_flow.Top2_Sectors
      - 상위2개섹터
    alpha_shield_status:
      canonical_name: alpha_shield_status
      type: enum
      unit: none
      aliases:
      - 알파실드상태
    rotation_radar_status:
      canonical_name: rotation_radar_status
      type: enum
      unit: none
      aliases:
      - 로테이션레이더상태
    flow_acceleration_status:
      canonical_name: flow_acceleration_status
      type: enum
      unit: none
      aliases:
      - 수급가속도상태
    oversold_exit_strategy:
      canonical_name: oversold_exit_strategy
      type: string
      unit: none
      aliases:
      - 과매도탈출전략
    divergence_score:
      canonical_name: divergence_score
      type: number
      unit: ratio_0_1
      aliases:
      - 다이버전스점수
    overhang_score:
      canonical_name: overhang_score
      type: number
      unit: ratio_0_1
      aliases:
      - 오버행점수
    rs_ratio:
      canonical_name: rs_ratio
      type: number
      unit: ratio
      aliases:
      - RS비율
    deviation_ratio:
      canonical_name: deviation_ratio
      type: number
      unit: ratio
      aliases:
      - 이격비율
    vix_close:
      canonical_name: vix_close
      type: number
      unit: index_points
      aliases:
      - VIX_Close
    kospi_close:
      canonical_name: kospi_close
      type: number
      unit: index_points
      aliases:
      - KOSPI
      - KOSPI_Close
    kospi_ma20:
      canonical_name: kospi_ma20
      type: number
      unit: index_points
      aliases:
      - KOSPI_MA20
    usd_krw:
      canonical_name: usd_krw
      type: number
      unit: KRW_per_USD
      aliases:
      - USD/KRW
      - USDKRW
    market_risk_score:
      canonical_name: market_risk_score
      type: number
      unit: points_0_10
      aliases:
      - MRS
      - market_risk_score
      - MRS합계
    cash_floor_regime_min_pct:
      canonical_name: cash_floor_regime_min_pct
      type: number
      unit: percent
      aliases:
      - regime_min_cash_pct
    usd_jpy_2d_change_pct:
      canonical_name: usd_jpy_2d_change_pct
      type: number
      unit: percent
      aliases:
      - USD_JPY_2D_Change_Pct
      - USD/JPY_2D
    credit_stress_status:
      canonical_name: credit_stress_status
      type: enum
      unit: none
      aliases:
      - credit_stress
      - HY_OAS_Status
      - CP_CD_Spread_Status
    bayesian_confidence_multiplier:
      canonical_name: bayesian_confidence_multiplier
      type: number
      unit: ratio
      aliases:
      - bayesian_multiplier
      - confidence_multiplier
    execution_cost_rate:
      canonical_name: execution_cost_rate
      type: number
      unit: ratio
      aliases:
      - cost_rate
      - fee_slippage_rate
    base_risk_budget:
      canonical_name: base_risk_budget
      type: number
      unit: ratio
      aliases:
      - risk_budget
      - base_risk
    net_return_feedback_multiplier:
      canonical_name: net_return_feedback_multiplier
      type: number
      unit: ratio
      aliases:
      - net_feedback_multiplier
    performance_brake_multiplier:
      canonical_name: performance_brake_multiplier
      type: number
      unit: ratio
      aliases:
      - performance_multiplier
    regime_reset_multiplier:
      canonical_name: regime_reset_multiplier
      type: number
      unit: ratio
      aliases:
      - regime_multiplier
    kelly_brake_multiplier:
      canonical_name: kelly_brake_multiplier
      type: number
      unit: ratio
      aliases:
      - kelly_multiplier
    final_risk_budget:
      canonical_name: final_risk_budget
      type: number
      unit: ratio
      aliases:
      - effective_risk_budget
    current_price:
      canonical_name: current_price
      type: number
      unit: KRW_per_share
      aliases:
      - CurrentPrice
      - last_price
    average_cost:
      canonical_name: average_cost
      type: number
      unit: KRW_per_share
      aliases:
      - 평단
      - Avg_Cost
      - average_entry_price
    highest_price_since_entry:
      canonical_name: highest_price_since_entry
      type: number
      unit: KRW_per_share
      aliases:
      - highestPriceSinceEntry
      - highest_close
      note: 진입 후 최고 종가 — L2 ATR 트레일링 기준가. prices_json에 포함
    ma60:
      canonical_name: ma60
      type: number
      unit: KRW_per_share
      aliases:
      - MA60
      - 60일선
      - moving_average_60
    current_weight_pct:
      canonical_name: current_weight_pct
      type: number
      unit: percent
      aliases:
      - 현재비중
      - current_weight
    target_band_min_pct:
      canonical_name: target_band_min_pct
      type: number
      unit: percent
      aliases:
      - 목표밴드하단
    target_band_max_pct:
      canonical_name: target_band_max_pct
      type: number
      unit: percent
      aliases:
      - 목표밴드상단
    immediate_cash:
      canonical_name: immediate_cash
      type: number
      unit: KRW
      aliases:
      - 즉시현금
      - 출금가능현금
    settlement_cash:
      canonical_name: settlement_cash
      type: number
      unit: KRW
      aliases:
      - D+2추정현금
      - settlement_cash_d2
    reserved_order_amount:
      canonical_name: reserved_order_amount
      type: number
      unit: KRW
      aliases:
      - 예약주문금액
      - open_order_amount
    planned_buy_amount:
      canonical_name: planned_buy_amount
      type: number
      unit: KRW
      aliases:
      - 신규매수예상금액
      - planned_order_amount
    sell_cash_proceeds_d2:
      canonical_name: sell_cash_proceeds_d2
      type: number
      unit: KRW
      aliases:
      - 매도대금정산분
      - sell_cash_proceeds_immediate
      - 매도대금즉시반영분
      note: '사용자 지침: D+2 정산현금이 현금이다. 매도 후 D+2에 정산될 현금 유입액.'
    min_cash_ratio:
      canonical_name: min_cash_ratio
      type: number
      unit: percent
      aliases:
      - 최소현금비중
    trailing_atr_multiplier:
      canonical_name: trailing_atr_multiplier
      type: number
      unit: ratio
      aliases:
      - trailing_ATR배수
    trailing_stop_price:
      canonical_name: trailing_stop_price
      type: number
      unit: KRW_per_share
      aliases:
      - trailing_stop_가격
      - 트레일링스탑가
    position_class:
      canonical_name: position_class
      type: enum
      unit: none
      aliases:
      - 분류
      - core_satellite_class
      - position_type
    take_profit_ladder:
      canonical_name: take_profit_ladder
      type: object
      unit: none
      aliases:
      - 익절래더
      - tiered_ladder_output
    cash_ratio_set:
      canonical_name: cash_ratio_set
      type: object
      unit: none
      aliases:
      - 현금비중세트
    portfolio_band_status:
      canonical_name: portfolio_band_status
      type: enum
      unit: none
      aliases:
      - 버킷밴드상태
      - target_band_status
    atr_multiplier:
      canonical_name: atr_multiplier
      type: number
      unit: ratio
      aliases:
      - ATR배수
    target_weight_limit_amount:
      canonical_name: target_weight_limit_amount
      type: number
      unit: KRW
      aliases:
      - 목표비중한도금액
    sector_limit_amount:
      canonical_name: sector_limit_amount
      type: number
      unit: KRW
      aliases:
      - 섹터한도금액
    liquidity_limit_amount:
      canonical_name: liquidity_limit_amount
      type: number
      unit: KRW
      aliases:
      - 유동성상한금액
    forward_pe:
      canonical_name: forward_pe
      type: number
      unit: ratio
      aliases:
      - Forward_PE
      - ForwardPER
      - 선행PER
      - 12M_Forward_PE
    pbr:
      canonical_name: pbr
      type: number
      unit: ratio
      aliases:
      - PBR
      - P/B
      - 주가순자산비율
    eps_revision_status:
      canonical_name: eps_revision_status
      type: enum
      unit: none
      aliases:
      - EPS_Revision_Status
      - eps_revision
      - EPS방향
    sector_median_forward_pe:
      canonical_name: sector_median_forward_pe
      type: number
      unit: ratio
      aliases:
      - sector_median_PE
      - 섹터중앙값PER
      - SectorPE_Median
    sector_median_pbr:
      canonical_name: sector_median_pbr
      type: number
      unit: ratio
      aliases:
      - sector_median_PBR
      - 섹터중앙값PBR
    eps_growth_3y_cagr_pct:
      canonical_name: eps_growth_3y_cagr_pct
      type: number
      unit: percent
      aliases:
      - EPS_Growth_3Y
      - EPS_CAGR_3Y
      - EPS3Y성장률
      - EPS_Growth_3Y_CAGR_pct
    roe_pct:
      canonical_name: roe_pct
      type: number
      unit: percent
      aliases:
      - ROE_Pct
      - ROE
      - 자기자본이익률
      - return_on_equity
    operating_margin_pct:
      canonical_name: operating_margin_pct
      type: number
      unit: percent
      aliases:
      - Operating_Margin_Pct
      - 영업이익률
      - op_margin
    debt_to_equity:
      canonical_name: debt_to_equity
      type: number
      unit: ratio
      aliases:
      - Debt_To_Equity
      - D/E
      - 부채비율
      - debtToEquity
    fcf_b:
      canonical_name: fcf_b
      type: number
      unit: KRW_100million
      aliases:
      - FCF_B
      - 잉여현금흐름
      - freeCashflow_B
    revenue_growth_pct:
      canonical_name: revenue_growth_pct
      type: number
      unit: percent
      aliases:
      - Revenue_Growth_Pct
      - 매출성장률
      - revenueGrowth
    sector_type:
      canonical_name: sector_type
      type: enum
      unit: none
      aliases:
      - 업종구분
      - Sector_Type
    beta_i:
      canonical_name: beta_i
      type: number
      unit: ratio
      aliases:
      - 개별종목베타
    market_value_i:
      canonical_name: market_value_i
      type: number
      unit: KRW
      aliases:
      - 개별종목시가
    total_equity_value:
      canonical_name: total_equity_value
      type: number
      unit: KRW
      aliases:
      - 총주식가치
    take_profit_ladder_v2:
      canonical_name: take_profit_ladder_v2
      type: object
      unit: none
      aliases:
      - V2익절래더
    financial_health_score:
      canonical_name: financial_health_score
      type: number
      unit: points_neg5_to_20
      aliases:
      - FHS
      - 재무점수
    portfolio_beta:
      canonical_name: portfolio_beta
      type: number_or_null
      unit: ratio
      aliases:
      - portfolioBeta
      note: M2_PORTFOLIO_BETA_GATE_V1 산출 — 보유 종목 가중평균 베타. null=데이터 부족
    tier_completed:
      canonical_name: tier_completed
      type: enum
      unit: none
      aliases:
      - 완료단계
      - 익절완료단계
      note: PROFIT_LOCK_RATCHET_V1 입력 — tier_1 또는 tier_2 익절 완료 단계
    ratchet_stop_price:
      canonical_name: ratchet_stop_price
      type: number
      unit: KRW_per_share
      aliases:
      - 래칫손절가
      - 보호스탑가격
      note: PROFIT_LOCK_RATCHET_V1 출력 — 익절 후 상향된 손절 보호가
    raw_price:
      canonical_name: raw_price
      type: number
      unit: KRW_per_share
      aliases:
      - 정규화전가격
      note: TICK_NORMALIZER_V1 입력 — 호가 단위 정규화 전 원시 가격
    tick_normalized_price:
      canonical_name: tick_normalized_price
      type: number
      unit: KRW_per_share
      aliases:
      - 호가정규화가격
      - HTS입력가격
      note: TICK_NORMALIZER_V1 출력 — KRX 호가 단위 정규화 완료 가격
    tp_price:
      canonical_name: tp_price
      type: number
      unit: KRW_per_share
      aliases:
      - 익절목표가
      - take_profit_price_raw
      note: TP_VALIDITY_CHECK_V1 입력 — TAKE_PROFIT_LADDER_V2가 산출한 티어별 TP 원시 가격 (tp1
        또는 tp2)
    tp_validated_price:
      canonical_name: tp_validated_price
      type: number
      unit: KRW_per_share_or_null
      aliases:
      - 유효익절가
      - validated_tp
      note: TP_VALIDITY_CHECK_V1 출력 — 현재가 이하 TP는 null. 유효한 경우만 HTS 입력 허용.
    market_regime_state:
      canonical_name: market_regime_state
      type: enum
      unit: none
      aliases:
      - 시장국면단계
      - regime_phase
      - market_phase
      note: REGIME_TRIM_WEIGHT_V1 입력 — spec/11_market_regime.yaml 국면 분류 결과 (ADVANCE/PULLBACK_IN_UPTREND/DISTRIBUTION/BREAKDOWN)
    frg_5d_krw:
      canonical_name: frg_5d_krw
      type: number
      unit: KRW
      aliases:
      - Frg_5D_KRW
      - 외국인5D순매수금액
      note: 외국인 5일 순매수금액(KRW). 양수=순매수, 음수=순매도
    inst_5d_krw:
      canonical_name: inst_5d_krw
      type: number
      unit: KRW
      aliases:
      - Inst_5D_KRW
      - 기관5D순매수금액
      note: 기관 5일 순매수금액(KRW). 양수=순매수, 음수=순매도
    secular_leader_gate_active:
      canonical_name: secular_leader_gate_active
      type: boolean
      unit: none
      aliases:
      - 주도주게이트활성
      note: SECULAR_LEADER_REGIME_GATE_V1 출력 — 삼성전자·SK하이닉스 secular_leader_profit_lock
        발동 여부
    secular_leader_gate_status:
      canonical_name: secular_leader_gate_status
      type: enum
      unit: none
      aliases:
      - 주도주게이트상태
      note: SECULAR_LEADER_REGIME_GATE_V1 출력 — ACTIVE/DEACTIVATED/ACTIVATION_FAIL/NOT_APPLICABLE
    total_asset_krw:
      canonical_name: total_asset_krw
      type: number
      unit: KRW
      aliases:
      - totalAsset
      - 포트폴리오총자산
      note: buildHarnessContext_ 집계값 — 보유종목 평가액 + 현금(D+2 기준) 합계
    net_expectancy_30:
      canonical_name: net_expectancy_30
      type: number_or_null
      unit: percent
      aliases:
      - net_exp_30
      - monthly_net_expectancy
      note: Bayesian 성과 계산기 출력 — 최근 30거래일 순기대 수익률(%). GOAL_RETIREMENT_V1 ETA 계산 기준.
    goal_asset_krw:
      canonical_name: goal_asset_krw
      type: integer
      unit: KRW
      aliases:
      - 목표자산
      - goal_krw
      note: GOAL_RETIREMENT_V1 고정값 — 500,000,000 KRW (5억원). LLM 재정의 금지.
    goal_current_asset_krw:
      canonical_name: goal_current_asset_krw
      type: integer
      unit: KRW
      aliases:
      - 현재자산
      - current_asset_krw
      note: GOAL_RETIREMENT_V1 산출 — 하네스 캡처 시점 총 자산(totalAsset)
    goal_achievement_pct:
      canonical_name: goal_achievement_pct
      type: number
      unit: percent
      aliases:
      - 목표달성률
      - achievement_pct
      note: GOAL_RETIREMENT_V1 산출 — goal_current_asset_krw / goal_asset_krw * 100.
        소수점 1자리.
    goal_remaining_krw:
      canonical_name: goal_remaining_krw
      type: integer
      unit: KRW
      aliases:
      - 목표잔여금
      - remaining_krw
      note: GOAL_RETIREMENT_V1 산출 — max(0, goal_asset_krw - goal_current_asset_krw)
    goal_eta_months:
      canonical_name: goal_eta_months
      type: integer_or_null
      unit: months
      aliases:
      - 목표달성월수
      - eta_months
      note: GOAL_RETIREMENT_V1 복리 ETA — null이면 DATA_MISSING(net_expectancy_30 없음).
        0이면 ACHIEVED.
    goal_eta_label:
      canonical_name: goal_eta_label
      type: string
      unit: none
      aliases:
      - 목표달성예상월
      - eta_label
      note: GOAL_RETIREMENT_V1 ETA 연월 — YYYY-MM 또는 ACHIEVED 또는 DATA_MISSING
    goal_monthly_growth_pct:
      canonical_name: goal_monthly_growth_pct
      type: number_or_null
      unit: percent
      aliases:
      - 월간기대수익률
      - monthly_growth_pct
      note: GOAL_RETIREMENT_V1 ETA 계산 기준 — performance.net_expectancy_30 전달값
    goal_status:
      canonical_name: goal_status
      type: enum
      unit: none
      aliases:
      - 목표상태
      - goal_state
      values:
      - ACHIEVED
      - IN_PROGRESS
      note: GOAL_RETIREMENT_V1 산출 — goal_current_asset_krw >= goal_asset_krw이면 ACHIEVED
    settlement_cash_d2_krw:
      canonical_name: settlement_cash_d2_krw
      type: integer
      unit: KRW
      aliases:
      - d2_cash_krw
      - D2현금
      note: D+2 정산 현금 — cash_ledger_basis=D2_ONLY 기준 유일 허용 현금
    cash_floor_min_pct:
      canonical_name: cash_floor_min_pct
      type: number
      unit: percent
      aliases:
      - 최소현금방어선
      - min_cash_pct
      note: calcCashFloor_() 산출 — MRS 기반 국면별 최소 현금 비율
    mrs_score:
      canonical_name: mrs_score
      type: number
      unit: score_0_100
      aliases:
      - 시장위험점수
      note: MARKET_RISK_SCORE_V1 산출값 (0~100). TARGET_CASH_PCT_V1 입력.
    sell_candidates_json:
      canonical_name: sell_candidates_json
      type: json_array
      unit: none
      aliases:
      - 매도후보목록
      note: H2 calcSellPriority_() 산출 — sell_priority 기반 정렬 배열
    sell_quantities_json:
      canonical_name: sell_quantities_json
      type: json_array
      unit: none
      aliases:
      - 매도수량목록
      - h3_sell_qty
      note: H3 calcQuantities_() 산출 — 종목별 매도수량 확정 배열
    cash_current_pct_d2:
      canonical_name: cash_current_pct_d2
      type: number
      unit: percent
      aliases:
      - 현금비중d2
      - d2_cash_pct
      note: D+2 정산현금 / 총자산 × 100 — GAS 결정론적 산출 (LLM 재계산 금지)
    cash_target_pct:
      canonical_name: cash_target_pct
      type: number
      unit: percent
      aliases:
      - 목표현금비중
      - target_cash_pct
      note: 'TARGET_CASH_PCT_V1: max(5 + (MRS/10)×15, cash_floor_min_pct)'
    cash_shortfall_min_krw:
      canonical_name: cash_shortfall_min_krw
      type: integer
      unit: KRW
      aliases:
      - 최소현금부족액
      - shortfall_min
      note: 최소 현금 방어선까지 부족액 — 0이면 방어선 충족. LLM '약 N원' 계산 대체
    cash_shortfall_target_krw:
      canonical_name: cash_shortfall_target_krw
      type: integer
      unit: KRW
      aliases:
      - 목표현금부족액
      - shortfall_target
      note: 국면별 목표 현금비율까지 부족액 — TARGET_CASH_PCT_V1 기준
    trim_plan_to_min_cash_json:
      canonical_name: trim_plan_to_min_cash_json
      type: json_array
      unit: none
      aliases:
      - 현금회복trim계획
      - trim_plan_min
      note: H2 매도우선순위 기반 종목별 TRIM 계획 — LLM 임의 종목·순서 선택 금지
    external_context_json:
      canonical_name: external_context_json
      type: json_array
      unit: none
      aliases:
      - 외부시장데이터
      - external_data
      note: G3 격리 규칙 적용 — used_for=CONTEXT_ONLY 전용. 주문 판단에 사용 금지
      required_sub_fields:
      - source_name
      - fetched_at
      - symbol
      - value
      - used_for
    alpha_lead_score:
      canonical_name: alpha_lead_score
      type: number
      unit: score_0_100
      note: ALPHA_LEAD_SCORE_V1 산출 — 선행 파일럿 진입 가능성 점수
    lead_entry_state:
      canonical_name: lead_entry_state
      type: string
      unit: enum
      note: PILOT_ALLOWED | WATCH_ONLY | BLOCKED_LATE_CHASE | DATA_MISSING
    follow_through_state:
      canonical_name: follow_through_state
      type: string
      unit: enum
      note: FOLLOW_THROUGH_CONFIRM_V1 산출 — CONFIRMED_ADD_ON | WAIT_PULLBACK | FAILED_BREAKOUT
    holding_quantity:
      canonical_name: holding_quantity
      type: integer
      unit: shares
      aliases:
      - 보유수량_k1
      note: K1 트랜치 판단용 현재 보유수량
    profit_pct:
      canonical_name: profit_pct
      type: number
      unit: percent
      note: PROFIT_PRESERVATION_STATE_V1 산출 — (close-avgCost)/avgCost×100
    close_vs_ma20_pct:
      canonical_name: close_vs_ma20_pct
      type: number
      unit: percent
      note: ALPHA_LEAD_SCORE_V1 산출 — (close/MA20-1)×100, 눌림 판단에 사용
    tranche_phase:
      canonical_name: tranche_phase
      type: string
      unit: enum
      note: STAGED_ENTRY_TRANCHE_V1 산출 — WAIT_PILOT_SETUP | TRANCHE_1_PILOT | TRANCHE_2_ADD_ON
        | TRANCHE_3_PULLBACK_ADD | HOLD_CURRENT
    current_tranche_allowed_pct:
      canonical_name: current_tranche_allowed_pct
      type: number
      unit: percent
      note: 'K1: 현재 단계에서 허용된 매수 비중 (0 | 30 | 40)'
    next_tranche_condition:
      canonical_name: next_tranche_condition
      type: string
      unit: description
      note: 'K1: 다음 트랜치 진입 조건 코드'
    close:
      canonical_name: close
      type: number
      unit: KRW_per_share
      aliases:
      - Close
      - 종가
      note: 당일 종가 — K2 반등 매도 예상금액 계산 기준
    base_sell_qty:
      canonical_name: base_sell_qty
      type: integer
      unit: shares
      note: 'K2: SELL_QUANTITY_ALLOCATOR_V1(H3) 산출 기준 매도수량'
    execution_style:
      canonical_name: execution_style
      type: string
      unit: enum
      note: URGENT_LIQUIDITY_TRIM | OVERSOLD_REBOUND_SELL | DISTRIBUTION_EXIT | PROFIT_PROTECT_TRIM
    profit_preservation_state:
      canonical_name: profit_preservation_state
      type: string
      unit: enum
      note: PROFIT_PRESERVATION_STATE_V1 산출 — NORMAL | BREAKEVEN_RATCHET | PROFIT_LOCK_10/20/30
        | APEX_TRAILING
    profit_lock_stage:
      canonical_name: profit_lock_stage
      type: string
      unit: enum
      aliases:
      - profitLockStage
      note: PROFIT_LOCK_STAGE_CLASSIFIER_V1 산출 — NORMAL | PROFIT_LOCK_STAGE_10/20/30/50
    immediate_sell_qty:
      canonical_name: immediate_sell_qty
      type: integer
      unit: shares
      note: 'K2: 즉시 체결 대상 수량 (OVERSOLD_REBOUND_SELL의 경우 floor(base/2))'
    rebound_wait_qty:
      canonical_name: rebound_wait_qty
      type: integer
      unit: shares
      note: 'K2: 반등 트리거 대기 수량 — 트리거 미충족 시 HTS 주문 금지'
    emergency_full_sell:
      canonical_name: emergency_full_sell
      type: boolean
      unit: none
      note: 'K2: 비상 전량 매도 플래그 — half_krw×2 < shortfall일 때만 true'
    rebound_trigger_price:
      canonical_name: rebound_trigger_price
      type: integer
      unit: KRW_per_share
      note: 'K2: 반등 매도 실행 트리거 가격 (prevClose+0.5×ATR20, tick 정규화)'
    execution_method_ladder_json:
      canonical_name: execution_method_ladder_json
      type: json_object
      unit: none
      note: EXECUTION_METHOD_LADDER_V1 산출 — 매도 실행 방식 계약표
    sell_timing_verdict:
      canonical_name: sell_timing_verdict
      type: string
      unit: enum
      note: SELL_EXECUTION_TIMING_LOCK_V2 산출 — SELL_READY | TIMING_BLOCKED_INTRADAY
        | SELL_BLOCKED_DATA
    sell_waterfall_gate:
      canonical_name: sell_waterfall_gate
      type: string
      unit: enum
      note: SELL_WATERFALL_ENGINE_V2 산출 — PASS | WARN | FAIL
    smart_cash_recovery_gate:
      canonical_name: smart_cash_recovery_gate
      type: string
      unit: enum
      note: SMART_CASH_RECOVERY_V7 산출 — PASS | WARN | FAIL
    h2_candidates:
      canonical_name: h2_candidates
      type: json_array
      unit: none
      note: 'K3 입력: H2 매도후보 배열'
    ret5d:
      canonical_name: ret5d
      type: number
      unit: pct
      aliases:
      - Ret5D
      note: 5거래일 수익률.
    kospi_ret5d:
      canonical_name: kospi_ret5d
      type: number
      unit: percent
      aliases:
      - KOSPI_Ret5D
      - kospiRet5d
      note: 'K3: KOSPI 5일 수익률 — 고베타 판단 기준'
    frg_5d:
      canonical_name: frg_5d
      type: number
      unit: KRW
      aliases:
      - Frg_5D
      - frg5d
      note: K3/DISTRIBUTION_RISK_SCORE_V1 입력 — 외국인 5일 순매수금액
    inst_5d:
      canonical_name: inst_5d
      type: number
      unit: KRW
      aliases:
      - Inst_5D
      - inst5d
      note: K3/DISTRIBUTION_RISK_SCORE_V1 입력 — 기관 5일 순매수금액
    ac_gate:
      canonical_name: ac_gate
      type: string
      unit: enum
      aliases:
      - AC_Gate
      - acGate
      note: 'J2/K3: 안티클라이막스 게이트 상태 — CLIMAX 포함 시 설거지 위험 신호'
    regime_adjusted_sell_priority_json:
      canonical_name: regime_adjusted_sell_priority_json
      type: json_array
      unit: none
      aliases:
      - regime_sell_priority
      - k3_priority
      note: K3_REGIME_SELL_PRIORITY_V1 산출 — final_regime_rank 기준 매도 순서. sell_priority_lock=true이면
        LLM 재정렬 금지
    regime_trim_guidance:
      canonical_name: regime_trim_guidance
      type: json_array
      unit: none
      aliases:
      - regimeTrimGuidance
      note: REGIME_TRIM_GUIDANCE_V1 산출 — 국면별 현금확보 TRIM 우선순위
    anti_whipsaw_status:
      canonical_name: anti_whipsaw_status
      type: string
      unit: enum
      aliases:
      - antiWhipsawStatus
      note: ANTI_WHIPSAW_GATE_V1 산출 — WHIPSAW_BLOCK/WARN/CLEAR
    breakeven_stop_price:
      canonical_name: breakeven_stop_price
      type: number
      unit: KRW_per_share
      aliases:
      - breakevenStopPrice
      note: BREAKEVEN_RATCHET_V1 산출 — 손익분기 래칫 손절가
    weight_pct:
      canonical_name: weight_pct
      type: number
      unit: pct
      aliases:
      - weightPct
      - Weight_Pct
      note: 보유 비중(%) — M2 베타 가중, M5 섹터 편중 계산 입력
    holding_qty:
      canonical_name: holding_qty
      type: number
      unit: shares
      aliases:
      - holdingQty
      note: 현재 보유 수량 — M3 익절 수량 계산 입력
    proposed_quantity:
      canonical_name: proposed_quantity
      type: number_or_null
      unit: shares
      aliases:
      - proposal_qty
      note: proposal_reference_json 제안 수량 — 보유수량 부재 시 stop proposal ladder fallback
        입력
    tp1_price:
      canonical_name: tp1_price
      type: number_or_null
      unit: KRW_per_share
      aliases:
      - TP1_Price
      - tp1Price
      note: M3/prices_json 필드 — TP1 목표 가격. null=이미 통과 또는 미계산
    tp1_qty:
      canonical_name: tp1_qty
      type: number
      unit: shares
      aliases:
      - TP1_Qty
      - tp1Qty
      note: M3 — TP1 도달 시 매도 수량 (수동 입력 또는 AUTO_33PCT)
    tp2_price:
      canonical_name: tp2_price
      type: number_or_null
      unit: KRW_per_share
      aliases:
      - TP2_Price
      - tp2Price
      note: M3/prices_json 필드 — TP2 목표 가격
    tp2_qty:
      canonical_name: tp2_qty
      type: number
      unit: shares
      aliases:
      - TP2_Qty
      - tp2Qty
      note: M3 — TP2 도달 시 매도 수량
    tp3_qty:
      canonical_name: tp3_qty
      type: number
      unit: shares
      aliases:
      - TP3_Qty
      - tp3Qty
      - tp3_quantity
      note: M3 — TP3/잔량 수량
    proposal_stop_ladder:
      canonical_name: proposal_stop_ladder
      type: json_object
      unit: none
      note: STOP_PROPOSAL_LADDER_V1 산출 — proposal_reference_sheet용 손절 1/2/3 가격·수량
        묶음
    dart_risk:
      canonical_name: dart_risk
      type: string
      unit: text
      aliases:
      - DART_Risk
      note: 공시 리스크 요약.
    drawdown_guard_state:
      canonical_name: drawdown_guard_state
      type: string
      unit: enum
      aliases:
      - drawdownGuardState
      note: M1_DRAWDOWN_GUARD_V1 산출 — NO_BUY/REDUCE_BUY/CAUTION_BUY/NORMAL
    drawdown_buy_scale:
      canonical_name: drawdown_buy_scale
      type: number
      unit: 0~1
      aliases:
      - drawdownBuyScale
      - buy_scale
      note: M1 — atrQty 곱셈 배수. 1.0=정상, 0.5=50% 축소, 0=매수 금지
    consecutive_losses:
      canonical_name: consecutive_losses
      type: number
      unit: integer
      aliases:
      - consecutiveLosses
      note: M1 입력 — 최근 연속 손절 횟수 (performance 시트 기준)
    portfolio_beta_gate:
      canonical_name: portfolio_beta_gate
      type: string
      unit: enum
      aliases:
      - portfolioBetaGate
      note: M2 — OVER_BETA/WARN_BETA/PASS/INSUFFICIENT_DATA
    portfolio_beta_gate_json:
      canonical_name: portfolio_beta_gate_json
      type: json_object
      unit: none
      aliases:
      - betaGateJson
      note: M2 — per-holding beta_proxy 상세 및 포트폴리오 베타 요약
    beta_proxy:
      canonical_name: beta_proxy
      type: number
      unit: ratio
      aliases:
      - betaProxy
      note: M2/K3 — ret5d/kospiRet5d 기반 베타 근사값. 비정상 시 1.0 사용
    tp_quantity_ladder_json:
      canonical_name: tp_quantity_ladder_json
      type: json_array
      unit: none
      aliases:
      - tpLadderJson
      note: M3_TP_QUANTITY_LADDER_V1 산출 — TP1/2/3 도달 시 매도 수량. tp_quantity_ladder_lock=true이면
        LLM 변경 금지
    qty_source:
      canonical_name: qty_source
      type: string
      unit: enum
      aliases:
      - qtySource
      note: M3 — MANUAL(수동 입력)/AUTO_33PCT(자동 33%)/NO_HOLDING
    event_hold_days:
      canonical_name: event_hold_days
      type: number_or_null
      unit: integer
      aliases:
      - eventHoldDays
      - Event_Hold_Days
      note: M4 입력 — 이벤트(실적/공시) 홀드 잔여일. <=5이면 EVENT_HOLD
    event_hold_gate:
      canonical_name: event_hold_gate
      type: string
      unit: enum
      aliases:
      - eventHoldGate
      note: M4_EVENT_RISK_HOLD_GATE_V1 산출 — EVENT_HOLD/PASS
    event_risk_json:
      canonical_name: event_risk_json
      type: json_array
      unit: none
      aliases:
      - eventRiskJson
      note: M4 — per-holding 이벤트 홀드 게이트 상태 배열
    sector_concentration_gate:
      canonical_name: sector_concentration_gate
      type: string
      unit: enum
      aliases:
      - sectorConcentrationGate
      note: M5_SECTOR_CONCENTRATION_LIMIT_V1 산출 — BLOCK_SECTOR/WARN_TOP2/PASS
    sector_concentration_json:
      canonical_name: sector_concentration_json
      type: json_array
      unit: none
      aliases:
      - sectorConcentrationJson
      note: M5 — 섹터별 weight_pct 및 gate 상태 배열
    sector:
      canonical_name: sector
      type: string
      unit: none
      aliases:
      - sectorName
      - sector_name
      - Sector
      note: L1/K3 입력 — 섹터명 (TICKER_SECTOR_MAP 기반). sectorFlowRadar key
    rank:
      canonical_name: rank
      type: number
      unit: integer
      aliases:
      - sectorRank
      - Rotation_Rank
      - Sector_Rank
      note: L1 입력 — 현재 주 섹터 로테이션 순위 (낮을수록 우수)
    prev_rank_w1:
      canonical_name: prev_rank_w1
      type: number_or_null
      unit: integer
      aliases:
      - prevRank
      - Prev_Rotation_Rank
      note: L1 입력 — 1주 전 섹터 순위. 미제공 시 null
    prev_rank_w2:
      canonical_name: prev_rank_w2
      type: number_or_null
      unit: integer
      aliases:
      - prevRankW2
      - Prev_Rotation_Rank_W2
      note: L1 입력 — 2주 전 섹터 순위. 미제공 시 null
    sector_rotation_momentum_json:
      canonical_name: sector_rotation_momentum_json
      type: json_array
      unit: none
      aliases:
      - sectorMomentumJson
      - sector_momentum_json
      note: L1_SECTOR_ROTATION_MOMENTUM_V1 산출 — 섹터별 rank_delta/momentum_state. sector_rotation_momentum_lock=true이면
        LLM 재산출 금지
    rank_delta_w1:
      canonical_name: rank_delta_w1
      type: number_or_null
      unit: integer
      aliases:
      - rankDeltaW1
      note: L1 입력 — 1주 섹터 순위 변화 (양수=순위 하락). prev_rank_w1 미제공 시 null
    rank_delta_w2:
      canonical_name: rank_delta_w2
      type: number_or_null
      unit: integer
      aliases:
      - rankDeltaW2
      note: L1 입력 — 2주 섹터 순위 변화. prev_rank_w2 미제공 시 null
    momentum_state:
      canonical_name: momentum_state
      type: string
      unit: enum
      aliases:
      - momentumState
      note: L1_SECTOR_ROTATION_MOMENTUM_V1 산출 — RISING/STABLE/TOPPING_OUT/FADING
    pre_distribution_warning:
      canonical_name: pre_distribution_warning
      type: string
      unit: enum
      aliases:
      - preDistributionWarning
      - pre_dist_warning
      note: L4_PRE_DISTRIBUTION_EARLY_WARNING_V1 산출 — EARLY_WARNING(신고점수축/급등약류)/NONE.
        이 값이 EARLY_WARNING이면 신규 매수 신중 재검토
    high52w:
      canonical_name: high52w
      type: number
      unit: KRW_per_share
      aliases:
      - High52W
      - high_52w
      - 52w_high
      note: L4 입력 — 52주 최고가. 데이터 미제공 시 MA20×1.15 대체 판단
    auto_trailing_stop:
      canonical_name: auto_trailing_stop
      type: number_or_null
      unit: KRW_per_share
      aliases:
      - autoTrailingStop
      - trailing_stop
      note: L2_RATCHET_TRAILING_AUTO_V1 산출 — PROFIT_LOCK_20/30/APEX_TRAILING 구간 ATR
        트레일링 손절가. null=비해당. LLM이 이 값보다 낮은 손절가 제시 금지
    protected_stop_price:
      canonical_name: protected_stop_price
      type: number_or_null
      unit: KRW_per_share
      aliases:
      - protectedStopPrice
      note: profit_preservation_json 출력 — 수익보전 단계에서 유지해야 하는 보호 손절가
    auto_trailing_note:
      canonical_name: auto_trailing_note
      type: string_or_null
      unit: none
      aliases:
      - autoTrailingNote
      note: L2_RATCHET_TRAILING_AUTO_V1 산출 근거 — 'max(ratchet,{highest}-N.N×ATR)' 형식
    total_heat_pct:
      canonical_name: total_heat_pct
      type: number
      unit: pct
      aliases:
      - totalHeatPct
      - total_heat
      note: 포트폴리오 총 Heat 비율 — DYNAMIC_HEAT_GATE_V1/TOTAL_HEAT_V1 입력. heat_gate_threshold_pct와
        비교해 gate 판정
    heat_gate_threshold_pct:
      canonical_name: heat_gate_threshold_pct
      type: number
      unit: pct
      aliases:
      - heatGateThresholdPct
      - heat_threshold_pct
      note: L3_DYNAMIC_HEAT_GATE_V1 산출 — 현재 국면에서 적용된 BLOCK_NEW_BUY 임계값(%). GAS 결정론적
        산출, LLM 재계산 금지
    market_regime:
      canonical_name: market_regime
      type: string
      unit: enum
      aliases:
      - marketRegime
      - regime
      note: 현재 시장 국면 — DYNAMIC_HEAT_GATE_V1/K3/L3 등 국면 감응 공식의 공통 입력
    regime_size_scale:
      canonical_name: regime_size_scale
      type: number
      unit: multiplier
      aliases:
      - regimeSizeScale
      note: N1_POSITION_SIZE_REGIME_SCALE_V1 — 국면별 atrQty 스케일 배수 (0.25~1.2). GAS 결정론적
        산출
    stop_adequacy_json:
      canonical_name: stop_adequacy_json
      type: json
      unit: array
      aliases:
      - stopAdequacyJson
      note: N3_STOP_PRICE_ADEQUACY_V1 — 보유 종목별 손절가 적정성 검증 결과 배열
    absolute_risk_stop_rows:
      canonical_name: absolute_risk_stop_rows
      type: json
      unit: array
      aliases:
      - absoluteRiskStopRows
      note: P3 ABSOLUTE_RISK_STOP_V1 — 절대 리스크 손절 taxonomy 결과 배열
    relative_underperf_alert:
      canonical_name: relative_underperf_alert
      type: json
      unit: object
      aliases:
      - relativeUnderperfAlert
      note: P3 RELATIVE_UNDERPERF_ALERT_V1 — 상대약세 경보 taxonomy 객체
    stop_action_ladder:
      canonical_name: stop_action_ladder
      type: json
      unit: object
      aliases:
      - stopActionLadder
      note: P3 STOP_ACTION_LADDER_V1 — 최종 손절/익절/시간손절 액션 래더
    df_map:
      canonical_name: df_map
      type: json
      unit: object
      aliases:
      - dfMap
      note: P3 taxonomy wrapper 입력용 data feed map
    kospi_ret20d:
      canonical_name: kospi_ret20d
      type: number
      unit: percent
      aliases:
      - kospiRet20d
      note: P3 RELATIVE_UNDERPERF_ALERT_V1 입력용 KOSPI 20D 수익률
    context:
      canonical_name: context
      type: json
      unit: object
      aliases:
      - ctx
      note: P3 STOP_ACTION_LADDER_V1 입력용 calcSellDecision_ 컨텍스트 객체
    stop_gap_pct:
      canonical_name: stop_gap_pct
      type: number
      unit: pct
      aliases:
      - stopGapPct
      note: 'N3: (recommended_stop - manual_stop) / recommended_stop × 100'
    adequacy_status:
      canonical_name: adequacy_status
      type: string
      unit: enum
      aliases:
      - adequacyStatus
      note: 'N3: PASS/STOP_WIDE/STOP_CRITICAL/INSUFFICIENT_DATA'
    recommended_stop:
      canonical_name: recommended_stop
      type: number
      unit: KRW_per_share
      aliases:
      - recommendedStop
      - recommended_stop_price
      note: 'N3: ATR 기반 권고 손절가 — max(avgCost×0.92, avgCost-ATR20×mul), tick 정규화 적용'
    candidate_quality_grade:
      canonical_name: candidate_quality_grade
      type: string
      unit: enum
      aliases:
      - Candidate_Quality_Grade
      note: core_satellite 후보 품질 등급. 실행 추천이 아님.
    execution_recommendation_state:
      canonical_name: execution_recommendation_state
      type: string
      unit: enum
      aliases:
      - Execution_Recommendation_State
      note: BUY_PILOT_ALLOWED/WATCH/BLOCK 상태. HTS 주문은 order_blueprint PASS만 허용.
    expected_edge:
      canonical_name: expected_edge
      type: number
      unit: ratio
      aliases:
      - Expected_Edge
      note: 기대우위. 손절가와 목표가 기반 매수 허용 하한 검증.
    entry_mode_gate:
      canonical_name: entry_mode_gate
      type: string
      unit: enum
      aliases:
      - Entry_Mode_Gate
      note: 진입 모드 PASS/PENDING/BLOCK 게이트.
    timing_score_entry:
      canonical_name: timing_score_entry
      type: number
      unit: score_0_100
      aliases:
      - Timing_Score_Entry
      note: 진입 타이밍 점수.
    timing_score_exit:
      canonical_name: timing_score_exit
      type: number
      unit: score_0_100
      aliases:
      - Timing_Score_Exit
      note: 청산/감축 타이밍 점수.
    liquidity_status:
      canonical_name: liquidity_status
      type: string
      unit: enum
      aliases:
      - Liquidity_Status
      note: 거래대금 기반 유동성 상태.
    smart_money_flow_signal_v2_json:
      canonical_name: smart_money_flow_signal_v2_json
      type: json
      unit: array
      aliases:
      - smartMoneyFlowSignalV2Json
      note: CAPITAL_STYLE_ALLOCATION_V1 입력 — 스마트머니 흐름 배열
    fundamental_multifactor_v3_json:
      canonical_name: fundamental_multifactor_v3_json
      type: json
      unit: array
      aliases:
      - fundamentalMultifactorV3Json
      note: CAPITAL_STYLE_ALLOCATION_V1 입력 — 펀더멘털 멀티팩터 배열
    macro_event_ticker_impact_v1_json:
      canonical_name: macro_event_ticker_impact_v1_json
      type: json
      unit: array
      aliases:
      - macroEventTickerImpactV1Json
      note: CAPITAL_STYLE_ALLOCATION_V1 입력 — 거시 이벤트 영향 배열
    liquidity_flow_signal_v1_json:
      canonical_name: liquidity_flow_signal_v1_json
      type: json
      unit: array
      aliases:
      - liquidityFlowSignalV1Json
      note: CAPITAL_STYLE_ALLOCATION_V1 입력 — 유동성 흐름 배열
    capital_style_conviction:
      canonical_name: capital_style_conviction
      type: number
      unit: score_0_100
      aliases:
      - capitalStyleConviction
      note: CAPITAL_STYLE_ALLOCATION_V1 산출 — 투자성향별 conviction
    capital_style_label:
      canonical_name: capital_style_label
      type: string
      unit: enum
      aliases:
      - capitalStyleLabel
      note: CAPITAL_STYLE_ALLOCATION_V1 산출 — 투자성향 라벨
    spread_status:
      canonical_name: spread_status
      type: string
      unit: enum
      aliases:
      - Spread_Status
      note: 호가 스프레드 상태.
    sell_action:
      canonical_name: sell_action
      type: string
      unit: enum
      aliases:
      - Sell_Action
      note: 하네스 산출 매도/감축 액션.
    sell_validation:
      canonical_name: sell_validation
      type: string
      unit: enum
      aliases:
      - Sell_Validation
      note: 매도 신호 검산 상태.
    rw_partial:
      canonical_name: rw_partial
      type: number
      unit: count
      aliases:
      - RW_Partial
      note: 상대약세 부분 신호 개수.
    distribution_risk_score:
      canonical_name: distribution_risk_score
      type: number
      unit: score_0_100
      aliases:
      - Distribution_Risk_Score
      note: 분산위험 점수.
    late_chase_risk_score:
      canonical_name: late_chase_risk_score
      type: number
      unit: score_0_100
      aliases:
      - Late_Chase_Risk_Score
      note: 추격매수 위험 점수.
    rsi14:
      canonical_name: rsi14
      type: number
      unit: points
      aliases:
      - RSI14
      note: 14일 RSI.
    disparity:
      canonical_name: disparity
      type: number
      unit: pct
      aliases:
      - Disparity
      note: 이격도.
    val_surge_pct:
      canonical_name: val_surge_pct
      type: number
      unit: pct
      aliases:
      - Val_Surge_Pct
      note: 거래대금 급증률.
    ret_1d:
      canonical_name: ret_1d
      type: number
      unit: percent
      aliases:
      - Ret_1D
      - ret1d
      - 1D_Return_Pct
      note: 전일 대비 수익률 (%).
    ret_3d:
      canonical_name: ret_3d
      type: number
      unit: percent
      aliases:
      - Ret_3D
      - ret3d
      - 3D_Return_Pct
      note: 3거래일 수익률 (%).
    days_since_breakout:
      canonical_name: days_since_breakout
      type: number
      unit: trading_days
      aliases:
      - Days_Since_Breakout
      - daysSinceBreakout
      note: 돌파 발생 후 경과 거래일 수.
    ret_since_breakout:
      canonical_name: ret_since_breakout
      type: number
      unit: pct
      aliases:
      - Ret_Since_Breakout
      - retSinceBreakout
      note: 돌파일 종가 대비 현재 수익률.
    follow_through_day_state:
      canonical_name: follow_through_day_state
      type: string
      unit: enum
      aliases:
      - Follow_Through_Day_State
      - followThroughDayState
      note: Follow-Through Day 판정 상태.
    vol_ratio_vs_breakout_day:
      canonical_name: vol_ratio_vs_breakout_day
      type: number
      unit: ratio
      aliases:
      - Vol_Ratio_Vs_Breakout_Day
      - volRatioVsBreakoutDay
      note: 돌파일 대비 거래량 비율.
    vol_today:
      canonical_name: vol_today
      type: number
      unit: shares
      aliases:
      - Vol_Today
      - volToday
      note: 당일 거래량.
    vol_breakout_day:
      canonical_name: vol_breakout_day
      type: number
      unit: shares
      aliases:
      - Vol_Breakout_Day
      - volBreakoutDay
      - volumeBreakoutDay
      note: 돌파일 거래량.
    consecutive_sell_signals_5d:
      canonical_name: consecutive_sell_signals_5d
      type: number
      unit: count
      aliases:
      - Consecutive_Sell_Signals_5D
      - consecutiveSellSignals5d
      note: 최근 5일간 연속 매도 신호 수.
    vol_surge_pct:
      canonical_name: vol_surge_pct
      type: number
      unit: pct
      aliases:
      - Vol_Surge_Pct
      - volSurgePct
      note: 당일 거래량 급증률.
    allowed_intraday_actions:
      canonical_name: allowed_intraday_actions
      type: array
      unit: enum_list
      aliases:
      - Allowed_Intraday_Actions
      - allowedIntradayActions
      note: 장중 허용 액션 목록.
    blocked_intraday_actions:
      canonical_name: blocked_intraday_actions
      type: array
      unit: enum_list
      aliases:
      - Blocked_Intraday_Actions
      - blockedIntradayActions
      note: 장중 차단 액션 목록.
    execution_quality_score:
      canonical_name: execution_quality_score
      type: number
      unit: score
      aliases:
      - Execution_Quality_Score
      - executionQualityScore
      note: 실행 품질 점수.
    execution_quality_grade:
      canonical_name: execution_quality_grade
      type: string
      unit: enum
      aliases:
      - Execution_Quality_Grade
      - executionQualityGrade
      note: 실행 품질 등급.
    execution_quality_outcome:
      canonical_name: execution_quality_outcome
      type: string
      unit: enum
      aliases:
      - Execution_Quality_Outcome
      - executionQualityOutcome
      note: 실행 품질 결과 분류.
    threshold_adjustment_proposals:
      canonical_name: threshold_adjustment_proposals
      type: array
      unit: json
      aliases:
      - Threshold_Adjustment_Proposals
      - thresholdAdjustmentProposals
      note: 임계치 조정 제안 목록.
    max_child_qty:
      canonical_name: max_child_qty
      type: number
      unit: count
      aliases:
      - Max_Child_Qty
      - maxChildQty
      note: TWAP 분할 최대 자식 주문 수량.
    n_slices:
      canonical_name: n_slices
      type: number
      unit: count
      aliases:
      - N_Slices
      - nSlices
      note: 분할 주문 횟수.
    participation_rate:
      canonical_name: participation_rate
      type: number
      unit: ratio
      aliases:
      - Participation_Rate
      - participationRate
      note: 시장 참여율.
    twap_required:
      canonical_name: twap_required
      type: boolean
      unit: boolean
      aliases:
      - Twap_Required
      - twapRequired
      note: TWAP 필요 여부.
    institutional_flow_5d:
      canonical_name: institutional_flow_5d
      type: number
      unit: KRW
      aliases:
      - Institutional_Flow_5D
      - institutionalFlow5d
      note: 기관 5일 누적 순매수 금액.
    foreign_flow_5d:
      canonical_name: foreign_flow_5d
      type: number
      unit: KRW
      aliases:
      - Foreign_Flow_5D
      - foreignFlow5d
      note: 외국인 5일 누적 순매수 금액.
    sector_relative_strength_5d:
      canonical_name: sector_relative_strength_5d
      type: number
      unit: ratio
      aliases:
      - Sector_Relative_Strength_5D
      - sectorRelativeStrength5d
      note: 섹터 5일 상대강도.
    secular_leader_gate:
      canonical_name: secular_leader_gate
      type: string
      unit: enum
      aliases:
      - secularLeaderGate
      note: SECULAR_LEADER_REGIME_GATE_V1 결과 enum.
    breakout_quality_gate:
      canonical_name: breakout_quality_gate
      type: string
      unit: enum
      aliases:
      - breakoutQualityGate
      - breakout_quality_gate_state
      note: BREAKOUT_QUALITY_GATE_V2 상태 enum.
    final_action:
      canonical_name: final_action
      type: string
      unit: enum
      aliases:
      - Final_Action
      note: 하네스 최종 액션.
    cash_preserve_style:
      canonical_name: cash_preserve_style
      type: string
      unit: enum
      aliases:
      - Cash_Preserve_Style
      note: 현금확보 매도 스타일.
    allowed_action:
      canonical_name: allowed_action
      type: string
      unit: enum
      aliases:
      - Allowed_Action
      note: 내부 허용 액션.
    t1_forced_sell_risk_score:
      canonical_name: t1_forced_sell_risk_score
      type: number
      unit: score_0_100
      aliases:
      - T1_Forced_Sell_Risk_Score
      note: 매수 후 다음 거래일 강제 매도 위험 점수.
    sell_conflict_score:
      canonical_name: sell_conflict_score
      type: number
      unit: score_0_100
      aliases:
      - Sell_Conflict_Score
      note: 매도/현금확보 게이트와 신규매수 충돌 점수.
    holding_stale_json:
      canonical_name: holding_stale_json
      type: json
      unit: array
      aliases:
      - holdingStaleJson
      note: N4_HOLDING_STALE_REVIEW_V1 — 보유 기간 기반 재검토 플래그 배열
    holding_days:
      canonical_name: holding_days
      type: number
      unit: integer_days
      aliases:
      - holdingDays
      - Holding_Days
      note: 'N4: entry_date 기준 보유 일수'
    stale_status:
      canonical_name: stale_status
      type: string
      unit: enum
      aliases:
      - staleStatus
      note: 'N4: STALE_POSITION(>60d)/REVIEW_SOON(>30d)/FRESH(<=30d)/ENTRY_DATE_MISSING'
    entry_date:
      canonical_name: entry_date
      type: string
      unit: ISO_date
      aliases:
      - entryDate
      - Entry_Date
      - entry_date_iso
      note: 'N4: account_snapshot의 진입일 컬럼 — HOLDING_STALE_REVIEW_V1 입력'
    regime_cash_uplift_min_pct:
      canonical_name: regime_cash_uplift_min_pct
      type: number
      unit: pct
      aliases:
      - regimeCashUpliftMinPct
      note: N5_REGIME_CASH_UPLIFT_V1 — 국면 상향 적용 후 실제 현금 최소 비율 (%). GAS 결정론적 산출
    win_rate_30:
      canonical_name: win_rate_30
      type: number
      unit: ratio_0_to_1
      aliases:
      - winRate30
      - win_rate
      note: 'O4 입력: 최근 30거래 승률 (0.0~1.0). readPerformanceSheet_() 산출'
    trades_used:
      canonical_name: trades_used
      type: number
      unit: integer
      aliases:
      - tradesUsed
      note: 'O4 입력: 성능 계산에 사용된 거래 수. 10 미만이면 INSUFFICIENT_HISTORY'
    single_position_weight_gate:
      canonical_name: single_position_weight_gate
      type: string
      unit: enum
      aliases:
      - singlePositionWeightGate
      note: O1_SINGLE_POSITION_WEIGHT_CAP_V1 — OVERWEIGHT_TRIM/PASS. 개별 종목 비중 상한 초과
        여부
    single_position_weight_json:
      canonical_name: single_position_weight_json
      type: json
      unit: array
      aliases:
      - singlePositionWeightJson
      note: 'O1: 종목별 weight_pct vs cap_pct 상태 배열'
    semiconductor_cluster_gate:
      canonical_name: semiconductor_cluster_gate
      type: string
      unit: enum
      aliases:
      - semiconductorClusterGate
      note: O2_SEMICONDUCTOR_CLUSTER_GATE_V1 — CLUSTER_BLOCK/PASS. 005930+000660 합산
        비중의 국면별 상한 초과 여부
    semiconductor_cluster_json:
      canonical_name: semiconductor_cluster_json
      type: json
      unit: object
      aliases:
      - semiconductorClusterJson
      note: 'O2: 반도체 클러스터 합산 비중 및 종목별 상세. threshold_pct는 국면별 가변'
    portfolio_drawdown_gate:
      canonical_name: portfolio_drawdown_gate
      type: string
      unit: enum
      aliases:
      - portfolioDrawdownGate
      note: O3_PORTFOLIO_DRAWDOWN_GATE_V1 — DRAWDOWN_FORCE_RISK_OFF/DRAWDOWN_CAUTION/PASS/INSUFFICIENT_DATA
    portfolio_drawdown_pct:
      canonical_name: portfolio_drawdown_pct
      type: number
      unit: pct
      aliases:
      - portfolioDrawdownPct
      note: 'O3: 고점 대비 낙폭 % (양수=낙폭). GAS 결정론적 산출'
    portfolio_peak_krw:
      canonical_name: portfolio_peak_krw
      type: number
      unit: KRW
      aliases:
      - portfolioPeakKrw
      note: 'O3: 역대 총자산 고점 (원). settings 시트 자동 갱신'
    win_loss_streak_state:
      canonical_name: win_loss_streak_state
      type: string
      unit: enum
      aliases:
      - winLossStreakState
      note: O4_WIN_LOSS_STREAK_GUARD_V1 — EDGE_OK/EDGE_WEAK/EDGE_DEGRADED/EDGE_CRITICAL/INSUFFICIENT_HISTORY
    win_loss_streak_buy_scale:
      canonical_name: win_loss_streak_buy_scale
      type: number
      unit: multiplier
      aliases:
      - winLossStreakBuyScale
      note: 'O4: atrQty에 곱해지는 배수 (0.25~1.0). GAS 결정론적 산출'
    win_loss_streak_win_rate_pct:
      canonical_name: win_loss_streak_win_rate_pct
      type: number
      unit: pct
      aliases:
      - winLossStreakWinRatePct
      note: 'O4: 최근 30거래 승률 % (0~100)'
    position_count_gate:
      canonical_name: position_count_gate
      type: string
      unit: enum
      aliases:
      - positionCountGate
      note: O5_POSITION_COUNT_LIMIT_V1 — POSITION_COUNT_BLOCK/PASS
    position_count:
      canonical_name: position_count
      type: number
      unit: integer
      aliases:
      - positionCount
      note: 'O5: 현재 보유 종목 수 (holdings.length)'
    position_count_max:
      canonical_name: position_count_max
      type: number
      unit: integer
      aliases:
      - positionCountMax
      note: 'O5: 국면별 최대 허용 종목 수 (NEUTRAL:8, RISK_OFF:6)'
    heat_gate_status:
      canonical_name: heat_gate_status
      type: string
      unit: enum
      aliases:
      - heatGateStatus
      - heat_gate
      note: 'P5 입력: BLOCK_NEW_BUY/HALVE_NEW_BUY_QUANTITY/ALLOW_CONTINUE'
    cash_floor_status:
      canonical_name: cash_floor_status
      type: string
      unit: enum
      aliases:
      - cashFloorStatus
      note: 'P5 입력: HARD_BLOCK/TRIM_REQUIRED/PASS — cash_floor 게이트 상태'
    stop_breach_gate:
      canonical_name: stop_breach_gate
      type: string
      unit: enum
      aliases:
      - stopBreachGate
      note: P1_STOP_BREACH_ALERT_V1 — BREACH/APPROACHING/PASS
    stop_breach_alert_json:
      canonical_name: stop_breach_alert_json
      type: json
      unit: array
      aliases:
      - stopBreachAlertJson
      note: 'P1: 종목별 손절가 이탈 경보 상태·gap_pct 배열'
    gap_pct:
      canonical_name: gap_pct
      type: number
      unit: pct
      aliases:
      - gapPct
      note: 'P1: (close - stop_price) / stop_price × 100. 양수=여유, 음수=이탈'
    tp_trigger_gate:
      canonical_name: tp_trigger_gate
      type: string
      unit: enum
      aliases:
      - tpTriggerGate
      note: P2_TP_TRIGGER_ALERT_V1 — TRIGGERED/PASS
    tp_trigger_alert_json:
      canonical_name: tp_trigger_alert_json
      type: json
      unit: array
      aliases:
      - tpTriggerAlertJson
      note: 'P2: 익절가 도달 종목·tp_qty 연계 배열'
    heat_concentration_gate:
      canonical_name: heat_concentration_gate
      type: string
      unit: enum
      aliases:
      - heatConcentrationGate
      note: P3_HEAT_CONCENTRATION_ALERT_V1 — HEAT_CONCENTRATED/PASS/INSUFFICIENT_DATA
    heat_concentration_json:
      canonical_name: heat_concentration_json
      type: json
      unit: array
      aliases:
      - heatConcentrationJson
      note: 'P3: 종목별 heat_krw·heat_share_pct 배열'
    heat_share_pct:
      canonical_name: heat_share_pct
      type: number
      unit: pct
      aliases:
      - heatSharePct
      note: 'P3: 해당 종목 Heat / totalHeatKrw × 100'
    regime_transition_type:
      canonical_name: regime_transition_type
      type: string
      unit: enum
      aliases:
      - regimeTransitionType
      note: P4_REGIME_TRANSITION_ALERT_V1 — UPGRADE/DOWNGRADE/LATERAL_SHIFT/NO_CHANGE
    regime_transition_json:
      canonical_name: regime_transition_json
      type: json
      unit: object
      aliases:
      - regimeTransitionJson
      note: 'P4: 국면 전환 상세 (prev_regime, current_regime, affected_gates)'
    portfolio_health_label:
      canonical_name: portfolio_health_label
      type: string
      unit: enum
      aliases:
      - portfolioHealthLabel
      note: P5_PORTFOLIO_HEALTH_SCORE_V1 — HEALTHY/CAUTION/CRITICAL. 보고서 첫 줄 표시 의무
    portfolio_health_score:
      canonical_name: portfolio_health_score
      type: number
      unit: score_0_to_100
      aliases:
      - portfolioHealthScore
      note: 'P5: 0~100 건전성 점수. max(0, 100-critical×30-caution×10)'
    portfolio_health_blocked_json:
      canonical_name: portfolio_health_blocked_json
      type: json
      unit: array
      aliases:
      - portfolioHealthBlockedJson
      note: 'P5: 활성화된 게이트별 severity(CRITICAL/CAUTION) 상세 배열'
    ss001_grade:
      canonical_name: ss001_grade
      type: string
      unit: enum [A, B, C, D]
      aliases:
      - SS001_Grade
      - ss001Grade
      note: SS001_SCORE_V1 종합 등급. A=최우수, D=최하. composite_verdict 입력값.
    excess_ret_10d:
      canonical_name: excess_ret_10d
      type: number
      unit: pct
      aliases:
      - Excess_Ret_10D
      - excessRet10D
      note: 'RS_VERDICT_V1: 종목 10일 수익률 − KOSPI 10일 수익률.'
    rs_verdict:
      canonical_name: rs_verdict
      type: string
      unit: enum [LEADER, MARKET, LAGGARD, BROKEN, UNKNOWN]
      aliases:
      - RS_Verdict
      - rsVerdict
      note: RS_VERDICT_V1 판정. COMPOSITE_VERDICT_V1 및 RAG_V1 선행 입력.
    composite_verdict:
      canonical_name: composite_verdict
      type: string
      unit: enum [PRIME_CANDIDATE, WATCH_CANDIDATE, REDUCE_CANDIDATE, EXIT_REVIEW,
        CLOSE_POSITION]
      aliases:
      - Composite_Verdict
      - compositeVerdict
      note: 'COMPOSITE_VERDICT_V1: ss001_grade × rs_verdict 매트릭스 판정.'
    rag_v1:
      canonical_name: rag_v1
      type: string
      unit: enum [PASS, FAIL, EXEMPT]
      aliases:
      - RAG_Verdict
      - ragV1
      note: 'REPLACEMENT_ALPHA_GATE_V1: 위성 신규 BUY 알파 검증 결과. FAIL → HOLD 강제.'
    sfg_v1:
      canonical_name: sfg_v1
      type: string
      unit: enum [TRIGGERED, CLEAR]
      aliases:
      - SFG_V1
      - sfgV1
      note: 'SATELLITE_FAILURE_GATE_V1: 위성 집단 실패 게이트. TRIGGERED → 모든 위성 BUY 차단.'
    stock_drawdown_from_high_pct:
      canonical_name: stock_drawdown_from_high_pct
      type: number
      unit: pct
      aliases:
      - Stock_Drawdown_From_High_Pct
      - stockDrawdownFromHighPct
      note: 'BENCHMARK_RELATIVE_TIMESERIES_V1: 종목 52주/가용 고점 대비 낙폭.'
    excess_drawdown_pctp:
      canonical_name: excess_drawdown_pctp
      type: number
      unit: pct_points
      aliases:
      - Excess_Drawdown_PctP
      - excessDrawdownPctp
      note: 'BENCHMARK_RELATIVE_TIMESERIES_V1: 종목 낙폭 - KOSPI 낙폭. 양수=시장보다 더 빠짐.'
    recovery_ratio_5d:
      canonical_name: recovery_ratio_5d
      type: number
      unit: ratio
      aliases:
      - Recovery_Ratio_5D
      - recoveryRatio5d
      note: 'BENCHMARK_RELATIVE_TIMESERIES_V1: KOSPI 5D 양수 구간 회복률.'
    recovery_ratio_20d:
      canonical_name: recovery_ratio_20d
      type: number
      unit: ratio
      aliases:
      - Recovery_Ratio_20D
      - recoveryRatio20d
      note: 'BENCHMARK_RELATIVE_TIMESERIES_V1: KOSPI 20D 양수 구간 회복률.'
    downside_beta:
      canonical_name: downside_beta
      type: number
      unit: ratio
      aliases:
      - Downside_Beta
      - downsideBeta
      note: 'BENCHMARK_RELATIVE_TIMESERIES_V1: KOSPI 하락 구간 수익률 비율. 프록시 사용 시 brt_method에
        표시.'
    rs_line_20d_slope:
      canonical_name: rs_line_20d_slope
      type: number
      unit: slope
      aliases:
      - RS_Line_20D_Slope
      - rsLine20dSlope
      note: 'BENCHMARK_RELATIVE_TIMESERIES_V1: 20D 상대강도선 기울기.'
    rs_line_60d_slope:
      canonical_name: rs_line_60d_slope
      type: number
      unit: slope
      aliases:
      - RS_Line_60D_Slope
      - rsLine60dSlope
      note: 'BENCHMARK_RELATIVE_TIMESERIES_V1: 60D 상대강도선 기울기.'
    brt_verdict:
      canonical_name: brt_verdict
      type: string
      unit: enum [LEADER, MARKET, LAGGARD, BROKEN, UNKNOWN]
      aliases:
      - BRT_Verdict
      - brtVerdict
      note: BENCHMARK_RELATIVE_TIMESERIES_V1 최종 판정. RS_VERDICT_V2 입력.
    brt_method:
      canonical_name: brt_method
      type: string
      unit: text
      aliases:
      - BRT_Method
      - brtMethod
      note: BRT 산출 방식. 과거 시계열 부재 시 PROXY_FROM_RET20_RET60.
    rs_verdict_v1_raw:
      canonical_name: rs_verdict_v1_raw
      type: string
      unit: enum [LEADER, MARKET, LAGGARD, BROKEN, UNKNOWN]
      aliases:
      - RS_Verdict_V1_Raw
      - rsVerdictV1Raw
      note: RS_VERDICT_V2 감사용 V1 원본.
    saqg_v1:
      canonical_name: saqg_v1
      type: string
      unit: enum [ELIGIBLE, WATCHLIST_ONLY, EXCLUDED, EXEMPT]
      aliases:
      - SAQG_V1
      - saqgV1
      note: 'SATELLITE_ALPHA_QUALITY_GATE_V1: 위성 후보 품질 게이트.'
    sapg_status:
      canonical_name: sapg_status
      type: string
      unit: enum [PASS, SAPG_ALERT, SAPG_CRITICAL, INSUFFICIENT_DATA]
      aliases:
      - SAPG_Status
      - sapgStatus
      note: 'SATELLITE_AGGREGATE_PNL_GATE_V1: 위성 합산 손익 게이트.'
    globalKospiRet5D_:
      canonical_name: globalKospiRet5D_
      type: number
      unit: pct
      aliases:
      - KOSPI_Ret5D_PreRead
      note: 'GAS preReads: KOSPI 5D 수익률.'
    globalKospiRet20D_:
      canonical_name: globalKospiRet20D_
      type: number
      unit: pct
      aliases:
      - KOSPI_Ret20D_PreRead
      note: 'GAS preReads: KOSPI 20D 수익률.'
    globalKospiRet60D_:
      canonical_name: globalKospiRet60D_
      type: number
      unit: pct
      aliases:
      - KOSPI_Ret60D_PreRead
      note: 'GAS preReads: KOSPI 60D 수익률.'
    globalKospiDrawdown_:
      canonical_name: globalKospiDrawdown_
      type: number
      unit: pct
      aliases:
      - KOSPI_Drawdown_PreRead
      note: 'GAS preReads: KOSPI 가용 고점 대비 낙폭.'
    profit_loss:
      canonical_name: profit_loss
      type: number
      unit: KRW
      aliases:
      - unrealized_pnl_krw
      - profit_loss_krw
      note: account_snapshot 평가손익. SATELLITE_AGGREGATE_PNL_GATE_V1 입력.
    cash_creation_purpose_lock:
      canonical_name: cash_creation_purpose_lock
      type: string
      unit: enum
      aliases:
      - Cash_Creation_Purpose_Lock
      note: CASH_CREATION_PURPOSE_LOCK_V1 출력 상태.
    alpha_evaluation_window_json:
      canonical_name: alpha_evaluation_window_json
      type: json
      unit: array
      aliases:
      - Alpha_Evaluation_Window_JSON
      note: ALPHA_EVALUATION_WINDOW_V1 T+20/T+60 알파 평가 결과.
    t20_return_pct:
      canonical_name: t20_return_pct
      type: number
      unit: pct
      aliases:
      - T20_Return_Pct
      note: ALPHA_EVALUATION_WINDOW_V1 입력.
    t60_return_pct:
      canonical_name: t60_return_pct
      type: number
      unit: pct
      aliases:
      - T60_Return_Pct
      note: ALPHA_EVALUATION_WINDOW_V1 입력.
    benchmark_core_return_pct:
      canonical_name: benchmark_core_return_pct
      type: number
      unit: pct
      aliases:
      - Benchmark_Core_Return_Pct
      note: ALPHA_EVALUATION_WINDOW_V1 벤치마크 코어 수익률.
    volume_ratio_5d:
      canonical_name: volume_ratio_5d
      type: number
      unit: ratio
      aliases:
      - Volume_Ratio_5D
      - vol_ratio_5d
      note: 최근 당일 거래량 / 5일 평균 거래량. PREDICTIVE_ALPHA_ENGINE_V1 thesis 입력.
    distribution_signals_count:
      canonical_name: distribution_signals_count
      type: number
      unit: float
      aliases:
      - weighted_sum
      - Distribution_Signals_Count
      note: DISTRIBUTION_SELL_DETECTOR_V1 가중합산 점수. ANTI_LATE_ENTRY_GATE_V2 GATE_3
        입력.
    foreign_sell_consecutive_days:
      canonical_name: foreign_sell_consecutive_days
      type: integer
      unit: days
      aliases:
      - foreign_consecutive_sell_days
      - Foreign_Sell_Consecutive_Days
      note: 외국인 순매도 연속 일수. PREDICTIVE_ALPHA_ENGINE_V1 antithesis 및 MACRO_EVENT_SYNCHRONIZER_V1
        입력.
    foreign_sell_krw_today:
      canonical_name: foreign_sell_krw_today
      type: number
      unit: KRW
      aliases:
      - Foreign_Sell_KRW_Today
      note: 당일 외국인 순매도 금액(원). mega_sell_alert 판정 기준. macro 시트 _foreignFlow.
    days_since_entry:
      canonical_name: days_since_entry
      type: integer
      unit: days
      aliases:
      - Days_Since_Entry
      note: 진입 후 경과 영업일 수. PREDICTIVE_ALPHA_ENGINE_V1 stale_position 판정 입력.
    fomc_days_remaining:
      canonical_name: fomc_days_remaining
      type: integer
      unit: days
      aliases:
      - FOMC_Days_Remaining
      note: 다음 FOMC까지 남은 일수. settings 시트 event_calendar. MACRO_EVENT_SYNCHRONIZER_V1
        입력.
    domestic_cpi:
      canonical_name: domestic_cpi
      type: number
      unit: percent
      aliases:
      - Domestic_CPI
      - cpi_yoy
      note: 국내 소비자물가지수 전년비(%). macro 시트. MACRO_EVENT_SYNCHRONIZER_V1 입력.
    vix:
      canonical_name: vix
      type: number
      unit: index
      aliases:
      - VIX
      - cboe_vix
      note: CBOE VIX 공포지수. macro 시트 _vix. MACRO_EVENT_SYNCHRONIZER_V1 입력.
    us500_1w_change:
      canonical_name: us500_1w_change
      type: number
      unit: percent
      aliases:
      - US500_1W_Change
      - sp500_1w_change
      note: S&P500 1주일 등락률(%). macro 시트 _us500Close. MACRO_EVENT_SYNCHRONIZER_V1 입력.
    base_qty:
      canonical_name: base_qty
      type: integer
      unit: shares
      aliases:
      - Base_Qty
      note: SELL_QUANTITY_ALLOCATOR_V1 산출 기준 매도 수량. CASH_PRESERVATION_SELL_ENGINE_V2
        입력.
    ce70_net_profit_krw:
      canonical_name: ce70_net_profit_krw
      type: number_or_null
      unit: KRW
      aliases:
      - CE70_NET_PROFIT_KRW
      - ce70_profit
      note: forecast_simulation_engine_v1 산출 — 세후비용 차감 손익분포의 30%분위(CE70). 표본 부족 시
        null(DATA_MISSING).
    tax_fee_slippage_krw:
      canonical_name: tax_fee_slippage_krw
      type: number
      unit: KRW
      aliases:
      - TAX_FEE_SLIPPAGE_KRW
      - tax_fee_slippage
      note: sell_waterfall_engine_v4 산출 — 세금·수수료·슬리피지 합산 비용.
    cash_repair_benefit_krw:
      canonical_name: cash_repair_benefit_krw
      type: number
      unit: KRW
      aliases:
      - CASH_REPAIR_BENEFIT_KRW
      note: smart_cash_recovery_v9 연동 — 현금방어선 회복으로 인한 효용 가치.
    concentration_reduction_benefit_krw:
      canonical_name: concentration_reduction_benefit_krw
      type: number
      unit: KRW
      aliases:
      - CONCENTRATION_REDUCTION_BENEFIT_KRW
      note: portfolio_exposure.concentration_caps_v8_9_supplement 초과 해소로 인한 효용 가치.
    turnover_penalty_krw:
      canonical_name: turnover_penalty_krw
      type: number
      unit: KRW
      aliases:
      - TURNOVER_PENALTY_KRW
      note: 회전율 예산 초과분에 대한 페널티. rebalancing_engine_v8_9.turnover_budget 참조.
    transition_utility_krw:
      canonical_name: transition_utility_krw
      type: number_or_null
      unit: KRW
      aliases:
      - TRANSITION_UTILITY_KRW
      note: PORTFOLIO_TRANSITION_UTILITY_V1 산출 — 양수일 때만 전환 후보 채택 검토. 입력 결측 시 null(NO_TRADE_AND_QUARANTINE).
    avoided_tail_loss_krw:
      canonical_name: avoided_tail_loss_krw
      type: number
      unit: KRW
      aliases:
      - AVOIDED_TAIL_LOSS_KRW
      note: SELL_LOT_PARETO_SELECTOR_V1 입력 — 해당 lot을 매도하지 않았을 때 예상되는 꼬리위험 손실 회피액.
    tax_loss_benefit_krw:
      canonical_name: tax_loss_benefit_krw
      type: number
      unit: KRW
      aliases:
      - TAX_LOSS_BENEFIT_KRW
      note: SELL_LOT_PARETO_SELECTOR_V1 입력 — 손실 lot 매도 시 세금 절감 효과. 계좌유형 미확인 시 0(DATA_MISSING
        표기).
    reentry_cost_krw:
      canonical_name: reentry_cost_krw
      type: number
      unit: KRW
      aliases:
      - REENTRY_COST_KRW
      note: SELL_LOT_PARETO_SELECTOR_V1 입력 — 매도 후 재진입 시 예상 거래비용·스프레드.
    missed_upside_penalty_krw:
      canonical_name: missed_upside_penalty_krw
      type: number
      unit: KRW
      aliases:
      - MISSED_UPSIDE_PENALTY_KRW
      note: SELL_LOT_PARETO_SELECTOR_V1 입력 — CE70_NET_PROFIT_KRW 분포 기반 추정 상승분. 분포
        없으면 0(보수적 하한).
    lot_sell_score_krw:
      canonical_name: lot_sell_score_krw
      type: number_or_null
      unit: KRW
      aliases:
      - LOT_SELL_SCORE_KRW
      note: SELL_LOT_PARETO_SELECTOR_V1 산출 — 동일 hard_precedence 단계 내 lot 우선순위 점수.
    ce90_net_profit_krw:
      canonical_name: ce90_net_profit_krw
      type: number_or_null
      unit: KRW
      aliases:
      - CE90_NET_PROFIT_KRW
      note: FORECAST_SIMULATION_ENGINE_V1 산출 — 손익분포 10%분위(CE90). 표본 부족 시 null(WATCH_ONLY).
    cvar95_loss_krw:
      canonical_name: cvar95_loss_krw
      type: number_or_null
      unit: KRW
      aliases:
      - CVAR95_LOSS_KRW
      note: FORECAST_SIMULATION_ENGINE_V1 산출 — 95% 신뢰구간 꼬리손실 평균. 표본 부족 시 null(WATCH_ONLY).
    sample_count_total:
      canonical_name: sample_count_total
      type: integer
      unit: count
      aliases:
      - SAMPLE_COUNT_TOTAL
      note: FORECAST_SIMULATION_ENGINE_V1 입력 — 전체 손익 표본 수. spec/29_backtest_harness_contract.yaml
        연동.
    sample_count_same_regime:
      canonical_name: sample_count_same_regime
      type: integer
      unit: count
      aliases:
      - SAMPLE_COUNT_SAME_REGIME
      note: FORECAST_SIMULATION_ENGINE_V1 입력 — 동일 레짐 손익 표본 수.
    net_profit_distribution_after_tax_fee_slippage:
      canonical_name: net_profit_distribution_after_tax_fee_slippage
      type: list_or_null
      unit: list_of_KRW
      aliases:
      - NET_PROFIT_DISTRIBUTION
      note: FORECAST_SIMULATION_ENGINE_V1 입력 — 세후·비용 차감 손익 표본 분포. spec/29_backtest_harness_contract.yaml
        연동.
    execution_mode:
      canonical_name: execution_mode
      type: string
      unit: none
      aliases:
      - EXECUTION_MODE
      - global_execution_gate
      note: AUDIT_ONLY | SHADOW | PILOT | LIVE_LIMITED | LIVE_FULL. PORTFOLIO_TRANSITION_UTILITY_V1·FORECAST_SIMULATION_ENGINE_V1
        입력.
    direct_weight_pct:
      canonical_name: direct_weight_pct
      type: number
      unit: percent
      aliases:
      - DIRECT_WEIGHT_PCT
      note: SECTOR_EXPOSURE_GRAPH_V1 입력 — 종목 직접보유 비중.
    etf_constituents_json:
      canonical_name: etf_constituents_json
      type: list_or_null
      unit: json
      aliases:
      - ETF_CONSTITUENTS_JSON
      note: SECTOR_EXPOSURE_GRAPH_V1 입력 — ETF 구성종목 [{ticker, weight_pct, sector_id}].
        미확인 시 ETF_BUY_BLOCKED.
    etf_weight_pct:
      canonical_name: etf_weight_pct
      type: number
      unit: percent
      aliases:
      - ETF_WEIGHT_PCT
      note: SECTOR_EXPOSURE_GRAPH_V1 입력 — 포트폴리오 내 ETF 비중.
    sector_id:
      canonical_name: sector_id
      type: string
      unit: none
      aliases:
      - SECTOR_ID
      note: 'canonical_sector_id_format(L1:L2:L3:L4) 준수. 예: EQ:TECH:SEMIS:HBM.'
    peer_sector_betas:
      canonical_name: peer_sector_betas
      type: list_or_null
      unit: list_of_ratio
      aliases:
      - PEER_SECTOR_BETAS
      note: SECTOR_EXPOSURE_GRAPH_V1 입력 — 동일 macro_driver 공유 섹터 베타 목록. 미확인 시 raw beta
        사용 + PARTIAL 표기.
    sector_family_total_pct:
      canonical_name: sector_family_total_pct
      type: number_or_null
      unit: percent
      aliases:
      - SECTOR_FAMILY_TOTAL_PCT
      note: SECTOR_EXPOSURE_GRAPH_V1 산출 — direct_weight_pct + lookthrough_etf_weight_pct.
    relative_strength_leads_sector:
      canonical_name: relative_strength_leads_sector
      type: boolean
      unit: none
      aliases:
      - RELATIVE_STRENGTH_LEADS_SECTOR
      note: LEADER_LIFECYCLE_GATE_V1 입력 — promotion_requires_all 항목.
    volume_quality_confirmed:
      canonical_name: volume_quality_confirmed
      type: boolean
      unit: none
      aliases:
      - VOLUME_QUALITY_CONFIRMED
      note: LEADER_LIFECYCLE_GATE_V1 입력 — promotion_requires_all 항목.
    above_ma60_or_reclaim_confirmed:
      canonical_name: above_ma60_or_reclaim_confirmed
      type: boolean
      unit: none
      aliases:
      - ABOVE_MA60_OR_RECLAIM_CONFIRMED
      note: LEADER_LIFECYCLE_GATE_V1 입력 — promotion_requires_all 항목, demotion_triggers_any
        항목.
    earnings_revision_status:
      canonical_name: earnings_revision_status
      type: string
      unit: none
      aliases:
      - EARNINGS_REVISION_STATUS
      note: LEADER_LIFECYCLE_GATE_V1 입력 — positive | neutral | negative.
    institutional_flow_status:
      canonical_name: institutional_flow_status
      type: string
      unit: none
      aliases:
      - INSTITUTIONAL_FLOW_STATUS
      note: LEADER_LIFECYCLE_GATE_V1 입력 — accumulation | neutral | distribution.
    current_role:
      canonical_name: current_role
      type: string
      unit: none
      aliases:
      - CURRENT_ROLE
      note: LEADER_LIFECYCLE_GATE_V1 입력 — 직전 평가 leader_role. 최초 평가 시 LAGGARD.
    leader_role:
      canonical_name: leader_role
      type: string
      unit: none
      aliases:
      - LEADER_ROLE
      note: LEADER_LIFECYCLE_GATE_V1 산출 — CAPTAIN | CORE_LEADER | ENABLER | CYCLICAL_BETA
        | LAGGARD | DISTRIBUTION_RISK.
    planned_order_amount_krw:
      canonical_name: planned_order_amount_krw
      type: number
      unit: KRW
      aliases:
      - PLANNED_ORDER_AMOUNT_KRW
      note: EXECUTION_CAPACITY_LADDER_V1 입력 — 계획된 주문금액.
    avg_trade_value_20d_krw:
      canonical_name: avg_trade_value_20d_krw
      type: number_or_null
      unit: KRW
      aliases:
      - AVG_TRADE_VALUE_20D_KRW
      - AvgTradeValue_20D
      note: EXECUTION_CAPACITY_LADDER_V1 입력 — 20일 평균거래대금. 미확인 시 EXECUTION_PLAN_BLOCKED.
    intraday_trade_value_krw:
      canonical_name: intraday_trade_value_krw
      type: number_or_null
      unit: KRW
      aliases:
      - INTRADAY_TRADE_VALUE_KRW
      note: EXECUTION_CAPACITY_LADDER_V1 입력 — 당일 누적 거래대금.
    orderbook_top3_depth_krw:
      canonical_name: orderbook_top3_depth_krw
      type: number_or_null
      unit: KRW
      aliases:
      - ORDERBOOK_TOP3_DEPTH_KRW
      note: EXECUTION_CAPACITY_LADDER_V1 입력 — 호가창 상위 3단계 누적 깊이.
    spread_bps:
      canonical_name: spread_bps
      type: number_or_null
      unit: basis_points
      aliases:
      - SPREAD_BPS
      note: EXECUTION_CAPACITY_LADDER_V1 입력 — 매수/매도 호가 스프레드. spread_widen_cancel_rule
        연동.
    order_capacity_krw:
      canonical_name: order_capacity_krw
      type: number_or_null
      unit: KRW
      aliases:
      - ORDER_CAPACITY_KRW
      note: EXECUTION_CAPACITY_LADDER_V1 산출 — 체결 가능 용량 상한. 결측 입력 시 null(EXECUTION_PLAN_BLOCKED).
    data_quarantine_rate_pct:
      canonical_name: data_quarantine_rate_pct
      type: number_or_null
      unit: percent
      aliases:
      - DATA_QUARANTINE_RATE_PCT
      note: MODEL_GOVERNANCE_KILL_SWITCH_V1 입력 — 결측/충돌로 quarantine된 입력 비율. >5%면 kill
        switch.
    implementation_shortfall_ratio:
      canonical_name: implementation_shortfall_ratio
      type: number_or_null
      unit: ratio
      aliases:
      - IMPLEMENTATION_SHORTFALL_RATIO
      note: MODEL_GOVERNANCE_KILL_SWITCH_V1 입력 — 실제/기대 슬리피지 비율. >2.0이면 kill switch.
    t5_hit_rate_pct:
      canonical_name: t5_hit_rate_pct
      type: number_or_null
      unit: percent
      aliases:
      - T5_HIT_RATE_PCT
      note: MODEL_GOVERNANCE_KILL_SWITCH_V1 입력 — spec/29_backtest_harness_contract.yaml:t5_op_rate
        연동.
    t5_sample_count:
      canonical_name: t5_sample_count
      type: integer
      unit: count
      aliases:
      - T5_SAMPLE_COUNT
      note: MODEL_GOVERNANCE_KILL_SWITCH_V1 입력 — t5_hit_rate_pct 표본 수. 30건 미만이면 hit_rate
        kill switch 미적용.
    calibration_error:
      canonical_name: calibration_error
      type: number_or_null
      unit: ratio
      aliases:
      - CALIBRATION_ERROR
      note: MODEL_GOVERNANCE_KILL_SWITCH_V1 입력 — spec/calibration_registry.yaml 연동.
    calibration_error_limit:
      canonical_name: calibration_error_limit
      type: number
      unit: ratio
      aliases:
      - CALIBRATION_ERROR_LIMIT
      note: MODEL_GOVERNANCE_KILL_SWITCH_V1 입력 — calibration_error 허용 상한.
    account_mdd_pct:
      canonical_name: account_mdd_pct
      type: number_or_null
      unit: percent
      aliases:
      - ACCOUNT_MDD_PCT
      note: MODEL_GOVERNANCE_KILL_SWITCH_V1 입력 — 현재 계좌 MDD.
    account_mdd_budget_pct:
      canonical_name: account_mdd_budget_pct
      type: number
      unit: percent
      aliases:
      - ACCOUNT_MDD_BUDGET_PCT
      note: MODEL_GOVERNANCE_KILL_SWITCH_V1 입력 — spec/risk/aggregate_risk.yaml MDD
        예산.
    kill_switch_triggered:
      canonical_name: kill_switch_triggered
      type: boolean
      unit: none
      aliases:
      - KILL_SWITCH_TRIGGERED
      note: MODEL_GOVERNANCE_KILL_SWITCH_V1 산출 — kill_switch_conditions 중 하나 이상 true.
    scenario_id:
      canonical_name: scenario_id
      type: string
      unit: none
      aliases:
      - SCENARIO_ID
      note: SCENARIO_SHOCK_MATRIX_V1 입력 — base_case | adverse_case | liquidity_drought_case
        | crisis_case | fx_shock_case | tax_cost_case.
    scenario_results:
      canonical_name: scenario_results
      type: list_or_null
      unit: list_of_object
      aliases:
      - SCENARIO_RESULTS
      note: SCENARIO_SHOCK_MATRIX_V1 산출 — [{scenario_id, scenario_ce70_krw, scenario_cvar95_krw}].
        분포 결측 시 null.
    evaluated_candidates:
      canonical_name: evaluated_candidates
      type: list
      unit: list_of_object
      aliases:
      - EVALUATED_CANDIDATES
      note: TRANSITION_SET_ENUMERATOR_V1 입력 — PORTFOLIO_TRANSITION_UTILITY_V1.candidate_actions
        산출물.
    max_set_size:
      canonical_name: max_set_size
      type: integer
      unit: count
      aliases:
      - MAX_SET_SIZE
      note: TRANSITION_SET_ENUMERATOR_V1 입력 — 조합 폭발 방지 상한. 기본값 3.
    selected_transition_set:
      canonical_name: selected_transition_set
      type: list
      unit: list_of_string
      aliases:
      - SELECTED_TRANSITION_SET
      note: TRANSITION_SET_ENUMERATOR_V1 산출 — 최종 선택된 candidate_id 조합. 빈 리스트면 NO_TRADE.
    decision_id:
      canonical_name: decision_id
      type: string
      unit: none
      aliases:
      - DECISION_ID
      note: IMMUTABLE_DECISION_LEDGER_V1 입력 — 동일 ID 재기록 시 DUPLICATE_DECISION_ID.
    input_hash_bundle:
      canonical_name: input_hash_bundle
      type: string
      unit: none
      aliases:
      - INPUT_HASH_BUNDLE
      note: IMMUTABLE_DECISION_LEDGER_V1 입력 — 의사결정 시점 입력 데이터 해시 묶음.
    candidate_ids:
      canonical_name: candidate_ids
      type: list
      unit: list_of_string
      aliases:
      - CANDIDATE_IDS
      note: IMMUTABLE_DECISION_LEDGER_V1 입력 — 평가 대상이 된 candidate_id 목록.
    selected_transition_id:
      canonical_name: selected_transition_id
      type: string_or_null
      unit: none
      aliases:
      - SELECTED_TRANSITION_ID
      note: IMMUTABLE_DECISION_LEDGER_V1 입력 — NO_TRADE면 null.
    ledger_append_status:
      canonical_name: ledger_append_status
      type: string
      unit: none
      aliases:
      - LEDGER_APPEND_STATUS
      note: IMMUTABLE_DECISION_LEDGER_V1 산출 — APPENDED | DUPLICATE_DECISION_ID | REJECTED_MISSING_FIELDS.
    revalidation_snapshot:
      canonical_name: revalidation_snapshot
      type: object_or_null
      unit: json
      aliases:
      - REVALIDATION_SNAPSHOT
      note: EXECUTION_PLAN_COMPILER_V1 입력 — slice 직전 시점 {cash_floor_pct, deployable_cash_krw,
        order_capacity_krw, spread_bps}.
    baseline_snapshot:
      canonical_name: baseline_snapshot
      type: object_or_null
      unit: json
      aliases:
      - BASELINE_SNAPSHOT
      note: EXECUTION_PLAN_COMPILER_V1 입력 — slice 1 컴파일 시점 스냅샷. cancel_remaining_if
        기준값.
    compiled_slices:
      canonical_name: compiled_slices
      type: list_or_null
      unit: list_of_object
      aliases:
      - COMPILED_SLICES
      note: EXECUTION_PLAN_COMPILER_V1 산출 — [{slice_index, slice_amount_krw, status}].
    cash_ladder:
      canonical_name: cash_ladder
      type: object_or_null
      unit: json
      aliases:
      - CASH_LADDER
      note: STATE_VECTOR_CONSTRUCTOR_V1 입력 — spec/formulas/domains/cash.yaml:CASH_RATIOS_V1
        산출.
    positions:
      canonical_name: positions
      type: list_or_null
      unit: list_of_object
      aliases:
      - POSITIONS
      note: STATE_VECTOR_CONSTRUCTOR_V1 입력 — spec/15_account_snapshot_contract.yaml
        보유종목 목록.
    sector_exposure_graph:
      canonical_name: sector_exposure_graph
      type: list_or_null
      unit: list_of_object
      aliases:
      - SECTOR_EXPOSURE_GRAPH
      note: STATE_VECTOR_CONSTRUCTOR_V1 입력 — SECTOR_EXPOSURE_GRAPH_V1.rows 산출.
    goal_progress_pct:
      canonical_name: goal_progress_pct
      type: number_or_null
      unit: percent
      aliases:
      - GOAL_PROGRESS_PCT
      note: STATE_VECTOR_CONSTRUCTOR_V1 입력 — total_asset_krw / target_asset_krw *
        100.
    factor_exposures:
      canonical_name: factor_exposures
      type: list_or_null
      unit: list_of_object
      aliases:
      - FACTOR_EXPOSURES
      note: STATE_VECTOR_CONSTRUCTOR_V1 입력 — spec/risk/factor_risk.yaml 연동.
    tax_lots:
      canonical_name: tax_lots
      type: list_or_null
      unit: list_of_object
      aliases:
      - TAX_LOTS
      note: STATE_VECTOR_CONSTRUCTOR_V1 입력 — spec/15_account_snapshot_contract.yaml
        연동.
    risk_bucket_weights:
      canonical_name: risk_bucket_weights
      type: object_or_null
      unit: json
      aliases:
      - RISK_BUCKET_WEIGHTS
      note: STATE_VECTOR_CONSTRUCTOR_V1 입력 — spec/risk/portfolio_exposure.yaml 연동.
    macro_regime_probabilities:
      canonical_name: macro_regime_probabilities
      type: object_or_null
      unit: json
      aliases:
      - MACRO_REGIME_PROBABILITIES
      note: STATE_VECTOR_CONSTRUCTOR_V1 입력 — spec/risk/market_risk_cash.yaml 연동.
    state_vector:
      canonical_name: state_vector
      type: object_or_null
      unit: json
      aliases:
      - STATE_VECTOR
      note: STATE_VECTOR_CONSTRUCTOR_V1 산출 — 결측 component는 null + missing_components
        기록.
    missing_components:
      canonical_name: missing_components
      type: list
      unit: list_of_string
      aliases:
      - MISSING_COMPONENTS
      note: STATE_VECTOR_CONSTRUCTOR_V1 산출 — null로 남은 component 이름 목록.
    transition_utility_after_tax_cost_krw:
      canonical_name: transition_utility_after_tax_cost_krw
      type: number_or_null
      unit: KRW
      aliases:
      - TRANSITION_UTILITY_AFTER_TAX_COST_KRW
      note: REBALANCE_CADENCE_GATE_V1 입력 — PORTFOLIO_TRANSITION_UTILITY_V1.transition_utility_krw와
        동일 출처.
    hard_risk_block_active:
      canonical_name: hard_risk_block_active
      type: boolean_or_null
      unit: none
      aliases:
      - HARD_RISK_BLOCK_ACTIVE
      note: REBALANCE_CADENCE_GATE_V1 입력 — spec/risk/aggregate_risk.yaml 연동.
    rebalance_execution_allowed:
      canonical_name: rebalance_execution_allowed
      type: boolean
      unit: none
      aliases:
      - REBALANCE_EXECUTION_ALLOWED
      note: REBALANCE_CADENCE_GATE_V1 산출 — true여야 실제 리밸런싱 실행 가능.
    historical_returns:
      canonical_name: historical_returns
      type: list_or_null
      unit: list_of_object
      aliases:
      - HISTORICAL_RETURNS
      note: WALK_FORWARD_BOOTSTRAP_V1 입력 — [{date, regime_state, net_return_after_cost_pct}].
        spec/29_backtest_harness_contract.yaml 연동.
    current_regime_state:
      canonical_name: current_regime_state
      type: string
      unit: none
      aliases:
      - CURRENT_REGIME_STATE
      note: WALK_FORWARD_BOOTSTRAP_V1 입력 — regime_matched 리샘플링 필터 기준.
    bootstrap_method:
      canonical_name: bootstrap_method
      type: string
      unit: none
      aliases:
      - BOOTSTRAP_METHOD
      note: WALK_FORWARD_BOOTSTRAP_V1 입력 — walk_forward | regime_matched.
    weekly_legacy_to_cma_transfer_plan_krw:
      canonical_name: weekly_legacy_to_cma_transfer_plan_krw
      type: number
      unit: KRW
      aliases:
      - WEEKLY_LEGACY_TO_CMA_TRANSFER_PLAN_KRW
      note: WEEKLY_LEGACY_TRANSFER_PLAN_V1 입력 — spec/risk/portfolio_exposure.yaml
        operator_cashflow_config 고정 계획값.
    transfer_confirmed:
      canonical_name: transfer_confirmed
      type: boolean_or_null
      unit: none
      aliases:
      - TRANSFER_CONFIRMED
      note: WEEKLY_LEGACY_TRANSFER_PLAN_V1 입력 — null은 false로 간주(보수적).
    transfer_confirmed_amount_krw:
      canonical_name: transfer_confirmed_amount_krw
      type: number_or_null
      unit: KRW
      aliases:
      - TRANSFER_CONFIRMED_AMOUNT_KRW
      note: WEEKLY_LEGACY_TRANSFER_PLAN_V1 입력 — transfer_confirmed=true일 때만 값 존재.
    ma20_prev:
      canonical_name: ma20_prev
      type: number_or_null
      unit: KRW_per_share
      aliases:
      - MA20_PREV
      note: GOLDEN_CROSS_SIGNAL_V1 입력 — 전일 ma20.
    ma60_prev:
      canonical_name: ma60_prev
      type: number_or_null
      unit: KRW_per_share
      aliases:
      - MA60_PREV
      note: GOLDEN_CROSS_SIGNAL_V1 입력 — 전일 ma60.
    ma120:
      canonical_name: ma120
      type: number_or_null
      unit: KRW_per_share
      aliases:
      - MA120
      - 120일선
      note: TREND_FILTER_GATE_V1 입력 — 120일 이동평균.
    ma120_prev:
      canonical_name: ma120_prev
      type: number_or_null
      unit: KRW_per_share
      aliases:
      - MA120_PREV
      note: TREND_FILTER_GATE_V1 입력 — 전일 ma120.
    high_price:
      canonical_name: high_price
      type: number
      unit: KRW_per_share
      aliases:
      - High
      - 고가
      - high
      note: STRONG_CLOSE_SIGNAL_V1 입력 — 당일 고가.
    low_price:
      canonical_name: low_price
      type: number
      unit: KRW_per_share
      aliases:
      - Low
      - 저가
      - low
      note: STRONG_CLOSE_SIGNAL_V1 입력 — 당일 저가.
    bb_width:
      canonical_name: bb_width
      type: number_or_null
      unit: percent
      aliases:
      - BB_WIDTH
      note: VOLATILITY_EXPANSION_BREAKOUT_V1 입력 — 20일 볼린저밴드 폭.
    bb_width_20d_percentile:
      canonical_name: bb_width_20d_percentile
      type: number_or_null
      unit: percent
      aliases:
      - BB_WIDTH_20D_PERCENTILE
      note: VOLATILITY_EXPANSION_BREAKOUT_V1 입력 — 최근 20일 분포 내 bb_width 백분위. 낮을수록 squeeze.
    daily_close_changes:
      canonical_name: daily_close_changes
      type: list_or_null
      unit: list_of_percent
      aliases:
      - DAILY_CLOSE_CHANGES
      note: CONSECUTIVE_STREAK_V1 입력 — 최근 N거래일 일별 종가 변화율(%) 리스트, 최신값이 마지막.
    prior_high:
      canonical_name: prior_high
      type: number_or_null
      unit: KRW_per_share
      aliases:
      - PRIOR_HIGH
      note: BREAKOUT_FAILURE_STOP_V1 입력 — 진입 당시 돌파 기준 전고점.
    golden_cross_today:
      canonical_name: golden_cross_today
      type: boolean_or_null
      unit: none
      aliases:
      - GOLDEN_CROSS_TODAY
      note: GOLDEN_CROSS_SIGNAL_V1 산출 — STRATEGY_SCORING 보조신호. 단독 BUY 트리거 금지.
    strong_close:
      canonical_name: strong_close
      type: boolean_or_null
      unit: none
      aliases:
      - STRONG_CLOSE
      note: STRONG_CLOSE_SIGNAL_V1 산출.
    close_position_pct:
      canonical_name: close_position_pct
      type: number_or_null
      unit: percent
      aliases:
      - CLOSE_POSITION_PCT
      note: STRONG_CLOSE_SIGNAL_V1 산출 — (close-low)/(high-low)*100.
    volatility_expansion_breakout:
      canonical_name: volatility_expansion_breakout
      type: boolean_or_null
      unit: none
      aliases:
      - VOLATILITY_EXPANSION_BREAKOUT
      note: VOLATILITY_EXPANSION_BREAKOUT_V1 산출 — BREAKOUT_QUALITY_GATE_V2 통과 전제.
    fifty_two_week_high_breakout:
      canonical_name: fifty_two_week_high_breakout
      type: boolean_or_null
      unit: none
      aliases:
      - FIFTY_TWO_WEEK_HIGH_BREAKOUT
      note: FIFTY_TWO_WEEK_HIGH_TRIGGER_V1 산출 — BREAKOUT_QUALITY_GATE_V2 입력 전용.
    up_streak:
      canonical_name: up_streak
      type: integer_or_null
      unit: count
      aliases:
      - UP_STREAK
      note: CONSECUTIVE_STREAK_V1 산출 — 연속 상승 일수.
    trend_filter_pass:
      canonical_name: trend_filter_pass
      type: boolean_or_null
      unit: none
      aliases:
      - TREND_FILTER_PASS
      note: TREND_FILTER_GATE_V1 산출 — close>ma120 AND ma120 상승 중.
    breakout_failure:
      canonical_name: breakout_failure
      type: boolean_or_null
      unit: none
      aliases:
      - BREAKOUT_FAILURE
      note: BREAKOUT_FAILURE_STOP_V1 산출 — true이면 SELL_RISK_EXIT_REVIEW.
    deployable_cash_contribution_krw:
      canonical_name: deployable_cash_contribution_krw
      type: number
      unit: KRW
      aliases:
      - DEPLOYABLE_CASH_CONTRIBUTION_KRW
      note: WEEKLY_LEGACY_TRANSFER_PLAN_V1 산출 — 확정 전이면 0, 확정 후 transfer_confirmed_amount_krw.
    plan_status:
      canonical_name: plan_status
      type: string
      unit: none
      aliases:
      - PLAN_STATUS
      note: WEEKLY_LEGACY_TRANSFER_PLAN_V1 산출 — PLANNED_NOT_DEPLOYABLE | CONFIRMED_DEPLOYABLE.
    ac_s1:
      canonical_name: ac_s1
      type: number
      unit: none
      aliases:
      - AC_S1
    ac_s2:
      canonical_name: ac_s2
      type: number
      unit: none
      aliases:
      - AC_S2
    ac_s3:
      canonical_name: ac_s3
      type: number
      unit: none
      aliases:
      - AC_S3
    ac_s4:
      canonical_name: ac_s4
      type: number
      unit: none
      aliases:
      - AC_S4
    ac_s5:
      canonical_name: ac_s5
      type: number
      unit: none
      aliases:
      - AC_S5
    ac_total:
      canonical_name: ac_total
      type: number
      unit: none
      aliases:
      - AC_Total
    atr20_at_entry:
      canonical_name: atr20_at_entry
      type: number
      unit: none
      aliases:
      - ATR20_At_Entry
    aum:
      canonical_name: aum
      type: number
      unit: none
      aliases:
      - AUM
    account:
      canonical_name: account
      type: integer
      unit: shares
      aliases:
      - Account
      - account
    account_avg_cost:
      canonical_name: account_avg_cost
      type: integer
      unit: shares
      aliases:
      - Account_Avg_Cost
    account_holding_qty:
      canonical_name: account_holding_qty
      type: integer
      unit: shares
      aliases:
      - Account_Holding_Qty
    account_market_value:
      canonical_name: account_market_value
      type: integer
      unit: shares
      aliases:
      - Account_Market_Value
    account_parse_status:
      canonical_name: account_parse_status
      type: integer
      unit: shares
      aliases:
      - Account_Parse_Status
    action_priority:
      canonical_name: action_priority
      type: string
      unit: none
      aliases:
      - Action_Priority
    alert:
      canonical_name: alert
      type: number
      unit: none
      aliases:
      - Alert
    alert_level:
      canonical_name: alert_level
      type: number
      unit: none
      aliases:
      - Alert_Level
    ask:
      canonical_name: ask
      type: number
      unit: none
      aliases:
      - Ask
    base_ticker:
      canonical_name: base_ticker
      type: number
      unit: none
      aliases:
      - Base_Ticker
    bid:
      canonical_name: bid
      type: number
      unit: none
      aliases:
      - Bid
    breakout_gate:
      canonical_name: breakout_gate
      type: string
      unit: none
      aliases:
      - Breakout_Gate
    breakout_score:
      canonical_name: breakout_score
      type: number
      unit: none
      aliases:
      - Breakout_Score
    c1_price:
      canonical_name: c1_price
      type: number
      unit: KRW_per_share
      aliases:
      - C1_Price
    c2_relstr:
      canonical_name: c2_relstr
      type: number
      unit: none
      aliases:
      - C2_RelStr
    c3_volsurge:
      canonical_name: c3_volsurge
      type: number
      unit: none
      aliases:
      - C3_VolSurge
    c4_flow:
      canonical_name: c4_flow
      type: number
      unit: none
      aliases:
      - C4_Flow
    c5_sector:
      canonical_name: c5_sector
      type: number
      unit: none
      aliases:
      - C5_Sector
    category:
      canonical_name: category
      type: number
      unit: none
      aliases:
      - Category
    chunk_size:
      canonical_name: chunk_size
      type: number
      unit: none
      aliases:
      - Chunk_Size
    close_at_entry:
      canonical_name: close_at_entry
      type: number
      unit: none
      aliases:
      - Close_At_Entry
    constituent_code:
      canonical_name: constituent_code
      type: number
      unit: none
      aliases:
      - Constituent_Code
    constituent_name:
      canonical_name: constituent_name
      type: number
      unit: none
      aliases:
      - Constituent_Name
    coverage_pct:
      canonical_name: coverage_pct
      type: number
      unit: percent
      aliases:
      - Coverage_Pct
    current_ratio:
      canonical_name: current_ratio
      type: number
      unit: percent
      aliases:
      - Current_Ratio
    dps:
      canonical_name: dps
      type: number
      unit: none
      aliases:
      - DPS
    data_quality:
      canonical_name: data_quality
      type: number
      unit: none
      aliases:
      - Data_Quality
    date:
      canonical_name: date
      type: date_ISO8601
      unit: none
      aliases:
      - Date
    days_to_earnings:
      canonical_name: days_to_earnings
      type: number
      unit: none
      aliases:
      - Days_To_Earnings
    days_to_ex_div:
      canonical_name: days_to_ex_div
      type: number
      unit: none
      aliases:
      - Days_To_Ex_Div
    decision_source:
      canonical_name: decision_source
      type: number
      unit: none
      aliases:
      - Decision_Source
    decision_use:
      canonical_name: decision_use
      type: number
      unit: none
      aliases:
      - Decision_Use
    dividendyield:
      canonical_name: dividendyield
      type: number
      unit: none
      aliases:
      - DividendYield
    ee_est:
      canonical_name: ee_est
      type: number
      unit: none
      aliases:
      - EE_Est
    eps_growth_1y_pct:
      canonical_name: eps_growth_1y_pct
      type: number
      unit: percent
      aliases:
      - EPS_Growth_1Y_Pct
    etf_data_status:
      canonical_name: etf_data_status
      type: string
      unit: none
      aliases:
      - ETF_Data_Status
    etf_execution_use:
      canonical_name: etf_execution_use
      type: number
      unit: none
      aliases:
      - ETF_Execution_Use
    etf_frg_5d_krw:
      canonical_name: etf_frg_5d_krw
      type: number
      unit: KRW
      aliases:
      - ETF_Frg_5D_KRW
    etf_inst_5d_krw:
      canonical_name: etf_inst_5d_krw
      type: number
      unit: KRW
      aliases:
      - ETF_Inst_5D_KRW
    etf_liquidity_score:
      canonical_name: etf_liquidity_score
      type: number
      unit: none
      aliases:
      - ETF_Liquidity_Score
    etf_liquidity_status:
      canonical_name: etf_liquidity_status
      type: string
      unit: none
      aliases:
      - ETF_Liquidity_Status
    etf_nav_risk:
      canonical_name: etf_nav_risk
      type: number
      unit: none
      aliases:
      - ETF_NAV_Risk
    etf_name:
      canonical_name: etf_name
      type: number
      unit: none
      aliases:
      - ETF_Name
    etf_ticker:
      canonical_name: etf_ticker
      type: number
      unit: none
      aliases:
      - ETF_Ticker
    earnings_date:
      canonical_name: earnings_date
      type: date_ISO8601
      unit: none
      aliases:
      - Earnings_Date
    effective_date:
      canonical_name: effective_date
      type: date_ISO8601
      unit: none
      aliases:
      - Effective_Date
    enabled:
      canonical_name: enabled
      type: number
      unit: none
      aliases:
      - Enabled
    entry_mode:
      canonical_name: entry_mode
      type: string
      unit: none
      aliases:
      - Entry_Mode
    entry_mode_reason:
      canonical_name: entry_mode_reason
      type: string
      unit: none
      aliases:
      - Entry_Mode_Reason
    entry_stage:
      canonical_name: entry_stage
      type: number
      unit: none
      aliases:
      - Entry_Stage
      - entry_stage
    event:
      canonical_name: event
      type: number
      unit: none
      aliases:
      - Event
    ex_dividend_date:
      canonical_name: ex_dividend_date
      type: date_ISO8601
      unit: none
      aliases:
      - Ex_Dividend_Date
    exit_reason:
      canonical_name: exit_reason
      type: number
      unit: none
      aliases:
      - Exit_Reason
    final_rank:
      canonical_name: final_rank
      type: number
      unit: none
      aliases:
      - Final_Rank
    flow_breadth_5d:
      canonical_name: flow_breadth_5d
      type: number
      unit: none
      aliases:
      - Flow_Breadth_5D
    follow_through_score:
      canonical_name: follow_through_score
      type: number
      unit: none
      aliases:
      - Follow_Through_Score
    impact:
      canonical_name: impact
      type: number
      unit: none
      aliases:
      - Impact
    is_etf:
      canonical_name: is_etf
      type: number
      unit: none
      aliases:
      - Is_ETF
    lp_quality_flag:
      canonical_name: lp_quality_flag
      type: number
      unit: none
      aliases:
      - LP_Quality_Flag
    leader_gate:
      canonical_name: leader_gate
      type: string
      unit: none
      aliases:
      - Leader_Gate
    leader_scan_total:
      canonical_name: leader_scan_total
      type: number
      unit: none
      aliases:
      - Leader_Scan_Total
    limit_price_est:
      canonical_name: limit_price_est
      type: number
      unit: KRW_per_share
      aliases:
      - Limit_Price_Est
    low52w:
      canonical_name: low52w
      type: number
      unit: none
      aliases:
      - Low52W
    ma20_at_entry:
      canonical_name: ma20_at_entry
      type: number
      unit: none
      aliases:
      - MA20_At_Entry
    ma60_at_entry:
      canonical_name: ma60_at_entry
      type: number
      unit: none
      aliases:
      - MA60_At_Entry
    mae_pct:
      canonical_name: mae_pct
      type: number
      unit: percent
      aliases:
      - MAE_Pct
    mfe_pct:
      canonical_name: mfe_pct
      type: number
      unit: percent
      aliases:
      - MFE_Pct
    nav:
      canonical_name: nav
      type: number
      unit: none
      aliases:
      - NAV
    nav_source:
      canonical_name: nav_source
      type: number
      unit: none
      aliases:
      - NAV_Source
    nav_source_date:
      canonical_name: nav_source_date
      type: date_ISO8601
      unit: none
      aliases:
      - NAV_Source_Date
    next_chunk_idx:
      canonical_name: next_chunk_idx
      type: number
      unit: none
      aliases:
      - Next_Chunk_Idx
    override_reason:
      canonical_name: override_reason
      type: number
      unit: none
      aliases:
      - Override_Reason
    override_sell_qty:
      canonical_name: override_sell_qty
      type: integer
      unit: shares
      aliases:
      - Override_Sell_Qty
    override_validation:
      canonical_name: override_validation
      type: number
      unit: none
      aliases:
      - Override_Validation
    pct_52w_high:
      canonical_name: pct_52w_high
      type: number
      unit: percent
      aliases:
      - Pct_52W_High
    pct_from_52w_low:
      canonical_name: pct_from_52w_low
      type: number
      unit: percent
      aliases:
      - Pct_From_52W_Low
    pnl_pct:
      canonical_name: pnl_pct
      type: number
      unit: percent
      aliases:
      - PnL_Pct
    pos_size_qty:
      canonical_name: pos_size_qty
      type: integer
      unit: shares
      aliases:
      - Pos_Size_Qty
    premium_discount_pct:
      canonical_name: premium_discount_pct
      type: integer
      unit: shares
      aliases:
      - Premium_Discount_Pct
    priority_score:
      canonical_name: priority_score
      type: number
      unit: none
      aliases:
      - Priority_Score
    processed_count:
      canonical_name: processed_count
      type: integer
      unit: shares
      aliases:
      - Processed_Count
    proxy_name:
      canonical_name: proxy_name
      type: number
      unit: none
      aliases:
      - Proxy_Name
    proxy_ticker:
      canonical_name: proxy_ticker
      type: number
      unit: none
      aliases:
      - Proxy_Ticker
    proxy_type:
      canonical_name: proxy_type
      type: number
      unit: none
      aliases:
      - Proxy_Type
    rsi14_at_entry:
      canonical_name: rsi14_at_entry
      type: number
      unit: none
      aliases:
      - RSI14_At_Entry
    rw1:
      canonical_name: rw1
      type: number
      unit: none
      aliases:
      - RW1
    rw2:
      canonical_name: rw2
      type: number
      unit: none
      aliases:
      - RW2
    rw3:
      canonical_name: rw3
      type: number
      unit: none
      aliases:
      - RW3
    rw4:
      canonical_name: rw4
      type: number
      unit: none
      aliases:
      - RW4
    rw5:
      canonical_name: rw5
      type: number
      unit: none
      aliases:
      - RW5
    rebalance_need_krw:
      canonical_name: rebalance_need_krw
      type: number
      unit: KRW
      aliases:
      - Rebalance_Need_KRW
    rebalance_target_cash_pct:
      canonical_name: rebalance_target_cash_pct
      type: number
      unit: percent
      aliases:
      - Rebalance_Target_Cash_Pct
    rebound_preservation_score:
      canonical_name: rebound_preservation_score
      type: number
      unit: none
      aliases:
      - Rebound_Preservation_Score
    record_date:
      canonical_name: record_date
      type: date_ISO8601
      unit: none
      aliases:
      - Record_Date
    ret10d:
      canonical_name: ret10d
      type: number
      unit: none
      aliases:
      - Ret10D
    ret20d:
      canonical_name: ret20d
      type: number
      unit: none
      aliases:
      - Ret20D
    ret60d:
      canonical_name: ret60d
      type: number
      unit: none
      aliases:
      - Ret60D
    rotation_score:
      canonical_name: rotation_score
      type: number
      unit: none
      aliases:
      - Rotation_Score
    rule_sell_qty:
      canonical_name: rule_sell_qty
      type: integer
      unit: shares
      aliases:
      - Rule_Sell_Qty
    sector_score:
      canonical_name: sector_score
      type: number
      unit: none
      aliases:
      - Sector_Score
    sell_conflict_state:
      canonical_name: sell_conflict_state
      type: string
      unit: none
      aliases:
      - Sell_Conflict_State
    sell_execution_window:
      canonical_name: sell_execution_window
      type: number
      unit: none
      aliases:
      - Sell_Execution_Window
    sell_limit_price:
      canonical_name: sell_limit_price
      type: number
      unit: KRW_per_share
      aliases:
      - Sell_Limit_Price
    sell_order_type:
      canonical_name: sell_order_type
      type: number
      unit: none
      aliases:
      - Sell_Order_Type
    sell_price_basis:
      canonical_name: sell_price_basis
      type: number
      unit: KRW_per_share
      aliases:
      - Sell_Price_Basis
    sell_price_source:
      canonical_name: sell_price_source
      type: number
      unit: KRW_per_share
      aliases:
      - Sell_Price_Source
    sell_qty:
      canonical_name: sell_qty
      type: integer
      unit: shares
      aliases:
      - Sell_Qty
    sell_ratio_pct:
      canonical_name: sell_ratio_pct
      type: number
      unit: percent
      aliases:
      - Sell_Ratio_Pct
    sell_reason:
      canonical_name: sell_reason
      type: number
      unit: none
      aliases:
      - Sell_Reason
    setup_decision:
      canonical_name: setup_decision
      type: number
      unit: none
      aliases:
      - Setup_Decision
    signal_date:
      canonical_name: signal_date
      type: date_ISO8601
      unit: none
      aliases:
      - Signal_Date
    smartmoney_20d_krw:
      canonical_name: smartmoney_20d_krw
      type: number
      unit: KRW
      aliases:
      - SmartMoney_20D_KRW
    smartmoney_5d_krw:
      canonical_name: smartmoney_5d_krw
      type: number
      unit: KRW
      aliases:
      - SmartMoney_5D_KRW
    snapshot_date:
      canonical_name: snapshot_date
      type: date_ISO8601
      unit: none
      aliases:
      - Snapshot_Date
    source:
      canonical_name: source
      type: number
      unit: none
      aliases:
      - Source
    source_date:
      canonical_name: source_date
      type: date_ISO8601
      unit: none
      aliases:
      - Source_Date
    source_origin:
      canonical_name: source_origin
      type: number
      unit: none
      aliases:
      - Source_Origin
    spread_pct:
      canonical_name: spread_pct
      type: number
      unit: percent
      aliases:
      - Spread_Pct
    status:
      canonical_name: status
      type: string
      unit: none
      aliases:
      - Status
    stop_price_est:
      canonical_name: stop_price_est
      type: number
      unit: KRW_per_share
      aliases:
      - Stop_Price_Est
    stop_price_source:
      canonical_name: stop_price_source
      type: number
      unit: KRW_per_share
      aliases:
      - Stop_Price_Source
    symbol:
      canonical_name: symbol
      type: number
      unit: none
      aliases:
      - Symbol
    t1_forced_sell_risk_state:
      canonical_name: t1_forced_sell_risk_state
      type: string
      unit: none
      aliases:
      - T1_Forced_Sell_Risk_State
    timing_action:
      canonical_name: timing_action
      type: string
      unit: none
      aliases:
      - Timing_Action
    timing_block_reason:
      canonical_name: timing_block_reason
      type: number
      unit: none
      aliases:
      - Timing_Block_Reason
    total_chunks:
      canonical_name: total_chunks
      type: number
      unit: none
      aliases:
      - Total_Chunks
    tracking_error:
      canonical_name: tracking_error
      type: number
      unit: none
      aliases:
      - Tracking_Error
    tradevalue_unit:
      canonical_name: tradevalue_unit
      type: number
      unit: KRW
      aliases:
      - TradeValue_Unit
    trade_id:
      canonical_name: trade_id
      type: number
      unit: none
      aliases:
      - Trade_ID
    type:
      canonical_name: type
      type: number
      unit: none
      aliases:
      - Type
    universe_count:
      canonical_name: universe_count
      type: integer
      unit: shares
      aliases:
      - Universe_Count
    updated_at:
      canonical_name: updated_at
      type: date_ISO8601
      unit: none
      aliases:
      - Updated_At
    upside_pct:
      canonical_name: upside_pct
      type: number
      unit: percent
      aliases:
      - Upside_Pct
    weight:
      canonical_name: weight
      type: number
      unit: none
      aliases:
      - Weight
    account_type:
      canonical_name: account_type
      type: integer
      unit: shares
      aliases:
      - account_type
    available_quantity:
      canonical_name: available_quantity
      type: integer
      unit: shares
      aliases:
      - available_quantity
    captured_at:
      canonical_name: captured_at
      type: number
      unit: none
      aliases:
      - captured_at
    country_code:
      canonical_name: country_code
      type: integer
      unit: shares
      aliases:
      - country_code
    estimated_withholding_tax_rate_pct:
      canonical_name: estimated_withholding_tax_rate_pct
      type: number
      unit: percent
      aliases:
      - estimated_withholding_tax_rate_pct
    foreign_currency:
      canonical_name: foreign_currency
      type: number
      unit: none
      aliases:
      - foreign_currency
    foreign_equity_flag:
      canonical_name: foreign_equity_flag
      type: number
      unit: none
      aliases:
      - foreign_equity_flag
    fx_rate_at_capture:
      canonical_name: fx_rate_at_capture
      type: number
      unit: percent
      aliases:
      - fx_rate_at_capture
    inav:
      canonical_name: inav
      type: number
      unit: none
      aliases:
      - iNAV
    krw_estimated_value:
      canonical_name: krw_estimated_value
      type: number
      unit: KRW
      aliases:
      - krw_estimated_value
    last_updated:
      canonical_name: last_updated
      type: date_ISO8601
      unit: none
      aliases:
      - last_updated
    market_value:
      canonical_name: market_value
      type: number
      unit: KRW
      aliases:
      - market_value
    monthly_contribution_limit:
      canonical_name: monthly_contribution_limit
      type: number
      unit: none
      aliases:
      - monthly_contribution_limit
    monthly_contribution_used:
      canonical_name: monthly_contribution_used
      type: number
      unit: none
      aliases:
      - monthly_contribution_used
    open_order_quantity:
      canonical_name: open_order_quantity
      type: integer
      unit: shares
      aliases:
      - open_order_quantity
    order_side:
      canonical_name: order_side
      type: number
      unit: none
      aliases:
      - order_side
    parse_status:
      canonical_name: parse_status
      type: string
      unit: none
      aliases:
      - parse_status
    remaining_contribution_capacity:
      canonical_name: remaining_contribution_capacity
      type: number
      unit: none
      aliases:
      - remaining_contribution_capacity
    return_pct:
      canonical_name: return_pct
      type: number
      unit: percent
      aliases:
      - return_pct
    ticker_or_name:
      canonical_name: ticker_or_name
      type: number
      unit: none
      aliases:
      - ticker_or_name
    total_cost:
      canonical_name: total_cost
      type: number
      unit: none
      aliases:
      - total_cost
normalization_rules:
- id: FIELD_ALIAS_CANONICALIZATION
  rule: 모든 입력은 계산 전 canonical_name으로 변환한다.
- id: KRW_100M_TO_KRW
  applies_to:
  - avg_trade_value_5d
  condition: source field suffix is _M or value labeled 억원
  transform: value * 100000000
- id: FLOW_YN_TO_BOOLEAN
  applies_to:
  - flow_ok
  transform: Y=true, N=false
- id: SHARES_INTEGER
  applies_to:
  - quantity
  - flow_rows
  transform: must be integer; decimal shares are invalid except final floor in sizing

# WBS-9.3: 데이터 품질 정책 — NULL 처리 및 자동 충전 규칙
data_quality_policy:
  version: "2026-06-22"
  purpose: "NULL 컬럼별 충전 가능성, 우선순위, 추정 금지 정책을 명시"

  null_handling_fields:
    # 우선순위 1 (필수, 자동 충전 가능)
    atr20:
      chargeability: FILLABLE
      priority: 1
      source: ATR(close, 20) 자동 계산
      estimation_forbidden: false
      fallback: 입력 거래 제외

    rsi_14:
      chargeability: FILLABLE
      priority: 1
      source: RSI(close, 14) 자동 계산
      estimation_forbidden: false
      fallback: 입력 거래 제외

    velocity_1d:
      chargeability: FILLABLE
      priority: 1
      source: (close - previous_close) / previous_close * 100
      estimation_forbidden: false
      fallback: 입력 거래 제외

    # 우선순위 2 (권장, 추정 가능)
    stop_price:
      chargeability: FILLABLE
      priority: 2
      source: ATR(close, 20) * 2.0 (기본값)
      estimation_forbidden: false
      estimation_rule: ATR20 * atr_multiplier
      fallback: 입력 거래 제외

    target_price:
      chargeability: FILLABLE
      priority: 2
      source: consensus_target 또는 ATR 기반
      estimation_forbidden: false
      estimation_rule: close * (1 + expectancy_pct)
      fallback: 입력 거래 제외

    # 우선순위 3 (선택, 추정 불가)
    rsi_15m:
      chargeability: NOT_FILLABLE
      priority: 3
      source: 인트라데이 데이터 필요 (HTS 수동 기록)
      estimation_forbidden: true
      fallback: NA로 처리, 계산 제외

    bayesian_confidence_multiplier:
      chargeability: COMPUTED
      priority: 3
      source: spec/17_performance_contract.yaml 기준 자동 계산
      estimation_forbidden: true
      fallback: 0.5 기본값 (데이터 부족 신호)

    kelly_brake_multiplier:
      chargeability: COMPUTED
      priority: 3
      source: 성과 피드백 레이어에서 자동 계산
      estimation_forbidden: true
      fallback: 1.0 (제약 없음)

  ci_gate_rules:
    - gate_id: DATA_QUALITY_NULL_CHECK
      description: 필수 필드(priority 1) NULL 검증
      trigger: GAS runDataFeed() 또는 snapshot_admin API 호출 시
      required_fields:
        - close_price
        - ticker
        - entry_price
        - stop_price
        - velocity_1d
      action_on_fail: ERROR 로그 기록, 해당 거래 SKIP
      acceptance_criteria: "100% 필드 충전"

    - gate_id: DATA_QUALITY_FILLABLE_CHECK
      description: 권장 필드(priority 2) 자동 충전
      trigger: 데이터 로드 직후
      fillable_fields:
        - atr20
        - rsi_14
        - velocity_5d
        - stop_price
        - target_price
      action_on_success: 자동 계산값 삽입
      action_on_fail: WARNING 로그, 기존값 유지
      acceptance_criteria: ">= 95% 자동 충전율"

    - gate_id: DATA_QUALITY_ESTIMATION_BLOCK
      description: 추정 금지 필드 검증
      trigger: 계산 엔진 전 1회
      forbidden_estimation_fields:
        - rsi_15m
        - kelly_brake_multiplier
        - proposal_stop_ladder
      action_on_fail: DATA_MISSING 처리, 계산 제외
      acceptance_criteria: "0% 추정율"

  automated_fill_procedures:
    - procedure_id: FILL_ATR20
      field: atr20
      condition: "atr20 IS NULL AND close_price IS NOT NULL"
      implementation: "src/quant_engine/auto_fill_atr20_v1.py"
      execution_frequency: "on_data_load"

    - procedure_id: FILL_RSI14
      field: rsi_14
      condition: "rsi_14 IS NULL AND close_price IS NOT NULL"
      implementation: "src/quant_engine/auto_fill_rsi14_v1.py"
      execution_frequency: "on_data_load"

    - procedure_id: FILL_VELOCITY_1D
      field: velocity_1d
      condition: "velocity_1d IS NULL AND (close_price AND previous_close_price) IS NOT NULL"
      implementation: "src/quant_engine/auto_fill_velocity_v1.py"
      execution_frequency: "on_data_load"

    - procedure_id: FILL_STOP_PRICE
      field: stop_price
      condition: "stop_price IS NULL AND atr20 IS NOT NULL"
      implementation: "src/quant_engine/auto_fill_stop_price_v1.py"
      execution_frequency: "on_data_load"
      parameters:
        multiplier_default: 2.0
        fallback_pct: -5.0
