Friggitrici
Le friggitrici e i loro controlli sulla qualità dell'olio — due collezioni, e perché il valore misurato può mancare mentre la decisione non manca mai.
L'olio di frittura si degrada con l'uso, e oltre un certo punto deve essere filtrato o buttato. Il ristorante lo analizza, decide cosa fare, e registra entrambe le cose. Due collezioni: le friggitrici, e i controlli effettuati su di esse.
| Collezione | Ambito | Che cos'è un record |
|---|---|---|
fryer-equipment | fryer-equipment:read | Una friggitrice. |
fryer-checks | fryer-checks:read | Un controllo della qualità dell'olio su una di esse, e cosa è stato deciso. |
Entrambe condividono l'involucro di istantanea: id,
deleted, capturedAt, receivedAt, sequence e gli altri stanno accanto al
data descritto qui sotto.
fryer-equipment
Le friggitrici stesse, come le elenca il ristorante. Un record breve — un nome, una posizione nell'elenco, e dove si trova.
| Campo | Tipo | Significato |
|---|---|---|
index | intero, obbligatorio | La posizione della friggitrice nell'elenco, nell'ordine in cui le dispone l'app. |
name | stringa, obbligatorio | Come la chiama il ristorante. |
areaId | stringa | null | L'area in cui si trova. null in un ristorante che non si suddivide in aree. |
isDeleted | booleano, obbligatorio | La cancellazione logica propria dell'app. Legga la nota qui sotto. |
{
"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
}
}
Qui non ci sono soglie. A differenza delle
apparecchiature, una friggitrice non porta alcun min e
alcun max: niente nel record dice quale sia una buona lettura dell'olio. Se un
controllo sia stato accettabile è un giudizio del ristorante, e l'unica traccia
che ne resta è l'azione che ha intrapreso.
isDeleted non è il deleted dell'involucro. Una friggitrice che il
ristorante ha rimosso torna con isDeleted: true e deleted: false: è ancora
un record vivo, che descrive una friggitrice non più in servizio. Filtri su
entrambi, e conservi quelle rimosse — i vecchi controlli le indicano ancora.
fryer-checks
Un controllo su una friggitrice: cosa ha mostrato il test, e cosa è stato fatto di conseguenza.
| Campo | Tipo | Significato |
|---|---|---|
timestamp | stringa, obbligatorio | Quando è stato effettuato il controllo, millisecondi dall'epoch come stringa. |
testValue | stringa | null | Cosa ha mostrato il test, come testo. null quando non è stato misurato nulla. |
action | stringa, obbligatorio | Cosa è stato deciso sull'olio — filtrarlo, cambiarlo, lasciarlo com'è. |
fryerEquipmentId | stringa, obbligatorio | La friggitrice controllata. |
userId | stringa | null | Il membro del personale che ha effettuato il controllo, quando l'app ne ha registrato uno. |
{
"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 è una stringa, non un numero. È ciò che ha mostrato la striscia
o la sonda, registrato come testo, e il record non porta alcuna unità e alcuna
scala — un ristorante che usa strisce reattive e uno che usa un misuratore di
composti polari finiscono entrambi qui. Lo tenga come testo. Convertirlo in un
float attraverso i ristoranti le dà una colonna i cui valori non sono
confrontabili.
action è testo libero nella lingua del ristorante. Lo schema non lo
vincola, quindi legga il valore anziché confrontarlo con un elenco suo — e non
costruisca un enum a partire da quello che vede nei dati di un solo ristorante.
Cosa significa un controllo senza valore
testValue ammette null e action è obbligatorio, e quell'asimmetria è la cosa
attorno a cui progettare. Un controllo può essere registrato come un'azione
intrapresa senza alcun valore misurato dietro: qualcuno ha cambiato l'olio
perché sembrava sbagliato, perché era fine settimana, perché la friggitrice
veniva comunque pulita.
Quindi un controllo non è una misurazione. È una decisione, a volte con una misurazione allegata. Se sta costruendo una tabella delle letture dell'olio nel tempo, si aspetti una buona quota di righe senza nulla nella colonna del valore, e le conti anziché scartarle — un'azione senza valore è comunque un controllo che è avvenuto.
Lavorare con questi dati
Unisca su fryerEquipmentId. Un controllo nomina la sua friggitrice e
nient'altro; il nome della friggitrice sta su fryer-equipment, che percorre
separatamente. Due percorsi, uniti dalla sua parte.
Ordini su capturedAt, non su receivedAt. Un tablet carica i dati quando
trova segnale, quindi un controllo effettuato alle 09:00 può arrivare alle
14:00. La pagina sull'involucro racconta tutta la storia.
L'assenza non prova nulla. Una friggitrice senza controlli questa settimana può non essere stata controllata, oppure può trovarsi su un dispositivo che non ha caricato i dati. Non trasformi un conteggio di questi record in un dato di conformità — veda l'avvertenza.