feat(quant-engine): v8.9 제안서 P0-P3 로드맵 채택 — 15개 의사결정 엔진 신규 구현
suggest/quant_investment_engine_v8_9_portfolio_optimizer_canonical_refactored.yaml의
implementation_todo_v8_9(P0~P4) 전체를 spec/tool/golden case 레벨로 구현.
- P0: PORTFOLIO_TRANSITION_UTILITY_V1, SELL_LOT_PARETO_SELECTOR_V1, FORECAST_SIMULATION_ENGINE_V1
- P1: SECTOR_EXPOSURE_GRAPH_V1/LEADER_LIFECYCLE_GATE_V1, EXECUTION_CAPACITY_LADDER_V1, MODEL_GOVERNANCE_KILL_SWITCH_V1
- P2: SCENARIO_SHOCK_MATRIX_V1, TRANSITION_SET_ENUMERATOR_V1, IMMUTABLE_DECISION_LEDGER_V1, EXECUTION_PLAN_COMPILER_V1
- P3: STATE_VECTOR_CONSTRUCTOR_V1, WALK_FORWARD_BOOTSTRAP_V1, TRANSITION_SET_ENUMERATOR_V1(MRC/CVaR 확장),
REBALANCE_CADENCE_GATE_V1, WEEKLY_LEGACY_TRANSFER_PLAN_V1
기존 regime/cluster 연동 정책 수치(현금방어선, 반도체 cap)는 그대로 유지하고 신규 cap 필드만 추가.
spec/09_decision_flow.yaml과 runtime/active_artifact_manifest.yaml에 전 엔진 배선 완료.
governance/todo/v8_9_p{0,1,2,3}_adoption_plan.yaml에 각 단계 작업 추적 기록.
검증: validate_specs/validate_golden_coverage_100(100%)/validate_calibration_registry_v1/
validate_schema_model_generation_v1/validate_agents_shrink_v1 전부 PASS. golden test 53/53 PASS.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -2189,6 +2189,502 @@ field_dictionary:
|
||||
aliases: ["Base_Qty", "base_sell_qty"]
|
||||
note: "SELL_QUANTITY_ALLOCATOR_V1 산출 기준 매도 수량. CASH_PRESERVATION_SELL_ENGINE_V2 입력."
|
||||
|
||||
# ── [2026-06-17_P0_v8_9_ADOPTION] PORTFOLIO_TRANSITION_UTILITY_V1 신규 필드 ──
|
||||
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 입력."
|
||||
|
||||
# ── [2026-06-17_P1_v8_9_ADOPTION] SECTOR_EXPOSURE_GRAPH_V1 / LEADER_LIFECYCLE_GATE_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."
|
||||
|
||||
# ── [2026-06-17_P1_v8_9_ADOPTION] EXECUTION_CAPACITY_LADDER_V1 신규 필드 ──
|
||||
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)."
|
||||
|
||||
# ── [2026-06-17_P1_v8_9_ADOPTION] MODEL_GOVERNANCE_KILL_SWITCH_V1 신규 필드 ──
|
||||
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."
|
||||
|
||||
# ── [2026-06-17_P2_v8_9_ADOPTION] SCENARIO_SHOCK_MATRIX_V1 신규 필드 ──
|
||||
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."
|
||||
|
||||
# ── [2026-06-17_P2_v8_9_ADOPTION] TRANSITION_SET_ENUMERATOR_V1 신규 필드 ──
|
||||
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."
|
||||
|
||||
# ── [2026-06-17_P2_v8_9_ADOPTION] IMMUTABLE_DECISION_LEDGER_V1 신규 필드 ──
|
||||
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."
|
||||
|
||||
# ── [2026-06-17_P2_v8_9_ADOPTION] EXECUTION_PLAN_COMPILER_V1 신규 필드 ──
|
||||
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}]."
|
||||
|
||||
# ── [2026-06-17_P3_v8_9_ADOPTION] STATE_VECTOR_CONSTRUCTOR_V1 / REBALANCE_CADENCE_GATE_V1 신규 필드 ──
|
||||
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여야 실제 리밸런싱 실행 가능."
|
||||
|
||||
# ── [2026-06-17_P3_v8_9_ADOPTION] WALK_FORWARD_BOOTSTRAP_V1 신규 필드 ──
|
||||
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."
|
||||
|
||||
# ── [2026-06-17_P3_v8_9_ADOPTION] WEEKLY_LEGACY_TRANSFER_PLAN_V1 신규 필드 ──
|
||||
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일 때만 값 존재."
|
||||
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."
|
||||
|
||||
normalization_rules:
|
||||
- id: "FIELD_ALIAS_CANONICALIZATION"
|
||||
rule: "모든 입력은 계산 전 canonical_name으로 변환한다."
|
||||
|
||||
Reference in New Issue
Block a user