from dashboard_data.card_utils import safe_number def build_anomaly_detection_card(sensor_id: str, context: dict | None = None, ai_bundle: dict | None = None) -> dict: sensor = (context or {}).get("sensor") if sensor is None: return {"anomalies": []} anomalies = [] moisture = safe_number(sensor.soil_moisture, 0) if moisture < 45: anomalies.append( { "sensor": "رطوبت خاک", "value": f"{round(moisture)}%", "expected": "45-65%", "deviation": f"{round(moisture - 55)}%", "severity": "warning", } ) soil_ph = safe_number(sensor.soil_ph, 7) if soil_ph < 6 or soil_ph > 7: anomalies.append( { "sensor": "pH خاک", "value": f"{soil_ph:.1f}", "expected": "6.0-7.0", "deviation": f"{round(soil_ph - 6.5, 1)}", "severity": "error" if soil_ph < 5.5 or soil_ph > 7.5 else "warning", } ) return {"anomalies": anomalies}