From 2e2efaf530f1865714b6b482219acc3bf1ec5e97 Mon Sep 17 00:00:00 2001 From: Deep Koluguri Date: Thu, 25 Jun 2026 19:40:16 -0400 Subject: [PATCH] fix(backend): restore calculateRocketScore to fix crash --- backend/src/services/scoringEngine.js | 36 +++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/backend/src/services/scoringEngine.js b/backend/src/services/scoringEngine.js index 94cfa65..7c50f10 100644 --- a/backend/src/services/scoringEngine.js +++ b/backend/src/services/scoringEngine.js @@ -191,3 +191,39 @@ export function scoreSuitability({ quote, technicals, fundamentals, regime, data }, }; } + +export function calculateRocketScore(row) { + let score = 0; + + // Premium tier (0-3 points) + if (row.premium_num >= 2000000) score += 3.0; + else if (row.premium_num >= 800000) score += 2.0; + else if (row.premium_num >= 200000) score += 1.0; + + // Net premium imbalance (-1.5 to +1.5 points) + const totalPrem = row.bull_total + row.bear_total; + if (totalPrem > 0) { + score += 1.5 * ((row.bull_total - row.bear_total) / totalPrem); + } + + // Vol > OI (1.2 points) + if (row.vol_num > row.oi_num) score += 1.2; + + // Session weight (0-1 point) + const sessionWeights = { RTH: 1.0, POST: 0.5, PRE: 0.3, OFF: 0 }; + score += sessionWeights[row.session_bucket] || 0; + + // Catalyst flag (1 point) + if (row.near_alert_type) score += 1.0; + + // OTM bias (0.8 points) + const isOTM = + (row.cp_norm === 'CALL' && row.strike_num > row.spot_num) || + (row.cp_norm === 'PUT' && row.strike_num < row.spot_num); + if (isOTM) score += 0.8; + + // Tape alignment (0.5 points) + if (row.tape_alignment === 1) score += 0.5; + + return parseFloat(score.toFixed(2)); +}