# لیست APIهایی که با استفاده از PCSE تحلیل انجام می‌دهند

این فایل APIهایی را فهرست می‌کند که در این پروژه یا مستقیماً از `PCSE` استفاده می‌کنند، یا بخشی از تحلیلشان به خروجی‌های شبیه‌سازی `PCSE` وابسته است.  
همچنین مشخص می‌کند:

- از چه مدل `PCSE` استفاده می‌شود
- ورودی‌های لازم `PCSE` در این پروژه از کجا تأمین می‌شوند
- برنامه آبیاری، برنامه کودهی و داده آب‌وهوا چطور به مدل تزریق می‌شوند

## مدل PCSE مورد استفاده در پروژه

مدل پیش‌فرضی که در سرویس شبیه‌سازی استفاده می‌شود این است:

- `Wofost81_NWLP_CWB_CNB`

توضیح کوتاه:

- `Wofost81`: نسخه 8.1 از خانواده مدل‌های WOFOST
- `NWLP`: شبیه‌سازی با محدودیت نیتروژن
- `CWB`: water balance
- `CNB`: carbon/nitrogen balance

بنابراین APIهایی که واقعاً از موتور اصلی شبیه‌سازی استفاده می‌کنند، عملاً روی این مدل اجرا می‌شوند مگر اینکه بعداً در کد override شده باشد.

## PCSE در این پروژه چه ورودی‌هایی می‌خواهد؟

در این پروژه لایه شبیه‌سازی برای اجرای `PCSE` این ورودی‌ها را می‌سازد:

### 1. `weather`
رکوردهای آب‌وهوا با فیلدهای زیر:

- `DAY`
- `LAT`
- `LON`
- `ELEV`
- `IRRAD`
- `TMIN`
- `TMAX`
- `VAP`
- `WIND`
- `RAIN`
- `E0`
- `ES0`
- `ET0`

### 2. `soil`
پارامترهای خاک، از جمله:

- `SMFCF`
- `SMW`
- `SM0`
- `RDMSOL`
- `CRAIRC`
- `SOPE`
- `KSUB`

و در این پروژه بعضی شاخص‌های کمکی هم کنار آن نگهداری می‌شوند، مثل:

- `nitrogen`
- `phosphorus`
- `potassium`
- `soil_ph`
- `electrical_conductivity`

### 3. `site_parameters`
پارامترهای سایت/شرایط اولیه، از جمله:

- `WAV`
- `SMLIM`
- `IFUNRN`
- `NOTINF`
- `SSI`
- `SSMAX`
- `NAVAILI`

### 4. `crop_parameters`
پارامترهای محصول. این‌ها یا از پروفایل شبیه‌سازی گیاه می‌آیند، یا اگر موجود نباشند به‌صورت default ساخته می‌شوند. مهم‌ترین defaultها:

- `crop_name`
- `TSUM1`
- `TSUM2`
- `YIELD_SCALE`
- `MAX_LAI`
- `MAX_BIOMASS`

### 5. `agromanagement`
تقویم و رویدادهای زراعی، شامل:

- `CropCalendar`
- `TimedEvents`
- `StateEvents`

همین بخش جایی است که برنامه آبیاری و برنامه کودهی به شبیه‌سازی تزریق می‌شود.

## ورودی‌ها از کجا می‌آیند؟

### آب‌وهوا
منبع اصلی:

- جدول `WeatherForecast`

مسیر تولید:

- با `farm_uuid` مزرعه پیدا می‌شود
- از `center_location` مزرعه، forecastها خوانده می‌شوند
- معمولاً تا `14` روز آینده برداشته می‌شوند
- داده‌های `precipitation` و `et0` که در دیتابیس به `mm/day` هستند، برای `PCSE` به `cm/day` تبدیل می‌شوند

فیلدهایی که از forecast استفاده می‌شوند:

- `forecast_date` → `DAY`
- `temperature_min` → `TMIN`
- `temperature_max` یا `temperature_mean` → `TMAX`
- `humidity_mean` → `VAP`
- `wind_speed_max` → `WIND`
- `precipitation` → `RAIN`
- `et0` → `E0`, `ES0`, `ET0`

اگر کاربر خودش `weather` را مستقیم بدهد، همان ورودی مستقیم استفاده می‌شود.

### خاک و وضعیت سایت
منبع اصلی:

- جدول `SensorData`
- رابطه `center_location.depths`
- بخشی از `sensor_payload`

نحوه ساخت:

- از لایه سطحی خاک (`top_depth`) پارامترهایی مثل `wv0033`, `wv1500`, `porosity` خوانده می‌شوند
- از روی آن‌ها `SMFCF`, `SMW`, `SM0` ساخته می‌شود
- از `sensor_payload`، شاخص‌هایی مثل `soil_moisture`, `nitrogen`, `phosphorus`, `potassium`, `soil_ph`, `electrical_conductivity` استخراج می‌شود
- سپس از این‌ها `soil` و `site_parameters` نهایی ساخته می‌شود

### پارامترهای محصول
منبع اصلی:

- مدل `Plant`

اولویت تأمین:

1. `simulation profile` داخل یکی از این profileها:
   - `growth_profile.simulation`
   - `irrigation_profile.simulation`
   - `health_profile.simulation`
2. اگر profile آماده وجود نداشته باشد، پارامترهای پیش‌فرض از روی اطلاعات رشد گیاه ساخته می‌شوند

### تقویم زراعی `agromanagement`
منبع اصلی:

- اگر در `simulation profile` گیاه موجود باشد، از همان استفاده می‌شود
- وگرنه به‌صورت پیش‌فرض از بازه زمانی آب‌وهوای موجود ساخته می‌شود

ساختار پیش‌فرض:

- `crop_start_date` از اولین روز forecast
- `crop_end_date` از آخرین روز forecast یا کمی بعد از آن
- `TimedEvents` و `StateEvents` به‌صورت اولیه خالی هستند

## 1) APIهای مستقیم و قطعی مبتنی بر PCSE

### 1. `POST /api/crop-simulation/growth/`
- کاربرد: اجرای شبیه‌سازی رشد گیاه.
- نقش PCSE: هسته اصلی این API اجرای مدل شبیه‌سازی `PCSE/WOFOST` است.
- مدل PCSE: `Wofost81_NWLP_CWB_CNB`
- ورودی‌ها:
  - آب‌وهوا: از `WeatherForecast` یا ورودی مستقیم `weather`
  - خاک: از `SensorData` و `center_location.depths`
  - crop parameters: از `Plant` و `simulation profile` یا default
  - agromanagement: از `simulation profile` یا default
- نوع استفاده: مستقیم.

### 2. `GET /api/crop-simulation/growth/<task_id>/status/`
- کاربرد: دریافت وضعیت و نتیجه شبیه‌سازی رشد.
- نقش PCSE: نتیجه‌ای که برمی‌گرداند خروجی همان شبیه‌سازی مبتنی بر `PCSE` است.
- مدل PCSE: `Wofost81_NWLP_CWB_CNB`
- نوع استفاده: مستقیم.

### 3. `POST /api/crop-simulation/current-farm-chart/`
- کاربرد: تولید chart وضعیت فعلی مزرعه.
- نقش PCSE: داده‌های chart مثل `LAI`، `TAGP`، `TWSO`، `SM` و `daily_output` از شبیه‌سازی `PCSE` ساخته می‌شوند.
- مدل PCSE: `Wofost81_NWLP_CWB_CNB`
- ورودی‌ها:
  - `farm_uuid`
  - آب‌وهوا از `WeatherForecast`
  - خاک/سایت از `SensorData` و داده‌های خاک location
  - پارامتر گیاه از `Plant`
- نوع استفاده: مستقیم.

### 4. `POST /api/crop-simulation/yield-prediction/`
- کاربرد: پیش‌بینی عملکرد مزرعه.
- نقش PCSE: عملکرد پیش‌بینی‌شده از خروجی شبیه‌سازی رشد/خروجی‌های `PCSE` استخراج می‌شود.
- مدل PCSE: `Wofost81_NWLP_CWB_CNB`
- ورودی‌ها: همان ورودی‌های `current-farm-chart`
- نوع استفاده: مستقیم.

### 5. `POST /api/crop-simulation/harvest-prediction/`
- کاربرد: پیش‌بینی زمان تقریبی برداشت.
- نقش PCSE: با استفاده از `daily_output`، `DVS` و سایر خروجی‌های شبیه‌سازی، زمان رسیدن به برداشت برآورد می‌شود.
- مدل PCSE: `Wofost81_NWLP_CWB_CNB`
- ورودی‌ها: همان ورودی‌های شبیه‌سازی رشد مزرعه
- نوع استفاده: مستقیم.

### 6. `GET /api/crop-simulation/yield-harvest-summary/`
- کاربرد: خلاصه عملکرد و برداشت.
- نقش PCSE: چند بخش این API مثل `yield_prediction`، `harvest_prediction_card` و `yield_prediction_chart` از خروجی‌های شبیه‌سازی `PCSE` تغذیه می‌شوند.
- مدل PCSE: `Wofost81_NWLP_CWB_CNB`
- ورودی‌ها:
  - خروجی `yield_prediction`
  - خروجی `harvest_prediction`
  - خروجی `current-farm-chart`
  - همگی در نهایت متکی به همان ورودی‌های farm/weather/soil/plant هستند
- نوع استفاده: مستقیم/ترکیبی.

### 7. `POST /api/irrigation/water-stress/`
- کاربرد: محاسبه شاخص تنش آبی مزرعه.
- نقش PCSE: این API از شبیه‌سازی `crop_simulation` استفاده می‌کند و شاخص تنش آبی را با تکیه بر خروجی‌هایی مثل `SM`، `DVS`، `ET0` و `RAIN` می‌سازد.
- مدل PCSE: `Wofost81_NWLP_CWB_CNB`
- ورودی‌ها:
  - آب‌وهوا از `WeatherForecast`
  - خاک و رطوبت خاک از `SensorData`
  - پارامتر گیاه از `Plant`
- نوع استفاده: مستقیم، ولی شاخص نهایی یک فرمول داخلی روی خروجی شبیه‌سازی است.

## 2) APIهایی که بخشی از تحلیلشان ممکن است با PCSE انجام شود

### 8. `POST /api/irrigation/recommend/`
- کاربرد: تولید توصیه آبیاری.
- نقش PCSE: در صورت موجود بودن `simulation profile`، داده مزرعه و forecast مناسب، optimizer ابتدا سناریوهای آبیاری را با `PCSE` ارزیابی می‌کند.
- مدل PCSE: `Wofost81_NWLP_CWB_CNB`
- برنامه آبیاری از کجا می‌آید؟
  - ابتدا در خود سیستم چند strategy ساخته می‌شود
  - بر اساس `daily_water_needs` و تعداد eventها، برای هر سناریو `irrigation_events` ساخته می‌شود
  - این eventها به شکل `TimedEvents` با سیگنال `irrigate` وارد `agromanagement` می‌شوند
- آب‌وهوا از کجا می‌آید؟
  - از forecastهای جدول `WeatherForecast`
- سایر ورودی‌ها از کجا می‌آیند؟
  - خاک و رطوبت و مواد غذایی: از `SensorData`
  - گیاه و simulation profile: از `Plant`
- نکته: اگر شرایط کافی نباشد، به مسیر heuristic برمی‌گردد.
- نوع استفاده: مشروط/جزئی.

### 9. `POST /api/fertilization/recommend/`
- کاربرد: تولید توصیه کودهی.
- نقش PCSE: در صورت موجود بودن `simulation profile` و forecast، سناریوهای کودهی با `PCSE` شبیه‌سازی و امتیازدهی می‌شوند.
- مدل PCSE: `Wofost81_NWLP_CWB_CNB`
- برنامه کودهی از کجا می‌آید؟
  - optimizer چند سناریوی کودهی می‌سازد
  - برای هر سناریو event کودهی به شکل `TimedEvents`
  - با سیگنال `apply_n`
  - و payload شامل `N_amount` و `N_recovery`
  - وارد `agromanagement` می‌شود
- آب‌وهوا از کجا می‌آید؟
  - از forecastهای جدول `WeatherForecast`
- سایر ورودی‌ها از کجا می‌آیند؟
  - خاک و وضعیت عناصر از `SensorData`
  - پروفایل گیاه از `Plant`
- نکته: اگر `PCSE` یا داده کافی در دسترس نباشد، fallback heuristic استفاده می‌شود.
- نوع استفاده: مشروط/جزئی.

## 3) APIهایی که از PCSE استفاده نمی‌کنند

این endpointها در همین حوزه هستند اما خودشان تحلیل مبتنی بر `PCSE` انجام نمی‌دهند:

- `POST /api/irrigation/plan-from-text/`
- `POST /api/fertilization/plan-from-text/`

این دو بیشتر parser متن آزاد هستند و برنامه را از متن به JSON ساختاریافته تبدیل می‌کنند.

## جمع‌بندی کوتاه

اگر بخواهیم فقط APIهایی را نام ببریم که واقعاً تحلیل یا شبیه‌سازی وابسته به `PCSE` دارند، مهم‌ترین‌ها این‌ها هستند:

- `POST /api/crop-simulation/growth/`
- `GET /api/crop-simulation/growth/<task_id>/status/`
- `POST /api/crop-simulation/current-farm-chart/`
- `POST /api/crop-simulation/yield-prediction/`
- `POST /api/crop-simulation/harvest-prediction/`
- `GET /api/crop-simulation/yield-harvest-summary/`
- `POST /api/irrigation/water-stress/`
- `POST /api/irrigation/recommend/` (مشروط)
- `POST /api/fertilization/recommend/` (مشروط)

## جمع‌بندی فنی خیلی کوتاه

- مدل اصلی `PCSE` در این پروژه: `Wofost81_NWLP_CWB_CNB`
- آب‌وهوا عمدتاً از `WeatherForecast` می‌آید
- خاک و رطوبت و بخشی از وضعیت تغذیه از `SensorData` و داده‌های خاک location می‌آید
- پارامترهای گیاه و setup شبیه‌سازی از `Plant` و `simulation profile` می‌آید
- برنامه آبیاری و کودهی در optimizer ساخته می‌شوند و از طریق `TimedEvents` داخل `agromanagement` به `PCSE` تزریق می‌شوند
