metis-desk/docs/aplicaciones-del-perfil.md
2026-10-25 01:19:17 +02:00

71 lines
7.8 KiB
Markdown

# Aplicaciones del perfil
## Uso
Aplicaciones del perfil está disponible en la compañía y desde cada perfil de usuario. El listado permite buscar por aplicación, perfil, persona y equipo. El alta y la edición se abren mediante modal; la ayuda aparece inmediatamente antes de Guardar y Cancelar.
La configuración pertenece a la compañía y al perfil. La aplicación puede ser un Resource particular de esa compañía o una aplicación global elegible cuando su gate está habilitado. Se seleccionan recursos de la plantilla de serie Aplicación o de una plantilla personalizada con uso Aplicación. El nombre no determina el tipo. Las copias de las plantillas de aplicación y certificado heredan su uso; las plantillas nuevas permiten elegirlo. El uso queda fijo tras el alta, igual que el tipo de un campo. Los recursos existentes y sus especificaciones no se reescriben.
Una configuración relaciona un perfil y un recurso, ambos fijos. No exige cuenta informática ni licencia. Una aplicación puede utilizarse en varios perfiles, con estados y versiones independientes. Un perfil puede necesitar varias aplicaciones. No hay duplicados abiertos de la misma pareja.
## Necesidad y disponibilidad
Pendiente de configurar documenta una necesidad. Configurado documenta que se ha comprobado su disponibilidad. Se usa un único registro con historial para seguir la preparación y la retirada, sin mantener dos listados de necesidades y configuraciones que puedan divergir.
Forma de uso distingue aplicación instalada en el equipo y acceso web. Versión es opcional y solo se admite en una aplicación instalada. Cambiar a acceso web vacía la versión explícitamente en el formulario. Notas es opcional, hasta 4.000 caracteres: por ejemplo, Thunderbird solicitado por Ana.
Proveedor, URL y descripción pertenecen al recurso común. Forma de uso, versión y estado pertenecen al perfil. Las [instalaciones del ordenador](software-del-ordenador.md) documentan por separado el software para el equipo y su sistema operativo actual; no se duplican por cada perfil. Registrar una aplicación como instalada en un perfil no afirma que se haya instalado exclusivamente para ese usuario ni crea otra instalación por cada perfil. Tampoco instala software, concede permisos, almacena credenciales o consume licencias.
## Estados e historial
- Pendiente → Configurado o Nunca configurado.
- Configurado → Pendiente de retirar.
- Pendiente de retirar → Retirado.
- Retirado y Nunca configurado son terminales y se conservan sin edición.
- En estados abiertos pueden cambiar forma de uso, versión y notas, con historial.
- Una pareja cerrada permite crear una nueva configuración con otro UUID.
Crear o reconfigurar en estado pendiente/configurado exige perfil y persona activos, equipo no retirado y recurso activo elegible. Una aplicación global requiere el gate propio de perfiles; un recurso particular debe pertenecer a la compañía. Toda asociación nueva exige disponibilidad, incluso si se solicita un estado terminal. Si se archiva el perfil o se desactiva la persona/recurso, la configuración abierta muestra revisión. Sigue siendo posible añadir notas y registrar la retirada. Desactivar una plantilla no invalida sus recursos existentes.
El selector Perfil conserva su alta rápida. Con el gate de perfiles cerrado, Aplicación mantiene SelectWithAction; abierto usa el selector remoto por propósito `application-configuration`, con procedencia Global/De la compañía, búsqueda y cursor. Las altas rápidas de aplicación siguen creando recursos particulares. En la consulta filtrada el perfil queda fijado. El alta rápida de aplicación reutiliza el editor de recursos, preselecciona Aplicación y permite sus plantillas personalizadas. No abre un tercer modal. Cancelar el hijo conserva el padre; un hijo ya guardado permanece aunque se cancele el padre.
## Arquitectura y API
ApplicationConfiguration es AggregateRoot; ApplicationConfigurationRevision es DomainEntity con UUID propio; ApplicationConfigurationValues es Value Object inmutable con UniqueID y Maybe. Las identidades nuevas son UUID v7. Una edición semánticamente equivalente no escribe una revisión. La rehidratación comprueba identidad, pareja fija, estados, orden, fechas, clave abierta y coherencia de la última revisión.
application_configurations y application_configuration_revisions se crean con migración explícita e idempotente. Las claves foráneas apuntan a compañía, perfil, Resource y actor. La clave nullable de pareja abierta impide duplicados. Las escrituras coordinan primero la raíz del catálogo con un lock compartido, después bloquean la compañía y resuelven perfil, persona, activo y producto dentro de la misma transacción que guarda raíz y revisiones nuevas. Se reutiliza el orden de locks R2.4; la desactivación global mantiene su lock exclusivo.
Companies consume el resolver público de Resources por propósito y ligado a transacción para productos globales; conserva el inventario particular para los demás consumidores y no importa modelos ORM de Resources. El servicio reconoce las plantillas de serie por clave estable y las propias por uso explícito. Los catálogos de activos y recursos siguen separados.
GET /api/application-configurations/:companyId lista configuraciones y avisos. POST en esa ruta crea; POST /api/application-configurations/:companyId/:id/update edita. Sesión obligatoria, origen y CSRF en escrituras, actor procedente de sesión y entrada estricta.
## Validación
Pruebas de dominio: contratos, ausencia y límites, versión solo instalada, UUID, igualdad semántica, historial, destino fijo, ciclo de retirada, ámbito, clasificación y disponibilidad, rehidratación corrupta.
Pruebas HTTP con MariaDB de test: plantillas de serie y personalizadas, rechazo de certificados, concurrencia, idempotencia, versiones auditadas, aislamiento entre compañías, origen/CSRF, corrupción de clave abierta, desactivación del recurso, archivo del perfil y aplicaciones compartidas entre perfiles.
Pruebas de interfaz: traducciones es/en, listado sin formularios, altas rápidas y ayuda inferior. Comprobación en navegador del modal principal, selección de perfil, cambio instalada/web y alta rápida de recurso, sin guardar registros ficticios en desarrollo.
Los [certificados por perfil](certificados-del-perfil.md) están implementados; la ficha [Entorno actual](entorno-actual.md) también está implementada.
Comprobaciones de esta entrega: 109 pruebas pasan, incluida una segunda ejecución completa contra MariaDB de test. Typecheck y build pasan; los 42 archivos de código y configuración modificados pasan Biome. Lint y check globales mantienen errores anteriores de carpetas (32 y 90 respectivamente), sin errores nuevos en este bloque. En navegador se verifica también el perfil fijo, ambas altas rápidas, conservación al cancelar y limpieza de versión al elegir acceso web.
## Resources v2 — R2.5
`RESOURCE_GLOBAL_PROFILE_ENABLED` requiere catálogo y esquema scoped compatible,
es independiente de software y permanece false por defecto. Las referencias
existentes se resuelven también al cerrar gates o desactivar el producto. No se
reescriben estados, versiones ni historial: `needsReview` continúa derivado.
Las rutas de configuración conservan sus DTOs. El cliente anuncia
`X-Metis-Resources-Contract: 2` para leer o modificar registros globales; un cliente
antiguo mantiene las operaciones particulares y recibe 409 si necesita soporte
global. Se conservan CSRF, sesión, perfil/producto fijos y protección de compañía.
La ficha del perfil y su expansión en Workstation resuelven solo los UUID usados
por ese perfil. Pendientes conserva su cálculo por estado; la inactividad del
producto no lo incrementa ni genera instalaciones de software.
Resultados y limitaciones de aceptación en el [informe R2.5](architecture/resources-global-scope/16-r2-5-configuraciones-globales.md).