namespace CRMSalesDAL.DTO.LeadScoringConfig;
///
/// SalesMind AI Lead Scoring settings (MLEADSCORINGCONFIG) — a small, effectively
/// single-row-per-tenant settings entity (same shape/precedent as Marketing's
/// BusinessAspirationGoalDTO). No "only one row" enforcement is added here deliberately — that's
/// a UI/usage convention, not a DB constraint, matching that precedent exactly.
///
/// The 4 weights must sum to 100 (validated in LeadScoringConfigBLL) — defaults 25/30/25/20 per
/// the reference material's 4 scoring dimensions (Demographic Fit / Behavioral Signals /
/// Engagement Level / Deal Readiness). Only Demographic Fit and Deal Readiness have a real data
/// source today; LeadScoringBLL.RecalculateLeadScoreAsync renormalizes across just those two —
/// see that method's doc comment for the exact renormalization rule.
///
public class LeadScoringConfigDTO
{
#region LeadScoringConfig
public int LeadScoringConfigId { get; set; }
public string LeadScoringConfigCode { get; set; } = string.Empty;
public string LeadScoringConfigName { get; set; } = string.Empty;
/// Real dimension — see LeadScoringBLL.ComputeDemographicFitScore.
public decimal DemographicFitWeightPercent { get; set; }
/// DEFERRED dimension — no website-visit/content-download tracking exists in this
/// codebase yet. Configurable so the weight is ready once a real signal source lands, but
/// LeadScoringBLL contributes 0 for it today (see that method's doc comment).
public decimal BehavioralSignalsWeightPercent { get; set; }
/// DEFERRED dimension — depends on Interaction Journal, a future SalesMind pass not
/// built yet. Same treatment as BehavioralSignalsWeightPercent.
public decimal EngagementLevelWeightPercent { get; set; }
/// Real dimension — see LeadScoringBLL.ComputeDealReadinessScore.
public decimal DealReadinessWeightPercent { get; set; }
public string? Remarks { get; set; }
#endregion
#region Base
public int CreatedById { get; set; }
public DateTime CreatedOn { get; set; }
public string? CreatedByName { get; set; }
public int ModifiedById { get; set; }
public DateTime ModifiedOn { get; set; }
public string? ModifiedByName { get; set; }
#endregion
#region Standard
public short SortOrder { get; set; }
public byte Status { get; set; }
public short Version { get; set; }
public int TenantId { get; set; }
#endregion
}