namespace IDMSDAL.DTOs; // ── engagement_signal ───────────────────────────────────────────────────────── // L table — IDENTITY PK. Only CreatedById/CreatedOn audit fields. public class EngagementSignalDTO { public int SignalId { get; set; } // 0 until inserted public int EngagementId { get; set; } public int TenantId { get; set; } public string SignalType { get; set; } = string.Empty; // ItemOverdue|ReworkAccumulation|CRRaised|CRLarge|ModulesExpanded // MultiSiteDiscovered|UATFailRate|HelpClickCount|RemoteDeliveryRisk|UnresponsiveClient public int SignalWeight { get; set; } public string? SignalDetail { get; set; } public DateTime DetectedOn { get; set; } public bool IsActive { get; set; } = true; public DateTime? ResolvedOn { get; set; } public int ResolvedById { get; set; } // -1 if unresolved // L table audit fields — CreatedById/CreatedOn only (no Modified fields) public int CreatedById { get; set; } public DateTime CreatedOn { get; set; } } // ── engagement dashboard DTO (aggregate view) ───────────────────────────────── public class EngagementDashboardDTO { public int EngagementId { get; set; } public string EngagementCode { get; set; } = string.Empty; public string EngagementName { get; set; } = string.Empty; public short Status { get; set; } public string HealthStatus { get; set; } = string.Empty; public int TotalItems { get; set; } public int CompletedItems { get; set; } public int OverdueItems { get; set; } public int PendingSignOffs { get; set; } public int ReworkCount { get; set; } public int ActiveSignals { get; set; } public int UpgradeSignalScore { get; set; } public decimal CompletionPct { get; set; } public List DomainProgress { get; set; } = new(); } public class DomainProgressDTO { public int EngagementId { get; set; } public string DomainCode { get; set; } = string.Empty; public int TotalItems { get; set; } public int CompletedItems { get; set; } public bool IsSigned { get; set; } }