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.

CollectionBerechtigungWas ein Datensatz ist
traceability-labelstraceability-labels:readEin 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

FeldTypBedeutung
timestampstring, PflichtWann das Etikett gedruckt wurde, als Zeichenkette mit Millisekunden seit der Epoche.
supplierstring | nullWer geliefert hat, worauf das Etikett klebt. Freitext.
partnumber | nullNicht dokumentiert. Eine Dezimalzahl, keine ganze Zahl — lesen Sie die Anmerkung unten, bevor Sie es verwenden.
commentarystring | nullEine Notiz, beim Drucken getippt. Freitext.
groupIdstring | nullDer Druckvorgang, zu dem dieses Etikett gehört.
userIdstring | nullDer Mitarbeiter, der es gedruckt hat, sofern die App einen behalten hat.
assetobject, PflichtDie 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.

Zuletzt aktualisiert am 2026-09-20.