metis-desk/docs/evolucion-de-plantillas-de-activos.md
David b45925f3e2 feat(assets): implement asset picker dialog and selection components
- Added `useAssetPickerController` for managing asset selection logic.
- Created `AssetSelectProps` type for defining asset selection properties.
- Implemented `AssetPickerDialog` for displaying the asset selection interface.
- Developed `AssetPickerList` for rendering the list of selectable assets.
- Introduced `AssetSelect` component for integrating the asset picker into forms.
- Created `AssetList` component for shared asset listing functionality.
- Added tests for workstation creation logic to ensure proper validation.
- Implemented workstation asset fields and association fields for managing workstation assets.
- Developed workstation lifecycle dialog for managing work profile states.
- Added form progress component for visualizing multi-step forms.
2026-10-14 19:42:59 +02:00

6.4 KiB

Evolución de plantillas de activos

Estado y objetivo

Propuesta pendiente de implementación. Define cómo deberían reflejarse las ediciones de una plantilla en los activos existentes de todas las compañías que la utilizan. No cambia el comportamiento actual ni las reglas del catálogo de recursos.

Actualmente mapAssetInput captura la especificación al crear el activo y reutiliza la anterior al editarlo. El formulario utiliza esa misma instantánea. Por tanto, añadir campos, secciones o cambiar el orden solo afecta a las nuevas altas. El icono ya se consulta desde la plantilla actual.

Cada AssetRevision conserva valores, autor y fecha, pero no una especificación propia. Sustituir la especificación del activo sin evolucionar este contrato haría que las revisiones antiguas se interpretasen con campos y grupos posteriores. Véanse campos y plantillas y secciones de campos para el contrato vigente.

Comportamiento propuesto

La ficha y la edición del activo deben seguir la plantilla actual, conservando los valores ya registrados. El historial debe mostrar la estructura y las reglas vigentes cuando se registró cada revisión.

Cambio en la plantilla Efecto en los activos existentes
Añadir un campo opcional Aparece vacío en la ficha y disponible en la edición; no se inventa un valor.
Añadir un campo obligatorio o marcarlo obligatorio Aparece pendiente de completar si falta un valor. El activo continúa siendo consultable.
Añadir, renombrar o reordenar secciones Se aplica a la presentación actual; una sección vacía no se muestra en la ficha.
Mover o reordenar campos Cambia su presentación, manteniendo identidad y valor.
Eliminar una sección Sus campos pasan a «Sin sección», conservando los valores.
Retirar un campo Deja de solicitarse; los valores existentes siguen consultables como características retiradas, separados de los campos actuales.
Reincorporar un campo Recupera su valor anterior por UUID, si existe.
Cambiar nombre, descripción o unidad Actualiza la presentación actual; no convierte ni modifica los valores.
Añadir opciones a un campo de lista Las opciones nuevas quedan disponibles sin alterar la selección guardada.
Desactivar plantilla o campo Conserva activos, asociaciones, valores e historial; mantiene las reglas de disponibilidad existentes.

La evolución no cambia el tipo de un campo ni elimina opciones existentes: ambas operaciones continúan prohibidas por el catálogo. Un campo nuevo con el mismo nombre que otro retirado tiene otra identidad y no hereda sus valores.

Los nuevos activos cumplen desde el alta todas las reglas actuales. En los existentes, la edición de características exige completar los campos obligatorios actuales. Las operaciones independientes sobre estado, ubicación o notas no deben quedar bloqueadas por un cambio posterior de plantilla; esto requiere distinguir su validación de la edición de características. Nunca se rellenan valores por defecto para disimular información pendiente. Un cambio a opcional elimina el pendiente correspondiente sin borrar información.

Alcance entre compañías

La dependencia se identifica por UUID de plantilla, nunca por nombre. Una edición global afecta a los activos vinculados a esa plantilla en todas las compañías, incluidos los retirados y los de compañías donde se haya desactivado su disponibilidad. Una plantilla local solo afecta a sus propios activos. Una copia tiene identidad propia y permanece independiente de la plantilla original.

La propagación respeta la compañía propietaria de cada activo y la autorización del servidor. El navegador no elige qué compañías pueden ser modificadas. La edición de una plantilla no reasigna activos ni altera relaciones, puestos o perfiles.

Implementación prevista

  1. Introducir versiones inmutables de la especificación de plantilla, con identidad UUID v7 y persistencia relacional. Una modificación semántica crea una versión; un guardado equivalente conserva la existente.
  2. Asociar cada revisión del activo a la especificación con la que se registró. Una migración explícita conserva la instantánea existente para todas sus revisiones anteriores: no puede reconstruirse qué plantilla histórica existía si esa información nunca se almacenó.
  3. Resolver la especificación actual desde la plantilla al consultar y editar el activo, combinándola con sus valores por UUID de campo. Así el cambio se refleja en todas las compañías sin reescribir masivamente sus activos. Conservar los valores retirados y mantener la especificación histórica para el historial.
  4. Hacer que el dominio y los mappers distingan validación de características, cambios independientes y rehidratación histórica. Guardar una edición real contra la versión actual en una transacción. Si la plantilla cambió mientras el formulario estaba abierto, devolver un conflicto recuperable que permita revisar los cambios conservando la entrada del usuario.
  5. Mostrar en el editor de plantilla el alcance del cambio y, en cada activo, los campos obligatorios pendientes y los valores retirados. Invalidar las consultas afectadas del catálogo y del inventario en el cliente que realiza el cambio; otros clientes reciben la estructura vigente al volver a consultar.

Guardar una plantilla no debe generar revisiones técnicas ficticias por activo. La versión de plantilla conserva autor y fecha para explicar el cambio estructural. Una consulta tampoco escribe datos ni crea historial. Repetir una operación equivalente no duplica versiones ni revisiones. La comparación es semántica.

Validación necesaria

Probar propagación global en dos compañías y aislamiento local y de copias; altas y activos anteriores; campos opcionales y obligatorios; valores 0 y false; reordenación y eliminación de secciones; retirada y reincorporación por identidad; historial sin cambios; disponibilidad desactivada; activos retirados; guardados equivalentes; conflictos entre edición de plantilla y activo; autorización; migración relacional repetible y caché del frontend.

Esta evolución sustituirá, cuando esté implementada, la regla actual que congela la estructura del activo. Hasta entonces las instantáneas siguen siendo inmutables, como documenta el contrato vigente de secciones.