Saltar al contenido principal

API Labores

Insumos

Introducción

Bajo el concepto de insumo la plataforma permite registrar cualquier elemento que se aplica/consume/utiliza en una labor , siendo su uso principal fertilizantes, fitosanitarios, entre otros, pero pudiendo cargar cualquier elemento deseado por el usuario (abonos orgánicos, semillas, etc).

Existe un listado maestro de insumos definido por Auravant, compartido por todos los usuarios. El mismo se compone de un creciente grupo de productos de gran popularidad que a su vez tienen aparejados sus componentes (nutrientes, principio activos, etc). Cada usuario podrá adicionar sus propios insumos, siendo estos exclusivamente de uso personal.

Insumos en PATCH y POST de labores

Los PATCH y POST de APIs de labores reciben como parámetro los insumos asociados. Cada vez que se consulte a estas APIs se debe tener en cuenta que los insumos no se crean, modifican o eliminan de una labor de manera individual, sino que siempre se provee (cuando corresponde) el listado completo y final de los mismos. En otras palabras, dicho listado debe reflejar el estado actual de estos.

Se deberá proveer a la API de labor correspondiente el listado completo de insumos, reflejando éste el estado actual (y final) de los mismos.

Al consultar estas APIs, los insumos se representan mediante un array con objetos cuyos parámetros son:

  • id: integer, ID de un insumo ya existente (propio o del maestro)
  • uuid: string, UUID de un insumo, existente o nuevo
  • name: string, nombre del insumo, pudiendo repetirse dentro del listado propio del usuario
  • dose: float, dosis aplicada.
  • unit: string, unidad de la dosis. Ejemplo "kg/ha".
  • observations: string, algún comentario adicional (opcional).

Este array permite dar de alta o modificar insumos:

  • Alta: cuando no se provea ID o UUID pre existente, se creará dicho insumo. Cuando se provea un UUID que no existe en el listado personal del usuario, se creará con dicho identificador unívoco (nótese que el nombre puede no ser único)
  • Modificación: Si se provee el ID o UUID y el resto de los parámetros difiere.

APIs

GET

Listado de todos los insumos, tanto generales como aquellos específicos de cada usuario (discriminándose mediante el flag booleano user_input).

Content-Type: text/plain
GET /api/registro_campo/insumos

En la query string se pueden enviar los siguientes parámetros, los cuales aplican una condición AND para filtrar:

  • user_input: boolean, si el valor es true trae todos los insumos que hayan sido creados por el usuario
  • code: integer, código del insumo.
  • country: string, identificador de país de dos letras, por ejemplo AR, ES, BR

Al filtrar por el campo country traerá los insumos del país seleccionado y aquellos cuyo valor de country sea null

Ejemplo de respuesta:

[
{
"user_input": false,
"code": "25722",
"name": "kaiso sorbie",
"density": null,
"country": "ES",
"company": "nufarm españa, s.a.",
"id": 45109,
"state": "eg",
"components": [
{
"uuid": "d971fa18-acc3-11eb-8340-e7e492ced828",
"active_principle": true,
"eiq_1": null,
"concentration": 0.05,
"id": 131,
"name": "lambda cihalotrin"
}
],
"type": "pesticida",
"composition": null,
"uuid": "f165e203-acc5-11eb-8340-bfbcc0f16154"
},
{
"user_input": false,
"code": "34120",
"name": "kalibre 25",
"density": null,
"country": "AR",
"company": "grupo agros s.a.",
"id": 50452,
"state": "ec",
"components": [
{
"uuid": "e8898fcc-acc6-11eb-8340-9358ca0ed91b",
"active_principle": true,
"eiq_1": null,
"concentration": 0.25,
"id": 430,
"name": "cipermetrina"
}
],
"type": "pesticida",
"composition": null,
"uuid": "6c029912-d825-11eb-8340-138fd03ff513"
}
]

POST

Creación de insumos personales de un usuario.

Content-Type: application/json
POST /registro_campo/insumo

En el cuerpo de la consulta, incluir un array de objetos que representan cada insumo a crear. Cada objeto debe incluir:

  • uuid: string, UUID del insumo
  • name: string, nombre del insumo

name es obligatorio en cada uno. uuid será autogenerado en caso de no estar presente.

Ejemplo de respuesta:

{
"status": "successful inputs creation",
"res": "OK",
"denied": [],
"created": [
{
"nombre": "input_test_10",
"id": 1027,
"uuid": "9b6ab856-79da-11ea-bd20-b7046fc84ed8"
},
{
"nombre": "input_test_11",
"id": 1028,
"uuid": "9b6ab857-79da-11ea-bd20-03791c820c43"
},
{
"nombre": "input_test_12",
"id": 1029,
"uuid": "9b6ab858-79da-11ea-bd20-effc08625f5f"
}
]
}

PATCH

Modificación de insumos (sólo los registrados por el usuario).

Content-Type: application/json
PATCH /registro_campo/insumo

En el cuerpo de la consulta, incluir un arreglo de objetos que representan cada insumo a modificar. Cada objeto debe incluir:

  • uuid: string, UUID del insumo a modificar
  • id: integer, ID de insumo a modificar
  • name: string, nuevo nombre del insumo

Ejemplo de respuesta:

{
"status": "successful inputs modification",
"res": "OK",
"modificated": [
{
"id": 1027,
"name": "modified_input_test_10",
"uuid": "9b6ab856-79da-11ea-bd20-b7046fc84ed8"
},
{
"id": 1028,
"name": "modified_input_test_11",
"uuid": "9b6ab857-79da-11ea-bd20-03791c820c43"
},
{
"id": 1029,
"name": "modified_input_test_12",
"uuid": "9b6ab858-79da-11ea-bd20-effc08625f5f"
}
],
"denied": []
}

DELETE

Eliminación de insumos (sólo los registrados por el usuario).

Content-Type: application/json
DELETE /registro_campo/insumo

En el cuerpo de la consulta, incluir un arreglo de objetos que representan cada insumo a eliminar. Cada objeto debe incluir:

  • uuid: string, UUID del insumo
  • id: integer, ID de insumo

Ejemplo de respuesta:

{
"status": "successful inputs deletion",
"res": "OK",
"deleted": [
{
"id": 1027,
"name": "modified_input_test_10",
"uuid": "9b6ab856-79da-11ea-bd20-b7046fc84ed8"
},
{
"id": 1028,
"name": "modified_input_test_11",
"uuid": "9b6ab857-79da-11ea-bd20-03791c820c43"
},
{
"id": 1029,
"name": "modified_input_test_12",
"uuid": "9b6ab858-79da-11ea-bd20-effc08625f5f"
}
],
"denied": []
}

Cultivos

Contamos con una API de cultivos, la cual devuelve al usuario un listado de los cultivos disponibles.

Este listado se forma a partir de dos fuentes:

  • Cultivos definidos por Auravant.
  • Cultivos cargados manualmente por el usuario.
GET /getcultivos

Labores

En Auravant, toda actividad realizada en un lote recibe el nombre de labor y puede ser registrada mediante el módulo "Registro de Campaña".

Actualmente existen tres tipos de labores:

Gran parte del potencial de la funcionalidad radica en que todos los tipos de labores tiene información en común. Sin embargo, cada una posee datos específicos a relevar, propios de la actividad.

Asociación a una Campaña

Con el fin de reflejar de la manera más fidedigna posible la forma de trabajo a campo, toda labor esta asociada a una campaña, actuando esta última como un agrupador que permite no sólo identificar aquellas actividades ejecutadas en un mismo ciclo productivo sino también ordenarlas en el tiempo. Para ello se emplea el parámetro yeargroup mediante el cual se define el o los años en que tiene lugar la campaña. De esta forma un yeargroup = 2019 puede identificar a un ciclo productivo que transcurre completamente en el año 2019 o a uno que comenzó en 2019 y concluyó en el año siguiente (siendo esta discriminación efectuada con el parámetro biennial)

Cada campaña se asocia univocamente a un, y sólo un lote, pudiendo tener una única campaña por yeargroup.

En la mayoría de los POST de los distintos tipos de labores, puede identificarse una campaña con su respectivo ID pero también con el ID del lote al que pertenece y su yeargroup.

Estados

En las disintas APIs de labores, se encontrará el estado (status) en el que se encuentra la labor.

IDEstado
1Planificado
2Ejecutado
3Cancelado

APIs

GET

Para obtener las labores del usuario que realiza la consulta.

Se requiere la funcionalidad Ver campaña para poder utilizarla.

GET /registro_campo/labores/v2

Es posible filtrar y paginar los resultados agregando los siguientes parámetros a la url:

  • estancia: entero, corresponde al id del campo. De no incluirse, se buscan las labores de todos los campos.
  • page_size: entero, corresponde al tamaño de página (cantidad de labores a buscar).
  • page: entero, corresponde al número de página.
  • campana o yeargroup: (opcional) entero, corresponde al yeargroup. Se buscarán las campañas de dicho yeargroup. Por default se toma el año corriente. Si se colocan ambos parámetros, sólo se tendrá en cuenta en parámetro yeargroup.
  • fields: (opcional) string, lista de fields separados por coma.
  • labors: (opcional) string, id de las labores a obtener separadas por coma.
  • date_from: (opcional) string, fecha a partir de la cual se busca obtener labores. Formato: 'yyyy/mm/dd'.
  • date_to: (opcional) string, fecha hasta la cual se busca obtener labores. Formato: 'yyyy/mm/dd'.
  • status: (opcional) entero, id del status de las labores a filtrar. ver estados.
  • crops_id: (opcional) string, lista de ids de los cultivos en los labores a filtrar.

Ejemplo de Respuesta:

{
"pagination": {
"total_pages": 1,
"page": null
},
"data": [
{
"inputs": null,
"uuid": "b05e28f4-c978-11ea-9329-9ba9b625615a",
"campaign": 28996,
"status_id": 1,
"farm": 28191,
"type_id": 2,
"type_name": "cosecha",
"field": 106350,
"completion_date": null,
"labour": 3210,
"status_name": "planificado",
"observations": null,
"yeargroup": 2020,
"date": "2020-07-24T00:00:00Z",
"specific_data": {
"quality": null,
"yield": null,
"unit": null,
"humidity": null
}
},
{
"inputs": [
{
"user_input": true,
"uuid": "7feb455a-c9e9-11ea-9329-cbd4ddaf2136",
"density": null,
"company": null,
"dose": 23,
"state": null,
"observations": null,
"components": [],
"composition": null,
"type": null,
"id": 25354,
"unit": "lt/ha",
"name": "2,4 D"
},
{
"user_input": true,
"uuid": "b967c668-ca3a-11ea-9329-8fb5d7f404f2",
"density": null,
"company": null,
"dose": 123,
"state": null,
"observations": null,
"components": [],
"composition": null,
"type": null,
"id": 25369,
"unit": "lt/ha",
"name": "Advance"
}
],
"uuid": "ac0c02d0-c83d-11ea-94c0-17a497d78233",
"campaign": 28996,
"status_id": 1,
"farm": 28191,
"type_id": 3,
"type_name": "siembra",
"field": 106350,
"completion_date": null,
"labour": 20071,
"status_name": "planificado",
"observations": "",
"yeargroup": 2020,
"date": "2020-07-17T00:00:00Z",
"specific_data": {
"sowed_area": null,
"crop_variety_id": 34166,
"actual_seed_rate_unit": null,
"is_cover_crop": false,
"target_yield_value": null,
"crop_variety_name": "Prueba",
"seed_rate_value": null,
"crop_name": "Algodón",
"row_width_value": null,
"actual_seed_rate_value": null,
"row_width_unit": null,
"target_yield_unit": null,
"crop_id": 1,
"seed_rate_unit": null
}
}
]
}

Adjuntar Archivos

En ocasiones, resulta útil adjuntar archivos a una labor en específico, para lo que necesitamos subir archivos a la plataforma y luego relacionarlos con dicha labor.

Attachments

POST

Subir una imagen o archivo a la plataforma.

Content-Type: application/x-www-form-urlencoded
POST /attachments

En el formulario incluir:

  • source:Objeto { feature: "SIEMBRA", id: labour_id }. Feature: tipo de labor,id: id de la labor.
  • file:File archivo a subir.
  • uuid: String uuid asociado al archivo. Si no se ingresa un uuid, el mismo es generado automáticamente.

Siembras

Cultivos

Los cultivos, así como sus variedades son datos que se registran en la plataforma de manera independiente para cada usuario, permitiendo así que cada uno defina el listado acorde a sus necesidades. Existen además cultivos pre cargados, siendo estos los mismos para cualquier usuario, y por tanto, no pueden ser alterado.

En las solicitudes de PATCH y POST de una siembra, el cultivo y su variedad son definidos de una manera específica.

En primer lugar es necesario destacar que no es necesario definir la varidad cuando se carga un cultivo, pero sí es mandatorio indicar el cultivo si se define una variedad.

Como puede verse en el listado a continuación, pueden utilizarse cultivos existentes o crearse nuevos directamente en el mismo formulario. Ocurre lo mismo cuando se especifique una variedad para el cultivo.

Cultivos:

  • crop: integer, corresponde al ID del cultivo, cuando se quiere utilizar un cultivo existente

o alternativamente,

  • crop: json, corresponde a los datos del cultivo, cuando se desea registrar un cultivo nuevo
    • name: string, nombre del cultivo a crear

Variedades:

  • variety: integer , corresponde al ID de una variedad existente

o alternativamente,

  • variety: json, corresponde a los datos de la variedad, cuando se desea registrar una variedad nueva
    • name: string, nombre de la variedad a crear
    • weight_x_thousand_seeds: float, peso de mil semillas

APIs

POST

Creación de una nueva labor de siembras.

Se requiere la funcionalidad Crear Labor para poder utilizarla.

Content-Type: application/json
POST /registro_campo/siembra

Una misma labor puede cargarse en más de una campaña, facilitando así el alta de actividades que aplican en más de un lote, con los mismos parámetros. Internamente esto genera la creación de tantas labores como campañas se especifiquen, utilizando los mismos datos para cada una. Así, esto supone una abstracción a nivel de API, pero no un razgo del modelo de datos interno (en el que una labor se asocia a una y sólo una campaña)

En el cuerpo de la consulta, incluir los parámetros:

  • uuids: string array, vector con UUIDs V1 (string) para identificar la o las labores creadas
  • fields: integer array, vector con IDs de lotes en los que se registrará la labor
  • campaigns: integer array, vector con IDs de campaña (si no se especifican lotes)
  • yeargroup: integer, año de la campaña (YYYY)
  • biennial: boolean, permite definir nombre de campaña como Year/Year+1 (ej, 2019/20) o YYYY (2019)
  • status: integer, estado de la labor (ver estados)
  • date: string, YYYY-MM-DD o YYYY-MM-DDTHH:MM:SSZ
  • completion_date: string, en caso de que sea una labor ya completada (YYYY-MM-DD or YYYY-MM-DDTHH:MM:SSZ)
  • observations: string, campo de texto libre para registrar lo que se desee
  • inputs: array with jsons, el listado de insumos utilizados (ver detalle)
  • crop: integer o json, cultivo sembrado (ver sección cultivos)
  • variety: integer o json, variedad del cultivo (ver sección cultivos)
  • is_cover_crop: boolean, determina si es cultivo de cobertura
  • target_yield: json, rinde esperado
    • value: float, cantidad del rinde esperado
    • unit: string, unidad de medida del rinde esperado
  • seed_rate: json, densidad de siembra esperada
    • value: float, valor de la densidad de siembra
    • unit: string, unidad de medida de la densidad de siembra
  • sowed_area: float, superficie sembrada
  • actual_seed_rate: float, densidad de siembra obtenida
    • value: float, valor de la densidad de siembra
    • unit: string, unidad de medida de la densidad de siembra
  • row_width: json, ancho de siembra
    • value: float, valor del ancho de siembra
    • unit: string, unidad de medida del ancho de siembra
  • attachments: string array, vector con los uuid de archivos adjuntos

Es mandatorio que se especifique al menos un lote o al menos una campaña en la que asignar la siembra, los parámetros restantes pueden obviarse, siendo los valores por defecto:

  • uuids: se generan automáticamente
  • yeargroup: año actual
  • biennial: True
  • status: 2
  • date: fecha actual
  • El resto se setean como NULL

Ejemplo de respuesta:

{
"res": "Siembra creada exitosamente",
"harvests": [2569, 2570, 2571],
"campaigns": [27899, 27900, 27901],
"denied_fields": [],
"supplies": null,
"created_labours": [
{
"field_id": 1000,
"labour_uuid": "100aa6ec-4e99-11eb-a4c9-b788d7fc2392",
"campaign_id": 27899
},
{
"field_id": 1001,
"labour_uuid": "100aa6ed-4e99-11eb-a4c9-0f9cea993a10",
"campaign_id": 27900
},
{
"field_id": 1002,
"labour_uuid": "100aa6ed-4e99-11eb-a4c9-0f9cea114f50",
"campaign_id": 27901
}
]
}

En las respuestas también se observarán parámetros extras. Los mismos se mantienen por retro-compatibilidad pero están contenidos en los antes mencionados por lo que pueden obviarse.

Errores específicos
CódigoDescripción
1Sin autorización
2Cultivo incorrecto
93,94,95,96,97Errores internos en la creación de insumos

PATCH

Modificación de una siembra.

Se requiere la funcionalidad Modificar Labor para poder utilizarla.

Content-Type: application/json
PATCH /registro_campo/siembra

A diferencia de la solicitud POST, en este caso no es posible operar sobre más de una labor al mismo tiempo.

Incluir en el cuerpo de la consulta los parámetros:

  • uuid: string, UUID de la labor que se desea modificar
  • campaign: integer ID de la nueva campaña
  • status: integer, 1: planificada, 2: ejecutada, 3: cancelada
  • date: string, YYYY-MM-DD o YYYY-MM-DDTHH:MM:SSZ
  • completion_date: string, YYYY-MM-DD o YYYY-MM-DDTHH:MM:SSZ
  • observations: string, campo libre de texto
  • inputs: array with jsons, del que se habló en los párrafos superiores y cuyo detalle puede verse aquí
  • attachments: array with strings, arreglo con los uuid de los archivos adjuntos a la labor.
  • crop: integer o json, cultivo sembrado (ver sección cultivos)
  • variety: integer o json, variedad del cultivo (ver sección cultivos)
  • is_cover_crop: boolean, determina si es cultivo de cobertura
  • target_yield: json, rinde esperado
    • value: float, cantidad del rinde esperado
    • unit: string, unidad de medida del rinde esperado
  • seed_rate: json, densidad de siembra esperada
    • value: float, valor de la densidad de siembra
    • unit: string, unidad de medida de la densidad de siembra
  • sowed_area: float, superficie sembrada
  • actual_seed_rate: float, densidad de siembra obtenida
    • value: float, valor de la densidad de siembra
    • unit: string, unidad de medida de la densidad de siembra
  • row_width: json, ancho de siembra
    • value: float, valor del ancho de siembra
    • unit: string, unidad de medida del ancho de siembra
  • attachments: string array, vector con los uuid de archivos adjuntos

Es obligatorio incluir el objeto completo, modificando los valores necesarios.

Ejemplo de respuesta:

{
"status": "harvest updated successfully",
"uuid": null,
"result": "OK",
"id": 2569
}
Errores específicos
CódigoDescripción
1Sin autorización
93,94,95,96,97Errores internos en la creación de insumos

GET

Hay dos maneras de obtener información de siembras. En el primer caso, con el endpoint /siembras podemos obtener una lista de siembras con su respectiva información. Por otro lado, con /registro_campo/siembra podemos obtener un objeto completo para una siembra específica.

Listado de siembras
GET /siembras

Se le puede enviar en la query string diferentes parámetros para filtrar y ordenar:

  • id_lote: Para filtrar las siembras según el lote.
  • id_campo: Para filtrar las siembras según el campo.
  • yeargroup: Para filtrar las siembras según el año.
  • id_cultivo: Para filtrar las siembras según el cultivo.
  • order: Para ordenar las siembras de manera ascendente o descendente según la fecha. Recibe asc o desc, siendo desc el valor por defecto.
  • limit: Recibe un número que limita la cantidad de siembras traídas.

Ejemplo:

fetch("https://api.auravant.com/api/siembras?id_lote=1000&limit=2",{
method: "GET"
})
.then(response => response.json())
.then(result => console.log(result))

Traería las 2 últimas siembras del lote '1000'

Ejemplo de respuesta:

{
"data": [
{
"nombre_cultivo": "Trigo",
"id_cultivo": 21,
"densidad_lograda": null,
"yeargroup": 2030,
"fecha": "2022-06-20",
"unidad_medida_densidad": null,
"nombre_variedad": null,
"unidad_densidad_lograda": null,
"densidad": null,
"id_variedad": null,
"id_lote": 1000,
"sup_sembrada": null,
"id_ciclo": 32032,
"id": 19229
},
{
"nombre_cultivo": "sandía",
"id_cultivo": 1830,
"densidad_lograda": null,
"yeargroup": 2030,
"fecha": "2020-06-15",
"unidad_medida_densidad": null,
"nombre_variedad": null,
"unidad_densidad_lograda": null,
"densidad": null,
"id_variedad": null,
"id_lote": 1000,
"sup_sembrada": null,
"id_ciclo": 45153,
"id": 33749
}
}
Siembra

Listado de todos los datos asociados a una siembra registrada por el usuario.

Para poder utilizar esta API, es necesaria la funcionalidad Ver campaña.

Content-Type: text/plain
GET /registro_campo/siembra

Parámetros en la URL:

  • uuid: string, UUID de la siembra

Ejemplo de respuesta:

{
"sowed_area": null,
"crop_variety_id": null,
"campaign": 1311,
"type_id": 3,
"completion_date": null,
"labour_id": 168,
"row_width_value": null,
"crop_name": "Trigo",
"crop_variety_name": null,
"type_name": "siembra",
"actual_seed_rate_unit": null,
"observations": null,
"target_yield_unit": null,
"status": 1,
"attachments":[],
"inputs": {
"15229": {
"user_input": false,
"name": "cruiser advanced",
"density": null,
"company": "syngenta agro s.a.",
"dose": 15,
"state": null,
"observations": null,
"components": [
{
"uuid": "e8e97bb5-e20e-11ea-a16d-23c7dae43700",
"active_principle": true,
"eiq_1": null,
"concentration": 0.35,
"id": 33,
"name": "tiametoxam"
},
{
"uuid": "e8e97bb4-e20e-11ea-a16d-ebdaedeff6a3",
"active_principle": true,
"eiq_1": null,
"concentration": 0.15,
"id": 32,
"name": "tiabendazol"
},
{
"uuid": "e8e97ba7-e20e-11ea-a16d-1705dbd14fb4",
"active_principle": true,
"eiq_1": null,
"concentration": 0.025,
"id": 19,
"name": "fludioxonil"
},
{
"uuid": "e8e97bb0-e20e-11ea-a16d-bb27915bdad7",
"active_principle": true,
"eiq_1": null,
"concentration": 0.02,
"id": 28,
"name": "metalaxil m"
}
],
"composition": null,
"type": null,
"id": 15229,
"unit": "lt/ha",
"uuid": "aa406ac8-e248-11ea-a16d-83e4fa8cc682"
},
"1169": {
"user_input": false,
"name": "solmix",
"density": null,
"company": "bunge argentina s.a.",
"dose": 15,
"state": "líquido",
"observations": null,
"components": [
{
"uuid": "00339bb8-dc00-11ea-a16d-17092e797be4",
"active_principle": true,
"eiq_1": null,
"concentration": 0.28,
"id": 1,
"name": "n"
}
],
"composition": "28-0-0",
"type": "fertilizante",
"id": 1169,
"unit": "lt/ha",
"uuid": "bc77d2b8-dc04-11ea-a16d-e3b7ca4f6da8"
}
},
"is_cover_crop": false,
"target_yield_value": null,
"date": "2020-08-13T00:00:00Z",
"crop_id": 21,
"seed_rate_unit": null,
"row_width_measurement_unit": null,
"seed_rate_value": null,
"actual_seed_rate_value": null,
"labour_uuid": "e3bd479a-dda3-11ea-a16d-bbb02471ce59"
}
Errores específicos
CódigoDescripción
0Sin autorización
1Error general

DELETE

Eliminación de una siembra en particular.

Se requiere la funcionalidad Eliminar Labor para poder utilizarla.

Content-Type: text/plain
DELETE /registro_campo/siembra

Parámetros en la URL:

  • uuid: string, UUID de la siembra

Ejemplo de respuesta:

{
"res": "eliminado",
"result": "labour deleted",
"id": 25679
}

Errores específicos

CódigoDescripción
0Sin autorización
1Error general

Cosechas

APIs

POST

Creación de una nueva labor de cosecha.

Se requiere la funcionalidad Crear Labor para poder utilizarla.

Content-Type: application/json
POST /registro_campo/cosecha

Una misma labor puede cargarse en más de una campaña, facilitando así el alta de actividades que aplican en más de un lote, con los mismos parámetros. Internamente esto genera la creación de tantas labores como campañas se especifiquen, utilizando los mismos datos para cada una. Así, esto supone una abstracción a nivel de API, pero no un razgo del modelo de datos interno (en el que una labor se asocia a una y sólo una campaña)

En el cuerpo de la consulta, incluir los parámetros:

  • uuids: string array, vector con UUIDs V1 (string) para identificar la o las labores creadas
  • fields: integer array, vector con IDs de lotes en los que se registrará la labor
  • campaigns: integer array, vector con IDs de campaña (si no se especifican lotes)
  • yeargroup: integer, año de la campaña (YYYY)
  • biennial: boolean, permite definir nombre de campaña como Year/Year+1 (ej, 2019/20) o YYYY (2019)
  • status: integer, estado de la labor (ver estados)
  • date: string, YYYY-MM-DD o YYYY-MM-DDTHH:MM:SSZ
  • completion_date: string, en caso de que sea una labor ya completada (YYYY-MM-DD or YYYY-MM-DDTHH:MM:SSZ)
  • observations: string, campo de texto libre para registrar lo que se desee
  • inputs: array with jsons, el listado de insumos utilizados (ver detalle)
  • yield: float, rendimiento obtenido en la cosecha
  • unit: string, unidad de medida de yield
  • humidity: float, humedad al momento de cosecha
  • quality: string, campo libre de texto para registrar calidad obtenida

Es mandatorio que se especifique al menos un lote o al menos una campaña en la que asignar la cosecha, los parámetros restantes pueden obviarse, siendo los valores por defecto:

  • uuids: se generan automáticamente
  • yeargroup: año actual
  • biennial: True
  • status: 2
  • date: fecha actual
  • El resto se setean como NULL

Ejemplo de respuesta:

{
"res": "Cosecha creada exitosamente",
"harvests": [2569, 2570, 2571],
"campaigns": [27899, 27900, 27901],
"denied_fields": [],
"supplies": null,
"created_labours": [
{
"field_id": 1000,
"labour_uuid": "4e56951b-652a-11ea-bd20-8fc732719012",
"campaign_id": 27899
},
{
"field_id": 1001,
"labour_uuid": "4e56951c-652a-11ea-bd20-034910106182",
"campaign_id": 27900
},
{
"field_id": 1002,
"labour_uuid": "4e569526-652a-11ea-bd20-2b7c9ee21e33",
"campaign_id": 27901
}
]
}

En las respuestas también se observarán parámetros extras. Los mismos se mantienen por retro-compatibilidad pero están contenidos en los antes mencionados por lo que pueden obviarse.

Errores específicos
CódigoDescripción
1Sin autorización
93,94,95,96,97Errores internos en la creación de insumos

PATCH

Modificación de una cosecha.

Se requiere la funcionalidad Modificar Labor para poder utilizarla.

Content-Type: application/json
PATCH /registro_campo/cosecha

A diferencia de la solicitud POST, en este caso no es posible operar sobre más de una labor al mismo tiempo.

Incluir en el cuerpo de la consulta los parámetros:

  • uuid: string, UUID de la labor que se desea modificar
  • id: integer, ID de la labor que se desea modificar
  • campaign: integer ID de la nueva campaña
  • attachments: array with strings, arreglo con los uuid de los archivos adjuntos a la labor.
  • status: integer, 1: planificada, 2: ejecutada, 3: cancelada
  • date: string, YYYY-MM-DD o YYYY-MM-DDTHH:MM:SSZ
  • completion_date: string, YYYY-MM-DD o YYYY-MM-DDTHH:MM:SSZ
  • observations: string, campo libre de texto
  • inputs: array with jsons, del que se habló en los párrafos susperiores y cuyo detalle puede verse aquí
  • yield: float, rendimiento obtenido en la cosecha
  • unit: string, unidad de medida de yield
  • humidity: float, humedad al momento de cosecha
  • quality: string, campo libre de texto para registrar calidad obtenida Es obligatorio incluir el objeto completo, modificando los valores necesarios.

Ejemplo de respuesta:

{
"status": "harvest updated successfully",
"uuid": null,
"result": "OK",
"id": 2569
}

Errores específicos

CódigoDescripción
1Sin autorización
93,94,95,96,97Errores internos en la creación de insumos

GET

Listado de todos los datos asociados a una cosecha registrada por el usuario.

Para poder utilizar esta API, es necesaria la funcionalidad Ver Campaña.

Content-Type: text/plain
GET /registro_campo/cosecha

Parámetros en la URL:

  • uuid: string, UUID de la cosecha

Ejemplo de respuesta:

{
"status": 1,
"inputs": {
"1170": {
"user_input": false,
"name": "cloruro de potasio cofco intl",
"density": null,
"company": "cofco international argentina s.a.",
"dose": 3,
"state": "granulado",
"observations": null,
"components": [
{
"uuid": "00339bba-dc00-11ea-a16d-bb9b85708912",
"active_principle": true,
"eiq_1": null,
"percentage": "0.5",
"id": 3,
"name": "K"
}
],
"composition": "0-0-50",
"type": "fertilizante",
"id": 1170,
"unit": "lt/ha",
"uuid": "bc77d2b9-dc04-11ea-a16d-ab222b5d6525"
}
},
"campaign": 1303,
"type_id": 2,
"labour_uuid": "c9d6eae4-dda2-11ea-a16d-a7301cf737fd",
"type_name": "cosecha",
"yield": 0.0,
"completion_date": null,
"observations": "qwerty short text",
"labour_id": 507,
"date": "2020-08-13T00:00:00Z",
"quality": "",
"unit": "tn/ha"
}
Errores específicos
CódigoDescripción
0Sin autorización
1Error general

DELETE

Eliminación de una cosecha en particular.

Se requiere la funcionalidad Eliminar Labor para poder utilizarla.

Content-Type: text/plain
DELETE /registro_campo/cosecha

Parámetros en la URL:

  • uuid: string, UUID de la cosecha

Ejemplo de respuesta:

{
"res": "eliminado",
"result": "labour deleted",
"id": 25679
}

Aplicaciones

Tipos

Toda aplicación puede ser asociada a un tipo particular, siendo esto méramente opcional y a fines informativos.

IDTipo
1Herbicida
2Fungicida
3Insecticida
4Fertilizante
5Enmienda

APIs

POST

Creación de una nueva labor de aplicación.

Se requiere la funcionalidad Crear Labor para poder utilizarla.

Content-Type: application/json
POST /registro_campo/aplicacion

Una misma labor puede cargarse en más de una campaña, facilitando así el alta de actividades que aplican en más de un lote, con los mismos parámetros. Internamente esto genera la creación de tantas labores como campañas se especifiquen, utilizando los mismos datos para cada una. Así, esto supone una abstracción a nivel de API, pero no un razgo del modelo de datos interno (en el que una labor se asocia a una y sólo una campaña)

En el cuerpo de la consulta, incluir los parámetros:

  • uuids: string array, vector con UUIDs V1 (string) para identificar la o las labores creadas
  • fields: integer array, vector con IDs de lotes en los que se registrará la labor
  • campaigns: integer array, vector con IDs de campaña (si no se especifican lotes)
  • yeargroup: integer, año de la campaña (YYYY)
  • biennial: boolean, permite definir nombre de campaña como Year/Year+1 (ej, 2019/20) o YYYY (2019)
  • status: integer, estado de la labor (ver estados)
  • date: string, YYYY-MM-DD o YYYY-MM-DDTHH:MM:SSZ
  • completion_date: string, en caso de que sea una labor ya completada (YYYY-MM-DD or YYYY-MM-DDTHH:MM:SSZ)
  • observations: string, campo de texto libre para registrar lo que se desee
  • inputs: array with jsons, el listado de insumos utilizados (ver detalle)
  • category: integer, ID de tipo de aplicación (ver tipos de aplicaciones)

Es mandatorio que se especifique al menos un lote o al menos una campaña en la que asignar la aplicación, los parámetros restantes pueden obviarse, siendo los valores por defecto:

  • uuids: se generan automáticamente
  • yeargroup: año actual
  • biennial: True
  • status: 2
  • date: fecha actual
  • El resto se setean como NULL

Ejemplo de respuesta:

{
"campaigns": [1355, 1356],
"applications": [567, 566],
"denied_fields": [],
"inputs": [1167, 1168, 1165, 1166],
"productos": [
{
"nombre": null,
"id": 1167
},
{
"nombre": null,
"id": 1168
},
{
"nombre": null,
"id": 1165
},
{
"nombre": null,
"id": 1166
}
],
"res": "Aplicación creada exitosamente",
"id_ciclo": 1355,
"id": 567,
"created_labours": [
{
"field_id": 2000,
"labour_uuid": "4e569523-652a-11ea-bd20-2bbd8b3ef0fb",
"campaign_id": 1355
},
{
"field_id": 2001,
"labour_uuid": "4f2026b4-7806-11ea-bd20-43282af2676a",
"campaign_id": 1356
}
]
}
Errores específicos
CódigoDescripción
1Sin autorización
93,94,95,96,97Errores internos en la creación de insumos

PATCH

Modificación de una aplicación.

Se requiere la funcionalidad Modificar Labor para poder utilizarla.

Content-Type: application/json
PATCH /registro_campo/aplicacion

A diferencia de la solicitud POST, en este caso no es posible operar sobre más de una labor al mismo tiempo.

Incluir en el cuerpo de la consulta los parámetros:

  • uuid: string, UUID de la labor que se desea modificar
  • id: integer, ID de la labor que se desea modificar
  • attachments: array with strings, arreglo con los uuid de los archivos adjuntos a la labor.
  • campaign: integer ID de la nueva campaña
  • status: integer, 1: planificada, 2: ejecutada, 3: cancelada
  • date: string, YYYY-MM-DD o YYYY-MM-DDTHH:MM:SSZ
  • completion_date: string, YYYY-MM-DD o YYYY-MM-DDTHH:MM:SSZ
  • observations: string, campo libre de texto
  • inputs: array with jsons, del que se habló en los párrafos susperiores y cuyo detalle puede verse aquí
  • category: integer, ID de tipo de aplicación (ver tipos de aplicaciones)

Es obligatorio incluir el objeto completo, modificando los valores necesarios.

Errores específicos
CódigoDescripción
1Sin autorización
93,94,95,96,97Errores internos en la creación de insumos

GET

Listado de una aplicación registrada por el usuario.

Para poder utilizar esta API, es necesaria la funcionalidad Ver Campaña.

Content-Type: text/plain
GET /registro_campo/aplicacion

Parámetros en la URL:

  • uuid: string, UUID de la aplicación

Ejemplo de respuesta:

{
"status": 1,
"inputs": {
"1078": {
"user_input": true,
"name": "input_front_10",
"density": null,
"company": null,
"dose": 1010,
"state": null,
"observations": null,
"components": [],
"composition": null,
"type": null,
"id": 1078,
"unit": "lt/ha",
"uuid": "5b6a2767-8357-11ea-bd20-dbb8b3e04708"
},
"1079": {
"user_input": true,
"name": "input_front_11",
"density": null,
"company": null,
"dose": 1111,
"state": null,
"observations": null,
"components": [],
"composition": null,
"type": null,
"id": 1079,
"unit": "lt/ha",
"uuid": "5b6a2768-8357-11ea-bd20-73c5d15c4dca"
}
},
"campaign": 1317,
"type_id": 1,
"labour_uuid": "5b6a2762-8357-11ea-bd20-0384d11c975b",
"type_name": "aplicacion",
"completion_date": null,
"observations": "rolo - front web",
"labour_id": 516,
"date": "2020-04-20T00:00:00Z",
"category_id": null,
"category_name": null
}
Errores específicos
CódigoDescripción
0Sin autorización
1Error general

DELETE

Eliminación de una aplicación.

Se requiere la funcionalidad Eliminar Labor para poder utilizarla.

Content-Type: text/plain
DELETE /registro_campo/aplicacion

Parámetros en la URL:

  • uuid: string, UUID de la aplicación

Ejemplo de respuesta:

{
"res": "eliminado",
"result": "labour deleted",
"id": 25679
}

Otras Labores

Tipos

Se necesita conocer los tipos de labores admitidos para el manejo de otras labores que no sean siembra, cosecha o aplicación.

GET /registro_campo/tipos_labores

Ejemplo de respuesta:

[
{
"nombre": "Transplante",
"id_tipo": 1
},
{
"nombre": "Raleo",
"id_tipo": 2
},
{
"nombre": "Recolección",
"id_tipo": 3
}
]

NOTA - El ejemplo de respuesta no tiene todos los tipos que existen y estos pueden ser actualizados, por lo tanto es necesario obtenerlos desde el endpoint para obtener la información correcta.

Tipos de Costos

Este endpoint devuelve los tipos de costos disponibles

GET /registro_campo/tipos_costos_otros_labores

Ejemplo de respuesta:

[
{
"nombre": "aplicacion",
"id": 0
},
{
"nombre": "mano de obra",
"id": 1
}
]

APIs

POST

Creación de una nueva labor de otro tipo.

Se requiere la funcionalidad Crear Labor para poder utilizarla.

Content-Type: application/json
POST /registro_campo/otroslabores

Una misma labor puede cargarse en más de una campaña, facilitando así el alta de actividades que aplican en más de un lote, con los mismos parámetros. Internamente esto genera la creación de tantas labores como campañas se especifiquen, utilizando los mismos datos para cada una. Así, esto supone una abstracción a nivel de API, pero no un razgo del modelo de datos interno (en el que una labor se asocia a una y sólo una campaña)

En el cuerpo de la consulta, incluir los parámetros:

  • uuids: string array, vector con UUIDs V1 (string) para identificar la o las labores creadas
  • fields: integer array, requerido si no hay campaigns, vector con IDs de lotes en los que se registrará la labor
  • campaigns: integer array, requerido si no hay fields, vector con IDs de campaña (si no se especifican lotes)
  • yeargroup: integer, año de la campaña (YYYY)
  • biennial: boolean, permite definir nombre de campaña como Year/Year+1 (ej, 2019/20) o YYYY (2019)
  • status: integer, estado de la labor (ver estados)
  • date: string, YYYY-MM-DD o YYYY-MM-DDTHH:MM:SSZ
  • completion_date: string, en caso de que sea una labor ya completada (YYYY-MM-DD or YYYY-MM-DDTHH:MM:SSZ)
  • observations: string, campo de texto libre para registrar lo que se desee
  • inputs: array with jsons, el listado de insumos utilizados (ver detalle)
  • tipo_otro_labor: integer, requerido, tipo de otra labor (mínimo: 0)(tipos
  • superficie_real: number, cantidad de hectáreas
  • unidad_medida: text, unidad de la superficie real
  • extra_cost: object, requerido, costos extras pertenecientes a la labor
    • materiales: object, costo extra de materiales
      • value: integer, valor monetario
      • unit: string, unidad monetaria
  • labour_cost: object, costo y tipo de costo de la labor
    • labour_type: integer, tipo del costo (ver detalle)
    • unit: string, unidad monetaria
    • value: integer, cantidad

Es mandatorio que se especifique al menos un lote o al menos una campaña en la que asignar la otra labor, los parámetros restantes pueden obviarse, siendo los valores por defecto:

  • uuids: se generan automáticamente
  • yeargroup: año actual
  • biennial: True
  • status: 2
  • date: fecha actual
  • El resto se setean como NULL

Ejemplo de respuesta:

{
"campaigns": [
65824
],
"inputs": null,
"other_labour": [
957
],
"denied_fields": [],
"productos": [],
"res": "Labor creada exitosamente",
"id_ciclo": 65824,
"id": 957,
"created_labours": [
{
"labour_uuid": "298ce4de-e828-11ec-835a-9fdfc0b1c03e",
"field_id": 245584,
"campaign_id": 65824
}
]
}
Errores específicos
CódigoDescripción
1Sin autorización
93,94,95,96,97Errores internos en la creación de insumos

PATCH

Modificación de otra labor.

Se requiere la funcionalidad Modificar Labor para poder utilizarla.

Content-Type: application/json
PATCH /registro_campo/otroslabores

A diferencia de la solicitud POST, en este caso no es posible operar sobre más de una labor al mismo tiempo.

Incluir en el cuerpo de la consulta los parámetros:

  • uuid: string, requerido, UUID de la labor que se desea modificar
  • id: integer, ID de la labor que se desea modificar
  • campaign: integer ID de la nueva campaña
  • attachments: array with strings, arreglo con los uuid de los archivos adjuntos a la labor.
  • status: integer, 1: planificada, 2: ejecutada, 3: cancelada
  • date: string, YYYY-MM-DD o YYYY-MM-DDTHH:MM:SSZ
  • completion_date: string, YYYY-MM-DD o YYYY-MM-DDTHH:MM:SSZ
  • observations: string, campo libre de texto
  • inputs: array with jsons, del que se habló en los párrafos susperiores y cuyo detalle puede verse aquí
  • tipo_otro_labor: integer, tipo de otra labor (mínimo: 0)(tipos
  • superficie_real: number, cantidad de hectáreas
  • unidad_medida: text, unidad de la superficie real
  • extra_cost: object, costos extras pertenecientes a la labor
    • materiales: object, costo extra de materiales
      • value: integer, valor monetario
      • unit: string, unidad monetaria
  • labour_cost: object, costo y tipo de costo de la labor
    • labour_type: integer, tipo del costo (ver detalle)
    • unit: string, unidad monetaria
    • value: integer, cantidad

Es obligatorio incluir en parámetro uuid. Cualquier otro parámetro deberá ser provisto sólo si debe ser modificado.

Ejemplo de respuesta:

{
"status": "labour updated successfully",
"inputs": {
"deleted": [],
"updated": [],
"created": []
},
"uuid": "65be9cc8-e8bd-11ec-835a-1b84e4d36150",
"res": "updated",
"result": "OK",
"id": null
}

Errores específicos

CódigoDescripción
1Sin autorización
93,94,95,96,97Errores internos en la creación de insumos

GET

Listado de todos los datos asociados a otra labor registrada por el usuario.

Para poder utilizar esta API, es necesaria la funcionalidad Ver Campaña.

Content-Type: text/plain
GET /registro_campo/otroslabores

Parámetros en la URL:

  • uuid: string, requerido, UUID de la otra labor

Ejemplo de respuesta:

{
"status": 1,
"inputs": null,
"attachments": "{}",
"campaign": 65824,
"type_id": 4,
"superficie_real": 190.0,
"labour_uuid": "65be9cc8-e8bd-11ec-835a-1b84e4d36150",
"type_name": "otros labores",
"ha_reales": 0.0,
"completion_date": null,
"costs": {
"inputs": {},
"materiales": {
"value": 0,
"unit": "R$/ha"
},
"aplicacion": {},
"mano_de_obra": {},
"seed": {},
"labour": {
"labour_type": 0,
"value": "0.00",
"unit": "R$/ha"
}
},
"observations": "",
"labour_id": 967,
"date": "2022-06-08T00:00:00Z",
"id_tipo_otro_labor": 2,
"unit": "ha",
"resources": "{}"
}
Errores específicos
CódigoDescripción
0Sin autorización
1Error general

DELETE

Eliminación de otra labor en particular.

Se requiere la funcionalidad Eliminar Labor para poder utilizarla.

Content-Type: text/plain
DELETE /registro_campo/otroslabores

Parámetros en la URL:

  • uuid: string, requerido, UUID de la otra labor

Ejemplo de respuesta:

{
"result": "labour deleted",
"id": 951,
"uuid": "65be9cc8-e8bd-11ec-835a-1b84e4d36150"
}