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
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
| Propiedad | Tipo | Obligatorio | Descripción |
|---|---|---|---|
date-start | String | Sí | Fecha de inicio del periodo de previsión. Formato: YYYY-MM-DD |
date-end | String | Sí | Fecha de fin del periodo de previsión. Formato: YYYY-MM-DD |
async | Boolean | No | Si 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
| Propiedad | Tipo | Descripción |
|---|---|---|
kitchen_id | String | La cocina para la que se calculó la previsión |
prediction_id | String | Identificador único de esta previsión (generado por Eaternity) |
status | String | Estado del cálculo: processing, done o error |
error | String | Mensaje de error si no fue posible calcular la previsión |
info | Array | Avisos y errores (p. ej. ingredientes sin asignar). Cada entrada puede contener los campos error, warning y product_id. |
predicted_sales | Object | La previsión de ventas resultante (ved abajo) |
Estructura de las ventas previstas
| Propiedad | Tipo | Descripción |
|---|---|---|
date-start | String | Fecha de inicio del periodo de previsión |
date-end | String | Fecha de fin del periodo de previsión |
results | Array | Lista de resultados de la previsión agrupados por día |
Cada día en results contiene:
| Propiedad | Tipo | Descripción |
|---|---|---|
date | String | La fecha de este conjunto de resultados (YYYY-MM-DD) |
total-sales | Object | Predicción de las ventas totales de la cocina en esta fecha |
recipes | Array | Predicciones por receta para esta fecha |
Campos de total-sales:
| Propiedad | Tipo | Descripción |
|---|---|---|
portions | Number | Número previsto de raciones vendidas en total |
low | Number | Límite inferior del intervalo de confianza del 90 % |
high | Number | Límite superior del intervalo de confianza del 90 % |
Cada receta en recipes:
| Propiedad | Tipo | Descripción |
|---|---|---|
recipe-id | String | El ID de la receta |
portions | Number | Número previsto de raciones que se venderán |
low | Number | Límite inferior del intervalo de confianza del 90 % |
high | Number | Lí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 cursodone: los resultados están disponibles enpredicted_saleserror: consultad el campoerrorpara 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
📄️ Create a forecast
Create a new forecast calculation for the kitchen.
📄️ Get a forecast
Retrieve the status and results of a previously created forecast calculation.
📄️ Update recipe portions
Update the production-portions and sold-portions of multiple recipes.