from pydantic import BaseModel, Field from typing import List, Optional, Dict, Any from datetime import datetime from enum import Enum class DocumentType(str, Enum): RENTAL = "rental" LOAN = "loan" EMPLOYMENT = "employment" SERVICE = "service" NDA = "nda" OTHER = "other" class RiskLevel(str, Enum): LOW = "low" MEDIUM = "medium" HIGH = "high" CRITICAL = "critical" class RiskCategory(str, Enum): FINANCIAL = "financial" COMMITMENT = "commitment" RIGHTS = "rights" STANDARD = "standard" class ClausePosition(BaseModel): start_index: int end_index: int page_number: Optional[int] = None class RiskFactor(BaseModel): id: str clause_text: str category: RiskCategory severity: RiskLevel explanation: str suggestion: Optional[str] = None position: Optional[ClausePosition] = None class DocumentAnalysis(BaseModel): document_id: str document_type: DocumentType risk_score: int = Field(ge=0, le=100) summary: str simplified_text: str risk_factors: List[RiskFactor] = [] key_dates: List[Dict[str, Any]] = [] financial_terms: Dict[str, Any] = {} created_at: datetime = Field(default_factory=datetime.now) class Document(BaseModel): id: str filename: str file_path: str document_type: Optional[DocumentType] = None file_size: int upload_timestamp: datetime = Field(default_factory=datetime.now) analysis: Optional[DocumentAnalysis] = None processed: bool = False class QASession(BaseModel): id: str document_id: str question: str answer: str timestamp: datetime = Field(default_factory=datetime.now) confidence_score: Optional[float] = None class SimplificationRequest(BaseModel): text: str context: Optional[str] = None document_type: Optional[DocumentType] = None class SimplificationResponse(BaseModel): original_text: str simplified_text: str key_points: List[str] = [] jargon_definitions: Dict[str, str] = {}