import { ScoringRules } from '../config/ScoringConfig.js'; import { MarketRegime } from '../market/MarketRegime.js'; import { SCORE_MODE } from '../config/constants.js'; export const RuleMerger = { getRulesForAsset(type, metrics, marketContext = {}, mode = SCORE_MODE.FUNDAMENTAL) { const base = ScoringRules[type]; if (!base) throw new Error(`No rules configured for asset type: ${type}`); let rules = JSON.parse(JSON.stringify(base)); if (type === 'STOCK' && metrics.sector) { const override = base.SECTOR_OVERRIDE?.[metrics.sector.toUpperCase()]; if (override) { rules.gates = { ...rules.gates, ...override.gates }; rules.weights = { ...rules.weights, ...override.weights }; rules.thresholds = { ...rules.thresholds, ...override.thresholds }; } } delete rules.SECTOR_OVERRIDE; if (mode === SCORE_MODE.INFLATED) { const { gates, thresholds } = new MarketRegime(marketContext).getInflatedOverrides( type, metrics.sector, ); rules.gates = { ...rules.gates, ...gates }; rules.thresholds = { ...rules.thresholds, ...thresholds }; } return rules; }, };