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.
| Collection | Portée | Ce qu'est un enregistrement |
|---|---|---|
fryer-equipment | fryer-equipment:read | Une friteuse. |
fryer-checks | fryer-checks:read | Un 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.
| Champ | Type | Signification |
|---|---|---|
index | integer, obligatoire | La position de la friteuse dans la liste, telle que l'application l'ordonne. |
name | string, obligatoire | Le nom que lui donne le restaurant. |
areaId | string | null | La zone où elle se trouve. null dans un restaurant qui ne se découpe pas en zones. |
isDeleted | boolean, obligatoire | La 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.
| Champ | Type | Signification |
|---|---|---|
timestamp | string, obligatoire | Quand le contrôle a été fait, en millisecondes depuis l'epoch sous forme de chaîne de caractères. |
testValue | string | null | Ce que le test a montré, sous forme de texte. null quand rien n'a été mesuré. |
action | string, obligatoire | Ce qui a été décidé pour l'huile — la filtrer, la changer, la laisser telle quelle. |
fryerEquipmentId | string, obligatoire | La friteuse qui a été contrôlée. |
userId | string | null | Le 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.