# Irrigation Recommendation API Fields این فایل فقط فیلدهای API مربوط به `POST /api/irrigation/recommend/` را توضیح می‌دهد. ## Endpoint `POST /api/irrigation/recommend/` ## کاربرد این endpoint برای تولید recommendation آبیاری استفاده می‌شود و خروجی آن با UI فعلی صفحه `src/views/dashboards/farm/smartIrrigation/SmartIrrigationRecommendation.tsx` هماهنگ شده است. ## ساختار کلی پاسخ ```json { "code": 200, "msg": "success", "data": { "plan": {}, "water_balance": {}, "timeline": [], "sections": [] } } ``` ## Request ### حداقل payload پیشنهادی ```json { "farm_uuid": "11111111-1111-1111-1111-111111111111", "plant_name": "گوجه‌فرنگی", "growth_stage": "گلدهی", "irrigation_type": "آبیاری قطره‌ای" } ``` ### فیلدهای Request ### `farm_uuid` - نوع: `string` - اجباری: بله - توضیح: شناسه یکتای مزرعه. ### `sensor_uuid` - نوع: `string` - اجباری: خیر - توضیح: نام قدیمی برای `farm_uuid`. اگر `farm_uuid` ارسال نشده باشد، این مقدار به جای آن استفاده می‌شود. ### `plant_name` - نوع: `string` - اجباری: خیر - توضیح: نام گیاه هدف برای تولید توصیه. اگر ارسال نشود، سیستم در صورت امکان گیاه ثبت‌شده روی مزرعه را استفاده می‌کند. ### `growth_stage` - نوع: `string` - اجباری: خیر - توضیح: مرحله رشد گیاه مثل `رویشی`، `گلدهی` یا `میوه‌دهی`. ### `irrigation_type` - نوع: `string` - اجباری: خیر - توضیح: نوع یا نام روش آبیاری مورد نظر فرانت. این فیلد برای UI فعلی پیشنهاد می‌شود. ### `irrigation_method_name` - نوع: `string` - اجباری: خیر - توضیح: نام روش آبیاری. این فیلد با `irrigation_type` هم‌ارز است و در بک‌اند به همان ورودی نهایی نرمال می‌شود. ## Response ## فیلدهای لایه اول Response ### `code` - نوع: `number` - توضیح: کد وضعیت پاسخ در قالب استاندارد API پروژه. ### `msg` - نوع: `string` - توضیح: پیام وضعیت پاسخ. در حالت موفق معمولاً `success` است. ### `data` - نوع: `object` - توضیح: بدنه اصلی recommendation آبیاری. ## فیلدهای `data` ### `plan` - نوع: `object` - توضیح: خلاصه اصلی recommendation برای نمایش در کارت بالای UI. ### `water_balance` - نوع: `object` - توضیح: تراز آب و خروجی محاسبات روزانه FAO-56. ### `timeline` - نوع: `array` - توضیح: مراحل اجرایی recommendation برای Stepper. ### `sections` - نوع: `array` - توضیح: نکات تکمیلی و هشدارها. در UI فعلی فقط `warning` و `tip` مصرف می‌شوند. ## فیلدهای `data.plan` ```json { "frequencyPerWeek": 4, "durationMinutes": 38, "bestTimeOfDay": "05:30 تا 08:00 صبح", "moistureLevel": 72, "warning": "در ساعات گرم روز آبیاری انجام نشود" } ``` ### `frequencyPerWeek` - نوع: `number` - توضیح: تعداد نوبت آبیاری در هفته. ### `durationMinutes` - نوع: `number` - توضیح: مدت هر نوبت آبیاری بر حسب دقیقه. ### `bestTimeOfDay` - نوع: `string` - توضیح: بهترین بازه زمانی اجرای آبیاری. ### `moistureLevel` - نوع: `number` - توضیح: سطح رطوبت فعلی یا هدف خاک برای نمایش در gauge. ### `warning` - نوع: `string` - توضیح: هشدار اصلی recommendation. ## فیلدهای `data.water_balance` ```json { "active_kc": 0.93, "crop_profile": { "kc_initial": 0.55, "kc_mid": 1.05, "kc_end": 0.78 }, "daily": [ { "forecast_date": "2025-02-12", "et0_mm": 5.4, "etc_mm": 4.9, "effective_rainfall_mm": 0, "gross_irrigation_mm": 17, "irrigation_timing": "05:30 - 07:00" } ] } ``` ### `active_kc` - نوع: `number` - توضیح: ضریب Kc فعال برای مرحله رشد فعلی. ### `crop_profile` - نوع: `object` - توضیح: پروفایل Kc گیاه در مراحل مختلف. ### `daily` - نوع: `array` - توضیح: داده‌های روزانه مورد استفاده در جدول یا نمودار تراز آب. ## فیلدهای `data.water_balance.crop_profile` ### `kc_initial` - نوع: `number` - توضیح: Kc مرحله ابتدایی رشد. ### `kc_mid` - نوع: `number` - توضیح: Kc مرحله میانی رشد. ### `kc_end` - نوع: `number` - توضیح: Kc مرحله پایانی رشد. ## فیلدهای هر آیتم در `data.water_balance.daily[]` ### `forecast_date` - نوع: `string` - توضیح: تاریخ پیش‌بینی. ### `et0_mm` - نوع: `number` - توضیح: تبخیر و تعرق مرجع روزانه. ### `etc_mm` - نوع: `number` - توضیح: تبخیر و تعرق گیاه. ### `effective_rainfall_mm` - نوع: `number` - توضیح: بارش مؤثر محاسبه‌شده. ### `gross_irrigation_mm` - نوع: `number` - توضیح: مقدار آبیاری ناخالص پیشنهادی برای آن روز. ### `irrigation_timing` - نوع: `string` - توضیح: زمان پیشنهادی اجرای آبیاری برای آن روز. ## فیلدهای `data.timeline` ```json [ { "step_number": 1, "title": "بررسی فشار", "description": "فشار ابتدا و انتهای لاین کنترل شود" } ] ``` ### `step_number` - نوع: `number` - توضیح: شماره مرحله. ### `title` - نوع: `string` - توضیح: عنوان مرحله. ### `description` - نوع: `string` - توضیح: توضیح اجرایی مرحله. ## فیلدهای `data.sections` ```json [ { "title": "هشدار تبخیر بالا", "icon": "tabler-alert-triangle", "type": "warning", "content": "در ساعات گرم روز آبیاری انجام نشود" }, { "title": "نکته بهره وری", "icon": "tabler-bulb", "type": "tip", "content": "شست وشوی فیلترها به یکنواختی آبیاری کمک می کند" } ] ``` ### `title` - نوع: `string` - توضیح: عنوان کارت. ### `icon` - نوع: `string` - توضیح: نام آیکون مورد استفاده در UI. ### `type` - نوع: `string` - توضیح: نوع سکشن. در UI فعلی فقط این مقادیر مصرف می‌شوند: - `warning` - `tip` ### `content` - نوع: `string` - توضیح: متن هشدار یا نکته. ## حداقل پاسخ قابل استفاده برای UI فعلی ```json { "code": 200, "msg": "success", "data": { "plan": { "frequencyPerWeek": 4, "durationMinutes": 38, "bestTimeOfDay": "05:30 تا 08:00 صبح", "moistureLevel": 72, "warning": "در ساعات گرم روز آبیاری انجام نشود" }, "water_balance": { "active_kc": 0.93, "crop_profile": { "kc_initial": 0.55, "kc_mid": 1.05, "kc_end": 0.78 }, "daily": [ { "forecast_date": "2025-02-12", "et0_mm": 5.4, "etc_mm": 4.9, "effective_rainfall_mm": 0, "gross_irrigation_mm": 17, "irrigation_timing": "05:30 - 07:00" } ] }, "timeline": [ { "step_number": 1, "title": "بررسی فشار", "description": "فشار ابتدا و انتهای لاین کنترل شود" } ], "sections": [ { "title": "هشدار تبخیر بالا", "icon": "tabler-alert-triangle", "type": "warning", "content": "در ساعات گرم روز آبیاری انجام نشود" }, { "title": "نکته بهره وری", "icon": "tabler-bulb", "type": "tip", "content": "شست وشوی فیلترها به یکنواختی آبیاری کمک می کند" } ] } } ``` ## فیلدهایی که فرانت فعلی لازم ندارد فیلدهای زیر برای UI فعلی recommendation لازم نیستند و نباید به عنوان dependency فرانت در نظر گرفته شوند: - `raw_response` - `status` - `generated_at` - `recommendation_title` - `recommendation_subtitle` - `final_verdict` - `primary_method` - `usage_summary` - `alternative_plans` - `sections[].type = schedule` - `sections[].type = method` ## نمونه cURL ```bash curl -s -X POST "http://localhost:8000/api/irrigation/recommend/" \ -H "accept: application/json" \ -H "Content-Type: application/json" \ -d '{ "farm_uuid": "11111111-1111-1111-1111-111111111111", "plant_name": "گوجه‌فرنگی", "growth_stage": "گلدهی", "irrigation_type": "آبیاری قطره‌ای" }' ```