/**
 * Human-in-the-Loop Document Review Types
 * Type definitions for document review and verification workflow
 */
export type ReviewStatus = 'pending_assignment' | 'assigned' | 'in_review' | 'feedback_provided' | 'approved' | 'rejected' | 'revision_requested' | 'completed';
export type ReviewerRole = 'subject_matter_expert' | 'technical_reviewer' | 'compliance_officer' | 'project_manager' | 'business_analyst' | 'quality_assurance' | 'stakeholder';
export type ReviewPriority = 'low' | 'medium' | 'high' | 'critical';
export type FeedbackType = 'content_accuracy' | 'technical_compliance' | 'formatting' | 'completeness' | 'clarity' | 'stakeholder_alignment' | 'regulatory_compliance';
export type ReviewDecision = 'approve' | 'reject' | 'request_revision';
/**
 * Interface for document review request
 */
export interface DocumentReview {
    id: string;
    documentId: string;
    documentName: string;
    documentType: string;
    documentPath: string;
    projectId: string;
    projectName: string;
    status: ReviewStatus;
    priority: ReviewPriority;
    dueDate?: Date;
    assignedReviewers: ReviewerAssignment[];
    currentReviewer?: string;
    reviewRounds: ReviewRound[];
    currentRound: number;
    createdAt: Date;
    updatedAt: Date;
    submittedAt?: Date;
    completedAt?: Date;
    metadata: {
        generationJobId?: string;
        complianceScore?: number;
        automatedChecks?: AutomatedCheckResult[];
        tags?: string[];
    };
}
/**
 * Interface for reviewer assignment
 */
export interface ReviewerAssignment {
    reviewerId: string;
    reviewerName: string;
    reviewerEmail: string;
    role: ReviewerRole;
    expertise: string[];
    assignedAt: Date;
    notifiedAt?: Date;
    acceptedAt?: Date;
    status: 'assigned' | 'accepted' | 'declined' | 'completed';
    estimatedHours?: number;
}
/**
 * Interface for review round
 */
export interface ReviewRound {
    roundNumber: number;
    startedAt: Date;
    completedAt?: Date;
    reviewerId: string;
    reviewerName: string;
    feedback: ReviewFeedback[];
    decision: ReviewDecision;
    overallComments?: string;
    qualityScore?: number;
    complianceScore?: number;
    attachments?: ReviewAttachment[];
    references?: string[];
}
/**
 * Interface for review feedback
 */
export interface ReviewFeedback {
    id: string;
    type: FeedbackType;
    severity: 'info' | 'minor' | 'major' | 'critical';
    section?: string;
    lineNumber?: number;
    title: string;
    description: string;
    suggestion?: string;
    originalText?: string;
    suggestedText?: string;
    status: 'open' | 'addressed' | 'dismissed' | 'deferred';
    addressedBy?: string;
    addressedAt?: Date;
    createdAt: Date;
    updatedAt: Date;
}
/**
 * Interface for review attachments
 */
export interface ReviewAttachment {
    id: string;
    filename: string;
    originalName: string;
    mimeType: string;
    size: number;
    uploadedBy: string;
    uploadedAt: Date;
    description?: string;
}
/**
 * Interface for automated check results
 */
export interface AutomatedCheckResult {
    checkType: string;
    checkName: string;
    status: 'passed' | 'failed' | 'warning';
    score?: number;
    details: string;
    recommendations?: string[];
    executedAt: Date;
}
/**
 * Interface for review template/criteria
 */
export interface ReviewCriteria {
    id: string;
    name: string;
    description: string;
    documentTypes: string[];
    criteria: ReviewCriterion[];
    passingScore: number;
    weightedScoring: boolean;
    createdBy: string;
    createdAt: Date;
    updatedAt: Date;
    isActive: boolean;
}
/**
 * Interface for individual review criterion
 */
export interface ReviewCriterion {
    id: string;
    name: string;
    description: string;
    category: FeedbackType;
    weight: number;
    required: boolean;
    guidelines: string;
    examples?: string[];
    maxScore: number;
    passingScore: number;
}
/**
 * Interface for reviewer profile
 */
export interface ReviewerProfile {
    id: string;
    userId: string;
    name: string;
    email: string;
    title: string;
    department: string;
    organization: string;
    roles: ReviewerRole[];
    expertise: string[];
    certifications: string[];
    experienceYears: number;
    availability: ReviewerAvailability;
    preferences: ReviewerPreferences;
    metrics: ReviewerMetrics;
    isActive: boolean;
    createdAt: Date;
    updatedAt: Date;
}
/**
 * Interface for reviewer availability
 */
export interface ReviewerAvailability {
    hoursPerWeek: number;
    timeZone: string;
    workingHours: {
        start: string;
        end: string;
    };
    workingDays: number[];
    unavailableDates: Date[];
    maxConcurrentReviews: number;
}
/**
 * Interface for reviewer preferences
 */
export interface ReviewerPreferences {
    preferredDocumentTypes: string[];
    preferredProjectTypes: string[];
    notificationPreferences: {
        email: boolean;
        inApp: boolean;
        sms: boolean;
    };
    reminderFrequency: 'none' | 'daily' | 'weekly';
}
/**
 * Interface for reviewer performance metrics
 */
export interface ReviewerMetrics {
    totalReviews: number;
    completedReviews: number;
    averageReviewTime: number;
    averageQualityScore: number;
    onTimeCompletionRate: number;
    last30DaysReviews: number;
    last30DaysAvgTime: number;
    feedbackQualityScore: number;
    thoroughnessScore: number;
    lastUpdated: Date;
}
/**
 * Interface for review workflow configuration
 */
export interface ReviewWorkflowConfig {
    id: string;
    name: string;
    description: string;
    documentTypes: string[];
    requiredRoles: ReviewerRole[];
    reviewStages: ReviewStage[];
    defaultDueDays: number;
    escalationRules: EscalationRule[];
    minimumReviewers: number;
    requiredApprovals: number;
    qualityThreshold: number;
    autoAssignment: boolean;
    autoEscalation: boolean;
    autoNotification: boolean;
    isActive: boolean;
    createdBy: string;
    createdAt: Date;
    updatedAt: Date;
}
/**
 * Interface for review stage definition
 */
export interface ReviewStage {
    stageNumber: number;
    name: string;
    description: string;
    requiredRole?: ReviewerRole;
    requiredExpertise?: string[];
    isParallel: boolean;
    isOptional: boolean;
    canSkip: boolean;
    estimatedHours: number;
    maxDays: number;
    criteria: string[];
    passingScore: number;
}
/**
 * Interface for escalation rules
 */
export interface EscalationRule {
    id: string;
    name: string;
    condition: EscalationCondition;
    action: EscalationAction;
    triggerAfterHours: number;
    reminderIntervalHours: number;
    maxReminders: number;
    escalateTo: string[];
    notificationTemplate: string;
    isActive: boolean;
}
/**
 * Interface for escalation conditions
 */
export interface EscalationCondition {
    type: 'overdue' | 'no_response' | 'quality_threshold' | 'custom';
    parameters: Record<string, any>;
}
/**
 * Interface for escalation actions
 */
export interface EscalationAction {
    type: 'notify' | 'reassign' | 'auto_approve' | 'escalate_manager' | 'custom';
    parameters: Record<string, any>;
}
/**
 * Interface for review analytics and reporting
 */
export interface ReviewAnalytics {
    period: {
        start: Date;
        end: Date;
    };
    totalReviews: number;
    completedReviews: number;
    pendingReviews: number;
    overdueReviews: number;
    averageReviewTime: number;
    onTimeCompletionRate: number;
    averageQualityScore: number;
    activeReviewers: number;
    reviewerUtilization: number;
    topPerformers: ReviewerMetrics[];
    documentTypeBreakdown: Record<string, number>;
    qualityTrends: QualityTrend[];
    commonIssues: FeedbackSummary[];
    improvementAreas: string[];
}
/**
 * Interface for quality trends
 */
export interface QualityTrend {
    date: Date;
    averageScore: number;
    reviewCount: number;
    documentType?: string;
}
/**
 * Interface for feedback summary
 */
export interface FeedbackSummary {
    type: FeedbackType;
    count: number;
    severity: 'info' | 'minor' | 'major' | 'critical';
    commonPatterns: string[];
    recommendations: string[];
}
/**
 * Interface for review notification
 */
export interface ReviewNotification {
    id: string;
    type: 'assignment' | 'reminder' | 'escalation' | 'completion' | 'feedback';
    reviewId: string;
    recipientId: string;
    title: string;
    message: string;
    actionUrl?: string;
    status: 'pending' | 'sent' | 'delivered' | 'read' | 'failed';
    sentAt?: Date;
    readAt?: Date;
    createdAt: Date;
    metadata?: Record<string, any>;
}
/**
 * Interface for review dashboard data
 */
export interface ReviewDashboard {
    userId: string;
    assignedReviews: DocumentReview[];
    pendingReviews: DocumentReview[];
    completedReviews: DocumentReview[];
    overdueReviews: DocumentReview[];
    personalMetrics: ReviewerMetrics;
    currentWorkload: number;
    upcomingDeadlines: Date[];
    unreadNotifications: ReviewNotification[];
    quickActions: QuickAction[];
}
/**
 * Interface for quick actions
 */
export interface QuickAction {
    id: string;
    type: 'review' | 'approve' | 'feedback' | 'escalate';
    title: string;
    description: string;
    url: string;
    priority: ReviewPriority;
}
/**
 * Request/Response interfaces for API
 */
export interface CreateReviewRequest {
    documentId: string;
    documentName: string;
    documentType: string;
    documentPath: string;
    projectId: string;
    priority: ReviewPriority;
    dueDate?: Date;
    requiredRoles?: ReviewerRole[];
    specificReviewers?: string[];
    workflowId?: string;
    metadata?: Record<string, any>;
}
export interface AssignReviewerRequest {
    reviewId: string;
    reviewerId: string;
    role: ReviewerRole;
    estimatedHours?: number;
    dueDate?: Date;
}
export interface SubmitFeedbackRequest {
    reviewId: string;
    roundNumber: number;
    feedback: Omit<ReviewFeedback, 'id' | 'createdAt' | 'updatedAt'>[];
    decision: ReviewDecision;
    overallComments?: string;
    qualityScore?: number;
    attachments?: File[];
}
export interface UpdateReviewStatusRequest {
    reviewId: string;
    status: ReviewStatus;
    comments?: string;
}
export interface ReviewSearchParams {
    status?: ReviewStatus[];
    priority?: ReviewPriority[];
    documentType?: string[];
    projectId?: string;
    reviewerId?: string;
    dateFrom?: Date;
    dateTo?: Date;
    limit?: number;
    offset?: number;
    sortBy?: 'createdAt' | 'dueDate' | 'priority' | 'status';
    sortOrder?: 'asc' | 'desc';
}
export interface ReviewResponse {
    review: DocumentReview;
    permissions: ReviewPermissions;
}
export interface ReviewPermissions {
    canEdit: boolean;
    canAssign: boolean;
    canApprove: boolean;
    canReject: boolean;
    canEscalate: boolean;
    canViewFeedback: boolean;
    canAddFeedback: boolean;
}
export interface ReviewListResponse {
    reviews: DocumentReview[];
    total: number;
    page: number;
    limit: number;
    hasMore: boolean;
}
export interface ReviewAnalyticsResponse {
    analytics: ReviewAnalytics;
    generatedAt: Date;
}
//# sourceMappingURL=review.d.ts.map