# Perfiles de usuario ## Uso y alcance La sección Perfiles de usuario de cada compañía registra el entorno de una persona en un dispositivo concreto. Nuevo perfil aparece a la derecha de la cabecera y abre un modal. Editar y Ficha e historial son acciones explícitas. Los perfiles archivados quedan ocultos inicialmente y pueden incluirse mediante una casilla. El alta pide nombre, puesto y persona. El ordenador se obtiene del puesto y no se solicita como campo editable. Cuenta de inicio de sesión y notas son opcionales. La persona no recibe acceso a Metis Desk. El dispositivo es un activo de la compañía; puede alojar perfiles de varias personas y una persona puede tener perfiles en varios dispositivos. No se deduce el tipo de dispositivo del nombre de la plantilla: las plantillas son configurables. La ayuda pide seleccionar un equipo que aloje la configuración. La cuenta informática describe el inicio de sesión, no un buzón de correo ni una licencia. Seleccionarla no configura el equipo. Si se indica, debe ser una cuenta personal o compartida, activa y no caducada, de esta compañía, cuyo sistema y entorno estén activos. Debe existir una autorización vigente de la persona en estado pendiente o configurado. Las cuentas técnicas no representan su identidad de inicio de sesión. La caducidad incluye el día indicado; el final de una autorización es exclusivo. Persona y dispositivo son la identidad funcional del perfil y no cambian después del alta. Cambiar de ordenador supone crear otro perfil y revisar el anterior. Nombre, cuenta, notas y estado pueden cambiar y conservan historial. Solo puede existir un perfil vigente para cada pareja persona/dispositivo. Los archivados se conservan; reactivar comprueba referencias y duplicados. Archivar no elimina configuraciones del equipo ni retira permisos externos. ## Persona, puesto y activo Un puesto agrupa activos; el perfil pertenece a una persona y a un dispositivo. No se almacena otra asignación de puesto en el perfil: la ficha consulta el puesto vigente cuyo ordenador principal es el dispositivo. Esta relación no presupone que todas las personas que usan un ordenador sean titulares del puesto o responsables del activo. El responsable del puesto y las personas con perfiles tienen significados distintos. No se propagan cambios automáticamente entre ellas. Ninguna de estas referencias demuestra una autorización ni que una configuración esté lista. Los puestos agrupan un único conjunto de activos. Consultar [Puestos de trabajo](puestos-de-trabajo.md). ## Revisión y altas rápidas Un perfil vigente muestra un aviso si la persona se desactiva, el equipo se retira, deja de ser el ordenador principal de un puesto activo o la cuenta pierde disponibilidad o autorización. Se conservan sus valores y revisiones. Se permite editar nombre/notas y archivarlo aunque necesite revisión. Crear, reactivar o cambiar la cuenta de un perfil vigente exige referencias disponibles. Las referencias siempre deben pertenecer a la compañía, incluso al archivar. Persona y cuenta permiten altas rápidas en un modal adicional cuando están habilitadas para el consumidor. Las acciones de seleccionar y crear se presentan por separado. Se conserva el formulario padre y el elemento guardado queda seleccionado. La autorización de cuenta también puede registrarse mediante una acción explícita. El editor adicional es compartido con los correos; no abre un tercer nivel de alta. Cancelar mantiene los valores del padre. Una creación ya guardada permanece aunque se cancele el perfil. La ayuda permanece anclada inmediatamente antes del pie, fuera del scroll principal. El diálogo mantiene una altura estable al cambiar de paso o de selección, con desplazamiento interno y cabecera y acciones visibles. Se mantienen traducciones es/en y estados de carga, error y vacío, siguiendo el [patrón de diálogos](patron-de-dialogos.md). ## Alta en cuatro pasos 1. **Puesto.** Selecciona un puesto activo existente y muestra su ordenador principal mediante una tarjeta de activo. Desde la ficha de un puesto, este queda fijado. El ordenador se deriva de la composición del puesto y no es un campo editable; debe seguir perteneciendo a ella y no estar retirado. Si falta un ordenador disponible, se indica que hay que completar el puesto primero. Este formulario no crea puestos. 2. **Persona.** Selecciona una persona activa de la compañía de forma explícita, sin tomarla del responsable del puesto. Permite crear una persona mediante la acción de alta rápida cuando está habilitada. 3. **Cuenta.** Permite seleccionar una cuenta de inicio de sesión o continuar sin cuenta. La creación de cuentas y el registro de su autorización se ofrecen como acciones explícitas cuando están habilitadas. Seleccionar una cuenta no concede autorización ni configura el equipo; se conservan las comprobaciones de disponibilidad y vigencia. 4. **Resumen.** Reúne persona, puesto, ordenador y cuenta sin repetir el ordenador en otra lista. Propone el nombre «Persona · Ordenador principal», permite editarlo y completar notas y estado. Una edición manual del nombre se conserva al retroceder y cambiar selecciones; mientras no se haya editado, la propuesta sigue las selecciones actuales. Solo este paso ofrece Guardar. Los pasos conservan los valores al avanzar, retroceder o cerrar un selector. Las selecciones se presentan mediante tarjetas y se cambian desde diálogos `PickerList`, que sitúan el foco inicial en la búsqueda rápida. Cuando todavía no hay selección, `EmptyState` ocupa el ancho y alto libres del contenido con icono, explicación y acciones adecuadas; las acciones de seleccionar y crear permanecen separadas. Las tarjetas de activos reutilizan `AssetSummaryCard` dentro de listas `ul`/`li` y el resumen las presenta en modo de consulta. La edición conserva el formulario completo, con persona y dispositivo fijos. Nombre, cuenta, notas y estado mantienen las reglas de modificación y revisión existentes. ## Arquitectura y persistencia WorkProfile es un AggregateRoot con UniqueID; WorkProfileRevision es una DomainEntity con su propio UUID. WorkProfileValues es un Value Object inmutable con Name, UniqueID y Maybe para los opcionales. Crear genera UUID v7; actualizar conserva identidad, compara valores semánticamente y añade una revisión solo si cambian. Rehidratar conserva UUID e historial. work_profiles conserva raíz, referencias y clave única nullable de la pareja vigente. work_profile_revisions conserva instantáneas ordenadas, cuenta histórica, actor autenticado y fecha UTC, con UUID propio y claves foráneas. Las migraciones explícitas son idempotentes. El borrado permitido elimina la raíz y sus revisiones en una única transacción. El repositorio bloquea la compañía antes de validar y guardar. Personas y cuentas usan ese mismo bloqueo, y el inventario se consulta mediante un servicio público de assets, sin importar sus modelos ORM. Dos altas concurrentes de la misma pareja no pueden producir dos perfiles vigentes. El mapper comprueba identidad, referencias, cuenta histórica, orden y fechas, última revisión y clave vigente. Una inconsistencia falla explícitamente. GET /api/work-profiles/:companyId devuelve los perfiles y sus avisos. POST /api/work-profiles/:companyId y POST /api/work-profiles/:companyId/:id/update reciben values. Requieren sesión; las escrituras usan origen y CSRF. El actor procede de la sesión, nunca del cuerpo de la petición. ## Comprobaciones y siguiente entrega Las pruebas cubren cuentas opcionales, parejas vigentes únicas, múltiples personas/dispositivos, UUID, idempotencia, identidad funcional fija, revisiones, disponibilidad, caducidad, autorizaciones, aislamiento, concurrencia, persistencia y protección HTTP. Las pruebas de interfaz comprueban traducciones, ausencia de formularios junto a listados, altas rápidas y ayuda inferior. La base del perfil incorpora ahora [buzones y configuraciones de correo](correos-en-dispositivos.md). Cada perfil puede tener varios buzones y cada configuración conserva su método y estado. La acción «Correos en dispositivos» de la fila abre la consulta filtrada del perfil. No se confunde la cuenta de inicio de sesión con el buzón. El perfil incorpora también carpetas compartidas e [impresoras por perfil](impresoras-del-perfil.md), con acciones para abrir cada consulta filtrada. Las [aplicaciones por perfil](aplicaciones-del-perfil.md) están implementadas sobre recursos. Los [certificados por perfil](certificados-del-perfil.md) también están implementados. La ficha [Entorno actual](entorno-actual.md) reúne estas configuraciones. El mapa visual queda aplazado. La comprobación en navegador debe verificar los cuatro pasos, los selectores de puesto, persona y cuenta, el foco inicial de su búsqueda, las altas rápidas habilitadas y la conservación del formulario al cancelarlas. También debe comprobar la altura estable, el estado vacío, la ayuda junto al pie, el resumen sin duplicados y la conservación del nombre editado al retroceder. En puestos se comprueba la carga de una composición anterior, el selector de activos, su incorporación visual y la cancelación sin persistir cambios. ## Alta desde el puesto El formulario de alta pide puesto y persona. La persona no se toma automáticamente del responsable del puesto; puede ser cualquier persona activa de la compañía. El ordenador se obtiene de `computerAssetId` del puesto activo y no se pide como campo editable. Desde la ficha del puesto, «Nuevo perfil» abre el mismo modal con ese puesto fijado. Si no tiene un ordenador principal disponible, se indica que hay que completar el puesto primero. Se conserva la identidad persona/dispositivo y sus validaciones, permisos e historial. La relación con el puesto sigue consultándose por su ordenador principal; no se duplica una asignación independiente en el perfil. Cambiar responsable no modifica perfiles. El backend comprueba también esta condición al crear o reactivar un perfil vigente y al cambiar su cuenta. Los periféricos no alojan perfiles del puesto. Cambiar el ordenador principal o desactivar el puesto conserva los perfiles anteriores y su historial, pero señala los vigentes para revisión; no los transfiere al equipo nuevo. Se permite completar sus notas y archivarlos. Si el mismo equipo se incorpora como ordenador principal de otro puesto activo, la consulta refleja su ubicación actual. ## Desactivar y eliminar Las acciones de fila permiten desactivar y eliminar mediante un modal de confirmación. Desactivar conserva valores, configuraciones e historial; solo cambia `active` y añade una revisión si el perfil estaba vigente. Se permite aunque la persona, el ordenador o la cuenta ya no estén disponibles. No retira permisos ni configuraciones externas. Repetir la desactivación no genera revisiones adicionales. Los perfiles desactivados se consultan mediante el filtro de archivados y pueden reactivarse desde el editor con las comprobaciones habituales de disponibilidad y pareja vigente única. Eliminar exige que el perfil esté desactivado y que no existan referencias en correo, carpetas, impresoras, aplicaciones o certificados, tanto en sus registros actuales como en sus revisiones. Los estados retirado o nunca configurado también bloquean el borrado mientras exista el registro vinculado. Primero deben eliminarse esos registros mediante sus acciones existentes. No se borran configuraciones en cascada. La eliminación definitiva incluye todo el historial del propio perfil. `POST /api/work-profiles/:companyId/:id/deactivate` y `POST /api/work-profiles/:companyId/:id/delete` reciben un objeto vacío, requieren sesión, origen válido y CSRF, y verifican pertenencia a la compañía. La desactivación obtiene el actor de la sesión. El borrado devuelve `PROFILE_ACTIVE` o `PROFILE_IN_USE` (409) cuando no cumple las condiciones; un perfil inexistente o de otra compañía devuelve `PROFILE_NOT_FOUND` (404). Repetir un borrado devuelve 404 sin nuevos efectos. El bloqueo de compañía serializa estas operaciones con altas y cambios de configuraciones; las claves foráneas conservan la protección de referencias.