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 nuevoname
:string
, nombre del insumo, pudiendo repetirse dentro del listado propio del usuariodose
: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 estrue
trae todos los insumos que hayan sido creados por el usuariocode
:integer
, código del insumo.country
:string
, identificador de país de dos letras, por ejemploAR
,ES
,BR
Al filtrar por el campo
country
traerá los insumos del país seleccionado y aquellos cuyo valor decountry
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 insumoname
: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 modificarid
:integer
, ID de insumo a modificarname
: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 insumoid
: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.
ID | Estado |
---|---|
1 | Planificado |
2 | Ejecutado |
3 | Cancelado |
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
oyeargroup
: (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ámetroyeargroup
.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 nuevoname
: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 nuevaname
:string
, nombre de la variedad a crearweight_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 creadasfields
:integer array
, vector con IDs de lotes en los que se registrará la laborcampaigns
: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:SSZcompletion_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 deseeinputs
: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 coberturatarget_yield
:json
, rinde esperadovalue
:float
, cantidad del rinde esperadounit
:string
, unidad de medida del rinde esperado
seed_rate
:json
, densidad de siembra esperadavalue
:float
, valor de la densidad de siembraunit
:string
, unidad de medida de la densidad de siembra
sowed_area
:float
, superficie sembradaactual_seed_rate
:float
, densidad de siembra obtenidavalue
:float
, valor de la densidad de siembraunit
:string
, unidad de medida de la densidad de siembra
row_width
:json
, ancho de siembravalue
:float
, valor del ancho de siembraunit
: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áticamenteyeargroup
: año actualbiennial
: Truestatus
: 2date
: 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ódigo | Descripción |
---|---|
1 | Sin autorización |
2 | Cultivo incorrecto |
93,94,95,96,97 | Errores 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 modificarcampaign
:integer
ID de la nueva campañastatus
:integer
, 1: planificada, 2: ejecutada, 3: canceladadate
:string
, YYYY-MM-DD o YYYY-MM-DDTHH:MM:SSZcompletion_date
:string
, YYYY-MM-DD o YYYY-MM-DDTHH:MM:SSZobservations
:string
, campo libre de textoinputs
: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 coberturatarget_yield
:json
, rinde esperadovalue
:float
, cantidad del rinde esperadounit
:string
, unidad de medida del rinde esperado
seed_rate
:json
, densidad de siembra esperadavalue
:float
, valor de la densidad de siembraunit
:string
, unidad de medida de la densidad de siembra
sowed_area
:float
, superficie sembradaactual_seed_rate
:float
, densidad de siembra obtenidavalue
:float
, valor de la densidad de siembraunit
:string
, unidad de medida de la densidad de siembra
row_width
:json
, ancho de siembravalue
:float
, valor del ancho de siembraunit
: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ódigo | Descripción |
---|---|
1 | Sin autorización |
93,94,95,96,97 | Errores 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. Recibeasc
odesc
, siendodesc
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ódigo | Descripción |
---|---|
0 | Sin autorización |
1 | Error 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ódigo | Descripción |
---|---|
0 | Sin autorización |
1 | Error 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 creadasfields
:integer array
, vector con IDs de lotes en los que se registrará la laborcampaigns
: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:SSZcompletion_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 deseeinputs
:array with jsons
, el listado de insumos utilizados (ver detalle)yield
:float
, rendimiento obtenido en la cosechaunit
:string
, unidad de medida de yieldhumidity
:float
, humedad al momento de cosechaquality
: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áticamenteyeargroup
: año actualbiennial
: Truestatus
: 2date
: 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ódigo | Descripción |
---|---|
1 | Sin autorización |
93,94,95,96,97 | Errores 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 modificarid
:integer
, ID de la labor que se desea modificarcampaign
:integer
ID de la nueva campañaattachments
:array with strings
, arreglo con los uuid de los archivos adjuntos a la labor.status
:integer
, 1: planificada, 2: ejecutada, 3: canceladadate
:string
, YYYY-MM-DD o YYYY-MM-DDTHH:MM:SSZcompletion_date
:string
, YYYY-MM-DD o YYYY-MM-DDTHH:MM:SSZobservations
:string
, campo libre de textoinputs
:array with jsons
, del que se habló en los párrafos susperiores y cuyo detalle puede verse aquíyield
:float
, rendimiento obtenido en la cosechaunit
:string
, unidad de medida de yieldhumidity
:float
, humedad al momento de cosechaquality
: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ódigo | Descripción |
---|---|
1 | Sin autorización |
93,94,95,96,97 | Errores 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ódigo | Descripción |
---|---|
0 | Sin autorización |
1 | Error 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.
ID | Tipo |
---|---|
1 | Herbicida |
2 | Fungicida |
3 | Insecticida |
4 | Fertilizante |
5 | Enmienda |
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 creadasfields
:integer array
, vector con IDs de lotes en los que se registrará la laborcampaigns
: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:SSZcompletion_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 deseeinputs
: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áticamenteyeargroup
: año actualbiennial
: Truestatus
: 2date
: 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ódigo | Descripción |
---|---|
1 | Sin autorización |
93,94,95,96,97 | Errores 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 modificarid
:integer
, ID de la labor que se desea modificarattachments
:array with strings
, arreglo con los uuid de los archivos adjuntos a la labor.campaign
:integer
ID de la nueva campañastatus
:integer
, 1: planificada, 2: ejecutada, 3: canceladadate
:string
, YYYY-MM-DD o YYYY-MM-DDTHH:MM:SSZcompletion_date
:string
, YYYY-MM-DD o YYYY-MM-DDTHH:MM:SSZobservations
:string
, campo libre de textoinputs
: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ódigo | Descripción |
---|---|
1 | Sin autorización |
93,94,95,96,97 | Errores 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ódigo | Descripción |
---|---|
0 | Sin autorización |
1 | Error 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 creadasfields
:integer array
,requerido si no hay campaigns
, vector con IDs de lotes en los que se registrará la laborcampaigns
: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:SSZcompletion_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 deseeinputs
:array with jsons
, el listado de insumos utilizados (ver detalle)tipo_otro_labor
:integer
,requerido
, tipo de otra labor (mínimo: 0)(tipossuperficie_real
:number
, cantidad de hectáreasunidad_medida
:text
, unidad de la superficie realextra_cost
:object
,requerido
, costos extras pertenecientes a la labormateriales
:object
, costo extra de materialesvalue
:integer
, valor monetariounit
:string
, unidad monetaria
labour_cost
:object
, costo y tipo de costo de la laborlabour_type
:integer
, tipo del costo (ver detalle)unit
:string
, unidad monetariavalue
: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áticamenteyeargroup
: año actualbiennial
: Truestatus
: 2date
: 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ódigo | Descripción |
---|---|
1 | Sin autorización |
93,94,95,96,97 | Errores 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 modificarid
:integer
, ID de la labor que se desea modificarcampaign
:integer
ID de la nueva campañaattachments
:array with strings
, arreglo con los uuid de los archivos adjuntos a la labor.status
:integer
, 1: planificada, 2: ejecutada, 3: canceladadate
:string
, YYYY-MM-DD o YYYY-MM-DDTHH:MM:SSZcompletion_date
:string
, YYYY-MM-DD o YYYY-MM-DDTHH:MM:SSZobservations
:string
, campo libre de textoinputs
: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)(tipossuperficie_real
:number
, cantidad de hectáreasunidad_medida
:text
, unidad de la superficie realextra_cost
:object
, costos extras pertenecientes a la labormateriales
:object
, costo extra de materialesvalue
:integer
, valor monetariounit
:string
, unidad monetaria
labour_cost
:object
, costo y tipo de costo de la laborlabour_type
:integer
, tipo del costo (ver detalle)unit
:string
, unidad monetariavalue
: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ódigo | Descripción |
---|---|
1 | Sin autorización |
93,94,95,96,97 | Errores 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ódigo | Descripción |
---|---|
0 | Sin autorización |
1 | Error 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"
}