# 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 aplicación es un Resource de la compañía. 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. 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 de la compañía. 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. Los selectores Perfil y Aplicación permiten altas rápidas con SelectWithAction. 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 bloquean la compañía y guardan raíz y revisiones nuevas en la misma transacción. Companies consume un servicio público de Resources para consultar identidad, estado y uso del recurso; no importa sus modelos ORM. 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.