using System.Threading; using System.Threading.Tasks; using FinlyticCore.Dtos.Fundamentals; using FinlyticCore.Dtos.Sentiment; using FinlyticCore.Dtos.TechnicalAnalysis; namespace FinlyticEngine.Services.Scoring; public record ScoringResult( decimal CompositeScore, decimal TechnicalScore, decimal SentimentScore, decimal FundamentalScore, bool PassedEarningsLockout, int? DaysToNextEarnings, decimal ReliabilityBonus = 0m, bool PassedSimulationVeto = true, bool PassedDividendGate = true, int? DaysToNextExDividend = null ); public interface ICompositeOpportunityScorer { Task CalculateCompositeScoreAsync( StrategyResultDto setup, IsinSentimentSummaryDto? sentiment, AssetFundamentalsDto? fundamentals, FinlyticCore.Dtos.Simulation.StrategyAssetReliabilityDto? reliability = null, CancellationToken cancellationToken = default); }