|  | from typing import List, Optional, Dict, Any | 
					
						
						|  | from datetime import datetime | 
					
						
						|  | from pydantic import BaseModel, Field, EmailStr, ConfigDict | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  | class CustomerBase(BaseModel): | 
					
						
						|  | model_config = ConfigDict(extra="ignore") | 
					
						
						|  |  | 
					
						
						|  | name: str | 
					
						
						|  | email: EmailStr | 
					
						
						|  | account_type: str = "Individual" | 
					
						
						|  |  | 
					
						
						|  | class CustomerCreate(CustomerBase): | 
					
						
						|  | pass | 
					
						
						|  |  | 
					
						
						|  | class Customer(CustomerBase): | 
					
						
						|  | id: str | 
					
						
						|  | dispute_count: int = 0 | 
					
						
						|  | created_at: datetime | 
					
						
						|  |  | 
					
						
						|  | model_config = ConfigDict(from_attributes=True, extra="ignore") | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  | class DisputeBase(BaseModel): | 
					
						
						|  | model_config = ConfigDict(extra="ignore") | 
					
						
						|  |  | 
					
						
						|  | customer_id: str | 
					
						
						|  | transaction_id: str | 
					
						
						|  | merchant_name: str | 
					
						
						|  | amount: float | 
					
						
						|  | description: str | 
					
						
						|  | category: str | 
					
						
						|  |  | 
					
						
						|  | class DisputeCreate(DisputeBase): | 
					
						
						|  | pass | 
					
						
						|  |  | 
					
						
						|  | class DisputeUpdate(BaseModel): | 
					
						
						|  | model_config = ConfigDict(extra="ignore") | 
					
						
						|  |  | 
					
						
						|  | status: Optional[str] = None | 
					
						
						|  | priority: Optional[int] = None | 
					
						
						|  | description: Optional[str] = None | 
					
						
						|  |  | 
					
						
						|  | class Dispute(DisputeBase): | 
					
						
						|  | id: str | 
					
						
						|  | status: str | 
					
						
						|  | priority: Optional[int] = None | 
					
						
						|  | created_at: datetime | 
					
						
						|  | resolved_at: Optional[datetime] = None | 
					
						
						|  |  | 
					
						
						|  | model_config = ConfigDict(from_attributes=True, extra="ignore") | 
					
						
						|  |  | 
					
						
						|  | class DisputeWithCustomer(Dispute): | 
					
						
						|  | customer: Customer | 
					
						
						|  |  | 
					
						
						|  | model_config = ConfigDict(from_attributes=True, extra="ignore") | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  | class NoteCreate(BaseModel): | 
					
						
						|  | model_config = ConfigDict(extra="ignore") | 
					
						
						|  |  | 
					
						
						|  | content: str | 
					
						
						|  | dispute_id: str | 
					
						
						|  |  | 
					
						
						|  | class Note(NoteCreate): | 
					
						
						|  | id: str | 
					
						
						|  | created_at: datetime | 
					
						
						|  |  | 
					
						
						|  | model_config = ConfigDict(from_attributes=True, extra="ignore") | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  | class FollowupQuestion(BaseModel): | 
					
						
						|  | model_config = ConfigDict(extra="ignore") | 
					
						
						|  |  | 
					
						
						|  | question: str | 
					
						
						|  |  | 
					
						
						|  | class ProbableSolution(BaseModel): | 
					
						
						|  | model_config = ConfigDict(extra="ignore") | 
					
						
						|  |  | 
					
						
						|  | solution: str | 
					
						
						|  | confidence: Optional[float] = None | 
					
						
						|  |  | 
					
						
						|  | class PossibleReason(BaseModel): | 
					
						
						|  | model_config = ConfigDict(extra="ignore") | 
					
						
						|  |  | 
					
						
						|  | reason: str | 
					
						
						|  | confidence: Optional[float] = None | 
					
						
						|  |  | 
					
						
						|  | class InsightCreate(BaseModel): | 
					
						
						|  | model_config = ConfigDict(extra="ignore") | 
					
						
						|  |  | 
					
						
						|  | dispute_id: str | 
					
						
						|  | priority_level: int | 
					
						
						|  | priority_reason: str | 
					
						
						|  | insights: str | 
					
						
						|  | followup_questions: List[str] | 
					
						
						|  | probable_solutions: List[str] | 
					
						
						|  | possible_reasons: List[str] | 
					
						
						|  |  | 
					
						
						|  | class Insight(InsightCreate): | 
					
						
						|  | id: str | 
					
						
						|  | created_at: datetime | 
					
						
						|  |  | 
					
						
						|  | model_config = ConfigDict(from_attributes=True, extra="ignore") | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  | class DisputeAnalysisResponse(BaseModel): | 
					
						
						|  | model_config = ConfigDict(extra="ignore") | 
					
						
						|  |  | 
					
						
						|  | dispute_id: str | 
					
						
						|  | analysis: Dict[str, Any] | 
					
						
						|  |  | 
					
						
						|  | class DashboardMetrics(BaseModel): | 
					
						
						|  | model_config = ConfigDict(extra="ignore") | 
					
						
						|  |  | 
					
						
						|  | total_disputes: int | 
					
						
						|  | high_priority_count: int | 
					
						
						|  | pending_count: int | 
					
						
						|  | resolved_today: Optional[int] = None | 
					
						
						|  | disputes_by_category: Dict[str, int] = {} | 
					
						
						|  | disputes_by_status: Dict[str, int] = {} | 
					
						
						|  | disputes_by_priority: Dict[str, int] = {} | 
					
						
						|  | average_resolution_time: Optional[str] = None | 
					
						
						|  |  | 
					
						
						|  | class Insights(BaseModel): | 
					
						
						|  | model_config = ConfigDict(from_attributes=True, extra="ignore") | 
					
						
						|  |  | 
					
						
						|  | id: str | 
					
						
						|  | dispute_id: str | 
					
						
						|  | insights: str = Field(description="Detailed insights regarding the dispute") | 
					
						
						|  | followup_questions: List[str] = Field( | 
					
						
						|  | description="List of relevant follow-up questions to gather more information" | 
					
						
						|  | ) | 
					
						
						|  | probable_solutions: List[str] = Field( | 
					
						
						|  | description="Potential solutions to address the dispute" | 
					
						
						|  | ) | 
					
						
						|  | possible_reasons: List[str] = Field( | 
					
						
						|  | description="Possible reasons that might have caused the dispute" | 
					
						
						|  | ) | 
					
						
						|  | risk_score: float = Field( | 
					
						
						|  | description="Risk score for the dispute from 0 (lowest) to 10 (highest)" | 
					
						
						|  | ) | 
					
						
						|  | risk_factors: List[str] = Field( | 
					
						
						|  | description="Factors contributing to the calculated risk score, if low risk, keep empty" | 
					
						
						|  | ) | 
					
						
						|  | priority_level: int | 
					
						
						|  | priority_reason: str | 
					
						
						|  | created_at: datetime | 
					
						
						|  | updated_at: Optional[datetime] = None | 
					
						
						|  |  | 
					
						
						|  | class InsightsCreate(BaseModel): | 
					
						
						|  | model_config = ConfigDict(extra="ignore") | 
					
						
						|  |  | 
					
						
						|  | insights: str = Field(description="Detailed insights regarding the dispute") | 
					
						
						|  | followup_questions: List[str] = Field( | 
					
						
						|  | description="List of relevant follow-up questions to gather more information" | 
					
						
						|  | ) | 
					
						
						|  | probable_solutions: List[str] = Field( | 
					
						
						|  | description="Potential solutions to address the dispute" | 
					
						
						|  | ) | 
					
						
						|  | possible_reasons: List[str] = Field( | 
					
						
						|  | description="Possible reasons that might have caused the dispute" | 
					
						
						|  | ) | 
					
						
						|  | risk_score: float = Field( | 
					
						
						|  | description="Risk score for the dispute from 0 (lowest) to 10 (highest)" | 
					
						
						|  | ) | 
					
						
						|  | risk_factors: List[str] = Field( | 
					
						
						|  | description="Factors contributing to the calculated risk score, if low risk, keep empty" | 
					
						
						|  | ) | 
					
						
						|  | priority_level: int | 
					
						
						|  | priority_reason: str | 
					
						
						|  |  |