Étiquettes de traçabilité

Les étiquettes secondaires que le personnel imprime et colle sur un contenant, avec le fichier imprimé attaché et un identifiant de groupe par impression.

Quand un contenant est ouvert ou qu'une préparation est faite, le personnel imprime une étiquette et la colle dessus : ce que c'est, d'où ça vient, quand ça a été ouvert, quand ça doit partir. Ce sont les étiquettes secondaires de durée de vie, celles qu'un inspecteur retourne dans sa main — et cette collection est l'enregistrement de chacune de celles qui ont été imprimées, avec le fichier imprimé lui-même attaché.

CollectionPortéeCe qu'est un enregistrement
traceability-labelstraceability-labels:readUne étiquette qui a été imprimée, et le fichier qui a été imprimé.

Elle partage l'enveloppe d'instantané : id, deleted, capturedAt, receivedAt, sequence et le reste entourent le data ci-dessous.

traceability-labels

ChampTypeSignification
timestampstring, obligatoireQuand l'étiquette a été imprimée, en millisecondes depuis l'epoch sous forme de chaîne de caractères.
supplierstring | nullQui a fourni ce sur quoi l'étiquette est collée. Texte libre.
partnumber | nullNon documenté. Un nombre décimal, pas un entier — lisez la note ci-dessous avant de l'utiliser.
commentarystring | nullUne note saisie au moment de l'impression. Texte libre.
groupIdstring | nullL'impression à laquelle cette étiquette appartient.
userIdstring | nullLe membre du personnel qui l'a imprimée, quand l'application en a gardé un.
assetobject, obligatoireLe fichier qui a été imprimé. Lisez la section suivante.
{
  "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 est un nom, pas une référence. C'est du texte, pas l'identifiant d'un fournisseur, et rien ne maintient les deux en phase : un fournisseur renommé dans le catalogue ne réécrit pas les étiquettes imprimées le mois dernier. Faites la correspondance dessus s'il le faut, mais traitez une correspondance comme une supposition et une absence de correspondance comme normale.

Le fichier

Chaque étiquette en porte un : data.asset dit qu'un fichier existe, et les octets viennent de l'endpoint des fichiers.

GET /v1/restaurants/{restaurantId}/collections/traceability-labels/records/{recordId}/assets

Il répond par des URL signées valables quinze minutes, portant chacune sa propre autorisation, si bien que le téléchargement ne demande aucun en-tête. Les règles complètes — à quoi ressemble la réponse, pourquoi sha256 vous évite un téléchargement, pourquoi vous stockez les octets et pas le lien — sont sur la page des collections. Deux choses méritent quand même d'être dites ici.

asset décrit le fichier ; seul l'endpoint vous le remet. Il porte objectKey, status, contentType, byteLength et sha256, mais aucune URL — un lien qui n'expirerait jamais serait une porte d'entrée permanente et non authentifiée dans les enregistrements d'un restaurant. Aiguillez sur status : uploaded signifie que les octets sont arrivés et ont été vérifiés, pending qu'un appareil est encore en train de les envoyer, et un asset en pending est délibérément absent de l'endpoint des fichiers plutôt que cassé.

Une étiquette imprimée n'est pas forcément une image. Lisez le contentType que l'endpoint des fichiers vous donne plutôt que de supposer une photographie, et ne renommez pas tout en .jpg à l'entrée de votre propre stockage.

Les étiquettes imprimées ensemble

groupId est le champ qui retransforme un flux d'étiquettes en quelque chose qu'une personne reconnaîtrait. Quand le personnel imprime un lot — plusieurs étiquettes pour plusieurs contenants de la même préparation, d'un coup — chaque étiquette de cette impression porte le même groupId. Groupez dessus avant d'afficher quoi que ce soit : une impression est un seul événement dans une chronologie, pas huit.

part est le champ dont nous ne pouvons pas encore vous dire le sens, et nous préférons le dire plutôt que de vous laisser deviner de travers. C'est un nombre décimal, pas un compteur, ce qui exclut la lecture évidente d'« étiquette 3 sur 8 » et suggère une portion ou une quantité — mais rien dans le schéma ne l'affirme, et nous n'allons pas faire semblant. Transportez-le tel quel, affichez-le brut s'il le faut, et demandez-nous si votre intégration en dépend : la réponse tient en une conversation avec les personnes qui ont construit l'écran des étiquettes.

Les deux peuvent être null. Une étiquette imprimée seule peut arriver sans ni l'un ni l'autre, et c'est une impression d'une seule étiquette plutôt qu'un enregistrement cassé : repliez-vous sur l'id de l'enveloppe et affichez-la seule.

Dernière mise à jour 2026-09-20.