Entregas

El registro de control de recepción: cada campo, su tipo y qué significa sobre el terreno.

Una entrega es un control de recepción: un miembro del personal que recibe un pedido, registra temperaturas y decide si aceptarlo. Es el registro que pide un inspector de seguridad alimentaria.

Ambos endpoints necesitan el permiso deliveries:read sobre el restaurante que aparece en la ruta.

Las entregas son el único recurso moldeado a mano que hay aquí: un objeto diseñado, inmutable una vez registrado, listado por rango de tiempo. Todo lo demás que registra la aplicación —las temperaturas de cocción y enfriamiento, la limpieza, las etiquetas— llega a través de las colecciones, que en su lugar comparten un único sobre genérico.

Listar entregas

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

Devuelve { "data": Delivery[], "nextCursor": string | null }, de más reciente a más antigua. Consulte Paginación para las reglas del rango y el cursor.

Obtener una entrega

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

Devuelve una única Delivery, o 404 si el identificador es desconocido o la clave no tiene ninguna concesión para ese restaurante.

El objeto de entrega

CampoTipoSignificado
idstringIdentificador estable de la entrega, único dentro del restaurante.
restaurantIdstringEl restaurante al que pertenece el registro. Refleja la ruta.
occurredAtstringCuándo ocurrió el control, en milisegundos desde la época Unix como cadena.
isCompliantbooleanEl veredicto del miembro del personal sobre la entrega en su conjunto.
supplierobject | null{ "id": string, "name": string }, o null cuando la entrega se registró sin proveedor.
temperatureRecordsarrayUna entrada por producto medido. Véase más abajo.
nonComplianceReasonsstring[]Por qué se rechazó la entrega o se aceptó con reservas. Texto libre elegido por el miembro del personal; vacío cuando es conforme.
correctiveActionsstring[]Qué se hizo al respecto. Vacío cuando no hizo falta nada.
commentarystring | nullNota de texto libre. A menudo null.
imageCountintegerCuántas fotografías hay adjuntas. 0 significa que el endpoint de imágenes no tiene nada que devolver.

temperatureRecords[]

CampoTipoSignificado
productstringQué se midió, tal como lo nombró el miembro del personal. Nunca vacío.
valuenumber | nullLa lectura. null cuando el producto se registró sin medición.
unit"C"Siempre Celsius. Está presente para que quien lo consume nunca tenga que suponerlo.
lotNumberstring | nullEl lote, cuando se capturó.

Leerlo correctamente

isCompliant es el registro, no un cálculo. Es lo que decidió la persona que recibió la entrega, y puede no coincidir con lo que usted concluiría solo a partir de las temperaturas: una lectura tomada con una sonda de superficie, un producto con su propio umbral, un juicio profesional. Preséntelo como el veredicto de esa persona. Si quiere el suyo, calcúlelo junto al de ella y etiquételo como suyo.

Los campos de texto libre son texto libre. nonComplianceReasons, correctiveActions y product los teclea el personal durante el servicio, en el idioma del restaurante y con la ortografía de un martes de mucho trabajo. No construya un enum a partir de ellos, no los use como clave de un join y no dé por hecho que estén en francés.

value puede ser null. Un producto registrado sin lectura es normal: a menudo es un producto seco. Trate null como «no medido», nunca como 0.

Las marcas de tiempo son cadenas. occurredAt es una cadena decimal de milisegundos desde la época Unix, porque toda la plataforma BackResto almacena así las marcas de tiempo. Number(occurredAt) es seguro hoy y durante los próximos cientos de miles de años, pero no deje que un analizador de JSON lo convierta en silencio y luego lo vuelva a escribir con pérdida de precisión.

Ejemplo

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

Última actualización: 2026-09-19.