namespace KmsDAL.DTO.KmDiscovery { public class KmExtractionJobDTO { public int JobId { get; set; } public int ConnectorId { get; set; } public string SourceReference { get; set; } = string.Empty; public string? ContentHash { get; set; } public int ModifiedById { get; set; } // 0 Pending, 1 Chunking, 2 Embedding, 3 Extracting, 4 CandidateReview, 5 Completed, 6 Failed public byte JobStatus { get; set; } public string? ErrorMessage { get; set; } public int ChunksTotal { get; set; } public int ChunksProcessed { get; set; } public int CandidatesCreated { get; set; } public string? CeleryTaskId { get; set; } public DateTime? StartedOn { get; set; } public DateTime? CompletedOn { get; set; } public int TenantId { get; set; } public int CreatedById { get; set; } public DateTime CreatedOn { get; set; } } public class KmCandidateDTO { public int CandidateId { get; set; } public int JobId { get; set; } public int DomainId { get; set; } public string? DomainName { get; set; } public string ProposedTitle { get; set; } = string.Empty; // 0 Concept, 1 Fact, 2 Policy, 3 Rule, 4 Process, 5 Insight, 6 Document public byte ProposedType { get; set; } public string ProposedContent { get; set; } = string.Empty; public string? ProposedTags { get; set; } public byte ProposedScopeLevel { get; set; } public decimal ConfidenceScore { get; set; } public short? SourceChunkIndex { get; set; } public string? SourceChunkText { get; set; } public string? LlmModel { get; set; } // 0 Pending, 1 Accepted, 2 Rejected, 3 Modified public byte ReviewStatus { get; set; } public int ReviewedUserId { get; set; } public DateTime? ReviewedOn { get; set; } public string? ReviewNotes { get; set; } public int ArtifactId { get; set; } public int TenantId { get; set; } public DateTime CreatedOn { get; set; } } public class KmTriggerJobDTO { public int ConnectorId { get; set; } public string SourceReference { get; set; } = string.Empty; /// Raw text to extract from, used when there's no uploaded document — gbEAI's /// KMS_EXTRACT pipeline requires either a file or source_text. File-upload triggering /// (streaming bytes from GB5's attachment store) is a documented future enhancement, not /// built here — text-paste ingestion is the v1 path. public string? SourceText { get; set; } } public class KmAcceptCandidateDTO { public int CandidateId { get; set; } public int DomainId { get; set; } public string? ModifiedTitle { get; set; } public string? ModifiedContent { get; set; } public string? ModifiedTags { get; set; } public string? ReviewNotes { get; set; } public int ArtifactId { get; set; } // set by BLL after artifact creation } public class KmRejectCandidateDTO { public int CandidateId { get; set; } public string RejectionReason { get; set; } = string.Empty; } }