# Fertilization Recommendation API Fields

این فایل فقط فیلدهای API مربوط به `POST /api/fertilization/recommend/` را توضیح می‌دهد.

## Endpoint

`POST /api/fertilization/recommend/`

## ساختار کلی پاسخ

```json
{
  "code": 200,
  "msg": "success",
  "data": {
    "primary_recommendation": {},
    "nutrient_analysis": {},
    "application_guide": {},
    "alternative_recommendations": [],
    "sections": []
  }
}
```

## فیلدهای Request

### `farm_uuid`
- نوع: `string`
- اجباری: بله
- توضیح: شناسه یکتای مزرعه که توصیه برای آن تولید می‌شود.

### `sensor_uuid`
- نوع: `string`
- اجباری: خیر
- توضیح: نام قدیمی برای `farm_uuid`. اگر `farm_uuid` ارسال نشده باشد، این مقدار به جای آن استفاده می‌شود.

### `crop_id`
- نوع: `string`
- اجباری: خیر
- توضیح: شناسه یا نام محصول. اگر `plant_name` ارسال نشده باشد، همین مقدار به عنوان نام گیاه استفاده می‌شود.

### `plant_name`
- نوع: `string`
- اجباری: خیر
- توضیح: نام گیاه یا محصول هدف برای تولید توصیه.

### `growth_stage`
- نوع: `string`
- اجباری: خیر
- توضیح: مرحله رشد گیاه مثل `flowering` یا `fruiting`.

### `query`
- نوع: `string`
- اجباری: خیر
- توضیح: سوال یا درخواست متنی اختیاری برای جهت دادن به توصیه.

## فیلدهای لایه اول Response

### `code`
- نوع: `number`
- توضیح: کد وضعیت پاسخ در قالب استاندارد API پروژه.

### `msg`
- نوع: `string`
- توضیح: پیام وضعیت پاسخ. در حالت موفق معمولاً `success` است.

### `data`
- نوع: `object`
- توضیح: بدنه اصلی توصیه کودهی ساختاریافته.

## فیلدهای `data`

### `primary_recommendation`
- نوع: `object`
- توضیح: پیشنهاد اصلی کودهی که فرانت باید در Hero Card و ماشین حساب مصرف از آن استفاده کند.

### `nutrient_analysis`
- نوع: `object`
- توضیح: تحلیل ساختاریافته عناصر غذایی اصلی و ریزمغذی‌ها.

### `application_guide`
- نوع: `object`
- توضیح: هشدار ایمنی و مراحل اجرای مصرف.

### `alternative_recommendations`
- نوع: `array`
- توضیح: فهرست کودهای جایگزین قابل استفاده در شرایط مشابه.

### `sections`
- نوع: `array`
- توضیح: ساختار legacy برای سازگاری با فرانت یا کلاینت‌های قدیمی.

## فیلدهای `data.primary_recommendation`

### `fertilizer_code`
- نوع: `string`
- توضیح: کد یکتای کود پیشنهادی.

### `fertilizer_name`
- نوع: `string`
- توضیح: نام اصلی کود پیشنهادی برای نمایش.

### `display_title`
- نوع: `string`
- توضیح: عنوان نمایشی آماده برای کارت اصلی.

### `fertilizer_type`
- نوع: `string`
- توضیح: نوع کود مثل `NPK`.

### `npk_ratio`
- نوع: `object`
- توضیح: نسبت NPK به صورت ساختاریافته.

### `application_method`
- نوع: `object`
- توضیح: روش مصرف کود.

### `application_interval`
- نوع: `object`
- توضیح: فاصله زمانی پیشنهادی بین دفعات مصرف.

### `dosage`
- نوع: `object`
- توضیح: مقادیر پایه مصرف که فرانت با آن‌ها مقدار مورد نیاز را حساب می‌کند.

### `reasoning`
- نوع: `string`
- توضیح: توضیح علمی و عملی درباره دلیل انتخاب این توصیه.

### `summary`
- نوع: `string`
- توضیح: خلاصه کوتاه و مناسب نمایش در بخش اصلی فرانت.

## فیلدهای `data.primary_recommendation.npk_ratio`

### `n`
- نوع: `number`
- توضیح: درصد نیتروژن در کود پیشنهادی.

### `p`
- نوع: `number`
- توضیح: درصد فسفر در کود پیشنهادی.

### `k`
- نوع: `number`
- توضیح: درصد پتاسیم در کود پیشنهادی.

### `label`
- نوع: `string`
- توضیح: نمایش متنی نسبت NPK مثل `20-20-20`.

## فیلدهای `data.primary_recommendation.application_method`

### `id`
- نوع: `string`
- توضیح: شناسه استاندارد روش مصرف مثل `fertigation` یا `foliar_fertigation`.

### `label`
- نوع: `string`
- توضیح: متن آماده نمایش برای روش مصرف.

## فیلدهای `data.primary_recommendation.application_interval`

### `value`
- نوع: `number`
- توضیح: فاصله مصرف به صورت عددی.

### `unit`
- نوع: `string`
- توضیح: واحد فاصله مصرف مثل `day`.

### `label`
- نوع: `string`
- توضیح: متن آماده نمایش مثل `هر 14 روز`.

## فیلدهای `data.primary_recommendation.dosage`

### `base_amount_per_hectare`
- نوع: `number`
- توضیح: مقدار پایه مصرف در هر هکتار.

### `base_amount_per_square_meter`
- نوع: `number`
- توضیح: مقدار پایه مصرف در هر متر مربع.

### `unit`
- نوع: `string`
- توضیح: واحد مقدار مصرف مثل `kg`.

### `label`
- نوع: `string`
- توضیح: متن آماده نمایش دوز مثل `65 کیلوگرم در هکتار`.

### `calculation_basis`
- نوع: `string`
- توضیح: مبنای محاسبه دوز؛ معمولاً نام engine یا منبع محاسبه است.

## نکته محاسبه برای فرانت

فرانت باید مقدار نهایی را خودش با استفاده از نسبت پایه محاسبه کند.

فرمول پیشنهادی:

```text
مقدار کل = base_amount_per_square_meter × مساحت مزرعه
```

## فیلدهای `data.nutrient_analysis`

### `macro`
- نوع: `array`
- توضیح: لیست عناصر اصلی شامل N، P و K.

### `micro`
- نوع: `array`
- توضیح: لیست ریزمغذی‌ها مثل آهن، روی، منگنز و غیره. ممکن است خالی باشد.

## فیلدهای هر آیتم در `data.nutrient_analysis.macro[]` و `data.nutrient_analysis.micro[]`

### `key`
- نوع: `string`
- توضیح: کلید استاندارد عنصر مثل `n`، `p`، `k`، `fe` یا `zn`.

### `name`
- نوع: `string`
- توضیح: نام نمایشی عنصر.

### `value`
- نوع: `number`
- توضیح: مقدار عنصر، معمولاً به صورت درصد.

### `unit`
- نوع: `string`
- توضیح: واحد عنصر، معمولاً `percent`.

### `description`
- نوع: `string`
- توضیح: توضیح کوتاه درباره نقش یا اهمیت آن عنصر.

## فیلدهای `data.application_guide`

### `safety_warning`
- نوع: `string`
- توضیح: هشدار ایمنی و اجرایی قبل از مصرف.

### `steps`
- نوع: `array`
- توضیح: مراحل پیشنهادی اجرا.

## فیلدهای هر آیتم در `data.application_guide.steps[]`

### `step_number`
- نوع: `number`
- توضیح: شماره مرحله اجرا.

### `title`
- نوع: `string`
- توضیح: عنوان کوتاه مرحله.

### `description`
- نوع: `string`
- توضیح: توضیح کامل مرحله.

## فیلدهای هر آیتم در `data.alternative_recommendations[]`

### `fertilizer_code`
- نوع: `string`
- توضیح: کد یکتای کود جایگزین.

### `fertilizer_name`
- نوع: `string`
- توضیح: نام کود جایگزین.

### `fertilizer_type`
- نوع: `string`
- توضیح: نوع کود جایگزین.

### `usage_method`
- نوع: `string`
- توضیح: روش مصرف کود جایگزین.

### `description`
- نوع: `string`
- توضیح: توضیح اینکه این جایگزین در چه شرایطی مفید است.

## فیلدهای هر آیتم در `data.sections[]`

### `type`
- نوع: `string`
- توضیح: نوع بخش مثل `recommendation`، `list` یا `warning`.

### `title`
- نوع: `string`
- توضیح: عنوان بخش.

### `icon`
- نوع: `string`
- توضیح: آیکون نمایشی بخش.

### `content`
- نوع: `string`
- توضیح: متن اصلی بخش.

### `items`
- نوع: `array`
- توضیح: لیست آیتم‌های متنی برای بخش‌های لیستی.

### `fertilizerType`
- نوع: `string`
- توضیح: نسخه legacy نوع کود برای نمایش در کلاینت‌های قدیمی.

### `amount`
- نوع: `string`
- توضیح: نسخه legacy مقدار مصرف برای کلاینت‌های قدیمی.

### `applicationMethod`
- نوع: `string`
- توضیح: نسخه legacy روش مصرف.

### `timing`
- نوع: `string`
- توضیح: نسخه legacy زمان مناسب اجرا.

### `validityPeriod`
- نوع: `string`
- توضیح: نسخه legacy مدت اعتبار توصیه.

### `expandableExplanation`
- نوع: `string`
- توضیح: نسخه legacy توضیح کامل‌تر برای نمایش بازشونده.

## فیلدهای حذف شده

فیلدهای زیر دیگر در خروجی اصلی استفاده نمی‌شوند:

- `recommendation_id`
- `crop`
- `growth_stage`
- `total_amount`
- `area` در request
