namespace FrameworkDAL.DTO.ContentDiscovery; // Report/Menu Discovery Layer — a distinct catalog from AMP's service/API registry (AMP catalogs // MAPI rows; this catalogs MREPORT/MREPORTVIEW/MMENU rows). Deliberately modeled on AMP's own // ApiRequestDuplicateCheck shape (AMPDAL.DTO.ApiRequestDuplicateCheck) — same scoring-and-review // pattern, reused because it's proven, NOT because reports are APIs. See the discoverability plan. public class ContentDiscoveryCheckDTO { public int CheckId { get; set; } public int TenantId { get; set; } public byte Kind { get; set; } // 0=Report (MVP scope; more kinds land in later phases) public string ProposedTitle { get; set; } = string.Empty; public string? ProposedKeywords { get; set; } public int ProposedModuleId { get; set; } public int MatchedReportId { get; set; } // -1 if no match public byte OverallScore { get; set; } public byte NameScore { get; set; } public byte ModuleScore { get; set; } public byte IntentScore { get; set; } public byte SuggestionType { get; set; } // 0=LikelyDuplicate, 1=ExtendExisting public string? SuggestedChange { get; set; } public string? MatchReason { get; set; } public byte ReviewStatus { get; set; } // 0=Pending,1=ConfirmedDuplicate,2=NotDuplicate,3=WillExtend,4=WillCreateNew public int? ReviewedById { get; set; } public DateTime? ReviewedOn { get; set; } public string? ReviewRemarks { get; set; } public DateTime CreatedOn { get; set; } } public class ContentDiscoveryCheckSaveDTO { public int CheckId { get; set; } public int TenantId { get; set; } public byte Kind { get; set; } public string ProposedTitle { get; set; } = string.Empty; public string? ProposedKeywords { get; set; } public int ProposedModuleId { get; set; } public int MatchedReportId { get; set; } public byte OverallScore { get; set; } public byte NameScore { get; set; } public byte ModuleScore { get; set; } public byte IntentScore { get; set; } public byte SuggestionType { get; set; } public string? SuggestedChange { get; set; } public string? MatchReason { get; set; } public byte ReviewStatus { get; set; } } // One row per candidate MREPORT match found by the scoring query. public class ReportSimilarityResultDTO { public int MatchedReportId { get; set; } public string MatchedReportName { get; set; } = string.Empty; public int MatchedModuleId { get; set; } public byte OverallScore { get; set; } public byte NameScore { get; set; } public byte ModuleScore { get; set; } public byte IntentScore { get; set; } }