import type { ConversationClassificationDimension } from './ClassificationTaxonomy'; export type ConversationRelationshipType = 'new_contact' | 'acknowledgement' | 'continuation' | 'recontact_same_issue' | 'uncertain'; export type ConversationClassificationEvaluationStatus = 'pending' | 'running' | 'completed' | 'failed' | 'skipped'; export type ClassificationSeverity = 'low' | 'medium' | 'high' | 'critical'; export type ClassificationFindingSource = 'ai' | 'system_rule' | 'manual_override'; /** * Result of evaluating one resolved conversation against one published taxonomy version. * The unique business key is spaceId + conversationId + conversationVersion + taxonomyVersion. */ export interface ConversationClassificationEvaluation { id?: string; spaceId: string; conversationId: string; analyticalCaseId: string; conversationVersion: number; contactId?: string; resolvedAt: Date; taxonomyId: string; taxonomyVersion: number; status: ConversationClassificationEvaluationStatus; relationship: ConversationAnalyticalRelationship; findings: ConversationClassificationFinding[]; processor?: ConversationClassificationProcessor; idempotencyKey: string; errorCode?: string; errorMessage?: string; createdAt: Date; updatedAt: Date; startedAt?: Date; completedAt?: Date; } /** * Groups operational conversations into an analytical case without modifying Conversation. * For a new contact analyticalCaseId is normally the current conversationId. */ export interface ConversationAnalyticalRelationship { analyticalCaseId: string; parentConversationId?: string; type: ConversationRelationshipType; isNewContact: boolean; confidence: number; summary?: string; evidenceMessageIds: string[]; } export interface ConversationClassificationFinding { id: string; dimension: ConversationClassificationDimension; categoryId: string; categoryName: string; subcategoryId?: string; subcategoryName?: string; primary: boolean; severity?: ClassificationSeverity; confidence: number; summary?: string; evidenceMessageIds: string[]; source: ClassificationFindingSource; } export interface ConversationClassificationProcessor { provider: string; model: string; promptVersion: string; runId?: string; durationMs?: number; inputTokens?: number; outputTokens?: number; }