Consegne

Il record del controllo in accettazione — ogni campo, il suo tipo e cosa significa sul campo.

Una consegna è un controllo in accettazione: un membro del personale che riceve un ordine, registra le temperature e decide se accettarlo. È il registro che chiede un ispettore della sicurezza alimentare.

Entrambi gli endpoint richiedono l'ambito deliveries:read sul ristorante indicato nel percorso.

Le consegne sono l'unica risorsa modellata a mano qui: un oggetto progettato, immutabile una volta registrato, elencato per intervallo di tempo. Tutto il resto che l'app registra — temperature di cottura e raffreddamento, pulizie, etichette — passa dalle collezioni, che condividono invece un unico involucro generico.

Elencare le consegne

GET /v1/restaurants/{restaurantId}/deliveries?from=…&to=…&limit=…&cursor=…

Restituisce { "data": Delivery[], "nextCursor": string | null }, dal più recente. Veda Paginazione per le regole sull'intervallo e per il cursore.

Recuperare una consegna

GET /v1/restaurants/{restaurantId}/deliveries/{deliveryId}

Restituisce un singolo Delivery, oppure 404 se l'identificatore è sconosciuto oppure la chiave non ha alcuna concessione per quel ristorante.

L'oggetto consegna

CampoTipoSignificato
idstringaIdentificatore stabile della consegna, univoco all'interno del ristorante.
restaurantIdstringaIl ristorante a cui appartiene il record. Ripete il percorso.
occurredAtstringaQuando è avvenuto il controllo, in millisecondi dall'epoch come stringa.
isCompliantbooleanoIl verdetto del membro del personale sulla consegna nel suo insieme.
supplieroggetto | null{ "id": string, "name": string }, oppure null quando la consegna è stata registrata senza.
temperatureRecordsarrayUna voce per ogni prodotto misurato. Veda più sotto.
nonComplianceReasonsarray di stringhePerché la consegna è stata rifiutata o accettata con riserva. Testo libero scelto dal membro del personale; vuoto quando è conforme.
correctiveActionsarray di stringheCosa è stato fatto al riguardo. Vuoto quando non serviva nulla.
commentarystringa | nullNota in testo libero. Spesso null.
imageCountinteroQuante fotografie sono allegate. 0 significa che l'endpoint delle immagini non ha nulla da restituire.

temperatureRecords[]

CampoTipoSignificato
productstringaCosa è stato misurato, come lo ha chiamato il membro del personale. Mai vuoto.
valuenumero | nullLa lettura. null quando il prodotto è stato registrato senza una misurazione.
unit"C"Sempre Celsius. Presente perché chi consuma i dati non debba mai fare supposizioni.
lotNumberstringa | nullIl lotto o la partita, quando è stato acquisito.

Leggerlo correttamente

isCompliant è il registro, non un calcolo. È ciò che ha deciso la persona che ha ricevuto la consegna, e può non coincidere con quello che concluderebbe lei dalle sole temperature — una lettura presa con una sonda di superficie, un prodotto con una soglia propria, una valutazione discrezionale. Lo presenti come il loro verdetto. Se ne vuole uno suo, lo calcoli accanto al loro e lo etichetti come suo.

I campi in testo libero sono testo libero. nonComplianceReasons, correctiveActions e product vengono digitati dal personale durante il servizio, nella lingua del ristorante, con l'ortografia di un martedì di corsa. Non ne costruisca un enum, non ci basi sopra la chiave di una join, e non dia per scontato il francese.

value può essere null. Un prodotto registrato senza una lettura è normale — spesso è un prodotto secco. Tratti null come «non misurato», mai come 0.

I timestamp sono stringhe. occurredAt è una stringa decimale di millisecondi dall'epoch, perché l'intera piattaforma BackResto memorizza così i timestamp. Number(occurredAt) è sicuro oggi e per le prossime centinaia di migliaia di anni, ma non lasci che un parser JSON lo converta in silenzio e poi lo riscriva con la precisione persa.

Esempio

{
  "id": "8f2c1b04-0d5a-4b7e-9f31-6ad2c0e77a51",
  "restaurantId": "restaurant-1",
  "occurredAt": "1787932800000",
  "isCompliant": false,
  "supplier": { "id": "supplier-7", "name": "Metro Nord" },
  "temperatureRecords": [
    { "product": "Poulet fermier", "lotNumber": "L2291", "unit": "C", "value": 6.4 },
    { "product": "Farine T55", "lotNumber": null, "unit": "C", "value": null }
  ],
  "nonComplianceReasons": ["Température trop élevée"],
  "correctiveActions": ["Produit refusé", "Fournisseur prévenu"],
  "commentary": "Camion en retard, rupture de chaîne du froid probable",
  "imageCount": 2
}

Ultimo aggiornamento 2026-09-19.