Catálogos
Los catálogos son las bibliotecas de configuración reutilizable de TankOS: productos, plantillas y modelos que se definen una vez y se clonan sobre muchos tanques o dispositivos. En lugar de re-capturar la misma configuración tanque por tanque, el administrador la define en un catálogo y la aplica como punto de partida, con la posibilidad de sobreescribir lo que cada instancia necesite.
Precondición y rol
Los catálogos los gestiona el administrador (admin:catalogs) desde la ruta /catalogs. El resto
de roles consume las plantillas (al configurar tanques o dispositivos), pero no edita el catálogo.
Overview: las 5 tarjetas
La página principal (/catalogs) es una grilla de cinco tarjetas, cada una con su conteo en
tiempo real:

| Tarjeta | Qué agrupa |
|---|---|
| Plantillas de tanques | Configuraciones completas de tanque, clonables a tanques nuevos. |
| Plantillas de alarmas | Juegos de setpoints de alarma, aplicables a uno o varios tanques. |
| Productos | Catálogo de productos almacenables con sus propiedades de cálculo. |
| Tablas de aforo template | Perfiles de strapping compartidos entre tanques. |
| Modelos de dispositivo | Modelos de radar/sensor con sus valores por defecto. |
Si el endpoint de conteo falla, la tarjeta muestra "no disponible" en lugar del número, sin romper la página.
Los 5 catálogos clonables
| Catálogo | Ruta | Qué contiene |
|---|---|---|
| Plantillas de tanques | /catalogs/tank-templates | Configuración completa de tanque clonable (geometría, propiedades, etc.); CTA Nueva plantilla. |
| Plantillas de alarmas | /catalogs/alarm-templates | Juegos de setpoints de alarma clonables a tanques; CTA Nuevo template. |
| Productos | /catalogs/products | Nombre, gravedad API, tipo y propiedades MPMS del producto; CTA Nuevo producto. |
| Tablas de aforo template | /catalogs/strapping-templates | Perfiles de strapping compartidos entre tanques; CTA Nueva plantilla. |
| Modelos de dispositivo | /catalogs/device-models | Vendor, modelo, unidades por defecto y dirección de nivel del instrumento; CTA Nuevo modelo. |
Cada catálogo es una lista con un diálogo de creación/edición. Tres de ellos aún no tienen captura del barrido inicial:
Screenshot pendiente del barrido diferido — ver 61-DEFERRED-SWEEP.md (Plantillas de tanques).
Screenshot pendiente del barrido diferido — ver 61-DEFERRED-SWEEP.md (Plantillas de alarmas).
Screenshot pendiente del barrido diferido — ver 61-DEFERRED-SWEEP.md (Tablas de aforo template).
Screenshot pendiente del barrido diferido — ver 61-DEFERRED-SWEEP.md (Modelos de dispositivo).
Catálogo de productos
El catálogo de productos (/catalogs/products) lista los productos almacenables con su nombre,
gravedad API y tipo, más las propiedades que el motor MPMS necesita para el cálculo. El botón
Nuevo producto abre el diálogo de creación/edición.

Cada producto definido aquí queda disponible para asignarlo a los lotes de custodia y a los cálculos de los tanques que lo almacenan.
El patrón plantilla → instancia con override (herencia)
El valor de los catálogos está en el patrón de herencia: una plantilla aporta los valores por defecto, y la instancia (tanque o dispositivo) los sobreescribe solo donde haga falta.
Definir una plantilla una vez y aplicarla a muchos tanques evita re-capturar la misma geometría, setpoints o parámetros una y otra vez. Cuando dos tanques son casi idénticos, la plantilla es la fuente común y cada uno ajusta solo sus diferencias.
Snapshot-at-apply + detección de drift (plantillas de tanque)
Al asignar una plantilla a un tanque, TankOS congela una copia de la configuración de la
plantilla (un bloque JSONB) junto con su hash SHA-256 dentro del tanque (snapshot-at-apply). A
partir de ahí, un proceso periódico (cron de drift) compara el tanque contra ese snapshot y
detecta divergencias: si la configuración del tanque se aparta de la plantilla, el editor muestra un
DriftBadge y el TemplateDiffDialog con el diff plantilla ↔ tanque.
Así, la plantilla no "ata" al tanque: este puede divergir, pero la divergencia queda visible y trazable, no silenciosa.
DeviceModel → Device (modelos de dispositivo)
El mismo patrón aplica a los modelos de dispositivo: el DeviceModel del catálogo provee los
valores por defecto de configuración, y cada Device puede sobreescribirlos con overrides
específicos. El valor efectivo de cualquier parámetro es, en la práctica,
device.X ?? device.deviceModel.X — el override de la instancia si existe, y si no, el valor del
modelo.
Páginas relacionadas
- La detección de drift de plantillas de tanque (
DriftBadge/TemplateDiffDialog) se ve en acción en el editor de tanque. - Los overrides de configuración por dispositivo (sobre los valores del modelo del catálogo) se documentan en dispositivos y radares.
- Las tablas de aforo template se relacionan con el flujo completo de importación y publicación de calibración y tablas de aforo.