Passa al contenuto principale

Forecast

La Forecast API prevede le porzioni di menu vendute in base alle ricette pianificate e ai dati storici di vendita di una cucina. Permette di pianificare meglio la produzione e di ridurre lo spreco alimentare.

Panoramica​

Usate la Forecast API per:

  • Prevedere quante porzioni di ogni ricetta verranno vendute nei prossimi giorni
  • Ottenere intervalli di confidenza (limiti inferiore e superiore) per le previsioni
  • Pianificare le quantità da produrre per ridurre la sovrapproduzione e lo spreco alimentare
  • Aggiornare le porzioni effettivamente vendute e prodotte per migliorare le previsioni future
Requisiti dei dati

Il forecast richiede almeno 10 giorni consecutivi di menu con ricette complete e dati di vendita. Più dati migliorano la precisione della previsione. Riceverete un avviso se i dati sono troppo pochi per una previsione.

Creare un forecast​

Inviate una request POST a /prognosis/{kitchen_id}/forecast con l'intervallo di date desiderato.

Proprietà della request​

ProprietàTipoObbligatorioDescrizione
date-startStringSìData di inizio del periodo di previsione. Formato: YYYY-MM-DD
date-endStringSìData di fine del periodo di previsione. Formato: YYYY-MM-DD
asyncBooleanNoSe true, risponde subito con un prediction_id senza attendere la fine del calcolo. Predefinito: false

Esempio di request​

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
}'

Proprietà della response​

ProprietàTipoDescrizione
kitchen_idStringLa cucina per cui è stato calcolato il forecast
prediction_idStringIdentificativo univoco di questo forecast (generato da Eaternity)
statusStringStato del calcolo: processing, done o error
errorStringMessaggio di errore se il calcolo del forecast non è stato possibile
infoArrayAvvisi ed errori (ad es. ingredienti non abbinati). Ogni voce può contenere i campi error, warning e product_id.
predicted_salesObjectLa previsione di vendita risultante (vedi sotto)

Struttura delle vendite previste​

ProprietàTipoDescrizione
date-startStringData di inizio del periodo di previsione
date-endStringData di fine del periodo di previsione
resultsArrayElenco dei risultati della previsione raggruppati per giorno

Ogni giorno in results contiene:

ProprietàTipoDescrizione
dateStringLa data di questo insieme di risultati (YYYY-MM-DD)
total-salesObjectPrevisione delle vendite totali della cucina in questa data
recipesArrayPrevisioni per ricetta in questa data

Campi di total-sales:

ProprietàTipoDescrizione
portionsNumberNumero previsto di porzioni vendute in totale
lowNumberLimite inferiore dell'intervallo di confidenza al 90%
highNumberLimite superiore dell'intervallo di confidenza al 90%

Ogni ricetta in recipes:

ProprietàTipoDescrizione
recipe-idStringL'ID della ricetta
portionsNumberNumero previsto di porzioni vendute
lowNumberLimite inferiore dell'intervallo di confidenza al 90%
highNumberLimite superiore dell'intervallo di confidenza al 90%

Esempio di response​

{
"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
}
]
}
]
}
}

Recuperare un forecast​

Se avete creato un forecast con async: true, recuperate i risultati con GET /prognosis/{kitchen_id}/forecast/{prediction_id}.

La response ha la stessa struttura della response di creazione. Controllate il campo status:

  • processing — il calcolo è ancora in corso
  • done — i risultati sono disponibili in predicted_sales
  • error — consultate il campo error per i dettagli

Aggiornare le porzioni vendute e prodotte​

Quando i dati di vendita effettivi sono disponibili, aggiornate le ricette con i numeri reali tramite POST /prognosis/{kitchen_id}/portions. Questo migliora le previsioni future.

Request​

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

Response​

Per ogni ricetta viene restituito uno stato che indica se l'aggiornamento è stato applicato:

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

Endpoint​