Friteuses

Les friteuses et leurs contrôles de la qualité de l'huile — deux collections, et pourquoi la valeur mesurée peut manquer alors que la décision, jamais.

L'huile de friture se dégrade à l'usage, et passé un certain point elle doit être filtrée ou jetée. Le restaurant la teste, décide quoi faire, et enregistre les deux. Deux collections : les friteuses, et les contrôles effectués dessus.

CollectionPortéeCe qu'est un enregistrement
fryer-equipmentfryer-equipment:readUne friteuse.
fryer-checksfryer-checks:readUn contrôle de la qualité de l'huile sur l'une d'elles, et ce qui a été décidé.

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

fryer-equipment

Les friteuses elles-mêmes, telles que le restaurant les liste. Un enregistrement court — un nom, une position dans la liste, et l'endroit où elle se trouve.

ChampTypeSignification
indexinteger, obligatoireLa position de la friteuse dans la liste, telle que l'application l'ordonne.
namestring, obligatoireLe nom que lui donne le restaurant.
areaIdstring | nullLa zone où elle se trouve. null dans un restaurant qui ne se découpe pas en zones.
isDeletedboolean, obligatoireLa suppression douce propre à l'application. Lisez la note ci-dessous.
{
  "id": "6b1d0f54-8e27-4c93-a7b0-52fd3e1c9a86",
  "collection": "fryer-equipment",
  "deleted": false,
  "capturedAt": "1789598411206",
  "receivedAt": "1789598603471",
  "sequence": "1",
  "data": {
    "index": 1,
    "name": "Friteuse gauche",
    "areaId": "7d2c0b61-4e8a-49f3-9c27-5a1b8e60d3f4",
    "isDeleted": false
  }
}

Il n'y a pas de seuils ici. Contrairement à l'équipement, une friteuse ne porte ni min ni max : rien sur l'enregistrement ne dit ce qu'est un bon relevé d'huile. Qu'un contrôle ait été acceptable ou non relève de l'appréciation du restaurant, et la seule trace qu'il en reste est l'action qu'il a prise.

isDeleted n'est pas le deleted de l'enveloppe. Une friteuse que le restaurant a retirée revient avec isDeleted: true et deleted: false : toujours un enregistrement vivant, qui décrit une friteuse qui n'est plus en service. Filtrez sur les deux, et gardez celles qui ont été retirées — de vieux contrôles pointent encore vers elles.

fryer-checks

Un contrôle sur une friteuse : ce que le test a montré, et ce qui en a été fait.

ChampTypeSignification
timestampstring, obligatoireQuand le contrôle a été fait, en millisecondes depuis l'epoch sous forme de chaîne de caractères.
testValuestring | nullCe que le test a montré, sous forme de texte. null quand rien n'a été mesuré.
actionstring, obligatoireCe qui a été décidé pour l'huile — la filtrer, la changer, la laisser telle quelle.
fryerEquipmentIdstring, obligatoireLa friteuse qui a été contrôlée.
userIdstring | nullLe membre du personnel qui a fait le contrôle, quand l'application en a enregistré un.
{
  "id": "e07a5c92-4f61-48b8-9d3a-b18c60e5427f",
  "collection": "fryer-checks",
  "deleted": false,
  "capturedAt": "1789777348215",
  "receivedAt": "1789777510964",
  "sequence": "2",
  "data": {
    "timestamp": "1789777200000",
    "testValue": "18",
    "action": "Filtration de l'huile",
    "fryerEquipmentId": "6b1d0f54-8e27-4c93-a7b0-52fd3e1c9a86",
    "userId": "2774953d-8d9b-4a68-8ec4-1209edd90777"
  }
}

testValue est une chaîne de caractères, pas un nombre. C'est ce qu'a montré la bandelette ou la sonde, consigné sous forme de texte, et l'enregistrement ne porte ni unité ni échelle — un restaurant qui utilise des bandelettes et un autre qui utilise un mesureur de composés polaires atterrissent tous les deux ici. Gardez-le sous forme de texte. Le convertir en nombre flottant d'un restaurant à l'autre vous donne une colonne dont les valeurs ne se comparent pas.

action est du texte libre, dans la langue du restaurant. Le schéma ne le contraint pas : lisez la valeur plutôt que de la confronter à une liste à vous — et n'en tirez pas une énumération à partir de ce que vous voyez dans les données d'un seul restaurant.

Ce que veut dire un contrôle sans valeur

testValue peut être null et action est obligatoire : c'est cette asymétrie qu'il faut prendre en compte dans votre conception. Un contrôle peut être enregistré comme une action prise sans aucune valeur mesurée derrière : quelqu'un a changé l'huile parce qu'elle avait mauvaise allure, parce que c'était la fin de la semaine, parce que la friteuse était nettoyée de toute façon.

Un contrôle n'est donc pas une mesure. C'est une décision, parfois accompagnée d'une mesure. Si vous construisez une table des relevés d'huile dans le temps, attendez-vous à une bonne part de lignes sans rien dans la colonne de valeur, et comptez-les plutôt que de les écarter — une action sans valeur reste un contrôle qui a eu lieu.

Travailler avec ces enregistrements

Joignez sur fryerEquipmentId. Un contrôle nomme sa friteuse et rien d'autre ; le nom de la friteuse est sur fryer-equipment, que vous parcourez séparément. Deux parcours, joints de votre côté.

Ordonnez sur capturedAt, pas sur receivedAt. Une tablette téléverse quand elle trouve du réseau : un contrôle fait à 09:00 peut arriver à 14:00. La page de l'enveloppe raconte toute l'histoire.

L'absence ne prouve rien. Une friteuse sans contrôle cette semaine n'a peut-être pas été contrôlée, ou dort peut-être sur un appareil qui n'a pas téléversé. Ne transformez pas un décompte en chiffre de conformité — voyez la mise en garde.

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