Saltar al contenido principal

Forecast

La Forecast API predice las raciones vendidas de los menús de una cocina a partir de las recetas planificadas y del historial de ventas. Así permite planificar mejor la producción y reducir el desperdicio alimentario.

Visión general​

Usad la Forecast API para:

  • Predecir cuántas raciones de cada receta se venderán en los próximos días
  • Obtener intervalos de confianza (límites inferior y superior) para las predicciones
  • Planificar las cantidades de producción para reducir la sobreproducción y el desperdicio alimentario
  • Actualizar las raciones realmente vendidas y producidas para mejorar las predicciones futuras
Requisitos de datos

La previsión necesita al menos 10 días consecutivos de menús con recetas completas y datos de ventas. Más datos mejoran la precisión de la predicción. Recibiréis un aviso si hay demasiado pocos datos para una predicción.

Crear una previsión​

Enviad una solicitud POST a /prognosis/{kitchen_id}/forecast con el rango de fechas deseado.

Propiedades de la solicitud​

PropiedadTipoObligatorioDescripción
date-startStringSíFecha de inicio del periodo de previsión. Formato: YYYY-MM-DD
date-endStringSíFecha de fin del periodo de previsión. Formato: YYYY-MM-DD
asyncBooleanNoSi es true, devuelve de inmediato un prediction_id sin esperar a que termine el cálculo. Por defecto: false

Ejemplo de solicitud​

curl -X POST "https://co2.eaternity.ch/api/prognosis/YOURKITCHENID/forecast" \
-u YOUR_API_KEY: \
-H "Content-Type: application/json" \
-d '{
"date-start": "2021-02-08",
"date-end": "2021-02-09",
"async": false
}'

Propiedades de la respuesta​

PropiedadTipoDescripción
kitchen_idStringLa cocina para la que se calculó la previsión
prediction_idStringIdentificador único de esta previsión (generado por Eaternity)
statusStringEstado del cálculo: processing, done o error
errorStringMensaje de error si no fue posible calcular la previsión
infoArrayAvisos y errores (p. ej. ingredientes sin asignar). Cada entrada puede contener los campos error, warning y product_id.
predicted_salesObjectLa previsión de ventas resultante (ved abajo)

Estructura de las ventas previstas​

PropiedadTipoDescripción
date-startStringFecha de inicio del periodo de previsión
date-endStringFecha de fin del periodo de previsión
resultsArrayLista de resultados de la previsión agrupados por día

Cada día en results contiene:

PropiedadTipoDescripción
dateStringLa fecha de este conjunto de resultados (YYYY-MM-DD)
total-salesObjectPredicción de las ventas totales de la cocina en esta fecha
recipesArrayPredicciones por receta para esta fecha

Campos de total-sales:

PropiedadTipoDescripción
portionsNumberNúmero previsto de raciones vendidas en total
lowNumberLímite inferior del intervalo de confianza del 90 %
highNumberLímite superior del intervalo de confianza del 90 %

Cada receta en recipes:

PropiedadTipoDescripción
recipe-idStringEl ID de la receta
portionsNumberNúmero previsto de raciones que se venderán
lowNumberLímite inferior del intervalo de confianza del 90 %
highNumberLímite superior del intervalo de confianza del 90 %

Ejemplo de respuesta​

{
"kitchen_id": "11122233",
"prediction_id": "3f8e11ca-5234-47da-8602-c255a290e5f2",
"status": "done",
"info": [],
"predicted_sales": {
"date-start": "2021-02-08",
"date-end": "2021-02-09",
"results": [
{
"date": "2021-02-08",
"total-sales": {
"portions": 1203,
"low": 1123,
"high": 1265
},
"recipes": [
{
"recipe-id": "11111",
"portions": 489,
"low": 416,
"high": 526
}
]
}
]
}
}

Obtener una previsión​

Si creasteis una previsión con async: true, obtened los resultados con GET /prognosis/{kitchen_id}/forecast/{prediction_id}.

La respuesta tiene la misma estructura que la respuesta de creación. Comprobad el campo status:

  • processing: el cálculo sigue en curso
  • done: los resultados están disponibles en predicted_sales
  • error: consultad el campo error para ver los detalles

Actualizar las raciones vendidas y producidas​

Cuando tengáis los datos de ventas reales, actualizad las recetas con las cifras reales mediante POST /prognosis/{kitchen_id}/portions. Esto mejora las predicciones futuras.

Solicitud​

{
"recipes": [
{
"recipe-id": "11111",
"sold-portions": 444,
"production-portions": 500
},
{
"recipe-id": "22222",
"sold-portions": 555,
"production-portions": 600
}
]
}

Respuesta​

Cada receta devuelve un estado que indica si se aplicó la actualización:

{
"recipes": [
{
"recipe-id": "11111",
"status": "UPDATED"
},
{
"recipe-id": "22222",
"status": "NOT_FOUND"
}
]
}

Endpoints​