Temperaturas

Temperaturas de frío y de cocción, tomadas por una persona o informadas por un sensor: tres colecciones y qué las distingue.

La temperatura es la medición sobre la que gira una inspección de seguridad alimentaria, y la aplicación la registra de tres maneras. Se parecen y significan cosas distintas, así que conviene entender bien la diferencia antes de construir sobre cualquiera de ellas.

ColecciónPermisoQuién tomó la medición
temperature-recordstemperature-records:readUna persona, en una nevera o un congelador, durante un turno concreto.
temperature-readingstemperature-readings:readUn sensor, por su cuenta, sin intervención.
cooking-temperature-recordscooking-temperature-records:readUna persona, en un equipo de cocción: un horno, un armario de mantenimiento.

Las tres comparten el sobre de instantánea: id, deleted, capturedAt, receivedAt, sequence y los demás campos acompañan al data que se describe más abajo.

temperature-records

Un control manual sobre un equipo de cadena de frío. Un registro por lectura, por equipo y por turno.

CampoTipoSignificado
timestampstring, obligatorioCuándo se tomó la lectura, en milisegundos desde la época Unix como cadena.
valuenumber, obligatorioLa temperatura en sí.
unitstring, obligatorioCELSIUS en todos los registros que hemos visto. Léalo en lugar de suponerlo.
shiftstring, obligatorioEl servicio al que pertenece: MORNING, EVENING. En mayúsculas.
equipmentIdstring, obligatorioEl equipo medido.
correctiveActionsstring[]Qué se hizo cuando la lectura estaba fuera de rango. Vacío cuando no hizo falta nada.
userIdstring | nullEl miembro del personal que la tomó, cuando la aplicación registró uno.
{
  "id": "48a30f0b-ccc0-4d18-8404-525b16ecaaa6",
  "collection": "temperature-records",
  "deleted": false,
  "capturedAt": "1789772570338",
  "receivedAt": "1789772802108",
  "sequence": "1",
  "data": {
    "timestamp": "1789768800000",
    "value": -14.4,
    "unit": "CELSIUS",
    "shift": "MORNING",
    "equipmentId": "84ce5c13-3237-40d4-901a-cbba59a6406f",
    "userId": "2774953d-8d9b-4a68-8ec4-1209edd90777"
  }
}

value es una lectura, no un veredicto. Nada en el registro dice si era aceptable: eso depende del min y el max del equipo, que tiene que leer aparte y que el restaurante puede cambiar. Un registro tomado a -14,4 °C es un problema en una nevera y lo normal en un congelador.

correctiveActions es texto libre, tecleado durante el servicio en el idioma del restaurante. Cuéntelo si quiere; no construya un enum a partir de él.

temperature-readings

La misma medición, informada por una sonda inalámbrica en lugar de por una persona. La misma forma menos los dos campos que solo tienen sentido cuando interviene alguien: no hay shift ni userId.

CampoTipoSignificado
timestampstring, obligatorioCuándo informó el sensor, en milisegundos desde la época Unix como cadena.
valuenumber, obligatorioLa temperatura.
unitstring, obligatorioComo arriba.
equipmentIdstring, obligatorioEl equipo que vigila el sensor.
correctiveActionsstring[]Se rellena después, por una persona, cuando se actuó sobre una alerta.

Llegan al ritmo que marca el propio sensor, así que un restaurante con mucha actividad produce muchos más de estos que de registros manuales: dimensione sus consultas para el volumen, no para la plantilla.

Qué sensor informó no figura en la lectura. El vínculo vive en la colección sensors, cuyo sensorEquipmentId apunta de vuelta al equipo: atención al nombre, no es equipmentId.

cooking-temperature-records

Una persona que mide un equipo de cocción en lugar de uno de frío. Idéntico a temperature-records salvo que apunta a un equipo de cocción.

CampoTipoSignificado
timestampstring, obligatorioCuándo se tomó la lectura.
valuenumber, obligatorioLa temperatura.
unitstring, obligatorioComo arriba.
shiftstring, obligatorioEl servicio al que pertenece.
cookingEquipmentIdstring, obligatorioEl equipo de cocción medido: no equipmentId.
correctiveActionsstring[]Qué se hizo ante una lectura fuera de rango.
userIdstring | nullQuién la tomó.

El nombre del campo es la única diferencia que hace daño: un cliente que lea equipmentId aquí obtiene undefined, en silencio, y un gráfico sin ningún equipo.

Leer las tres juntas

Un cuadro de mando que responda a «¿estuvo esta nevera en rango hoy?» necesita temperature-records y temperature-readings fusionados por equipmentId, con los umbrales de equipment. Tres recorridos, unidos por su parte: no hay ningún endpoint que lo haga por usted.

Dos cosas que conviene incorporar desde el principio:

  • Ordene por capturedAt, no por receivedAt. Una tableta en una cámara frigorífica sube los datos cuando encuentra cobertura, así que el registro de una lectura de las 09:00 puede llegar a las 14:00. La página del sobre cuenta la historia completa.
  • La ausencia no prueba nada. Una lectura que falta puede significar que el control se omitió, o que el dispositivo todavía no la ha subido. No saque de esta API una tasa de cumplimentación y la llame cumplimiento: consulte la nota sobre exhaustividad.

Última actualización: 2026-09-20.