@@ -173,3 +173,47 @@ def test_snapshot_date_override_and_upsert(self):
173173 assert len (rows ) == 1
174174 assert rows [0 ].date == datetime (2026 , 6 , 5 )
175175 assert float (rows [0 ].total_value ) == 2_000.0
176+
177+
178+ class TestEvaluatorPerBasketCapital :
179+ """평가 수집기의 자본 해석이 운영(바스켓별 initial_capital 레버)과 일치하는지.
180+
181+ 자기검토 2라운드 HIGH: 레버 설정 시 평가가 전역 자본으로 나누면 비용 드래그가
182+ 수 배 과대 → 거짓 FAIL_REVIEW, NAV 수익률 왜곡 — 게이트 verdict 자체가 틀어진다.
183+ """
184+
185+ def test_collector_uses_basket_initial_capital (self ):
186+ from unittest .mock import patch
187+ from core .basket_rebalancer import BasketRebalancer
188+ from core .basket_evaluation import collect_basket_paper_evaluation
189+
190+ baskets = {
191+ "cap_t" : {
192+ "enabled" : True ,
193+ "holdings" : {"005930" : 1.0 },
194+ "initial_capital" : 30_000_000 ,
195+ },
196+ }
197+ with patch .object (BasketRebalancer , "_load_baskets_config" ,
198+ return_value = baskets ):
199+ result , _ = collect_basket_paper_evaluation (
200+ basket_name = "cap_t" , include_benchmark = False ,
201+ )
202+ assert result ["metrics" ]["initial_capital" ] == 30_000_000
203+
204+ def test_collector_falls_back_to_global_capital (self ):
205+ from unittest .mock import patch
206+ from core .basket_rebalancer import BasketRebalancer
207+ from core .basket_evaluation import collect_basket_paper_evaluation
208+ from config .config_loader import Config
209+
210+ baskets = {"cap_g" : {"enabled" : True , "holdings" : {"005930" : 1.0 }}}
211+ global_cap = float (
212+ Config .get ().risk_params .get ("position_sizing" , {}).get ("initial_capital" , 10_000_000 )
213+ )
214+ with patch .object (BasketRebalancer , "_load_baskets_config" ,
215+ return_value = baskets ):
216+ result , _ = collect_basket_paper_evaluation (
217+ basket_name = "cap_g" , include_benchmark = False ,
218+ )
219+ assert result ["metrics" ]["initial_capital" ] == global_cap
0 commit comments