from __future__ import annotations from dragon_decision_types import StrategyDecision from dragon_reason_types import DecisionReason, RuleLayer from dragon_rule_catalog import classify_aux_reason, classify_entry_reason, classify_exit_reason def _classify_reason(side: str, event_layer: str, reason: str) -> DecisionReason: if event_layer == "aux_signal": return classify_aux_reason(reason) if side == "BUY": return classify_entry_reason(reason) return classify_exit_reason(reason) class BridgeRuleLayer: layer = RuleLayer.BRIDGE def route(self, side: str, event_layer: str, reason: str) -> StrategyDecision | None: meta = _classify_reason(side, event_layer, reason) if meta.layer != self.layer: return None action = "BUY" if side == "BUY" and event_layer == "real_trade" else ( "SELL" if side == "SELL" and event_layer == "real_trade" else ( "AUX_BUY" if side == "BUY" else "AUX_SELL" ) ) return StrategyDecision( action=action, reason=meta, metadata={"orchestrated_layer": self.layer.value}, )