pylord/API-BFSI
0
1from pydantic import BaseModel, EmailStr, Field2from typing import List, Dict, Any, Optional3from datetime import datetime4 5# ==================== USER SCHEMAS ====================6 7class UserCreate(BaseModel):8 full_name: str = Field(..., min_length=2, max_length=100)9 email: EmailStr10 password: str = Field(..., min_length=6, max_length=100)11 12 class Config:13 json_schema_extra = {14 "example": {15 "full_name": "John Doe",16 "email": "john.doe@example.com",17 "password": "securepass123"18 }19 }20 21 22class UserLogin(BaseModel):23 email: EmailStr24 password: str25 26 class Config:27 json_schema_extra = {28 "example": {29 "email": "john.doe@example.com",30 "password": "securepass123"31 }32 }33 34 35# ==================== PREDICTION SCHEMAS ====================36 37class PredictRequest(BaseModel):38 email: EmailStr39 customer_id: str = Field(..., min_length=1, max_length=50)40 transaction_id: str = Field(..., min_length=1, max_length=50)41 transaction_datetime: str = Field(..., pattern=r"^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$")42 transaction_amount: float = Field(..., gt=0)43 kyc_verified: int = Field(..., ge=0, le=1)44 account_age_days: int = Field(..., ge=0)45 channel_encoded: int = Field(..., ge=0, le=3)46 47 class Config:48 json_schema_extra = {49 "example": {50 "email": "john.doe@example.com",51 "customer_id": "CUST12345",52 "transaction_id": "TXN98765",53 "transaction_datetime": "2025-01-15 14:30:00",54 "transaction_amount": 75000.50,55 "kyc_verified": 1,56 "account_age_days": 180,57 "channel_encoded": 058 }59 }60 61 62class PredictResponse(BaseModel):63 status: str64 message: str65 data: Dict[str, Any]66 67 class Config:68 json_schema_extra = {69 "example": {70 "status": "success",71 "message": "Prediction completed successfully",72 "data": {73 "prediction_id": 123,74 "user": "John Doe",75 "model_risk_score": 0.7234,76 "rule_score": 0.15,77 "combined_score": 0.8734,78 "is_fraud": 1,79 "rules_triggered": ["High amount transaction (>₹100K)"],80 "derived_features": {},81 "explanation": "This transaction was flagged...",82 "timestamp": "2025-01-15T14:30:00"83 }84 }85 }86 87 88# ==================== TRANSACTION HISTORY SCHEMAS ====================89 90class Transaction(BaseModel):91 id: int92 customer_id: str93 transaction_id: str94 risk_score: float95 is_fraud: int96 derived_features: Dict[str, Any]97 explanation: str98 timestamp: str99 100 101class TransactionHistoryResponse(BaseModel):102 status: str103 message: str104 data: Dict[str, Any]105 106 class Config:107 json_schema_extra = {108 "example": {109 "status": "success",110 "message": "Found 15 transactions",111 "data": {112 "user_email": "john.doe@example.com",113 "user_name": "John Doe",114 "total_transactions": 15,115 "transactions": []116 }117 }118 }119 120 121# ==================== ANALYTICS SCHEMAS ====================122 123class KPIs(BaseModel):124 total_transactions: int125 fraud_detected: int126 accuracy_rate: float127 amount_protected: float128 129 130class FraudVsLegitimate(BaseModel):131 fraud: int132 legitimate: int133 134 135class FraudRateTrend(BaseModel):136 month: str137 fraud_rate: float138 total_transactions: int139 fraud_count: int140 141 142class AmountVsRiskScatter(BaseModel):143 transaction_amount: float144 risk_score: float145 is_fraud: int146 147 148class GraphData(BaseModel):149 fraud_vs_legitimate: Dict[str, int]150 fraud_rate_trend: List[Dict[str, Any]]151 fraud_by_channel: Dict[str, int]152 amount_vs_risk_scatter: List[Dict[str, Any]]153 154 155class AnalyticsResponse(BaseModel):156 status: str157 message: str158 data: Dict[str, Any]159 160 class Config:161 json_schema_extra = {162 "example": {163 "status": "success",164 "message": "Analytics generated successfully",165 "data": {166 "kpis": {167 "total_transactions": 1323,168 "fraud_detected": 89,169 "accuracy_rate": 93.3,170 "amount_protected": 2400000.00171 },172 "graphs": {173 "fraud_vs_legitimate": {"fraud": 89, "legitimate": 1234},174 "fraud_rate_trend": [],175 "fraud_by_channel": {},176 "amount_vs_risk_scatter": []177 }178 }179 }180 }181 182 183# ==================== METRICS SCHEMAS ====================184 185class ConfusionMatrix(BaseModel):186 true_positive: int187 false_positive: int188 true_negative: int189 false_negative: int190 191 192class FeatureImportance(BaseModel):193 feature: str194 importance: float195 196 197class PerformanceSummary(BaseModel):198 total_predictions: int199 fraud_detected: int200 false_positives: int201 false_negatives: int202 detection_rate: float203 false_positive_rate: float204 205 206class ModelMetrics(BaseModel):207 accuracy: float208 precision: float209 recall: float210 f1_score: float211 auc_roc: float212 confusion_matrix: Dict[str, int]213 214 215class MetricsResponse(BaseModel):216 status: str217 message: str218 data: Dict[str, Any]219 220 class Config:221 json_schema_extra = {222 "example": {223 "status": "success",224 "message": "Model metrics retrieved successfully",225 "data": {226 "model_name": "CatBoost Fraud Detection Model",227 "version": "1.0.0",228 "training_date": "2024-01-15",229 "metrics": {230 "accuracy": 0.933,231 "precision": 0.912,232 "recall": 0.887,233 "f1_score": 0.899,234 "auc_roc": 0.956235 }236 }237 }238 }239 240 241# ==================== BULK PREDICTION SCHEMAS ====================242 243class BulkPredictRequest(BaseModel):244 email: EmailStr245 transactions: List[Dict[str, Any]] = Field(..., min_items=1, max_items=1000)246 247 class Config:248 json_schema_extra = {249 "example": {250 "email": "user@example.com",251 "transactions": [252 {253 "customer_id": "CUST001",254 "transaction_id": "TXN001",255 "transaction_datetime": "2025-01-15 14:30:00",256 "transaction_amount": 50000,257 "kyc_verified": 1,258 "account_age_days": 180,259 "channel_encoded": 0260 }261 ]262 }263 }264 265 266class BulkPredictResult(BaseModel):267 transaction_id: str268 customer_id: str269 risk_score: float270 is_fraud: int271 rules_triggered: List[str]272 status: str # "success" or "error"273 error_message: Optional[str] = None274 275 276class BulkPredictResponse(BaseModel):277 status: str278 message: str279 data: Dict[str, Any]280 281 class Config:282 json_schema_extra = {283 "example": {284 "status": "success",285 "message": "Bulk prediction completed",286 "data": {287 "total_processed": 100,288 "successful": 98,289 "failed": 2,290 "fraud_detected": 15,291 "processing_time_seconds": 2.5,292 "results": []293 }294 }295 }