38 lines
1.1 KiB
Python
38 lines
1.1 KiB
Python
|
|
from __future__ import annotations
|
||
|
|
|
||
|
|
from typing import Any
|
||
|
|
|
||
|
|
from rag.services import get_pest_disease_risk
|
||
|
|
|
||
|
|
|
||
|
|
def _stats_label(level: str | None) -> str:
|
||
|
|
if level == "high":
|
||
|
|
return "بالا"
|
||
|
|
if level == "medium":
|
||
|
|
return "متوسط"
|
||
|
|
return "پایین"
|
||
|
|
|
||
|
|
|
||
|
|
def _normalize_risk_block(block: dict[str, Any] | None) -> dict[str, Any]:
|
||
|
|
payload = dict(block or {})
|
||
|
|
payload.setdefault("score", 0.0)
|
||
|
|
payload.setdefault("level", "low")
|
||
|
|
payload["statsLabel"] = _stats_label(payload.get("level"))
|
||
|
|
return payload
|
||
|
|
|
||
|
|
|
||
|
|
def build_pest_disease_risk_summary(*, farm_uuid: str) -> dict[str, Any]:
|
||
|
|
rag_result = get_pest_disease_risk(farm_uuid=farm_uuid)
|
||
|
|
|
||
|
|
return {
|
||
|
|
"farm_uuid": farm_uuid,
|
||
|
|
"diseaseRisk": _normalize_risk_block(rag_result.get("disease_risk")),
|
||
|
|
"pestRisk": _normalize_risk_block(rag_result.get("pest_risk")),
|
||
|
|
"drivers": {
|
||
|
|
"keyDrivers": rag_result.get("key_drivers") or [],
|
||
|
|
"summary": rag_result.get("summary"),
|
||
|
|
"forecastWindow": rag_result.get("forecast_window"),
|
||
|
|
"source": "rag",
|
||
|
|
},
|
||
|
|
}
|