namespace RecruitmentDAL.DTO.Reports { // Phase 5 analytics — pipeline-conversion (funnel) report. Grain: one row per // MSELECTIONPROCESSSTAGE, ordered by StageOrder within its SelectionProcessTemplate. Small, // bounded cardinality (a template's stage count, typically single digits to low tens) — same // "no real OFFSET/FETCH needed" shape as CandidateSourceQualityDTO. public class PipelineConversionFunnelDTO { public int SelectionProcessTemplateId { get; set; } public string? TemplateName { get; set; } public int SelectionProcessStageId { get; set; } public string? StageName { get; set; } public short StageOrder { get; set; } // 1=Applied 2=Screening 3=Interview 4=Assessment 5=Offer 6=PreBoarding 7=Terminal public byte StageCategory { get; set; } // Distinct count of (non-deleted) Applications that have reached — i.e. have an // ApplicationStageHistory row for — this stage. public int ReachedCount { get; set; } // ReachedCount of the immediately preceding stage (by StageOrder) in the same template. // NULL for the first stage in a template. public int? PreviousStageReachedCount { get; set; } // ReachedCount / PreviousStageReachedCount * 100. NULL for the first stage, or when the // previous stage's ReachedCount is 0. public decimal? ConversionFromPreviousPct { get; set; } } }