Lieferungen

Der Wareneingangsdatensatz — jedes Feld, sein Typ und was es im laufenden Betrieb bedeutet.

Eine Lieferung ist eine Wareneingangskontrolle: Ein Mitarbeiter nimmt eine Bestellung an, erfasst Temperaturen und entscheidet, ob er sie annimmt. Es ist der Datensatz, nach dem ein Lebensmittelkontrolleur fragt.

Beide Endpunkte brauchen die Berechtigung deliveries:read für das Restaurant im Pfad.

Lieferungen sind hier die eine von Hand geformte Ressource: ein entworfenes Objekt, unveränderlich, sobald es erfasst ist, aufgelistet über einen Zeitraum. Alles andere, was die App erfasst — Gar- und Kühltemperaturen, Reinigung, Etiketten —, kommt über Collections, die sich stattdessen einen einzigen generischen Umschlag teilen.

Lieferungen auflisten

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

Liefert { "data": Delivery[], "nextCursor": string | null }, neueste zuerst. Die Regeln für den Zeitraum und den Cursor stehen unter Paginierung.

Eine einzelne Lieferung abrufen

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

Liefert eine einzelne Delivery oder 404, wenn die Kennung unbekannt ist oder der Schlüssel keine Zuweisung für dieses Restaurant hat.

Das Lieferungsobjekt

FeldTypBedeutung
idstringStabile Kennung der Lieferung, eindeutig innerhalb des Restaurants.
restaurantIdstringDas Restaurant, zu dem der Datensatz gehört. Spiegelt den Pfad wider.
occurredAtstringWann die Kontrolle stattfand, als Zeichenkette mit Millisekunden seit der Epoche.
isCompliantbooleanDas Urteil des Mitarbeiters über die Lieferung als Ganzes.
supplierobject | null{ "id": string, "name": string }, oder null, wenn die Lieferung ohne einen erfasst wurde.
temperatureRecordsarrayEin Eintrag pro gemessenem Produkt. Siehe unten.
nonComplianceReasonsstring[]Warum die Lieferung abgelehnt oder unter Vorbehalt angenommen wurde. Freitext, vom Mitarbeiter gewählt; leer, wenn sie konform ist.
correctiveActionsstring[]Was daraufhin getan wurde. Leer, wenn nichts nötig war.
commentarystring | nullFreitextnotiz. Oft null.
imageCountintegerWie viele Fotos angehängt sind. 0 bedeutet, dass der Foto-Endpunkt nichts zurückzugeben hat.

temperatureRecords[]

FeldTypBedeutung
productstringWas gemessen wurde, so wie der Mitarbeiter es benannt hat. Nie leer.
valuenumber | nullDer Messwert. null, wenn das Produkt ohne Messung erfasst wurde.
unit"C"Immer Celsius. Vorhanden, damit ein Konsument nie etwas annehmen muss.
lotNumberstring | nullDie Charge oder das Los, sofern sie erfasst wurde.

Richtig lesen

isCompliant ist die Aufzeichnung, keine Berechnung. Es ist das, was die Person entschieden hat, welche die Lieferung angenommen hat, und es kann von dem abweichen, was Sie allein aus den Temperaturen schließen würden — eine Messung mit einem Oberflächenfühler, ein Produkt mit eigenem Grenzwert, eine Ermessensentscheidung. Stellen Sie es als deren Urteil dar. Wenn Sie ein eigenes wollen, berechnen Sie es daneben und kennzeichnen Sie es als Ihres.

Freitextfelder sind Freitext. nonComplianceReasons, correctiveActions und product werden vom Personal während des Betriebs getippt, in der Sprache des Restaurants und mit der Rechtschreibung eines vollen Dienstags. Bauen Sie daraus kein Enum, schlüsseln Sie darauf keinen Join und nehmen Sie nicht an, dass es Französisch ist.

value kann null sein. Ein Produkt, das ohne Messwert erfasst wurde, ist normal — oft ist es Trockenware. Behandeln Sie null als „nicht gemessen“, nie als 0.

Zeitstempel sind Zeichenketten. occurredAt ist eine Dezimalzeichenkette mit Millisekunden seit der Epoche, weil die gesamte BackResto-Plattform Zeitstempel so speichert. Number(occurredAt) ist heute und für die nächsten paar hunderttausend Jahre sicher, aber lassen Sie einen JSON-Parser den Wert nicht stillschweigend umwandeln und ihn dann mit verlorener Genauigkeit zurückschreiben.

Beispiel

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

Zuletzt aktualisiert am 2026-09-19.