""" Centralized Constants and Configuration Eliminates magic numbers and hardcoding throughout the codebase """ # ============================================================================ # SYSTEM CONSTANTS # ============================================================================ # File and Data Limits MAX_UPLOAD_SIZE = 10 * 1024 * 1024 # 10MB DEFAULT_MAX_PROCESS_SIZE = 50 * 1024 * 1024 # 50MB MAX_FILE_NAME_LENGTH = 255 MAX_TEXT_CONTENT_LENGTH = 10 * 1024 * 1024 # 10MB for text processing # Performance Thresholds DEFAULT_TIMEOUT_SECONDS = 30 API_REQUEST_TIMEOUT = 10 DATABASE_CONNECTION_TIMEOUT = 5 FILE_PROCESSING_TIMEOUT = 60 # Caching Configuration PLUGIN_CACHE_TTL = 3600 # 1 hour SESSION_CACHE_TTL = 1800 # 30 minutes DATA_CACHE_TTL = 300 # 5 minutes RESULT_CACHE_TTL = 600 # 10 minutes # ============================================================================ # FRAUD DETECTION CONSTANTS # ============================================================================ # Risk Scoring (0-100 scale) RISK_SCORE_LOW = 25 RISK_SCORE_MEDIUM = 50 RISK_SCORE_HIGH = 75 RISK_SCORE_CRITICAL = 90 # Structuring Detection STRUCTURING_THRESHOLD = 10000 # $10,000 USD STRUCTURING_WINDOW_HOURS = 24 STRUCTURING_MIN_TRANSACTIONS = 2 # Velocity Analysis VELOCITY_MAX_TRANSACTIONS = 10 VELOCITY_WINDOW_MINUTES = 60 VELOCITY_RISK_MULTIPLIER = 5 # Geographic Risk HIGH_RISK_COUNTRIES = [ "IR", "KP", "CU", "SY", "VE", "AF", "IQ", "LY", "SD", "YE", "SO", "MM", ] # ============================================================================ # AI/ML CONSTANTS # ============================================================================ # Model Confidence Thresholds MIN_CONFIDENCE_THRESHOLD = 0.5 HIGH_CONFIDENCE_THRESHOLD = 0.8 CRITICAL_CONFIDENCE_THRESHOLD = 0.95 # Processing Limits MAX_AI_PROCESSING_TIME = 300 # 5 minutes MAX_BATCH_SIZE = 100 MAX_CONCURRENT_AI_REQUESTS = 5 # Quality Scores OCR_QUALITY_THRESHOLD = 0.7 FORGERY_DETECTION_THRESHOLD = 0.85 FACE_RECOGNITION_THRESHOLD = 0.8 # ============================================================================ # EVIDENCE PROCESSING CONSTANTS # ============================================================================ # File Type Categories SUPPORTED_IMAGE_TYPES = ["jpg", "jpeg", "png", "bmp", "tiff", "webp"] SUPPORTED_VIDEO_TYPES = ["mp4", "avi", "mov", "mkv", "webm"] SUPPORTED_DOCUMENT_TYPES = ["pdf", "doc", "docx", "txt", "rtf"] SUPPORTED_AUDIO_TYPES = ["mp3", "wav", "flac", "aac", "ogg"] # Processing Quality Thresholds MIN_IMAGE_RESOLUTION = 100 # pixels MIN_VIDEO_DURATION = 1 # second MAX_FILE_SIZE_FOR_OCR = 10 * 1024 * 1024 # 10MB MAX_TEXT_EXTRACTION_LENGTH = 100000 # characters # Forensic Analysis ELA_THRESHOLD = 15 # Error Level Analysis threshold MANIPULATION_THRESHOLD = 10 # Image manipulation detection COMPRESSION_ARTIFACT_THRESHOLD = 50 BLUR_DETECTION_THRESHOLD = 100 # ============================================================================ # API AND NETWORKING CONSTANTS # ============================================================================ # HTTP Status Codes (for reference) HTTP_OK = 200 HTTP_CREATED = 201 HTTP_BAD_REQUEST = 400 HTTP_UNAUTHORIZED = 401 HTTP_FORBIDDEN = 403 HTTP_NOT_FOUND = 404 HTTP_CONFLICT = 409 HTTP_UNPROCESSABLE_ENTITY = 422 HTTP_TOO_MANY_REQUESTS = 429 HTTP_INTERNAL_SERVER_ERROR = 500 HTTP_SERVICE_UNAVAILABLE = 503 # Rate Limiting DEFAULT_RATE_LIMIT_REQUESTS = 100 DEFAULT_RATE_LIMIT_WINDOW = 60 # seconds API_RATE_LIMIT_REQUESTS = 1000 API_RATE_LIMIT_WINDOW = 60 # Pagination DEFAULT_PAGE_SIZE = 50 MAX_PAGE_SIZE = 1000 MIN_PAGE_SIZE = 10 # ============================================================================ # SECURITY CONSTANTS # ============================================================================ # Password Requirements MIN_PASSWORD_LENGTH = 8 MAX_PASSWORD_LENGTH = 128 PASSWORD_COMPLEXITY_REQUIREMENTS = { "uppercase": True, "lowercase": True, "digits": True, "special_chars": True, } # JWT Configuration JWT_ACCESS_TOKEN_EXPIRE_MINUTES = 15 JWT_REFRESH_TOKEN_EXPIRE_DAYS = 30 JWT_SECRET_KEY_MIN_LENGTH = 32 # Encryption AES_KEY_SIZE = 32 # 256-bit RSA_KEY_SIZE = 2048 HASH_ROUNDS = 100000 # For password hashing # ============================================================================ # BUSINESS LOGIC CONSTANTS # ============================================================================ # Case Management CASE_PRIORITY_LEVELS = ["low", "medium", "high", "critical"] CASE_STATUS_TRANSITIONS = { "draft": ["open"], "open": ["in_progress", "closed", "cancelled"], "in_progress": ["open", "closed", "cancelled"], "closed": ["reopened"], "cancelled": ["reopened"], } # Alert Management ALERT_SEVERITY_LEVELS = ["info", "low", "medium", "high", "critical"] ALERT_AUTO_RESOLVE_HOURS = 24 ALERT_ESCALATION_THRESHOLDS = { "high": 5, # Escalate after 5 high alerts "critical": 1, # Escalate immediately on critical } # Compliance SAR_FILING_DEADLINE_DAYS = 30 CTR_REPORTING_THRESHOLD = 10000 # $10,000 USD SAR_RISK_THRESHOLDS = {"low": 25, "medium": 50, "high": 75, "critical": 90} # ============================================================================ # MONITORING AND LOGGING CONSTANTS # ============================================================================ # Log Levels LOG_LEVEL_DEBUG = "DEBUG" LOG_LEVEL_INFO = "INFO" LOG_LEVEL_WARNING = "WARNING" LOG_LEVEL_ERROR = "ERROR" LOG_LEVEL_CRITICAL = "CRITICAL" # Metrics Collection METRICS_COLLECTION_INTERVAL = 60 # seconds METRICS_RETENTION_DAYS = 30 PERFORMANCE_ALERT_THRESHOLD = 2000 # ms for API responses # Health Checks HEALTH_CHECK_INTERVAL = 30 # seconds HEALTH_CHECK_TIMEOUT = 10 # seconds HEALTH_CHECK_RETRIES = 3 # ============================================================================ # UTILITY FUNCTIONS # ============================================================================ def get_risk_level(score: float) -> str: """Convert risk score to risk level""" if score >= RISK_SCORE_CRITICAL: return "critical" elif score >= RISK_SCORE_HIGH: return "high" elif score >= RISK_SCORE_MEDIUM: return "medium" else: return "low" def get_priority_level(severity: str) -> str: """Convert severity to priority""" severity_map = { "critical": "high", "high": "high", "medium": "medium", "low": "medium", "info": "low", } return severity_map.get(severity, "medium") def is_high_risk_country(country_code: str) -> bool: """Check if country is in high-risk list""" return country_code.upper() in HIGH_RISK_COUNTRIES def calculate_batch_size(total_items: int, max_batch_size: int = MAX_BATCH_SIZE) -> int: """Calculate optimal batch size for processing""" return min(max_batch_size, max(1, total_items // 10)) # ============================================================================ # CONFIGURATION OBJECTS # ============================================================================ # Database Configuration DATABASE_CONFIG = { "pool_size": 10, "max_overflow": 20, "pool_timeout": DATABASE_CONNECTION_TIMEOUT, "pool_recycle": 3600, # 1 hour "echo": False, } # Redis Configuration REDIS_CONFIG = { "max_connections": 20, "retry_on_timeout": True, "socket_timeout": 5, "socket_connect_timeout": 5, "socket_keepalive": True, "socket_keepalive_options": {1: 60}, # TCP_KEEPIDLE: 60 seconds "health_check_interval": 30, } # AI/ML Configuration AI_CONFIG = { "max_concurrent_requests": MAX_CONCURRENT_AI_REQUESTS, "request_timeout": API_REQUEST_TIMEOUT, "batch_size": MAX_BATCH_SIZE, "cache_ttl": RESULT_CACHE_TTL, "retry_attempts": 3, "retry_delay": 1.0, } # Export all constants __all__ = [ "AES_KEY_SIZE", "AI_CONFIG", "ALERT_AUTO_RESOLVE_HOURS", "ALERT_ESCALATION_THRESHOLDS", "ALERT_SEVERITY_LEVELS", "API_RATE_LIMIT_REQUESTS", "API_RATE_LIMIT_WINDOW", "API_REQUEST_TIMEOUT", "BLUR_DETECTION_THRESHOLD", # Business Logic "CASE_PRIORITY_LEVELS", "CASE_STATUS_TRANSITIONS", "COMPRESSION_ARTIFACT_THRESHOLD", "CRITICAL_CONFIDENCE_THRESHOLD", "CTR_REPORTING_THRESHOLD", # Configuration Objects "DATABASE_CONFIG", "DATABASE_CONNECTION_TIMEOUT", "DATA_CACHE_TTL", "DEFAULT_MAX_PROCESS_SIZE", "DEFAULT_PAGE_SIZE", "DEFAULT_RATE_LIMIT_REQUESTS", "DEFAULT_RATE_LIMIT_WINDOW", "DEFAULT_TIMEOUT_SECONDS", "ELA_THRESHOLD", "FACE_RECOGNITION_THRESHOLD", "FORGERY_DETECTION_THRESHOLD", "HASH_ROUNDS", "HEALTH_CHECK_INTERVAL", "HEALTH_CHECK_RETRIES", "HEALTH_CHECK_TIMEOUT", "HIGH_CONFIDENCE_THRESHOLD", "HIGH_RISK_COUNTRIES", "HTTP_BAD_REQUEST", "HTTP_CONFLICT", "HTTP_CREATED", "HTTP_FORBIDDEN", "HTTP_INTERNAL_SERVER_ERROR", "HTTP_NOT_FOUND", # API & Networking "HTTP_OK", "HTTP_SERVICE_UNAVAILABLE", "HTTP_TOO_MANY_REQUESTS", "HTTP_UNAUTHORIZED", "HTTP_UNPROCESSABLE_ENTITY", "JWT_ACCESS_TOKEN_EXPIRE_MINUTES", "JWT_REFRESH_TOKEN_EXPIRE_DAYS", "JWT_SECRET_KEY_MIN_LENGTH", "LOG_LEVEL_CRITICAL", # Monitoring "LOG_LEVEL_DEBUG", "LOG_LEVEL_ERROR", "LOG_LEVEL_INFO", "LOG_LEVEL_WARNING", "MANIPULATION_THRESHOLD", "MAX_AI_PROCESSING_TIME", "MAX_BATCH_SIZE", "MAX_CONCURRENT_AI_REQUESTS", "MAX_FILE_NAME_LENGTH", "MAX_FILE_SIZE_FOR_OCR", "MAX_PAGE_SIZE", "MAX_PASSWORD_LENGTH", "MAX_TEXT_EXTRACTION_LENGTH", # System Constants "MAX_UPLOAD_SIZE", "METRICS_COLLECTION_INTERVAL", "METRICS_RETENTION_DAYS", # AI/ML "MIN_CONFIDENCE_THRESHOLD", "MIN_IMAGE_RESOLUTION", "MIN_PAGE_SIZE", # Security "MIN_PASSWORD_LENGTH", "MIN_VIDEO_DURATION", "OCR_QUALITY_THRESHOLD", "PASSWORD_COMPLEXITY_REQUIREMENTS", "PERFORMANCE_ALERT_THRESHOLD", "PLUGIN_CACHE_TTL", "REDIS_CONFIG", "RESULT_CACHE_TTL", "RISK_SCORE_CRITICAL", "RISK_SCORE_HIGH", # Fraud Detection "RISK_SCORE_LOW", "RISK_SCORE_MEDIUM", "RSA_KEY_SIZE", "SAR_FILING_DEADLINE_DAYS", "SAR_RISK_THRESHOLDS", "SESSION_CACHE_TTL", "STRUCTURING_MIN_TRANSACTIONS", "STRUCTURING_THRESHOLD", "STRUCTURING_WINDOW_HOURS", "SUPPORTED_AUDIO_TYPES", "SUPPORTED_DOCUMENT_TYPES", # Evidence Processing "SUPPORTED_IMAGE_TYPES", "SUPPORTED_VIDEO_TYPES", "VELOCITY_MAX_TRANSACTIONS", "VELOCITY_RISK_MULTIPLIER", "VELOCITY_WINDOW_MINUTES", "calculate_batch_size", "get_priority_level", # Utility Functions "get_risk_level", "is_high_risk_country", ]