Fritadeiras
As fritadeiras e os controlos de qualidade do óleo — duas coleções, e porque é que o valor medido pode faltar quando a decisão nunca falta.
O óleo de fritura degrada-se à medida que é utilizado e, a partir de certo ponto, tem de ser filtrado ou deitado fora. O restaurante testa-o, decide o que fazer, e regista as duas coisas. Duas coleções: as fritadeiras, e os controlos feitos sobre elas.
| Coleção | Âmbito | O que é um registo |
|---|---|---|
fryer-equipment | fryer-equipment:read | Uma fritadeira. |
fryer-checks | fryer-checks:read | Um controlo da qualidade do óleo numa delas, e o que foi decidido. |
As duas partilham o envelope de instantâneo: id,
deleted, capturedAt, receivedAt, sequence e os restantes ficam ao lado
do data descrito abaixo.
fryer-equipment
As fritadeiras em si, tal como o restaurante as lista. Um registo curto — um nome, uma posição na lista, e onde ela está.
| Campo | Tipo | Significado |
|---|---|---|
index | integer, obrigatório | A posição da fritadeira na lista, tal como a aplicação a ordena. |
name | string, obrigatório | Como o restaurante lhe chama. |
areaId | string | null | A zona em que está. null num restaurante que não se divide em zonas. |
isDeleted | boolean, obrigatório | A eliminação lógica da própria aplicação. Leia a nota abaixo. |
{
"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
}
}
Aqui não há limiares. Ao contrário do equipamento, uma
fritadeira não traz min nem max: nada no registo diz o que é uma boa leitura
de óleo. Se um controlo foi aceitável é um juízo do restaurante, e o único
vestígio dele é a ação que tomaram.
isDeleted não é o deleted do envelope. Uma fritadeira que o restaurante
retirou volta com isDeleted: true e deleted: false: continua a ser um
registo vivo, que descreve uma fritadeira que já não está em serviço. Filtre
pelos dois, e guarde as retiradas — os controlos antigos ainda apontam para
elas.
fryer-checks
Um controlo numa fritadeira: o que o teste mostrou, e o que foi feito a esse respeito.
| Campo | Tipo | Significado |
|---|---|---|
timestamp | string, obrigatório | Quando o controlo foi feito, em milissegundos desde a época Unix, em forma de cadeia de caracteres. |
testValue | string | null | O que o teste mostrou, em texto. null quando não foi medido nada. |
action | string, obrigatório | O que foi decidido quanto ao óleo — filtrá-lo, mudá-lo, deixá-lo como está. |
fryerEquipmentId | string, obrigatório | A fritadeira que foi controlada. |
userId | string | null | O funcionário que fez o controlo, quando a aplicação registou um. |
{
"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 é uma cadeia de caracteres, não um número. É o que a tira ou a
sonda mostrou, registado como texto, e o registo não traz unidade nem escala —
um restaurante que use tiras de teste e outro que use um medidor de compostos
polares vão os dois parar aqui. Guarde-o como texto. Convertê-lo num número
decimal através de vários restaurantes dá-lhe uma coluna cujos valores não se
comparam.
action é texto livre na língua do restaurante. O esquema não o restringe,
por isso leia o valor em vez de o comparar com uma lista sua — e não construa
uma enumeração a partir do que vê nos dados de um único restaurante.
O que significa um controlo sem valor
testValue admite null e action é obrigatório, e é essa assimetria que
tem de ter em conta ao desenhar. Um controlo pode ser registado como uma ação
tomada sem qualquer valor medido por trás: alguém mudou o óleo porque parecia
mal, porque era o fim da semana, porque a fritadeira ia ser limpa de qualquer
maneira.
Ou seja, um controlo não é uma medição. É uma decisão, às vezes com uma medição anexada. Se está a construir uma tabela de leituras de óleo ao longo do tempo, conte com uma boa parte de linhas sem nada na coluna do valor, e conte-as em vez de as deitar fora — uma ação sem valor continua a ser um controlo que aconteceu.
Trabalhar com estes
Una pelo fryerEquipmentId. Um controlo identifica a sua fritadeira e mais
nada; o nome da fritadeira está em fryer-equipment, que percorre à parte. Dois
percursos, unidos do seu lado.
Ordene por capturedAt, não por receivedAt. Um tablet carrega quando
encontra sinal, por isso um controlo feito às 09:00 pode chegar às 14:00.
A página do envelope conta a história toda.
A ausência não prova nada. Uma fritadeira sem controlo esta semana pode não ter sido controlada, ou pode estar num dispositivo que ainda não carregou os dados. Não transforme uma contagem destes num número de conformidade — veja a nota de aviso.