namespace AnalyticsDAL.DTO.KPIEvaluation { // The read shape for GetKPIValues -- a fast list read off the TKPIVALUE snapshot posted by // KPIPostingBLL, not a compute-on-read result. ActualValue/TargetValue come from whichever // source applies to the KPI's own ActualType: TKPIVALUE for ActualType 0/3 (posted), TKPIMANUAL // for ActualType 2 (manual entry, never posted). Exactly one of the two pairs is populated per // row; IsComputable distinguishes "posted but genuinely non-calculable this period" (divide by // zero) from "not yet posted at all" for the caller. public class KpiValueResultDTO { public int KPIId { get; set; } public string KPIName { get; set; } = string.Empty; public string? Section { get; set; } public decimal? ActualValue { get; set; } public decimal? TargetValue { get; set; } public byte? Trend { get; set; } public double? Score { get; set; } public byte? Color { get; set; } public bool IsComputable { get; set; } } }