"""期期到期结算指数:虚值 Call fill=0 不得反推成行权价。""" from __future__ import annotations from app.api.trades import _infer_settle_index def test_otm_call_zero_fill_does_not_become_strike() -> None: g = { "hedge_mode": "option_option", "option_side": "call", "option2_side": "put", "strike": 1920.0, "strike2": 1890.0, "settle_index_px": None, } fills = [ {"leg": "option", "action": "close", "fill_px": 0.0, "slip": 0}, {"leg": "option2", "action": "close", "fill_px": 0.0, "slip": 0}, ] assert _infer_settle_index(g, fills) is None def test_itm_put_fill_infers_settle_near_1875() -> None: g = { "hedge_mode": "option_option", "option_side": "call", "option2_side": "put", "strike": 1920.0, "strike2": 1920.0, "settle_index_px": None, } fills = [ {"leg": "option", "action": "close", "fill_px": 0.0, "slip": 0}, {"leg": "option2", "action": "close", "fill_px": 45.0, "slip": 0}, ] # put intrinsic 45 → settle = 1920 - 45 = 1875 assert _infer_settle_index(g, fills) == 1875.0 def test_stored_settle_wins() -> None: g = { "option_side": "call", "strike": 1920.0, "settle_index_px": 1875.2, } fills = [{"leg": "option", "action": "close", "fill_px": 0.0, "slip": 0}] assert _infer_settle_index(g, fills) == 1875.2