Fritteusen

Die Fritteusen und die Prüfungen ihrer Ölqualität — zwei Collections, und warum der gemessene Wert fehlen kann, die Entscheidung aber nie.

Frittieröl verdirbt mit dem Gebrauch, und ab einem bestimmten Punkt muss es gefiltert oder weggeworfen werden. Das Restaurant prüft es, entscheidet, was zu tun ist, und erfasst beides. Zwei Collections: die Fritteusen und die Kontrollen, die daran gemacht werden.

CollectionBerechtigungWas ein Datensatz ist
fryer-equipmentfryer-equipment:readEine Fritteuse.
fryer-checksfryer-checks:readEine Prüfung der Ölqualität an einer von ihnen, und was entschieden wurde.

Beide teilen sich den Snapshot-Umschlag: id, deleted, capturedAt, receivedAt, sequence und der Rest stehen neben dem data, das unten beschrieben ist.

fryer-equipment

Die Fritteusen selbst, so wie das Restaurant sie auflistet. Ein kurzer Datensatz — ein Name, eine Position in der Liste und wo sie steht.

FeldTypBedeutung
indexinteger, PflichtDie Position der Fritteuse in der Liste, so wie die App sie ordnet.
namestring, PflichtWie das Restaurant sie nennt.
areaIdstring | nullDer Bereich, in dem sie steht. null bei einem Restaurant, das sich nicht in Bereiche aufteilt.
isDeletedboolean, PflichtDie eigene weiche Löschung der App. Lesen Sie die Anmerkung unten.
{
  "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
  }
}

Hier gibt es keine Schwellen. Anders als ein Gerät trägt eine Fritteuse kein min und kein max: Nichts im Datensatz sagt, was ein guter Ölwert ist. Ob eine Kontrolle in Ordnung war, ist das Urteil des Restaurants, und die einzige Spur davon ist die Maßnahme, die es ergriffen hat.

isDeleted ist nicht das deleted des Umschlags. Eine Fritteuse, die das Restaurant entfernt hat, kommt mit isDeleted: true und deleted: false zurück: weiterhin ein lebender Datensatz, der eine Fritteuse beschreibt, die nicht mehr im Einsatz ist. Filtern Sie auf beides und behalten Sie die entfernten — alte Kontrollen zeigen weiterhin auf sie.

fryer-checks

Eine Kontrolle an einer Fritteuse: was die Prüfung ergeben hat und was daraufhin getan wurde.

FeldTypBedeutung
timestampstring, PflichtWann die Kontrolle gemacht wurde, als Zeichenkette mit Millisekunden seit der Epoche.
testValuestring | nullWas die Prüfung ergeben hat, als Text. null, wenn nichts gemessen wurde.
actionstring, PflichtWas über das Öl entschieden wurde — es filtern, es wechseln, es so lassen.
fryerEquipmentIdstring, PflichtDie Fritteuse, die geprüft wurde.
userIdstring | nullDer Mitarbeiter, der die Kontrolle gemacht hat, sofern die App einen erfasst hat.
{
  "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 ist eine Zeichenkette, keine Zahl. Es ist, was der Teststreifen oder der Messfühler angezeigt hat, als Text erfasst, und der Datensatz trägt weder Einheit noch Skala — ein Restaurant mit Teststreifen und eines mit einem Messgerät für polare Anteile landen beide hier. Behalten Sie es als Text. Es über Restaurants hinweg in eine Fließkommazahl zu parsen gibt Ihnen eine Spalte, deren Werte nicht vergleichbar sind.

action ist Freitext in der Sprache des Restaurants. Das Schema schränkt es nicht ein, lesen Sie den Wert also, statt ihn gegen eine eigene Liste abzugleichen — und bauen Sie kein Enum aus dem, was Sie in den Daten eines einzelnen Restaurants sehen.

Was eine Kontrolle ohne Wert bedeutet

testValue darf null sein und action ist Pflicht, und um diese Ungleichheit herum sollten Sie entwerfen. Eine Kontrolle kann als ergriffene Maßnahme ohne gemessenen Wert dahinter erfasst werden: Jemand hat das Öl gewechselt, weil es falsch aussah, weil das Wochenende bevorstand, weil die Fritteuse ohnehin gereinigt wurde.

Eine Kontrolle ist also keine Messung. Sie ist eine Entscheidung, manchmal mit einer Messung daran. Wenn Sie eine Tabelle der Ölwerte über die Zeit bauen, rechnen Sie mit einem guten Teil Zeilen, in denen die Wertspalte leer ist, und zählen Sie sie, statt sie wegzulassen — eine Maßnahme ohne Wert ist trotzdem eine Kontrolle, die stattgefunden hat.

Damit arbeiten

Verbinden Sie über fryerEquipmentId. Eine Kontrolle benennt ihre Fritteuse und sonst nichts; der Name der Fritteuse steht in fryer-equipment, das Sie getrennt durchlaufen. Zwei Durchläufe, auf Ihrer Seite verbunden.

Ordnen Sie nach capturedAt, nicht nach receivedAt. Ein Tablet lädt hoch, sobald es Empfang findet; eine Kontrolle um 09:00 Uhr kann also um 14:00 Uhr ankommen. Die Seite zum Umschlag erzählt die ganze Geschichte.

Abwesenheit beweist nichts. Eine Fritteuse ohne Kontrolle in dieser Woche wurde vielleicht nicht kontrolliert oder liegt auf einem Gerät, das noch nicht hochgeladen hat. Machen Sie aus einer Anzahl davon keine Compliance-Kennzahl — siehe die Anmerkung zur Vollständigkeit.

Zuletzt aktualisiert am 2026-09-20.