Températures

Les températures de froid et de cuisson, relevées par une personne ou remontées par une sonde — trois collections, et ce qui les distingue.

La température est la mesure sur laquelle se joue un contrôle de sécurité alimentaire, et l'application l'enregistre de trois façons. Elles se ressemblent et ne veulent pas dire la même chose : mieux vaut faire la distinction correctement avant de construire sur l'une d'elles.

CollectionPortéeQui a pris la mesure
temperature-recordstemperature-records:readUne personne, sur un réfrigérateur ou un congélateur, pendant un service nommé.
temperature-readingstemperature-readings:readUne sonde, d'elle-même, sans intervention.
cooking-temperature-recordscooking-temperature-records:readUne personne, sur un équipement de cuisson — un four, une armoire de maintien.

Toutes les trois partagent l'enveloppe d'instantané : id, deleted, capturedAt, receivedAt, sequence et le reste entourent le data décrit ci-dessous.

temperature-records

Un contrôle manuel sur un équipement de la chaîne du froid. Un enregistrement par relevé, par équipement, par service.

ChampTypeSignification
timestampstring, obligatoireQuand le relevé a été pris, en millisecondes depuis l'epoch sous forme de chaîne de caractères.
valuenumber, obligatoireLa température elle-même.
unitstring, obligatoireCELSIUS dans tous les enregistrements que nous avons vus. Lisez-le plutôt que de le supposer.
shiftstring, obligatoireLe service auquel il appartient — MORNING, EVENING. En majuscules.
equipmentIdstring, obligatoireL'équipement mesuré.
correctiveActionsstring[]Ce qui a été fait quand le relevé était hors plage. Vide quand rien n'était nécessaire.
userIdstring | nullLe membre du personnel qui l'a pris, quand l'application en a enregistré un.
{
  "id": "48a30f0b-ccc0-4d18-8404-525b16ecaaa6",
  "collection": "temperature-records",
  "deleted": false,
  "capturedAt": "1789772570338",
  "receivedAt": "1789772802108",
  "sequence": "1",
  "data": {
    "timestamp": "1789768800000",
    "value": -14.4,
    "unit": "CELSIUS",
    "shift": "MORNING",
    "equipmentId": "84ce5c13-3237-40d4-901a-cbba59a6406f",
    "userId": "2774953d-8d9b-4a68-8ec4-1209edd90777"
  }
}

value est un relevé, pas un verdict. Rien dans l'enregistrement ne dit s'il était acceptable : cela dépend des min et max portés par l'équipement, que vous devez lire séparément et que le restaurant peut changer. Un relevé pris à -14,4 °C est un problème dans un réfrigérateur et normal dans un congélateur.

correctiveActions est du texte libre, saisi pendant le service dans la langue du restaurant. Comptez-le si vous voulez ; n'en tirez pas une énumération.

temperature-readings

La même mesure, remontée par une sonde sans fil plutôt que par une personne. Même forme, moins les deux champs qui n'ont de sens que lorsqu'un humain est intervenu : il n'y a ni shift ni userId.

ChampTypeSignification
timestampstring, obligatoireQuand la sonde a remonté la valeur, en millisecondes depuis l'epoch sous forme de chaîne de caractères.
valuenumber, obligatoireLa température.
unitstring, obligatoireComme ci-dessus.
equipmentIdstring, obligatoireL'équipement que la sonde surveille.
correctiveActionsstring[]Renseigné après coup, par une personne, quand une alerte a donné lieu à une action.

Ceux-ci arrivent au rythme de la sonde : un restaurant chargé en produit bien plus que d'enregistrements manuels — dimensionnez votre interrogation sur le volume plutôt que sur l'effectif.

Quelle sonde a remonté la valeur n'est pas sur le relevé. Le lien se trouve sur la collection sensors, dont le sensorEquipmentId renvoie à l'équipement — attention au nom, ce n'est pas equipmentId.

cooking-temperature-records

Une personne qui mesure un équipement de cuisson plutôt qu'un équipement de froid. Identique à temperature-records, sauf qu'il pointe vers un équipement de cuisson.

ChampTypeSignification
timestampstring, obligatoireQuand le relevé a été pris.
valuenumber, obligatoireLa température.
unitstring, obligatoireComme ci-dessus.
shiftstring, obligatoireLe service auquel il appartient.
cookingEquipmentIdstring, obligatoireL'équipement de cuisson mesuré — pas equipmentId.
correctiveActionsstring[]Ce qui a été fait au sujet d'un relevé hors plage.
userIdstring | nullQui l'a pris.

Le nom du champ est la seule différence qui pique : un client qui lit equipmentId ici obtient undefined, silencieusement, et un graphique sans aucun équipement dessus.

Lire les trois ensemble

Un tableau de bord qui répond à « ce réfrigérateur était-il dans la plage aujourd'hui ? » veut temperature-records et temperature-readings fusionnés sur equipmentId, avec les seuils venus d'equipment. Trois parcours, joints de votre côté — aucun endpoint ne le fait pour vous.

Deux choses à intégrer dès le départ :

  • Ordonnez sur capturedAt, pas sur receivedAt. Une tablette dans une chambre froide téléverse quand elle trouve du réseau : l'enregistrement d'un relevé de 09:00 peut arriver à 14:00. La page de l'enveloppe raconte toute l'histoire.
  • L'absence ne prouve rien. Un relevé manquant peut vouloir dire que le contrôle a été sauté, ou que l'appareil ne l'a pas encore téléversé. N'imprimez pas un taux de réalisation issu de cette API en l'appelant conformité — voyez la mise en garde.

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