Saltar al contenido principal

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

Quién puede editar y publicar

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.

Lista de tanques gestionados

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ñaQué configura
IdentidadTag (código único por patio), nombre, estado de ciclo de vida (draft → in_service → decommissioned), notas y borrado suave.
GeometríaFamilia 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.
PropiedadesMaterial 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 aforoEnlace 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).
DispositivosDispositivos (radares, sensores) asignados al tanque; permite asignar y desasignar del pool mediante el AssignDeviceModal.
AlarmasSetpoints de alarma hiHi, hi, lo, loLo (todos en mm) y la opción de aplicar una plantilla de alarmas del catálogo.
AuditoríaRibbon de revisiones con la opción de restaurar el tanque a cualquier snapshot anterior.

Pasos del editor

  1. 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).

  2. 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:

    Pestaña Identidad del editor de tanque

    Las demás pestañas del editor:

    Captura pendiente

    Screenshot pendiente del barrido diferido — ver 61-DEFERRED-SWEEP.md (pestañas Geometría, Propiedades, Tablas de aforo, Dispositivos, Alarmas y Auditoría).

  3. Guardar los cambios. El botón Guardar de la barra de guardado fija (StickySaveBar) ejecuta la acción saveTank, que envía un PATCH al 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 pendiente

    Screenshot pendiente del barrido diferido — ver 61-DEFERRED-SWEEP.md (barra de guardado fija con el dirty-count por pestaña).

  4. 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 TemplateDiffDialog muestra el diff entre la plantilla y el snapshot del tanque; un DriftBadge señ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 pendiente

    Screenshot pendiente del barrido diferido — ver 61-DEFERRED-SWEEP.md (TemplateDiffDialog y DriftBadge).

Edición concurrente

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:

  1. Subir. Selecciona el patio destino y carga el archivo .xlsx a partir de la plantilla descargable.
  2. 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.
  3. Revisión. Un selector de campos (merge-field picker) permite resolver columna por columna qué valor prevalece antes de confirmar.
  4. Commit. TankOS crea de forma atómica todos los tanques válidos del archivo.
Captura pendiente

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:

EstadoSignificado
draftRecién creado, en configuración. Es el estado por defecto al crear un tanque.
in_serviceEn operación, recibiendo telemetría y participando en cálculos custody.
decommissionedRetirado 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.
Nunca se borra un tanque de forma definitiva

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