diff --git a/services/aggregation/signal_propagation.py b/services/aggregation/signal_propagation.py index 8cd5445..9d7ebe7 100644 --- a/services/aggregation/signal_propagation.py +++ b/services/aggregation/signal_propagation.py @@ -58,10 +58,13 @@ class CompetitiveSignalRecord: # --------------------------------------------------------------------------- _COMPETITOR_LOOKUP_QUERY = """ -SELECT company_a_id, company_b_id, strength -FROM competitor_relationships -WHERE (company_a_id = $1 OR company_b_id = $1) - AND active = TRUE +SELECT cr.company_a_id, cr.company_b_id, cr.strength, + ca.ticker AS ticker_a, cb.ticker AS ticker_b +FROM competitor_relationships cr +JOIN companies ca ON ca.id = cr.company_a_id +JOIN companies cb ON cb.id = cr.company_b_id +WHERE (ca.ticker = $1 OR cb.ticker = $1) + AND cr.active = TRUE """ _INSERT_SIGNAL_QUERY = """ @@ -117,12 +120,12 @@ async def propagate_signals( # Step 2: For each competitor, query cross-company patterns for row in rows: - company_a = str(row["company_a_id"]) - company_b = str(row["company_b_id"]) + ticker_a = row["ticker_a"] + ticker_b = row["ticker_b"] rel_strength = float(row["strength"]) # Determine the competitor ticker (the other side of the relationship) - competitor_ticker = company_b if company_a == ticker else company_a + competitor_ticker = ticker_b if ticker_a == ticker else ticker_a # Threshold gating (Req 4.5) if rel_strength < cfg.propagation_strength_threshold: