Editor de tanque
El editor de tanque es donde el ingeniero define toda la configuración de un tanque: su identidad, su geometría, las propiedades para el motor de cálculo, la tabla de aforo, los dispositivos asignados y los setpoints de alarma. Esta página documenta el flujo de creación y edición de un tanque (flujo 4) paso a paso, más la importación masiva desde una hoja de cálculo.
Precondición y roles
El perfil ingeniero (engineering:edit) crea, edita y guarda tanques. La publicación de
cambios de ingeniería corresponde a los perfiles con engineering:publish (ingeniero y supervisor).
La configuración solo está disponible desde el módulo de Ingeniería; el resto de roles no accede.
El editor se abre en la ruta /engineering/tanks/[id]/edit. La lista previa de tanques gestionados
(Ingeniería › Tanques) muestra cada tanque con su TAG, nombre, patio, estado de ciclo de vida y
régimen de custodia, con el botón Nuevo tanque para crear uno desde cero.

Las 7 pestañas del editor
El editor organiza la configuración en siete pestañas. La barra de guardado fija (sticky save bar) indica cuántos campos modificados hay por pestaña.
| Pestaña | Qué configura |
|---|---|
| Identidad | Tag (código único por patio), nombre, estado de ciclo de vida (draft → in_service → decommissioned), notas y borrado suave. |
| Geometría | Familia de geometría (cilindro vertical, etc.), altura de referencia (mm), diámetro (mm), perfil de fondo (plano, cónico…), tipo de techo (cono fijo, flotante externo/interno). Los techos flotantes habilitan la configuración FRA/FRC. |
| Propiedades | Material del casco, coeficiente de expansión térmica (shellAlphaPerC), temperatura de referencia (tRefCelsius, por defecto 15,556 °C = 60 °F MPMS), régimen de custodia (SI o US-MPMS) y los valores por defecto de temperatura y presión para el motor de cálculo. |
| Tablas de aforo | Enlace a la tabla de aforo (strapping) activa del tanque y acceso al flujo de importación de tablas. La tabla mapea nivel → volumen en el régimen del tanque: SI (mm → m³) o imperial (pie · pulgada · fracción → barriles). |
| Dispositivos | Dispositivos (radares, sensores) asignados al tanque; permite asignar y desasignar del pool mediante el AssignDeviceModal. |
| Alarmas | Setpoints de alarma hiHi, hi, lo, loLo (todos en mm) y la opción de aplicar una plantilla de alarmas del catálogo. |
| Auditoría | Ribbon de revisiones con la opción de restaurar el tanque a cualquier snapshot anterior. |
Pasos del editor
-
Acceder al editor. En
/engineering/tanks/[id]/edit, el componente padre carga el historial de revisiones y la configuración actual del tanque, e inicializa el editor con la revisión más reciente (o con una configuración vacía para un tanque nuevo). -
Recorrer las pestañas. Completa o ajusta cada pestaña según la tabla anterior. La pestaña Identidad es el punto de partida típico:

Las demás pestañas del editor:
Captura pendienteScreenshot pendiente del barrido diferido — ver
61-DEFERRED-SWEEP.md(pestañas Geometría, Propiedades, Tablas de aforo, Dispositivos, Alarmas y Auditoría). -
Guardar los cambios. El botón Guardar de la barra de guardado fija (
StickySaveBar) ejecuta la acciónsaveTank, que envía unPATCHal tanque y crea una nueva revisión (TankRevision) con el snapshot actualizado. El indicador de campos modificados por pestaña (dirty-count) te dice qué te falta por revisar antes de guardar.Captura pendienteScreenshot pendiente del barrido diferido — ver
61-DEFERRED-SWEEP.md(barra de guardado fija con el dirty-count por pestaña). -
Control de plantilla (TemplateDiffDialog). Si el tanque deriva de una plantilla, el editor detecta cuándo su configuración se ha desviado de ella (drift). El
TemplateDiffDialogmuestra el diff entre la plantilla y el snapshot del tanque; unDriftBadgeseñala la divergencia. Al aplicar una plantilla, se congela una copia de su configuración más un hash SHA-256 (snapshot-at-apply), y un proceso periódico detecta divergencias posteriores.Captura pendienteScreenshot pendiente del barrido diferido — ver
61-DEFERRED-SWEEP.md(TemplateDiffDialog y DriftBadge).
Si otro usuario guarda el tanque mientras tú lo editas, al intentar guardar aparece un banner de revisión obsoleta. Recarga el editor para traer la última revisión y vuelve a aplicar tus cambios sobre ella, igual que con el layout de patio.
Importación masiva (XLSX)
Para dar de alta muchos tanques a la vez existe un asistente de importación de cuatro pasos en
/engineering/tanks/import:
- Subir. Selecciona el patio destino y carga el archivo
.xlsxa partir de la plantilla descargable. - Dry-run (validación en seco). TankOS valida el archivo en tres capas — esquema, claves foráneas (FK) y reglas de negocio — y reporta errores, advertencias y los conteos de filas que se crearán, actualizarán u omitirán. El botón Continuar queda deshabilitado si hay errores.
- Revisión. Un selector de campos (merge-field picker) permite resolver columna por columna qué valor prevalece antes de confirmar.
- Commit. TankOS crea de forma atómica todos los tanques válidos del archivo.
Screenshot pendiente del barrido diferido — ver 61-DEFERRED-SWEEP.md (los 4 pasos del asistente
de importación XLSX: Subir, Dry-run, Revisión, Commit).
Estados del tanque (ciclo de vida)
Un tanque atraviesa tres estados a lo largo de su vida:
| Estado | Significado |
|---|---|
draft | Recién creado, en configuración. Es el estado por defecto al crear un tanque. |
in_service | En operación, recibiendo telemetría y participando en cálculos custody. |
decommissioned | Retirado de servicio. |
Reglas y separación de funciones
- El snapshot de cada revisión es un bloque JSONB validado contra un esquema Zod
(
TankSnapshotEnvelopeSchema): la configuración nunca se guarda sin pasar la validación. - Todas las magnitudes se almacenan en unidades SI (mm, m³, °C, kPa); la conversión ocurre solo al mostrar los datos. Cada usuario puede ver el editor y las tablas de aforo en imperial (pie · pulgada · fracción → barriles) mediante el conmutador SI ⇄ Imperial, sin pérdida de precisión.
TankOS solo permite borrado suave: se marca el tanque como eliminado con una razón obligatoria (mínimo 10 caracteres), pero la fila permanece en la base de datos. El borrado físico está bloqueado a nivel de base de datos. Esto preserva la trazabilidad para auditoría custody.
Páginas relacionadas
- Para asignar y configurar los radares y sensores del tanque, ver dispositivos y radares.
- La gestión a fondo de las tablas de aforo (importación, diff y publicación con separación de funciones) está en calibración y tablas de aforo.