Rotaciones
Introducción
Rotaciones u Organizador de cultivo es una funcionalidad dentro del módulo de gestión que permite asignar cultivos por lote de una forma rápida y sencilla sin necesidad de generar un registro de siembra. A través de esta funcionalidad, los usuarios tienen la posibilidad de registrar información detallada sobre el cultivo, como la variedad sembrada, la cantidad de hectáreas que se sembrarán, el rendimiento estimado y otros detalles relevantes.
Para hacer uso de los endpoints que se detallarán a continuación, el developer debe activar en el claimset de la extensión los permisos que se encuentran bajo el nombre 'Campaign'.
APIs
GET
Listado de todas las rotaciones de los campos sobre los cuales el usuario tiene permisos, para todas las campañas.
GET /api/rotations
Query params
En la query string se pueden enviar los siguientes parámetros, los cuales aplican una condición AND para filtrar:
yeargroup
:number
, recibe el año en el cual se quieren buscar las rotaciones (2022, 2023, etc.)fields_id
:integer
, recibe uno o más IDs de lotes separados por coma.fields_uuid
:string
, recibe uno o más UUIDs de lotes separados por coma.farms_id
:integer
, recibe uno o más IDs de campos separados por coma.farms_uuid
:string
, recibe uno o más UUIDs de campos separados por coma.
En cuanto a los parámetros pasados por query se debe tener en cuenta el siguiente orden de prioridad:
- 1ero: se la da primera prioridad al parámetro fields_id; si se envió éste los restantes parámetros de id o uuid no son considerados.
- 2do: si no se envió fields_id, se verifica si se envió fields_uuid.
- 3ero: si no se envió fields_uuid, se verifica si se envió farms_id.
- 4to: por último, de no darse las condiciones anteriores, se verifica si se envió farms_uuid.
Si no se envían ninguno de estos cuatro parámetros el endpoint retornará la información correspondiente a todos los lotes sobre los cuales el usuario tiene permisos de lectura.
Este endpoint no tiene paginación implementada, por ende se retornan todos los registros existentes dentro de un array (bajo la key
data
) en una sola respuesta.
Ejemplo de respuesta:
{
"data": [
{
"farm_uuid": "9238b494-a535-4357-851f-074346ee520a",
"map_id": null,
"varieties": [
{
"crop_variety_id": 62529,
"id": 16526,
"crop_variety_name": "N25"
}
],
"end_date": "2024-07-01T02:59:59Z",
"yeargroup": 2024,
"start_date": "2024-01-01T03:00:00Z",
"farm_id": 149561,
"field_id": 497297,
"crop_id": 1,
"field_uuid": "778fd10e-e2a8-4884-9c63-19cb69511297",
"crop_name": "Algodón",
"cicle_id": 335685,
"rotation_uuid": "caff5a90-5b73-4a6c-a2e8-b60ac9db4e8c",
"yield_crop": null,
"ha": 1.0201288,
"field_name": "616500771116",
"crop_order": 1,
"metadata": {
"DGC": 0,
"cover_type": 0,
"utilization": [],
"agricultural_activity_details": [],
"plant_spacing_unit": "m",
"crown_projection_free_width_unit": "m",
"cover_width": 0,
"row_spacing_value": 0,
"crown_projection_free_width": 0,
"row_spacing_unit": "m",
"activity_on_cover": 0,
"flooding_date": null,
"production_type": 1,
"cover_width_unit": "m"
}
}
]
}
farm_uuid
: uuid del campo en el que se guardó la rotación.map_id
: id del mapa asociado a la rotación. Solo se puede asociar un mapa por rotación.varieties
: puede devolver un valornull
o puede devolver un array con las siguientes propiedades:crop_variety_id
: id de la variedad del cultivo.id
: id de la variedad.crop_variety_name
: nombre de la variedad del cultivo.
end_date
: fecha de finalización de la rotación.yeargroup
: año de la campaña a la que pertenece la rotación.start_date
: fecha de inicio de la rotación.farm_id
: id del campo en el que se guardó la rotación.field_id
: id del lote en el que se guardó la rotación.crop_id
: id del cultivo asociado a la rotación.field_uuid
: uuid del lote en el que se guardó la rotación.crop_name
: nombre del cultivo asociado a la rotación.cicle_id
: id del ciclo donde fue cargada la rotación. El ciclo viene a representar el conjunto de registros de rotaciones que se guardaron dentro de una campaña determinada.rotation_uuid
: uuid de la rotación.yield_crop
: rendimiento estimado, siempre medido en toneladas por hectárea.ha
: cantidad de hectáreas asignadas a la rotación.field_name
: nombre del lote.crop_order
: id del orden en el que se encuentra ubicada la rotación dentro de la campaña donde fue registrada. Por ejemplo, si la rotación se encuentra en el primer lugar dentro de la campaña, el crop_order va a ser igual a 1 y así sucesivamente.metadata
: puede devolver un valornull
o puede devolver un array con las siguientes propiedades:DGC
: valor correspondiente al identificador interno de la delimitación geográfica de cultivo de REA. Formato: número de 16 dígitos. Este valor solo debe ser agregado en lotes ubicados en España.cover_type
: id del tipo de cobertura escogida en la rotación, el cual puede ser 1 ("Suelo desnudo"), 2 ("Cubierta vegetal sembrada"), 3 ("Cubierta vegetal espontánea"), 4 ("Cubierta inerte de restos de poda") o 5 ("Cubierta inerte de otros materiales (cáscaras de frutos secos, piedras, otros restos vegetales, etc.)").utilization
: listado de ids (numéricos) que representan el aprovechamiento.agricultural_activity_details
: listado de ids (numéricos) que representan el detalle de actividad agraria.plant_spacing_value
: distancia entre plantas.plant_spacing_unit
: unidad de la distancia entre plantas, siempre es en metros.crown_projection_free_width_unit
: unidad de la anchura libre de la proyección de la copa.cover_width
: anchura de la cubierta.crown_projection_free_width
: anchura libre de la proyección de la copa.row_spacing_unit
: unidad de la distancia entre hileras, siempre es en metros.row_spacing_value
: distancia entre hileras.activity_on_cover
: id que representa la actividad sobre la cobertura.production_type
: id del tipo de producción escogida en la rotación, el cual puede ser 1 ("Secano") o 2 ("Regadio"),cover_width_unit
: unidad de la anchura de la cubierta.cover_date
: fecha de establecimiento de cobertura.
Path params
Por otro lado, además de hacer una consulta a través de parámetros en la query string, se puede hacer otro tipo de consulta pero filtrando por UUID de rotación de la siguiente manera:
GET /api/rotations/rotation_uuid
Al hacer la consulta de esta manera, todos los query params mencionados anteriormente dejan de tener efecto en el filtrado de la consulta.
Ejemplo de respuesta:
{
"data": {
"map_id": null,
"end_date": "2023-12-01T02:59:59Z",
"surface_unit": null,
"field_id": 217000,
"field_uuid": "313204-0458731-4asf-bfee-fas4ceda54321",
"yield_crop": null,
"ha": 100,
"crop_order": 1,
"varieties": null,
"yeargroup": 2023,
"crop_id": 8,
"crop_name": "Colza",
"cicle_id": 110876,
"rotation_uuid": "183005c4-94eb-169d-7a19-rt27a2e180a6",
"start_date": "2023-11-20T03:00:00Z",
"metadata": null
}
}
Al retornar un solo registro, la key data
ya no devuelve un array sino un único objeto con la información correspondiente a la rotación consultada.
POST
Content-Type: application/json
POST /rotations
En el cuerpo de la consulta, incluir un array de objetos que representan cada rotación a crear. Cada objeto debe incluir:
field_id
:number
(obligatorio), id del lote al cual se quiere asociar la rotación.crop_id
:number
(obligatorio), id del cultivo.yeargroup
:number
(obligatorio), año en el cual se quiere definir la rotación.ha
:number
, hectáreas sobre las cuales se quiere definir la rotación.start_date
:datetime
(obligatorio), fecha de inicio de la rotación [formato YYYY-MM-DDTHH:mm:ssZ].end_date
:datetime
(obligatorio), fecha de fin de la rotación [formato YYYY-MM-DDTHH:mm:ssZ].
Respuesta:
La API responde dos listas; una con las rotaciones creadas y otra con las que no se pudieron crear.
Ejemplo de respuesta:
{
"data": {
"created_ones": [
{
"end_date": null,
"yeargroup": 2022,
"field_id": 258388,
"crop_id": 6,
"crop_name": null,
"cicle_id": 65805,
"start_date": null,
"ha": null,
"crop_order": 4,
"rotation_uuid": "b11f12b1-3265-4756-b18b-45de101da547"
}
],
"unabled_to_be_created": [
{
"varieties": null,
"end_date": "2024-02-01T00:00:00Z",
"yeargroup": 2023,
"start_date": "2023-11-01T00:00:00Z",
"field_id": 321961,
"reason": {
"error_code": -11,
"error_msg": "User is not allowed to perform this action"
},
"crop_id": 2,
"field_uuid": null,
"crop_name": null,
"cicle_id": null,
"rotation_uuid": null,
"yield_crop": null,
"ha": null,
"crop_order": null,
"metadata": null
}
]
}
}
PATCH
Content-Type: application/json
PATCH: /rotations/{rotation_uuid}
Se pueden modificar ciertos aspectos de una rotación:
- ha
- crop_id
- start_date
- end_date
Ejemplo de body:
PATCH /rotations/898430ea-fc6f-4a46-a7c6-9890ea702a41
{
"ha": 140,
"start_date":"2022-08-09 21:00:00.000",
"end_date": "2023-01-09 21:00:00.000",
"crop_id": 6
}
Ejemplo de respuesta:
Status: 200 OK
{
"crop_variety_id": 37582,
"crop_order": 1,
"end_date": "2023-01-09 21:00:00.000",
"yeargroup": 2022,
"crop_variety_name": "Colorado Chino",
"field_id": 258482,
"crop_id": 6,
"crop_name": "Cebada",
"cicle_id": 65847,
"rotation_uuid": "898430ea-fc6f-4a46-a7c6-9890ea702a41",
"ha": 140,
"start_date": "2022-08-09 21:00:00.000"
}
VARIEDADES EN ROTACIONES
/rotations/variety/{rotation_uuid}
GET
Devuelve un listado de las variedades disponibles para el cultivo asociado a la rotación.
Ejemplo de respuesta:
{
"varieties": [
{
"variety_id": 37634,
"variety_name": "Variedad 1"
},
{
"variety_id": 40138,
"variety_name": "Variedad 2"
}
]
}
POST
Éste método es usado para agregar una o más variedades a una rotación.
En el cuerpo se debe enviar un listado con las variedades que se quieren agregar.
Ejemplo de cuerpo:
{
"varieties": [37634, 33305]
}
varieties
: array de ids de variedades.
DELETE
Éste método se usa para eliminar una variable de una rotación.
/rotations/variety/{rotation_uuid}?variety_id={variety_id}
variety_id
: id de la variedad que se quiere eliminar.