using Predictalytics.Domain.Enums;
namespace Predictalytics.Domain.ValueObjects;
///
/// Encapsulates a trader's calculated priority score with all component scores.
///
public record PriorityScore(
decimal ActivityScore,
decimal QualityScore,
decimal VolumeScore,
decimal TimingScore,
decimal CombinedScore,
int? ManualOverride = null
)
{
///
/// The effective score, considering any manual override.
///
public decimal EffectiveScore => ManualOverride.HasValue
? ManualOverride.Value
: CombinedScore;
///
/// Determine tier based on effective score.
/// To reach Diamond, the score must be exceptionally high (top 1%).
///
public TraderTier DetermineTier() => EffectiveScore switch
{
>= 95 => TraderTier.Diamond,
>= 85 => TraderTier.Platinum,
>= 70 => TraderTier.Gold,
>= 50 => TraderTier.Silver,
>= 30 => TraderTier.Bronze,
_ => TraderTier.Unknown
};
}