""" shared/constants.py ─────────────────── Named constants used across the entire codebase. Centralised here to eliminate magic numbers and strings. """ from __future__ import annotations # ── PPG Signal Processing ───────────────────────────────────────────────────── PPG_BANDPASS_LOW: float = 0.5 # Lower cut-off frequency (Hz) PPG_BANDPASS_HIGH: float = 8.0 # Upper cut-off frequency (Hz) PPG_FILTER_ORDER: int = 4 # Butterworth filter order PPG_SEGMENT_DURATION_SEC: int = 8 # Window size for segmentation (seconds) PPG_MIN_SAMPLING_RATE: float = 25.0 # Minimum acceptable sampling rate (Hz) PPG_MAX_SAMPLING_RATE: float = 1000.0 # Maximum acceptable sampling rate (Hz) PPG_MIN_DURATION_SEC: float = 1.0 # Minimum signal duration (seconds) PPG_MAX_DURATION_SEC: float = 3600.0 # Maximum signal duration (seconds) # ── Blood Pressure Thresholds ───────────────────────────────────────────────── BP_SBP_MIN: float = 60.0 # Minimum valid systolic BP (mmHg) BP_SBP_MAX: float = 260.0 # Maximum valid systolic BP (mmHg) BP_DBP_MIN: float = 30.0 # Minimum valid diastolic BP (mmHg) BP_DBP_MAX: float = 160.0 # Maximum valid diastolic BP (mmHg) # ── Message Queue ───────────────────────────────────────────────────────────── PPG_QUEUE_NAME: str = "ppg_queue" PPG_EXCHANGE_NAME: str = "ppg_exchange" PPG_ROUTING_KEY: str = "ppg.raw" MESSAGE_PREFETCH_COUNT: int = 1 # Consumer prefetch (process one at a time) # ── Database ────────────────────────────────────────────────────────────────── RAW_PPG_TABLE_NAME: str = "raw_ppg" PREDICTIONS_TABLE_NAME: str = "predictions" # ── API ─────────────────────────────────────────────────────────────────────── API_V1_PREFIX: str = "/api/v1" DEFAULT_PAGINATION_LIMIT: int = 50 MAX_PAGINATION_LIMIT: int = 500 # ── Inference ───────────────────────────────────────────────────────────────── MODEL_VERSION_MOCK: str = "mock-v1.0" MODEL_VERSION_GAN_VGTLNET: str = "gan-vgtlnet-v1.0" # ── CardioGAN Constants ─────────────────────────────────────────────────────── CARDIOGAN_ORIG_FS: int = 125 CARDIOGAN_TARGET_FS: int = 128 CARDIOGAN_WINDOW_SEC: int = 4 CARDIOGAN_WINDOW_SAMPLES: int = 512 # TARGET_FS * WINDOW_SEC CARDIOGAN_OVERLAP: float = 0.10 # ── VGTL-Net Constants ──────────────────────────────────────────────────────── VGTLNET_SAMPLING_RATE: int = 125 VGTLNET_WINDOW_SIZE: int = 224