Rückverfolgbarkeitsetiketten
Die Zweitetiketten, die Mitarbeiter drucken und auf einen Behälter kleben, mit der gedruckten Datei daran und einer Gruppenkennung pro Druckvorgang.
Wenn ein Behälter geöffnet oder eine Zubereitung gemacht wird, drucken die Mitarbeiter ein Etikett und kleben es auf: was es ist, woher es kam, wann es geöffnet wurde, wann es weg muss. Das sind die Zweitetiketten zur Haltbarkeit, die ein Kontrolleur in der Hand umdreht — und diese Collection ist der Datensatz jedes einzelnen gedruckten Etiketts, mit der gedruckten Datei daran.
| Collection | Berechtigung | Was ein Datensatz ist |
|---|---|---|
traceability-labels | traceability-labels:read | Ein Etikett, das gedruckt wurde, und die Datei, die gedruckt wurde. |
Sie teilt sich den Snapshot-Umschlag: id, deleted,
capturedAt, receivedAt, sequence und der Rest stehen um das data
darunter herum.
traceability-labels
| Feld | Typ | Bedeutung |
|---|---|---|
timestamp | string, Pflicht | Wann das Etikett gedruckt wurde, als Zeichenkette mit Millisekunden seit der Epoche. |
supplier | string | null | Wer geliefert hat, worauf das Etikett klebt. Freitext. |
part | number | null | Nicht dokumentiert. Eine Dezimalzahl, keine ganze Zahl — lesen Sie die Anmerkung unten, bevor Sie es verwenden. |
commentary | string | null | Eine Notiz, beim Drucken getippt. Freitext. |
groupId | string | null | Der Druckvorgang, zu dem dieses Etikett gehört. |
userId | string | null | Der Mitarbeiter, der es gedruckt hat, sofern die App einen behalten hat. |
asset | object, Pflicht | Die Datei, die gedruckt wurde. Lesen Sie den nächsten Abschnitt. |
{
"id": "0c6a4f2b-9e17-4d50-8b3c-1f7d5a2e9046",
"collection": "traceability-labels",
"deleted": false,
"capturedAt": "1789786412903",
"receivedAt": "1789786500117",
"sequence": "2048",
"data": {
"timestamp": "1789786380000",
"supplier": "Metro",
"part": 1.5,
"commentary": "Bac 3, ouvert ce matin",
"groupId": "5e8b1c47-2a90-4f63-b1d8-6c04e7a3f215",
"userId": "b3f7c1a0-5d42-4e88-9a16-7c0e2d4b9f31",
"asset": {
"objectKey": "restaurants/36eaa3fa/labels/c58d10b7e4a9",
"status": "uploaded",
"contentType": "image/jpeg",
"byteLength": 48210,
"sha256": "3c9e0b7a41d85f2e06b93c8a7d140e5b29f6a83c1d07e4b5a9c26f80d3e17b4a"
}
}
}
supplier ist ein Name, keine Referenz. Es ist Text, nicht die Kennung
eines Lieferanten, und nichts hält die beiden im
Gleichschritt: Ein im Katalog umbenannter Lieferant schreibt keine Etiketten um,
die letzten Monat gedruckt wurden. Gleichen Sie darauf ab, wenn es sein muss,
aber behandeln Sie einen Treffer als Vermutung und einen Fehlschlag als normal.
Die Datei
Jedes Etikett trägt eine: data.asset sagt, dass eine Datei existiert, und die
Bytes kommen vom Assets-Endpunkt.
GET /v1/restaurants/{restaurantId}/collections/traceability-labels/records/{recordId}/assets
Er antwortet mit signierten URLs, die fünfzehn Minuten gültig sind, jede mit
ihrer eigenen Autorisierung, sodass der Download keinen Header braucht. Die
vollständigen Regeln — wie die Antwort aussieht, warum sha256 Ihnen einen
Download erspart, warum Sie die Bytes speichern und nicht den Link — stehen auf
der Collections-Seite. Zwei Dinge lohnt es sich hier
trotzdem zu sagen.
asset beschreibt die Datei; herausgeben tut sie nur der Endpunkt. Es trägt
objectKey, status, contentType, byteLength und sha256, aber keine
URL — ein Link, der nie abläuft, wäre ein dauerhafter unauthentifizierter Weg in
die Aufzeichnungen eines Restaurants. Verzweigen Sie auf status: uploaded
heißt, dass die Bytes angekommen und geprüft sind, pending heißt, dass ein
Gerät sie noch sendet, und ein Asset mit pending fehlt beim Assets-Endpunkt
mit Absicht, statt kaputt zu sein.
Ein gedrucktes Etikett ist nicht zwingend ein Bild. Lesen Sie den
contentType, den der Assets-Endpunkt Ihnen gibt, statt ein Foto anzunehmen,
und benennen Sie auf dem Weg in Ihren eigenen Speicher nicht alles .jpg.
Gemeinsam gedruckte Etiketten
groupId ist das Feld, das aus einem Strom von Etiketten wieder etwas macht,
das ein Mensch wiedererkennt. Wenn Mitarbeiter einen Stapel drucken — mehrere
Etiketten für mehrere Behälter derselben Zubereitung, in einem Rutsch —, trägt
jedes Etikett dieses Vorgangs dieselbe groupId. Gruppieren Sie darauf, bevor
Sie etwas anzeigen: Ein Druckvorgang ist ein Ereignis in einem Verlauf, nicht
acht.
part ist das Feld, dessen Bedeutung wir Ihnen noch nicht sagen können, und das
sagen wir lieber, als dass Sie falsch raten. Es ist eine Dezimalzahl, kein
Zähler, was die naheliegende Lesart „Etikett 3 von 8“ ausschließt und eher auf
eine Portion oder eine Menge hindeutet — aber nichts im Schema sagt das, und wir
tun nicht so, als wüssten wir es. Führen Sie es unverändert mit, zeigen Sie es
roh an, wenn es sein muss, und fragen Sie uns, wenn Ihre
Integration davon abhängt: Die Antwort ist ein Gespräch mit den Leuten, die den
Etikettenbildschirm gebaut haben.
Beide dürfen null sein. Ein einzeln gedrucktes Etikett kann ohne beides
ankommen, und das ist ein Druckvorgang mit einem einzigen Etikett und kein
kaputter Datensatz: Greifen Sie auf das id des Umschlags zurück und zeigen Sie
es allein.