Livraisons

L'enregistrement du contrôle à réception — chaque champ, son type, et ce qu'il signifie sur le terrain.

Une livraison est un contrôle à réception : un membre du personnel qui réceptionne une commande, relève des températures, et décide de l'accepter ou non. C'est l'enregistrement que demande un inspecteur de la sécurité alimentaire.

Les deux endpoints exigent la portée deliveries:read sur le restaurant présent dans le chemin.

Les livraisons sont la seule ressource façonnée à la main ici : un objet conçu pour vous, immuable une fois enregistré, listé par plage de temps. Tout le reste de ce que l'application enregistre — températures de cuisson et de refroidissement, nettoyage, étiquettes — passe par les collections, qui partagent à la place une seule enveloppe générique.

Lister les livraisons

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

Renvoie { "data": Delivery[], "nextCursor": string | null }, les plus récentes d'abord. Voyez Pagination pour les règles de plage et pour le curseur.

Récupérer une livraison

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

Renvoie un seul Delivery, ou 404 si l'identifiant est inconnu ou si la clé ne détient aucune autorisation pour ce restaurant.

L'objet livraison

ChampTypeSignification
idstringIdentifiant stable de la livraison, unique au sein du restaurant.
restaurantIdstringLe restaurant auquel l'enregistrement appartient. Reprend le chemin.
occurredAtstringQuand le contrôle a eu lieu, en millisecondes depuis l'epoch, sous forme de chaîne de caractères.
isCompliantbooleanLe verdict du membre du personnel sur la livraison dans son ensemble.
supplierobject | null{ "id": string, "name": string }, ou null quand la livraison a été enregistrée sans fournisseur.
temperatureRecordsarrayUne entrée par produit mesuré. Voir ci-dessous.
nonComplianceReasonsstring[]Pourquoi la livraison a été refusée ou acceptée avec réserve. Texte libre choisi par le membre du personnel ; vide quand la livraison est conforme.
correctiveActionsstring[]Ce qui a été fait en réponse. Vide quand rien n'était nécessaire.
commentarystring | nullNote en texte libre. Souvent null.
imageCountintegerCombien de photographies sont attachées. 0 signifie que l'endpoint images n'a rien à renvoyer.

temperatureRecords[]

ChampTypeSignification
productstringCe qui a été mesuré, tel que le membre du personnel l'a nommé. Jamais vide.
valuenumber | nullLe relevé. null quand le produit a été consigné sans mesure.
unit"C"Toujours des degrés Celsius. Présent pour qu'un consommateur n'ait jamais à le supposer.
lotNumberstring | nullLe lot ou le numéro de lot, quand il a été saisi.

Le lire correctement

isCompliant est l'enregistrement, pas un calcul. C'est ce qu'a décidé la personne qui a réceptionné la livraison, et cela peut diverger de ce que vous concluriez des seules températures — une mesure prise avec une sonde de surface, un produit qui a son propre seuil, une appréciation. Présentez-le comme leur verdict. Si vous voulez le vôtre, calculez-le à côté du leur et indiquez qu'il est de vous.

Les champs en texte libre sont du texte libre. nonComplianceReasons, correctiveActions et product sont saisis par le personnel pendant le service, dans la langue du restaurant, avec l'orthographe d'un mardi chargé. N'en tirez pas une énumération, n'en faites pas la clé d'une jointure, et ne supposez pas que c'est du français.

value peut être null. Un produit consigné sans relevé est normal — c'est souvent une denrée sèche. Traitez null comme « non mesuré », jamais comme 0.

Les horodatages sont des chaînes de caractères. occurredAt est une chaîne de caractères en millisecondes depuis l'epoch, en notation décimale, parce que toute la plateforme BackResto stocke les horodatages ainsi. Number(occurredAt) est sûr aujourd'hui et pour les quelques centaines de milliers d'années à venir, mais ne laissez pas un analyseur JSON le convertir silencieusement pour le réécrire ensuite avec une précision perdue.

Exemple

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

Dernière mise à jour 2026-09-19.