# ممیزی ضعف‌ها و میزان اعتماد APIها این سند بر اساس بررسی کد فعلی پروژه نوشته شده است و هدفش این است که برای هر API مشخص کند: - خروجی روی چه داده یا فرمولی تکیه دارد - کجاها خروجی صرفا تقریبی، heuristic، mock یا وابسته به LLM است - برای چه نوع استفاده‌ای قابل اتکا هست و برای چه نوع تصمیمی نیست - سطح اعتماد عملی به پاسخ خروجی چقدر است توجه: - این سند درباره `قابلیت اتکای عملیاتی` است، نه فقط درست بودن ساختار JSON. - ممکن است یک API از نظر فنی همیشه JSON درست برگرداند، اما از نظر agronomy یا تصمیم‌سازی هنوز کم‌اعتماد باشد. - سطح اعتماد به معنی اعتماد به `محتوای پاسخ` است، نه availability سرویس. ## معیار سطح اعتماد - `زیاد`: عمدتا داده واقعی یا ذخیره شده برمی‌گرداند؛ فرمول یا منطق ساده ولی قابل توضیح است؛ برای نمایش و گزارش مناسب است. - `متوسط`: داده واقعی دارد اما بخش مهمی از نتیجه وابسته به تقریب، پیش‌فرض، شبیه‌سازی، یا LLM است. - `کم`: نتیجه بیشتر heuristic، fallback، برآورد تقریبی، یا تلفیق داده ناقص است. - `خیلی کم`: داده mock، stub، یا خروجی عمدتا غیرقابل اتکا برای تصمیم واقعی. ## خلاصه سریع APIهای پرریسک - `POST /api/economy/overview/`: داده کاملا mock است؛ برای تصمیم واقعی نباید استفاده شود. - `POST /api/plants/fetch-info/`: عملا پیاده‌سازی نشده و `503` برمی‌گرداند. - `POST /api/irrigation/water-stress/`: اگر engine شبیه‌سازی خطا بدهد هنوز به فرمول ساده سنسور fallback می‌کند. - `POST /api/pest-disease/detect/` و `POST /api/pest-disease/risk/`: وابستگی مستقیم به RAG/LLM دارند؛ برای KPI قطعی یا تصمیم سم‌پاشی خودکار مناسب نیستند. - `POST /api/farm-alerts/tracker/` و `POST /api/farm-alerts/timeline/`: ترکیب rule-based + LLM هستند؛ برای آگاهی خوب‌اند ولی برای اتوماسیون بحرانی نه. - `POST /api/soile/moisture-heatmap/`: visualization خوبی می‌دهد اما هنوز geostatistics دقیق یا history واقعی سنسورها را مدل نمی‌کند. --- ## 1) Soil Data API ### `GET|POST /api/soil-data/` - منبع داده: - اگر رکورد کامل موجود باشد از DB برمی‌گردد. - اگر موجود نباشد فقط task صف می‌شود و `202` می‌دهد. - ضعف‌ها: - در حالت `202` هنوز خود داده خاک برنگشته، فقط شروع فرآیند واکشی اعلام می‌شود. - تطابق location بر اساس `lat/lon` گرد شده تا 6 رقم است؛ برای نقاط خیلی نزدیک ممکن است حساسیت مکانی محدود شود. - کیفیت نهایی کاملا وابسته به سرویس بیرونی خاک و کامل شدن depthهاست. - اگر فرمول/اطلاعات قابل اتکا نباشد: - این API خودش مدل پیش‌بینی ندارد؛ ریسک اصلی از ناقص بودن داده منبع یا incomplete بودن رکورد است. - مناسب برای: - واکشی داده خام خاک و persistence. - نامناسب برای: - استنتاج agronomy بدون بررسی منبع و completeness. - سطح اعتماد: - `زیاد` وقتی `source=database` و location کامل است. - `کم` وقتی فقط `task_id` گرفته‌اید و هنوز داده واقعی ندارید. ### `GET /api/soil-data/tasks/{task_id}/status/` - منبع داده: وضعیت Celery + نتیجه ذخیره شده در DB. - ضعف‌ها: - ممکن است task موفق شده باشد ولی رکورد location هنوز کامل نباشد. - خروجی `SUCCESS` لزوما به معنی کیفیت agronomic داده نیست؛ فقط completion فنی را نشان می‌دهد. - سطح اعتماد: - `متوسط` برای وضعیت فنی task. - `کم تا متوسط` برای اعتماد به خود محتوای خاک، بسته به کامل بودن رکورد. ### `POST /api/soil-data/ndvi-health/` - منبع داده: observation ماهواره‌ای NDVI در `location_data.ndvi`. - ضعف‌ها: - اگر observation موجود نباشد، کارت عملا به وضعیت `Unavailable` می‌رسد. - تفسیر NDVI ساده است و به تنهایی برای تشخیص علت تنش کافی نیست. - NDVI میانگین مزرعه است؛ heterogeneity داخل مزرعه را کامل نشان نمی‌دهد. - اگر فرمول/اطلاعات قابل اتکا نباشد: - NDVI فقط شاخص پوشش گیاهی است، نه تشخیص علت؛ کمبود آب، بیماری، تغذیه یا خطای سنجش ممکن است با هم اشتباه شوند. - سطح اعتماد: - `متوسط` برای پایش کلی وضعیت پوشش گیاهی. - `کم` برای تصمیم‌گیری علّی یا درمانی. --- ## 2) Soile API ### `POST /api/soile/moisture-heatmap/` - منبع داده: - latest measurement هر سنسور - وزن‌دهی تازگی داده - جریمه outlier - interpolation از نوع weighted IDW - mask مرز مزرعه - ضعف‌ها: - history واقعی سنسورها هنوز مدل نمی‌شود. - drift سنسور، calibration uncertainty و quality assurance واقعی لحاظ نشده‌اند. - depth-specific map به صورت measured واقعی نیست و بخشی از لایه‌ها از soil profile مشتق می‌شوند. - uncertainty به صورت heuristic برآورد می‌شود. - با تراکم سنسور پایین یا farm نامتقارن، heatmap بیشتر visualization است تا اندازه‌گیری دقیق. - اگر فرمول/اطلاعات قابل اتکا نباشد: - مدل interpolation علمی پیشرفته مثل kriging یا مدل uncertainty مکانی ندارد. - خروجی برای zoning دقیق agronomy کافی نیست. - سطح اعتماد: - `متوسط` برای visualization و درک trend کلی. - `کم` برای تصمیم آبیاری دقیق نقطه‌ای یا نسخه agronomy. ### `POST /api/soile/health-summary/` - منبع داده: داده سنسور + خلاصه‌ساز سلامت خاک. - ضعف‌ها: - خلاصه سلامت ذاتا compression از چند متریک است و همه context مزرعه را در بر نمی‌گیرد. - اگر سنسورهای مزرعه کم‌تعداد یا داده‌هایشان قدیمی باشد، summary گمراه‌کننده می‌شود. - سطح اعتماد: - `متوسط` برای dashboard summary. - `کم تا متوسط` برای تصمیم اصلاح خاک بدون نمونه‌برداری میدانی. ### `POST /api/soile/anomaly-detection/` - منبع داده: anomaly آماری + تفسیر RAG. - ضعف‌ها: - anomaly detection بر اساس context موجود است و به history و baseline کامل چندفصلی متکی نیست. - تفسیر نهایی توسط RAG تولید می‌شود و deterministic نیست. - اگر anomaly آماری واقعی نباشد، LLM ممکن است فقط آن را با متن تخصصی بسط دهد. - سطح اعتماد: - `متوسط` برای پیدا کردن موارد مشکوک. - `کم` برای diagnosis نهایی بدون تایید کارشناس. --- ## 3) Weather API ### `POST /api/weather/farm-card/` - منبع داده: forecastهای ذخیره‌شده در DB از سرویس هواشناسی خارجی. - ضعف‌ها: - docstring سرویس هنوز misleading است، ولی کد واقعا `requests.get` می‌زند. - اگر forecast تازه نباشد، کارت weather کهنه می‌شود. - کارت فقط summary ساده از forecast است و uncertainty پیش‌بینی هوا را منتقل نمی‌کند. - اگر forecast موجود نباشد، خروجی عملا صفر/نامشخص می‌شود. - اگر فرمول/اطلاعات قابل اتکا نباشد: - مشکل اصلی فرمول نیست؛ dependency به forecast خارجی و freshness داده است. - سطح اعتماد: - `متوسط تا زیاد` وقتی forecast تازه و کامل موجود باشد. - `کم` وقتی داده weather ناقص یا قدیمی باشد. ### `POST /api/weather/water-need-prediction/` - منبع داده: - محاسبات ET/crop profile از `irrigation.evapotranspiration` - forecast هفت‌روزه - تفسیر تکمیلی از RAG - ضعف‌ها: - دقت خروجی به کیفیت crop profile، growth stage و راندمان روش آبیاری وابسته است. - horizon فقط کوتاه‌مدت است. - insight متنی توسط LLM تولید می‌شود و fallback هم دارد. - اگر forecast ضعیف باشد، کل محاسبه نیاز آبی ضعیف می‌شود. - اگر فرمول/اطلاعات قابل اتکا نباشد: - برای برنامه‌ریزی کوتاه‌مدت خوب است، اما irrigation scheduling دقیق در مزرعه واقعی هنوز به سنسور و بازخورد عملی نیاز دارد. - سطح اعتماد: - `متوسط` برای برنامه‌ریزی 3 تا 7 روزه. - `کم تا متوسط` برای تصمیم اجرایی بدون کنترل میدانی. --- ## 4) Economy API ### `POST /api/economy/overview/` - منبع داده: `mock` صریح در سرویس. - ضعف‌ها: - کل خروجی ساختگی است. - اعداد هزینه آب، صرفه‌جویی، درآمد و هزینه کود از مزرعه واقعی استخراج نمی‌شوند. - trend chart نیز mock است. - اگر فرمول/اطلاعات قابل اتکا نباشد: - این API فعلا برای عملیات واقعی قابل اتکا نیست. - سطح اعتماد: - `خیلی کم` --- ## 5) Plant API ### `GET|POST /api/plants/` و `GET|PUT|PATCH|DELETE /api/plants/{id}/` - منبع داده: رکوردهای DB. - ضعف‌ها: - اعتماد به محتوای agronomic رکوردها بستگی به کسی دارد که داده را وارد کرده است. - validation دامنه‌ای یا علمی عمیق روی محتوا دیده نمی‌شود. - اگر فرمول/اطلاعات قابل اتکا نباشد: - مشکل اصلی از جنس data governance است، نه الگوریتم. - سطح اعتماد: - `زیاد` برای این‌که رکوردی که ذخیره شده همان برگردد. - `متوسط` برای اعتماد علمی به محتوای متنی رکوردها. ### `POST /api/plants/fetch-info/` - منبع داده: قرار بوده API خارجی باشد، ولی فعلا `None` برمی‌گرداند. - ضعف‌ها: - عملا پیاده‌سازی نشده است. - در حالت فعلی `503` می‌دهد. - سطح اعتماد: - `خیلی کم` --- ## 6) Farm Data API ### `POST /api/farm-data/` - منبع داده: - boundary مزرعه - sensor payload - واکشی خودکار location و weather - نقاط قوت فعلی: - مرکز مزرعه با centroid هندسی polygon محاسبه می‌شود، نه average ساده. - merge سنسورها flat و overwrite خاموش ندارد؛ payload هر sensor جدا می‌ماند. - ضعف‌ها: - centroid هندسی هنوز برای همه use-caseها بهترین نقطه نمونه‌برداری نیست؛ مخصوصا در مزرعه‌های خیلی کشیده یا چندبخشی. - health داده به شدت به درست بودن boundary ورودی وابسته است. - location و weather فقط برای یک نقطه مرکزی resolve می‌شوند؛ variability در سطح مزرعه از بین می‌رود. - اگر فرمول/اطلاعات قابل اتکا نباشد: - این API بیشتر data-ingestion است؛ ضعف اصلی spatial representativeness است. - سطح اعتماد: - `زیاد` برای ذخیره‌سازی و linkage داده. - `متوسط` برای این فرض که یک center point نماینده کل مزرعه است. ### `GET /api/farm-data/{farm_uuid}/detail/` - منبع داده: - sensor payload - soil depth data - weather - plants و irrigation method - resolved_metrics با aggregation deterministic - نقاط قوت فعلی: - conflict چند سنسور silent overwrite نمی‌شود. - source هر metric در `metric_sources` مشخص می‌شود. - ضعف‌ها: - aggregation متریک‌های عددی در تعارض، به average ختم می‌شود؛ این روش همیشه از نظر agronomy بهترین strategy نیست. - sensor locality و timestamp تفکیک‌شده در resolved_metrics نهایی از بین می‌رود. - برای farm چندناحیه‌ای، یک resolved metric ممکن است variance مهم را پنهان کند. - سطح اعتماد: - `متوسط تا زیاد` برای unified context. - `متوسط` برای تصمیم نقطه‌ای داخل مزرعه. ### `POST /api/farm-data/parameters/` - منبع داده: DB و log تغییرات. - ضعف‌ها: - افزودن پارامتر جدید به معنی معتبر بودن agronomic آن نیست. - کیفیت metadata وابسته به داده ورودی کاربر است. - سطح اعتماد: - `زیاد` برای ثبت و نگهداری metadata. - `متوسط` برای معنی علمی metadata. --- ## 7) Irrigation API ### `GET|POST /api/irrigation/` و `GET /api/irrigation/{id}/` - منبع داده: رکوردهای روش آبیاری در DB. - ضعف‌ها: - درصد راندمان و توضیحات روش آبیاری اگر دستی وارد شده باشند، لزوما calibrated برای مزرعه خاص نیستند. - سطح اعتماد: - `زیاد` برای بازگرداندن داده ذخیره‌شده. - `متوسط` برای کاربرد agronomic عمومی. ### `POST /api/irrigation/recommend/` - منبع داده: - sensor/farm context - plant data - irrigation method - محاسبات FAO-56 و optimizer - متن نهایی از RAG - نقاط قوت فعلی: - پاسخ نهایی provenance دارد و مشخص می‌کند کدام فیلد از LLM و کدام از fallback آمده است. - ضعف‌ها: - merge نهایی هنوز deterministic است و برای پایداری UI fallback را نگه می‌دارد. - اگر crop profile، weather یا irrigation method درست نباشد، recommendation قابل اتکا نیست. - optimizer و LLM هر دو وابسته به کیفیت ورودی هستند. - خروجی ممکن است از نظر ظاهر کامل باشد، حتی وقتی بخشی از آن fallback است. - اگر فرمول/اطلاعات قابل اتکا نباشد: - برای تصمیم نهایی آبیاری در مزرعه، باید provenance و fallback بودن بخش‌ها دیده شود. - سطح اعتماد: - `متوسط` وقتی داده مزرعه کامل باشد و fallback محدود باشد. - `کم تا متوسط` وقتی بخش‌های زیادی fallback شده باشند. ### `POST /api/irrigation/water-stress/` - منبع داده: - ابتدا سرویس crop simulation - در صورت خطا fallback به فرمول ساده `clamp(round(35 - (soil_moisture / 2)), 0, 100)` - ضعف‌ها: - اگر engine اصلی خطا بدهد هنوز به فرمول ساده سنسوری fallback می‌شود. - fallback فقط از `soil_moisture` استفاده می‌کند و ET0، بارش، root depth، نوع گیاه، مرحله رشد و روند زمانی را نادیده می‌گیرد. - بنابراین ظاهر endpoint ممکن است simulation-based باشد اما در failure عملا heuristic برگرداند. - اگر فرمول/اطلاعات قابل اتکا نباشد: - هر خروجی‌ای که `sourceMetric.engine = sensor_fallback` داشته باشد برای KPI دقیق تنش آبی قابل اتکا نیست. - سطح اعتماد: - `متوسط` اگر واقعا از simulation engine آمده باشد. - `کم` اگر fallback سنسوری فعال شده باشد. --- ## 8) Fertilization API ### `POST /api/fertilization/recommend/` - منبع داده: - sensor/farm context - plant data - optimizer - RAG - نقاط قوت فعلی: - مانند irrigation، provenance بخش‌ها اضافه شده و تشخیص fallback بهتر شده است. - ضعف‌ها: - merge نهایی هنوز deterministic است و ساختار UI را حتی در خروجی ضعیف حفظ می‌کند. - وضعیت واقعی عناصر غذایی مزرعه به sample quality و coverage محدود است. - مدل crop-specific کامل و region-specific صریح دیده نمی‌شود. - پاسخ متنی نهایی LLM-based است. - اگر فرمول/اطلاعات قابل اتکا نباشد: - برای نسخه کود نهایی بدون آزمون خاک و تایید agronomist کافی نیست. - سطح اعتماد: - `متوسط` برای پیشنهاد اولیه. - `کم تا متوسط` برای prescription نهایی. --- ## 9) Pest & Disease API ### `POST /api/pest-disease/detect/` - منبع داده: - تصویر ارسالی - context مزرعه - knowledge base - LLM vision / RAG - ضعف‌ها: - دقت شدیدا به کیفیت، زاویه، نور و فاصله تصویر وابسته است. - خروجی deterministic نیست. - confidence هم از خود مدل می‌آید و لزوما calibrated نیست. - ممکن است علائم تغذیه‌ای، abiotic stress و بیماری با هم اشتباه شوند. - سطح اعتماد: - `کم تا متوسط` برای triage اولیه. - `کم` برای تصمیم سم‌پاشی یا تشخیص قطعی. ### `POST /api/pest-disease/risk/` - منبع داده: - context مزرعه - weather - knowledge base - RAG - ضعف‌ها: - هرچند intent آن RAG-based است، در لایه سرویس هنوز fallback heuristic نیز وجود دارد. - risk forecast region-specific و crop-specific calibrated model ندارد. - خروجی نهایی به retrieval quality و model behavior وابسته است. - اگر فرمول/اطلاعات قابل اتکا نباشد: - این endpoint باید فعلا به عنوان expert-assist دیده شود، نه predictive model قطعی. - سطح اعتماد: - `متوسط` برای آگاهی از ریسک کلی. - `کم` برای عملیات خودکار یا قطعی. ### `POST /api/pest-disease/risk-summary/` - منبع داده: خلاصه سبک‌تر از همان سرویس RAG. - نقاط قوت فعلی: - دیگر صرفا heuristic ثابت قبلی نیست و از RAG تغذیه می‌شود. - ضعف‌ها: - چون summary است، جزئیات uncertainty کمتر دیده می‌شود. - اگر RAG fallback یا retrieval ضعیف داشته باشد، summary هم ضعیف می‌شود. - سطح اعتماد: - `متوسط رو به کم` --- ## 10) Crop Simulation API ### `POST /api/crop-simulation/growth/` - منبع داده: - weather - soil - crop parameters - agromanagement - PCSE engine - ضعف‌ها: - اگر پارامترهای واقعی مزرعه ناقص باشند، سیستم از defaultهای زیادی استفاده می‌کند. - بخشی از پارامترها مثل `ELEV`, `IRRAD`, `RDMSOL`, `WAV`, `NAVAILI` پیش‌فرض‌محور هستند. - کیفیت شبیه‌سازی به کیفیت profile گیاه و agromanagement وابسته است. - نکته مهم: - در failure فعلی، خطا propagate می‌شود و دیگر fallback projection در مسیر اصلی برگردانده نمی‌شود؛ این از نظر شفافیت خوب است. - سطح اعتماد: - `متوسط` وقتی ورودی‌ها خوب باشند و PCSE درست اجرا شود. - `کم تا متوسط` وقتی بخش زیادی از ورودی‌ها default باشند. ### `GET /api/crop-simulation/growth/{task_id}/status/` - منبع داده: status تسک + نتیجه شبیه‌سازی. - ضعف‌ها: - وضعیت `SUCCESS` به معنی خوب بودن ورودی‌های مدل نیست. - page‌بندی timeline فقط presentation است و تضمین کیفیت علمی مدل نمی‌دهد. - سطح اعتماد: - `زیاد` برای وضعیت فنی task. - `متوسط` برای محتوای simulation output. ### `POST /api/crop-simulation/current-farm-chart/` - منبع داده: simulation engine + context فعلی مزرعه. - ضعف‌ها: - chart از شبیه‌سازی می‌آید، نه مشاهده واقعی برگ/بیوماس/weight. - `leaf_count_estimate` و برخی شاخص‌ها derived هستند، نه measured. - اگر weather forecast یا plant profile ضعیف باشد، chart گمراه‌کننده می‌شود. - سطح اعتماد: - `متوسط` برای KPI بصری و trend. - `کم تا متوسط` برای تصمیم agronomy دقیق. ### `POST /api/crop-simulation/harvest-prediction/` - منبع داده: - growth simulation - GDD profile - extrapolation تا رسیدگی - ضعف‌ها: - اگر maturity داخل بازه forecast رخ ندهد، تاریخ برداشت با extrapolation از میانگین رشد برآورد می‌شود. - بنابراین بخش‌هایی از تاریخ برداشت پیش‌بینی‌شده ممکن است فراتر از خروجی واقعی engine باشند. - وابستگی زیاد به `required_gdd_for_maturity` و current profile گیاه دارد. - اگر فرمول/اطلاعات قابل اتکا نباشد: - برای برنامه‌ریزی برداشت به عنوان estimate مناسب است، نه تعهد تقویمی قطعی. - سطح اعتماد: - `متوسط` ### `POST /api/crop-simulation/yield-prediction/` - منبع داده: خروجی شبیه‌سازی رشد و تبدیل آن به yield KPI. - ضعف‌ها: - عملکرد نهایی به کیفیت شبیه‌سازی upstream وابسته است. - اگر داده soil fertility، weather یا management واقعی نباشند، yield estimate فقط تقریبی است. - حمایت از uncertainty interval یا confidence band دیده نمی‌شود. - سطح اعتماد: - `متوسط رو به کم` --- ## 11) Farm Alerts API ### `POST /api/farm-alerts/tracker/` - منبع داده: - rule-based tracker - thresholdهای hard-coded - خلاصه و notification با RAG/LLM - ضعف‌ها: - alert tracker پایه، heuristic و threshold-driven است. - آستانه‌های moisture، pH، EC، fungal risk و ... hard-coded هستند. - region-specific و crop-specific calibration محدود است. - اگر LLM JSON بد برگرداند، fallback rule-based جای آن را می‌گیرد. - اگر فرمول/اطلاعات قابل اتکا نباشد: - برای هشدارآگاهی مناسب است، نه برای auto-actuation. - سطح اعتماد: - `متوسط` برای شناسایی موارد مشکوک. - `کم تا متوسط` برای اقدام خودکار. ### `POST /api/farm-alerts/timeline/` - منبع داده: همان tracker + LLM timeline. - ضعف‌ها: - timeline بیشتر narration است تا سنجش مستقل. - اگر مبنای alertها heuristic باشد، timeline فقط همان heuristic را بازبسته‌بندی می‌کند. - سطح اعتماد: - `کم تا متوسط` --- ## 12) RAG API ### `POST /api/rag/chat/` - منبع داده: - farm context - history - images احتمالی - retrieval از knowledge base - LLM - ضعف‌ها: - پاسخ stream می‌شود و structure قراردادی سختی ندارد. - hallucination، retrieval miss، و dependence به prompt/tone وجود دارد. - برای سوال‌های policy/diagnosis/operation ممکن است confident but wrong باشد. - اگر فرمول/اطلاعات قابل اتکا نباشد: - این endpoint باید دستیار تحلیلی در نظر گرفته شود، نه source of truth. - سطح اعتماد: - `کم تا متوسط` --- ## 13) جمع‌بندی نهایی بر اساس کاربرد ### APIهای مناسب برای استفاده عملی‌تر - `POST /api/farm-data/` - `GET /api/farm-data/{farm_uuid}/detail/` - `GET|POST /api/soil-data/` - `POST /api/weather/farm-card/` این‌ها بیشتر data-centric هستند و اگر داده منبع خوب باشد، قابل اتکاترند. ### APIهای مناسب برای dashboard و insight، نه تصمیم قطعی - `POST /api/soile/moisture-heatmap/` - `POST /api/soile/health-summary/` - `POST /api/weather/water-need-prediction/` - `POST /api/crop-simulation/current-farm-chart/` - `POST /api/crop-simulation/harvest-prediction/` - `POST /api/crop-simulation/yield-prediction/` - `POST /api/farm-alerts/tracker/` - `POST /api/farm-alerts/timeline/` ### APIهای کم‌اعتماد یا نیازمند بازطراحی - `POST /api/economy/overview/` - `POST /api/plants/fetch-info/` - `POST /api/irrigation/water-stress/` در حالت fallback - `POST /api/pest-disease/detect/` برای diagnosis قطعی - `POST /api/pest-disease/risk/` - `POST /api/pest-disease/risk-summary/` - `POST /api/rag/chat/` برای پاسخ‌های حساس و اجرایی --- ## 14) پیشنهاد اولویت اصلاح 1. حذف fallback ساده از `water-stress` یا حداقل expose کردن صریح نوع engine در top-level response 2. جایگزینی mock در `economy` با data pipeline واقعی 3. پیاده‌سازی واقعی `plants/fetch-info` 4. افزودن uncertainty و freshness صریح به heatmap و water-need outputs 5. crop-specific و region-specific کردن alert/risk thresholds 6. اضافه کردن confidence واقعی و source provenance استاندارد به تمام endpointهای RAG-based