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
| Feld | Typ | Bedeutung |
|---|---|---|
id | string | Stabile Kennung der Lieferung, eindeutig innerhalb des Restaurants. |
restaurantId | string | Das Restaurant, zu dem der Datensatz gehört. Spiegelt den Pfad wider. |
occurredAt | string | Wann die Kontrolle stattfand, als Zeichenkette mit Millisekunden seit der Epoche. |
isCompliant | boolean | Das Urteil des Mitarbeiters über die Lieferung als Ganzes. |
supplier | object | null | { "id": string, "name": string }, oder null, wenn die Lieferung ohne einen erfasst wurde. |
temperatureRecords | array | Ein Eintrag pro gemessenem Produkt. Siehe unten. |
nonComplianceReasons | string[] | Warum die Lieferung abgelehnt oder unter Vorbehalt angenommen wurde. Freitext, vom Mitarbeiter gewählt; leer, wenn sie konform ist. |
correctiveActions | string[] | Was daraufhin getan wurde. Leer, wenn nichts nötig war. |
commentary | string | null | Freitextnotiz. Oft null. |
imageCount | integer | Wie viele Fotos angehängt sind. 0 bedeutet, dass der Foto-Endpunkt nichts zurückzugeben hat. |
temperatureRecords[]
| Feld | Typ | Bedeutung |
|---|---|---|
product | string | Was gemessen wurde, so wie der Mitarbeiter es benannt hat. Nie leer. |
value | number | null | Der Messwert. null, wenn das Produkt ohne Messung erfasst wurde. |
unit | "C" | Immer Celsius. Vorhanden, damit ein Konsument nie etwas annehmen muss. |
lotNumber | string | null | Die 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
}