schema_version: formula_domain.v1
source: C:\Temp\data_feed\spec\13_formula_registry.yaml
domain: cash
formulas:
  MARKET_RISK_SCORE_V1:
    purpose: 시장 위험 점수 MRS를 0~10으로 계산
    inputs:
    - field: vix_close
      unit: index_points
    - field: kospi_close
      unit: index_points
    - field: kospi_ma20
      unit: index_points
    - field: usd_krw
      unit: KRW_per_USD
    - field: usd_jpy_2d_change_pct
      unit: percent
    - field: credit_stress_status
      unit: none
    components:
      vix_score:
        rules:
        - if: vix_close < 18
          points: 0
        - if: 18 <= vix_close <= 25
          points: 2
        - if: 25 < vix_close <= 35
          points: 3
        - if: vix_close > 35
          points: 4
        missing_points: 4
      kospi_score:
        rules:
        - if: kospi_close >= kospi_ma20
          points: 0
        - if: kospi_close < kospi_ma20
          points: 2
        missing_points: 2
      usd_krw_score:
        rules:
        - if: usd_krw < 1400
          points: 0
        - if: 1400 <= usd_krw <= 1450
          points: 1
        - if: usd_krw > 1450
          points: 2
        missing_points: 2
      usd_jpy_score:
        rules:
        - if: usd_jpy_2d_change_pct > -1
          points: 0
        - if: usd_jpy_2d_change_pct <= -1
          points: 1
        missing_points: 1
      credit_score:
        rules:
        - if: credit_stress_status == 'none'
          points: 0
        - if: credit_stress_status in ['caution', 'stress', 'DATA_MISSING']
          points: 1
        missing_points: 1
    expression: min(10, vix_score + kospi_score + usd_krw_score + usd_jpy_score +
      credit_score)
    output:
      field: market_risk_score
      unit: points_0_10
    missing_policy: 컴포넌트별 missing_points를 적용한다.
    canonical_ref: spec/risk/market_risk_cash.yaml:risk_control.market_risk_score_based_cash
    owner: quant_team
    lifecycle_state: active
    input_fields:
    - vix_close
    - kospi_close
    - kospi_ma20
    - usd_krw
    - usd_jpy_2d_change_pct
    - credit_stress_status
    output_fields:
    - market_risk_score
    golden_cases: []
    activation_threshold:
      min_t20_sample: 30
    retirement_condition: performance_degradation
  TARGET_CASH_PCT_V1:
    purpose: MRS 기반 목표 현금비중 계산
    inputs:
    - field: market_risk_score
      unit: points_0_10
    - field: cash_floor_regime_min_pct
      unit: percent
      optional: true
    expression: max(5 + (market_risk_score / 10) * 15, cash_floor_regime_min_pct)
    output:
      field: target_cash_pct
      unit: percent
    missing_policy: market_risk_score 미산출 시 MARKET_RISK_SCORE_V1을 먼저 실행. 그래도 불가하면
      15% 및 신규매수 보류.
    canonical_ref: spec/risk/market_risk_cash.yaml:risk_control.market_risk_score_based_cash
    owner: quant_team
    lifecycle_state: active
    input_fields:
    - market_risk_score
    - cash_floor_regime_min_pct
    output_fields:
    - target_cash_pct
    golden_cases: []
    activation_threshold:
      min_t20_sample: 30
    retirement_condition: performance_degradation
  EXPECTED_EDGE_V1:
    purpose: 비용과 신뢰도 차감 후 기대우위 계산
    inputs:
    - field: target_price
      unit: KRW_per_share
    - field: entry_price
      unit: KRW_per_share
    - field: stop_price
      unit: KRW_per_share
    - field: bayesian_confidence_multiplier
      unit: ratio
    - field: execution_cost_rate
      unit: ratio
    expression: ((target_price - entry_price) / (entry_price - stop_price)) * bayesian_confidence_multiplier
      - execution_cost_rate
    output:
      field: expected_edge
      unit: ratio
    validation:
    - target_price > entry_price
    - entry_price > stop_price
    - bayesian_confidence_multiplier >= 0
    - execution_cost_rate >= 0
    gates:
    - if: expected_edge >= 1.5
      action: EDGE_PASS
    - if: expected_edge < 1.5
      action: NO_A_GRADE_NO_IMMEDIATE_BUY
    missing_policy: NO_EXPECTED_EDGE. A등급·즉시매수 금지.
    canonical_ref: spec/strategy/entry_core.yaml:entry_timing_guardrails.numeric_gates.expected_edge_floor
    owner: quant_team
    lifecycle_state: active
    input_fields:
    - target_price
    - entry_price
    - stop_price
    - bayesian_confidence_multiplier
    - execution_cost_rate
    output_fields:
    - expected_edge
    golden_cases: []
    activation_threshold:
      min_t20_sample: 30
    retirement_condition: performance_degradation
  CASH_RATIOS_V1:
    purpose: 현금비중·매수가능현금·거래 후 현금비중 계산 (D+2 정산현금 단독 기준)
    inputs:
    - field: settlement_cash
      unit: KRW
      note: '사용자 지침: D+2 정산현금만이 현금이다.'
    - field: reserved_order_amount
      unit: KRW
    - field: planned_buy_amount
      unit: KRW
    - field: sell_cash_proceeds_d2
      unit: KRW
    - field: total_asset
      unit: KRW
    outputs:
      settlement_cash_ratio: settlement_cash / total_asset * 100
      total_cash_ratio: settlement_cash / total_asset * 100
      buy_power_cash: settlement_cash - reserved_order_amount
      buy_power_ratio: (settlement_cash - reserved_order_amount) / total_asset * 100
      post_trade_total_cash_ratio: (settlement_cash - planned_buy_amount + sell_cash_proceeds_d2)
        / total_asset * 100
    output:
      field: cash_ratio_set
      unit: object
    missing_policy:
      settlement_cash: NO_CASH_CHECK
      total_asset: NO_CASH_CHECK
      reserved_order_amount: 0
      sell_cash_proceeds_d2: 0
    canonical_ref: spec/risk/portfolio_exposure.yaml:portfolio_exposure_framework.cash_floor.numeric_definitions
    owner: quant_team
    lifecycle_state: active
    input_fields:
    - settlement_cash
    - reserved_order_amount
    - planned_buy_amount
    - sell_cash_proceeds_d2
    - total_asset
    output_fields:
    - cash_ratio_set
    golden_cases: []
    activation_threshold:
      min_t20_sample: 30
    retirement_condition: performance_degradation
  TICK_NORMALIZER_V1:
    purpose: '한국 KRX 호가 단위(tick size) 기준으로 지정가를 내림 정규화. HTS에 입력 불가능한 소수점·단위 불일치 가격(예:
      144,568원, 25,886원)을 차단. 모든 주문 유형에 floor(내림) 적용 — 매수는 낮은 가격(유리), 손절·익절은 체결 확률
      우선.

      '
    applicable: 모든 지정가(매수·손절·익절·trailing_stop) 출력 전 최종 패스. HS008 강제.
    inputs:
    - field: raw_price
      unit: KRW_per_share
    tick_table:
    - condition: 0 < raw_price < 2000
      tick_size: 1
      example: 1,500원 → 1원 단위
    - condition: 2000 <= raw_price < 5000
      tick_size: 5
      example: 3,750원 → 5원 단위
    - condition: 5000 <= raw_price < 20000
      tick_size: 10
      example: 12,345원 → 10원 단위
    - condition: 20000 <= raw_price < 50000
      tick_size: 50
      example: 35,780원 → 50원 단위
    - condition: 50000 <= raw_price < 200000
      tick_size: 100
      example: 144,568원 → 100원 단위
    - condition: 200000 <= raw_price < 500000
      tick_size: 500
      example: 196,800원 → 500원 단위
    - condition: raw_price >= 500000
      tick_size: 1000
      example: 650,000원 → 1,000원 단위
    expression: floor(raw_price / tick_size) * tick_size
    output:
      field: tick_normalized_price
      unit: KRW_per_share
    examples:
    - raw_price: 144568
      tick_size: 100
      result: 144500
      note: 50만 원 미만 → 100원 단위
    - raw_price: 25886
      tick_size: 50
      result: 25850
      note: 5만 원 미만 → 50원 단위
    - raw_price: 196800
      tick_size: 500
      result: 196500
      note: 20만 원 이상 → 500원 단위
    - raw_price: 12340
      tick_size: 10
      result: 12340
      note: 이미 정규화됨 — 변경 없음
    missing_policy:
      raw_price: NO_TICK_PRICE — 해당 행 INVALID_TICK 처리
    prohibition:
    - 소수점 포함 가격을 TICK_NORMALIZER_V1 없이 플레이북에 기재 금지
    - tick_size 오산출로 500원 단위 종목에 100원 단위 적용 금지
    - 정규화 전 raw_price를 HTS 입력 가격으로 제시 금지
    canonical_ref: spec/00_execution_contract.yaml:hard_stops.HS008_TICK_NORMALIZED_REQUIRED
    version: 2026-05-18_AUDIT_RESPONSE_V2
    owner: quant_team
    lifecycle_state: active
    input_fields:
    - raw_price
    output_fields:
    - tick_normalized_price
    golden_cases: []
    activation_threshold:
      min_t20_sample: 30
    retirement_condition: performance_degradation
  SATELLITE_FAILURE_GATE_V1:
    purpose: '위성 포지션 전체 중 BROKEN/CLOSE_POSITION 비율이 임계값을 초과하면 TRIGGERED를 발동, 위성 전체
      신규매수를 자동 차단하고 정리 대상 종목을 cashPreservePlan에 자동 포함한다. 개별 종목 판단의 합산이 아닌 ''집단 실패''
      신호로 포트폴리오 전체를 방어한다.

      '
    applicable: calcApexExecutionHarness_ 내에서 포트폴리오 집계 후 실행.
    inputs:
    - field: satellite_holdings[].composite_verdict
      unit: enum
    - field: satellite_holdings[].rs_verdict
      unit: enum
    - field: satellite_holdings[].ret20d
      unit: ratio
      optional: true
    - field: satellite_holdings[].excess_ret_10d
      unit: pct
      optional: true
    trigger_conditions:
      condA: rs_verdict=BROKEN 또는 composite_verdict=CLOSE_POSITION인 위성 수 >= 3
      condB: composite_verdict IN [REDUCE_CANDIDATE, EXIT_REVIEW, CLOSE_POSITION]
        비율 >= 60%
      condC: 위성 평균 20D 수익률 <= -10% AND 평균 초과낙폭 >= 8%
      trigger: condA OR condB OR condC
    output:
      field: sfg_v1
      unit: enum [TRIGGERED, CLEAR]
      additional_fields:
      - sfg_reason: 트리거된 조건 코드
      - sfg_broken_count: BROKEN/CLOSE_POSITION 위성 수
      - sfg_failure_rate: 실패율 0.0~1.0
    sfg_action:
      TRIGGERED:
      - '모든 위성 신규 BUY: BLOCKED (rag_v1 결과 무관)'
      - 'composite_verdict=CLOSE_POSITION 위성: 매도 1순위 지정'
      - 'composite_verdict=EXIT_REVIEW 위성: rebound_wait_qty 활성화'
      CLEAR: 정상 판단 흐름 유지
    clear_conditions:
    - sfg_broken_count < 2
    - sfg_failure_rate < 0.40
    clear_conditions_note: 두 조건 모두 충족 시 TRIGGERED → CLEAR 해제. 1회 반등으로 해제 금지.
    ground_truth: harness
    llm_allowed: cite_only
    prohibition:
    - sfg_v1 = TRIGGERED 상태에서 LLM이 '이 위성은 괜찮으니 매수' 판단 금지
    - sfg_broken_count를 LLM이 직접 집계 금지 — 하네스 출력값만 인용
    - TRIGGERED 해제를 위한 조건 없이 '상황이 나아졌으니' 임의 해제 금지
    canonical_ref: spec/13_formula_registry.yaml:COMPOSITE_VERDICT_V1
    version: 2026-05-21_CLA_HARNESS_V1
    owner: quant_team
    lifecycle_state: active
    input_fields:
    - satellite_holdings[].composite_verdict
    - satellite_holdings[].rs_verdict
    - satellite_holdings[].ret20d
    - satellite_holdings[].excess_ret_10d
    output_fields:
    - sfg_v1
    missing_policy: DATA_MISSING. 계산 결과를 추정하지 않는다.
    golden_cases: []
    activation_threshold:
      min_t20_sample: 30
    retirement_condition: performance_degradation
  CASH_CREATION_PURPOSE_LOCK_V1:
    purpose: 현금 만들기 또는 위성 편입 재원 마련만을 이유로 코어/주도주 매도를 생성하지 못하게 한다.
    inputs:
    - field: composite_verdict
      unit: enum
    - field: rs_verdict
      unit: enum
    - field: brt_verdict
      unit: enum
    - field: excess_drawdown_pctp
      unit: pct_points
      optional: true
    - field: recovery_ratio_20d
      unit: ratio
      optional: true
    - field: sfg_v1
      unit: enum
      optional: true
    valid_sell_reasons:
    - composite_verdict IN [REDUCE_CANDIDATE, EXIT_REVIEW, CLOSE_POSITION]
    - stop_breach_gate = BREACH
    - rs_verdict = BROKEN 또는 brt_verdict = BROKEN
    - excess_drawdown_pctp >= 10 AND recovery_ratio_20d < 0.50
    - sfg_v1 = TRIGGERED
    invalid_sell_reasons:
    - cash_floor 미달 단독
    - 섹터/클러스터 비중 초과 단독
    - 위성 신규 편입 재원 확보
    reinvestment_gate: SAQG_V1=ELIGIBLE AND RAG_V1=PASS AND 신규 후보가 매도 후보보다 기대값 우위일
      때만 재투자 허용
    output:
      field: cash_creation_purpose_lock
      additional_fields:
      - sell_reason_validity
      - reinvestment_allowed
    ground_truth: harness
    llm_allowed: cite_only
    version: 2026-05-21_CCPL_V1
    owner: quant_team
    lifecycle_state: active
    input_fields:
    - composite_verdict
    - rs_verdict
    - brt_verdict
    - excess_drawdown_pctp
    - recovery_ratio_20d
    - sfg_v1
    output_fields:
    - cash_creation_purpose_lock
    missing_policy: DATA_MISSING. 계산 결과를 추정하지 않는다.
    golden_cases: []
    activation_threshold:
      min_t20_sample: 30
    retirement_condition: performance_degradation
  CASH_RECOVERY_OPTIMIZER_V1:
    purpose: '목표 현금 회복액에 최소 주식가치 훼손으로 도달하는 최적 매도 조합을 결정론적 산출. LLM이 "63주+24주+19주+1주"
      즉석 계산(HS011 위반) 재발 방지.

      '
    applicable: CASH_SHORTFALL_V1 및 H2 sell_priority 확정 후 실행.
    inputs:
    - field: cash_shortfall_target_krw
      unit: KRW
      note: G1 CASH_SHORTFALL_V1 확정값
    - field: cash_shortfall_min_krw
      unit: KRW
      note: G1 확정값
    - field: sell_candidates_json
      unit: list
      note: H2 regime_rank 순서
    - field: immediate_sell_qty
      unit: shares
      note: K2 산출값 또는 holding_qty
    - field: sell_limit_price
      unit: KRW_per_share
    - field: holding_qty
      unit: shares
    algorithm:
      step1: H2 regime_rank 순서로 expected_krw = immediate_sell_qty × sell_limit_price
        누적
      step2: cumulative_krw >= cash_shortfall_min_krw 도달 시 중단
      step3: shortfall 미달 시 다음 H2 순위 종목 추가
      step4: 모두 소진 후 shortfall 잔여 시 EMERGENCY 경보 + emergency_full_sell 재판정
    output:
      field: cash_recovery_plan_json
      schema:
        target_krw: KRW
        min_krw: KRW
        plan_status: enum [SUFFICIENT, PARTIAL, EMERGENCY]
        sell_sequence:
        - ticker: 종목코드
          qty: shares (정수)
          limit_price: KRW_per_share
          expected_krw: KRW
          cumulative_krw: KRW
          formula: CASH_RECOVERY_OPTIMIZER_V1
        gap_remaining_krw: KRW
    ground_truth: harness
    llm_allowed: cite_only
    prohibition:
    - LLM이 '약 N원 필요하니 X주 팔자' 즉석 계산 금지 (HS011)
    - sell_sequence[] 배열 임의 재정렬·종목 변경 금지
    - plan_status=EMERGENCY이면 K2 emergency_full_sell 재판정 없이 전량매도 지시 금지
    canonical_ref: AGENTS.md:Direction A2, G1, G2, H2
    version: 2026-05-22_3RD_HARNESS
    owner: quant_team
    lifecycle_state: active
    input_fields:
    - cash_shortfall_target_krw
    - cash_shortfall_min_krw
    - sell_candidates_json
    - immediate_sell_qty
    - sell_limit_price
    - holding_qty
    output_fields:
    - cash_recovery_plan_json
    missing_policy: DATA_MISSING. 계산 결과를 추정하지 않는다.
    golden_cases: []
    activation_threshold:
      min_t20_sample: 30
    retirement_condition: performance_degradation
  SELL_WATERFALL_ENGINE_V1:
    purpose: '"주식가치를 크게 훼손하지 않으면서 반등 시 수익까지 고려"하는 현금확보 매도 표준화. K2(50/50 분할)를 확장한 4단계
      체계. CASH_RECOVERY_OPTIMIZER_V1과 연동.

      '
    applicable: CASH_RECOVERY_OPTIMIZER_V1 직후. 현금 부족 시 자동 발동.
    inputs:
    - field: cash_recovery_plan_json
      unit: json
      note: CASH_RECOVERY_OPTIMIZER_V1 산출
    - field: emergency_full_sell
      unit: boolean
      note: K2 산출값
    - field: oversold_gate
      unit: enum
      note: K2 oversold 판정
    - field: rsi14
      unit: score
    - field: close
      unit: KRW_per_share
    - field: prev_close
      unit: KRW_per_share
    - field: atr20
      unit: KRW_per_share
    stage_logic:
      stage_4_emergency:
        condition: emergency_full_sell == true
        action: H2 최우선 종목 전량 즉시 매도 (시장가 -1tick)
        purpose: 마진콜·D+2 결제 위기 방지
      stage_1_immediate_trim:
        condition: emergency_full_sell == false
        action: H2 1순위 50% 즉시 지정가 매도
        limit_price_formula: 'prev_close - 0.3 * atr20 (OVERSOLD 구간: prev_close +
          0.5 * atr20)'
        prerequisite: SELL_PRICE_SANITY_V1 PASS 필수
      stage_2_rebound_wait:
        condition: stage_1 실행 후
        action: 나머지 50% 반등 트리거 대기
        rebound_trigger_price: prev_close + 0.5 * atr20 (tick 정규화)
        rebound_tp_price: prev_close + 1.0 * atr20 (반등 수익 포착)
        deadline: 3 영업일. 초과 시 stage_1 가격으로 자동 전환.
      stage_3_cascading_trim:
        condition: stage_1+2 후 cash_shortfall 잔여
        action: H2 2순위→3순위 순서로 stage_1/2 반복
        stop_condition: cumulative_krw >= cash_shortfall_min_krw
    output:
      field: waterfall_plan_json
      schema:
        current_stage: int 1~4
        stage_label: enum [IMMEDIATE_TRIM, REBOUND_WAIT, CASCADING_TRIM, EMERGENCY_EXIT]
        sell_sequence:
        - ticker: 종목코드
          stage: int
          qty: shares
          limit_price: KRW_per_share (stage2는 null)
          rebound_trigger_price: KRW_per_share (stage2만)
          rebound_tp_price: KRW_per_share (stage2만)
          deadline: date (stage2만)
        expected_immediate_krw: KRW
        expected_rebound_tp_krw: KRW
        total_recovery_potential_krw: KRW
    ground_truth: harness
    llm_allowed: cite_only
    prohibition:
    - waterfall_plan_json.sell_sequence 순서 임의 변경 금지
    - stage 건너뜀 금지 (stage1→stage3 직행 금지)
    - rebound_wait_qty를 '현금이 급하다'는 이유로 즉시 매도 전환 금지 (K2 연동)
    - rebound_tp_price가 있으면 HTS 주문표에 '반등 익절가' 컬럼 필수 표기
    canonical_ref: AGENTS.md:Direction C1, K2
    version: 2026-05-22_3RD_HARNESS
    owner: quant_team
    lifecycle_state: active
    input_fields:
    - cash_recovery_plan_json
    - emergency_full_sell
    - oversold_gate
    - rsi14
    - close
    - prev_close
    - atr20
    output_fields:
    - waterfall_plan_json
    missing_policy: DATA_MISSING. 계산 결과를 추정하지 않는다.
    golden_cases: []
    activation_threshold:
      min_t20_sample: 30
    retirement_condition: performance_degradation
  SMART_MONEY_LIQUIDITY_GATE_V1:
    purpose: '스마트머니·유동성 차단 게이트. SM001(외국인+기관 동시 순매도→BLOCK_BUY), SM002(5일 평균 거래대금 <
      50억→LIMIT_QUANTITY), SM003(RSI14>70 AND flow_credit<0.3→BLOCK_BUY) 결정론 구현. FINAL_JUDGMENT_GATE_V1의
      J04 입력.

      '
    output:
      file: Temp/smart_money_liquidity_gate_v1.json
    expected_outputs:
    - gate
    - coverage_pct
    - ticker_count
    llm_allowed: cite_only
    version: 2026-05-28_PHASE6
    owner: quant_team
    lifecycle_state: active
    input_fields: []
    output_fields: []
    missing_policy: DATA_MISSING. 계산 결과를 추정하지 않는다.
    golden_cases: []
    activation_threshold:
      min_t20_sample: 30
    retirement_condition: performance_degradation
  CASHFLOW_STABILITY_GATE_V1:
    purpose: 영업/잉여 현금흐름 및 회계 위험으로 현금흐름 안정성 게이트를 잠금.
    inputs:
    - field: operating_cf_krw
      unit: KRW
      optional: true
    - field: free_cf_krw
      unit: KRW
      optional: true
    - field: accrual_ratio_pct
      unit: percent
      optional: true
    output:
      field: cashflow_stability_json
    llm_allowed: cite_only
    version: 2026-05-25_PROPOSAL54
    owner: quant_team
    lifecycle_state: active
    input_fields:
    - operating_cf_krw
    - free_cf_krw
    - accrual_ratio_pct
    output_fields:
    - cashflow_stability_json
    missing_policy: DATA_MISSING. 계산 결과를 추정하지 않는다.
    golden_cases: []
    activation_threshold:
      min_t20_sample: 30
    retirement_condition: performance_degradation
  SMART_CASH_RECOVERY_V3:
    purpose: '국면별 동적 rebound_factor + 유동성 라벨(DEEP/NORMAL/THIN/FROZEN) 기반으로 선제매도 분할
      방식(exec_mode)을 결정론적으로 산출한다. 설거지·지하실 매도를 차단하고 반등 수익을 포착한다. SCRS-V2 V3 확장판.

      '
    inputs:
    - field: value_preservation_scorer_v1_json
      unit: json
    - field: scrs_v2_json
      unit: json
    - field: market_regime_state
      unit: label
    - field: macro_risk_regime
      unit: label
    - field: ATR20
      unit: KRW_per_share
    - field: AvgTradeValue_5D_M
      unit: KRW_hundred_million
    - field: Spread_Pct
      unit: percent
    output:
      field: smart_cash_recovery_v3_json
    expected_outputs:
    - gate
    - regime
    - rebound_factor_atr
    - distinct_exec_modes
    llm_allowed: cite_only
    version: 2026-05-27_PHASE1
    owner: quant_team
    lifecycle_state: active
    input_fields:
    - value_preservation_scorer_v1_json
    - scrs_v2_json
    - market_regime_state
    - macro_risk_regime
    - ATR20
    - AvgTradeValue_5D_M
    - Spread_Pct
    output_fields:
    - smart_cash_recovery_v3_json
    missing_policy: DATA_MISSING. 계산 결과를 추정하지 않는다.
    golden_cases: []
    activation_threshold:
      min_t20_sample: 30
    retirement_condition: performance_degradation
  LIQUIDITY_FLOW_SIGNAL_V1:
    purpose: 'AvgTradeValue_20D_M 기반으로 종목별 유동성을 DEEP/NORMAL/THIN/FROZEN으로 분류하고 매도
      실행 모드(MARKET_OK/LIMIT_NEAR_BID/TWAP_SPLIT/HOLD)를 결정한다.

      '
    output:
      field: liquidity_flow_signal_v1_json
    expected_outputs:
    - gate
    - label_diversity
    - row_count
    llm_allowed: cite_only
    version: 2026-05-27_PHASE3
    owner: quant_team
    lifecycle_state: active
    input_fields: []
    output_fields:
    - liquidity_flow_signal_v1_json
    missing_policy: DATA_MISSING. 계산 결과를 추정하지 않는다.
    golden_cases: []
    activation_threshold:
      min_t20_sample: 30
    retirement_condition: performance_degradation
  CASHFLOW_QUALITY_SIGNAL_V1:
    purpose: 'OCF/FCF 기반 현금흐름 안정성을 결정론적으로 라벨링한다. ROBUST/STABLE/VOLATILE/RISKY/DATA_MISSING
      라벨과 ACCOUNTING_RISK 플래그(OCF < NI 의심)를 산출한다.

      '
    output:
      field: cashflow_quality_signal_v1_json
    expected_outputs:
    - gate
    - accounting_risk_count
    - data_missing_pct
    llm_allowed: cite_only
    version: 2026-05-27_PHASE2B
    owner: quant_team
    lifecycle_state: active
    input_fields: []
    output_fields:
    - cashflow_quality_signal_v1_json
    missing_policy: DATA_MISSING. 계산 결과를 추정하지 않는다.
    golden_cases: []
    activation_threshold:
      min_t20_sample: 30
    retirement_condition: performance_degradation
  EXECUTION_METHOD_LADDER_V1:
    purpose: '매도 실행 방식 계약표. NORMAL_LIQUIDITY / HIGH_LIQUIDITY_BREACH / OVERSOLD_REBOUND
      / EMERGENCY 의 order_type, split_count, trigger_rule 을 단일 표로 고정한다. LLM은 ladder를
      재해석하지 않고 Temp/sell_execution_timing_lock_v2.json 과 Temp/sell_waterfall_engine_v2.json
      을 복사 참조만 한다.

      '
    inputs:
    - field: sell_timing_verdict
      unit: enum
    - field: sell_waterfall_gate
      unit: enum
    - field: smart_cash_recovery_gate
      unit: enum
    output:
      file: Temp/execution_method_ladder_v1.json
    expected_outputs:
    - gate
    - market_order_default_count
    - emergency_full_sell_without_flag_count
    llm_allowed: cite_only
    version: 2026-06-06_PHASE6
    owner: quant_team
    lifecycle_state: active
    input_fields:
    - sell_timing_verdict
    - sell_waterfall_gate
    - smart_cash_recovery_gate
    output_fields: []
    missing_policy: DATA_MISSING. 계산 결과를 추정하지 않는다.
    golden_cases: []
    activation_threshold:
      min_t20_sample: 30
    retirement_condition: performance_degradation
  CANONICAL_METRICS_V1:
    purpose: 'spec/25_canonical_metrics_registry.yaml에 정의된 논리 지표(cluster_pct, cash_min_required_krw
      등)를 단일 정규 원천에서 산출해 Temp/canonical_metrics_v1.json으로 제공. 렌더러가 여러 JSON 객체에서 같은
      지표를 중복 읽어 불일치 값을 출력하는 버그를 차단한다(단일 진실원천 아키텍처).

      '
    input_fields:
    - semiconductor_cluster_json.combined_pct
    - cash_recovery_display_json.min_required_krw
    - trim_plan_to_min_cash_json[].accumulated_krw
    - scrs_v2_json.selected_combo[].immediate_qty
    - prices_json[].profit_pct
    - prices_json[].stop_price
    - prices_json[].tp1_price
    - proposal_reference_json[].proposed_limit_price_krw
    - sell_quantities_json[].sell_qty
    expected_outputs:
    - metrics.cluster_pct
    - metrics.cash_min_required_krw
    - metrics.cash_reference_total_krw
    - per_ticker.scrs_immediate_qty
    - per_ticker.scrs_rebound_qty
    - per_ticker.ticker_profit_pct
    - per_ticker.ticker_stop_price
    - per_ticker.ticker_limit_price
    - per_ticker.ticker_base_qty
    - per_ticker.ticker_tp1_price
    - resolved_count
    - unresolved
    - gate
    llm_allowed: cite_only
    version: 2026-05-29_PHASE7
    owner: quant_team
    lifecycle_state: active
    output_fields: []
    missing_policy: DATA_MISSING. 계산 결과를 추정하지 않는다.
    golden_cases: []
    activation_threshold:
      min_t20_sample: 30
    retirement_condition: performance_degradation
  REGIME_CASH_UPLIFT_V1:
    purpose: '국면별 최소 현금비율 상향값을 산출해 cash floor의 하한을 정한다.

      '
    inputs:
    - field: market_regime
      unit: enum
    - field: market_risk_score
      unit: score_0_10
    output:
      field: regime_cash_uplift_min_pct
    input_fields:
    - market_regime
    - market_risk_score
    expected_outputs:
    - regime_cash_uplift_min_pct
    llm_allowed: cite_only
    version: 2026-05-30_PHASE8
    owner: quant_team
    lifecycle_state: active
    output_fields:
    - regime_cash_uplift_min_pct
    missing_policy: DATA_MISSING. 계산 결과를 추정하지 않는다.
    golden_cases: []
    activation_threshold:
      min_t20_sample: 30
    retirement_condition: performance_degradation
  CASH_FLOOR_V1:
    purpose: '목표 현금비중과 현금 부족액의 최소 기준을 확정한다.

      '
    inputs:
    - field: total_asset
      unit: KRW
    - field: settlement_cash_d2_krw
      unit: KRW
    - field: market_risk_score
      unit: score_0_10
    output:
      field: cash_floor_min_pct
    input_fields:
    - total_asset
    - settlement_cash_d2
    - market_risk_score
    expected_outputs:
    - cash_floor_min_pct
    - cash_shortfall_min_krw
    - cash_shortfall_target_krw
    llm_allowed: cite_only
    version: 2026-05-30_PHASE8
    owner: quant_team
    lifecycle_state: active
    output_fields:
    - cash_floor_min_pct
    missing_policy: DATA_MISSING. 계산 결과를 추정하지 않는다.
    golden_cases: []
    activation_threshold:
      min_t20_sample: 30
    retirement_condition: performance_degradation
  CASH_RAISE_PARETO_EXECUTOR_V2:
    purpose: '현금 확보 매도에서 파레토 최적 종목·수량 조합을 산출한다.

      '
    input_fields:
    - sell_candidates
    - cash_shortfall_krw
    - value_damage_weights
    expected_outputs:
    - pareto_sell_plan
    - cash_raise_efficiency
    llm_allowed: cite_only
    version: 2026-06-03_ORPHAN_RECONCILE
    owner: quant_team
    lifecycle_state: active
    output_fields: []
    missing_policy: DATA_MISSING. 계산 결과를 추정하지 않는다.
    golden_cases: []
    activation_threshold:
      min_t20_sample: 30
    retirement_condition: performance_degradation
  CASH_RAISE_VALUE_OPTIMIZER_V3:
    purpose: '현금확보 매도의 가치 손실을 최소화하는 종목·수량·실행방식을 결정한다.

      '
    input_fields:
    - sell_candidates
    - cash_shortfall_krw
    - rebound_potential
    expected_outputs:
    - optimized_sell_plan
    - value_damage_pct
    llm_allowed: cite_only
    version: 2026-06-03_ORPHAN_RECONCILE
    owner: quant_team
    lifecycle_state: active
    output_fields: []
    missing_policy: DATA_MISSING. 계산 결과를 추정하지 않는다.
    golden_cases: []
    activation_threshold:
      min_t20_sample: 30
    retirement_condition: performance_degradation
  CASH_RECOVERY_OPTIMIZER_V4:
    purpose: 'TRIM 우선순위·K2 분할·반등 대기를 결합해 현금 회복 실행 계획을 산출한다.

      '
    input_fields:
    - trim_candidates
    - cash_shortfall_krw
    - rebound_trigger_prices
    expected_outputs:
    - cash_recovery_plan
    - expected_recovery_krw
    llm_allowed: cite_only
    version: 2026-06-03_ORPHAN_RECONCILE
    owner: quant_team
    lifecycle_state: active
    output_fields: []
    missing_policy: DATA_MISSING. 계산 결과를 추정하지 않는다.
    golden_cases: []
    activation_threshold:
      min_t20_sample: 30
    retirement_condition: performance_degradation
  CASH_RECOVERY_V1:
    purpose: '현금 부족액 대비 단순 비례 매도 계획을 산출한다 (V4로 대체됨, 하위호환 유지).

      '
    input_fields:
    - sell_candidates
    - cash_shortfall_krw
    expected_outputs:
    - recovery_sell_qty
    - recovery_krw
    llm_allowed: cite_only
    version: 2026-06-03_ORPHAN_RECONCILE
    owner: quant_team
    lifecycle_state: active
    output_fields: []
    missing_policy: DATA_MISSING. 계산 결과를 추정하지 않는다.
    golden_cases: []
    activation_threshold:
      min_t20_sample: 30
    retirement_condition: performance_degradation
  SELL_SLIPPAGE_BUDGET_FACTOR_V1:
    purpose: 현금확보 매도 ADV 5% 참여율 한도 TWAP 분할 — 설거지·주식가치 훼손 최소화 (Direction VD1)
    agents_md_ref: 'Direction VD1: VALUE_DAMAGE_RAW_GATE_V1 — TWAP 참여율 의무'
    inputs:
    - field: adv20
      unit: KRW
      note: 20일 평균 거래대금
    - field: current_price
      unit: KRW_per_share
    - field: sell_qty
      unit: shares
    - field: emergency_full_sell
      unit: boolean
      optional: true
    expression: max_child_qty = floor(adv20 * 0.05 / current_price); n_slices = ceil(sell_qty
      / max_child_qty); participation_rate = sell_qty * current_price / adv20
    components:
      adv_participation_cap:
        value: 0.05
        unit: ratio
        calibration_status: EXPERT_PRIOR
        note: ADV 5% 초과 단일 주문은 시장충격 위험. TWAP 분할 의무.
    output:
      max_child_qty: floor(ADV20 x 0.05 / price)
      n_slices: ceil(qty / max_child_qty)
      participation_rate: qty x price / ADV20
      twap_required: participation_rate > 0.05
    hard_override:
    - condition: emergency_full_sell == true
      action: TWAP 의무 면제 — 단, hts_limit_price 산출 의무 유지
    gate:
      INVALID_SELL_NO_LIMIT: hts_limit_price=null AND emergency_full_sell!=true
      TWAP_REQUIRED: participation_rate > 0.05 AND emergency_full_sell!=true
    missing_policy: adv20 미확인 시 TWAP_REQUIRED 보수적 적용
    implementation: tools/build_value_preservation_scorer_v1.py:NF4
    calibration_ref: spec/calibration_registry.yaml:NF4 (EXPERT_PRIOR)
    version: 2026-06-04_NF4
    owner: quant_team
    lifecycle_state: active
    input_fields:
    - adv20
    - current_price
    - sell_qty
    - emergency_full_sell
    output_fields: []
    golden_cases: []
    activation_threshold:
      min_t20_sample: 30
    retirement_condition: performance_degradation
