/** * 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; } /** * Interface for escalation actions */ export interface EscalationAction { type: 'notify' | 'reassign' | 'auto_approve' | 'escalate_manager' | 'custom'; parameters: Record; } /** * 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; 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; } /** * 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; } export interface AssignReviewerRequest { reviewId: string; reviewerId: string; role: ReviewerRole; estimatedHours?: number; dueDate?: Date; } export interface SubmitFeedbackRequest { reviewId: string; roundNumber: number; feedback: Omit[]; 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