10 KiB
Auditoría de la ficha actual
Fecha: 22 de octubre de 2026. Revisión estática, sin reproducción visual de la ficha. Evidencias E: inventario.
Pantalla y composición
Ruta: /companies/:companyId/workstations/:id. CompanyInventory selecciona la pantalla; WorkstationDetailPage recibe compañía, UUID y lookups de editor. No es un modal de detalle.
CompanyInventory
└─ WorkstationDetailPage (@container)
├─ BrowserLink: volver al listado
├─ Carga / error de inventario con reintento / UUID no encontrado
├─ header
│ ├─ WorkstationNameEditor
│ ├─ EntityStatus + sede + responsable enlazados
│ └─ WorkstationActions
│ ├─ Editar
│ └─ Menú → WorkstationLifecycleDialog (desmantelar/borrar)
├─ WorkstationDetailContent
│ └─ Tabs + ScrollableTabsList
│ ├─ Información (keepMounted)
│ │ ├─ WorkstationAssets → AssetSummaryCard / EmptyState
│ │ ├─ WorkstationPeople → PersonAvatar + enlaces
│ │ └─ WorkstationProfiles → EntityTable + Nuevo perfil
│ ├─ Software (keepMounted, carga tras primera apertura)
│ │ └─ SoftwareInstallationsPanel
│ │ ├─ EntityTable + búsqueda + mostrar cerrados
│ │ └─ Editor / historial / DeleteRecordDialog
│ └─ Historial → DetailPanel → WorkstationHistory → TimeLine
├─ WorkProfileEditorDialog (cuando se abre)
└─ WorkstationEditorDialog (cuando se abre)
Fuentes: E08/E11/E12/E28/E29. Información distribuye Equipamiento y Personas en dos columnas desde 1000 px de contenedor; periféricos usan dos desde 560 px. Son condiciones del código, no una validación responsive. El historial incluye estado, nombre, sede, responsable, ordenador y miembros de cada revisión, con autor y fecha; los nombres relacionados se resuelven hoy.
Matriz de cobertura
«BD» significa persistencia declarada en código; no inspección de una instancia. «API» puede requerir varias consultas. Los datos derivados no son columnas nuevas.
| Información | Existe en BD | Disponible en API | Visible en ficha | Acción disponible | Observaciones |
|---|---|---|---|---|---|
| Identidad y estado | Sí | Inventario | Sí | Renombrar, editar, desmantelar, borrar | UUID solo en URL |
| Sede | Sí, FK | Compañía/inventario | Nombre | Ir a sedes | Dirección y teléfono no están en cabecera |
| Responsable | Sí, FK | Compañía | Nombre | Ir a persona; cambiar en editor | Si no hay responsable, su segmento de cabecera desaparece |
| Otras personas | Perfiles | Perfiles + compañía | Sí | Ir a persona | Incluye personas de perfiles inactivos |
| Departamento | Asignación de persona | Compañía | No | Navegación por entidades existentes | Contexto indirecto, requiere fecha/persona |
| Ordenador y miembros | Sí | Inventario + catálogo | Sí | Fichas y editar composición | Tarjetas, no tabla compacta |
| Características completas | En activo | Inventario | Resumen de AssetSummaryCard | Abrir activo | No todo el detalle técnico cabe en tarjeta |
| Perfiles | Sí, por host | Perfiles | Tabla | Crear y abrir perfil | Nombre, persona, estado y revisión |
| Cuenta y notas de perfil | Sí | Perfiles + Access | No en tabla | Abrir perfil | Datos ya disponibles en otras pantallas |
| Software del ordenador | Sí | Instalaciones + recursos/catálogo | Pestaña Software | Alta, edición, historial y borrado | No agrega software de todos los miembros |
| Licencias de software | Recurso vinculado | Sí | Software | Abrir recurso | No equivale a cumplimiento global |
| Carpetas/correo/apps/certificados/impresoras de perfil | Sí | APIs específicas | No | Desde ficha de perfil | Agregables por perfiles confirmados |
| Cobertura documental de carpetas | Derivada backend | DTO de FolderMapping | No | Gestión de carpeta y accesos | No prueba de acceso SMB real |
| Publicaciones SMB de activos | Sí | API paginada | No | En activos/recursos | Publicador no significa consumidor |
| Identidades locales y dominio | Sí | APIs específicas | No | En activos/accesos | Contexto de equipo |
| Interfaces, MAC e IP registradas | Sí, infraestructura | API infraestructura | No en bloque específico | Consultar activo/infraestructura | Sin detección online ni topología inferida |
| Soporte del ordenador | Sí | Support API | No | Pantalla de activo/entorno | Diferente de conexión remota de persona |
| Teletrabajo / conexiones de persona | Sí | APIs específicas | No | Secciones con personId |
No propiedades directas del puesto |
| Procesos de personas relacionadas | Sí | Process API | No | Abrir proceso | Contexto indirecto, no incidencias |
| Revisiones propias | Sí | Inventario | Historial | Consultar | No hay feed combinado ni diff resumido |
| Tickets/incidencias | Archivado | Sin API activa localizada | No | Sin acción activa | No incluir widget operativo |
Hallazgos priorizados
Todos los siguientes son CONFIRMADOS por código o PROPUESTOS explícitamente. No hay un fallo visual reproducido en esta auditoría. Prioridades: P1 = evita interpretación funcional equivocada; P2 = mejora consulta habitual; P3 = detalle y pulido.
| ID | Prioridad | Evidencia y efecto | Recomendación PROPUESTA |
|---|---|---|---|
| U01 | P1 | E09 y WorkstationPeople: personas de perfiles activos e inactivos aparecen juntas; la persona solo lleva etiqueta «persona del perfil» |
Separar uso actual e histórico; mantener responsable como rol independiente. No titular todo el grupo «ocupantes actuales» |
| U02 | P1 | E11: todos los miembros no principales se llaman periféricos | Usar «Otros activos» o plantilla real; no inventar taxonomía |
| U03 | P1 | E09/E28: al cambiar principal, cambian perfiles/software derivados; no hay traslado de datos | Explicar alcance del host y ofrecer acceso al historial para consultar composición anterior |
| U04 | P2 | E08/E12: la ficha no consulta configuraciones del perfil; estas existen en E21/E30 | Resumir por perfil y enlazar su detalle; no copiar cada pantalla de configuración |
| U05 | P2 | E28: software e historial separados de la información principal | Mostrar resumen útil de software y último cambio en vista general, conservando detalle secundario |
| U06 | P2 | E08: cuando no hay responsable la cabecera omite el segmento; E11 ocupa espacio de equipamiento con EmptyState y explicación | Hacer explícito el responsable ausente en resumen; compactar vacíos preservando su acción de completar |
| U07 | P2 | E11 genera una tarjeta por activo y recorre búsquedas de activo/catálogo por miembro; máximo 200 | Lista compacta o tabla al crecer, búsquedas/orden/paginación según patrón; riesgo de densidad y coste, sin medición realizada |
| U08 | P2 | Controller ignora catalog.isError en página; WorkstationAssets recibe catálogo vacío por defecto |
Identificar fallo de metadatos de catálogo sin hacer pasar su ausencia por dato real inexistente |
| U09 | P2 | E08 carga con texto; perfiles y personas comparten dependencia de perfiles aunque el responsable ya sea conocido | Mantener responsable visible, estado parcial de usuarios y estructura estable. No usar cero hasta completar consulta |
| U10 | P2 | E30 useEnvironmentQueries retorna data: undefined si falta cualquiera de 11 fuentes |
Reutilizar lógica y queries, pero revisar el bloqueo total antes de integrar un dashboard que necesita fallos parciales |
| U11 | P3 | E29 resuelve etiquetas históricas mediante nombres actuales | Describir historial como valores registrados y referencias; no afirmar snapshot de etiquetas relacionadas |
| U12 | P3 | En WorkstationProfiles, revisión usa colores amber explícitos; DESIGN no define warning/success globales |
Revisar uso según sistema existente, sin inventar tokens ni afirmar contraste fallido no medido |
No se localizaron mecanismos de conversión, precios u opt-in relevantes para una auditoría de dark patterns en este flujo. No se ejecutó un auditor externo ni se declara cumplimiento WCAG.
Patrones acertados que conservar
- Enlaces de entidades mediante
BrowserLink, separados de acciones de edición; sedes enlaza a un destino existente. - Edición, creación de perfil, ciclo de vida e historial de software en componentes modales separados.
- Cabecera de identidad, estado textual y distinción entre ordenador principal y demás miembros.
EntityTableen perfiles y software; valores ausentes representados con «—» en las celdas inspeccionadas.- Estados de error y reintento en inventario y perfiles; Personas no llama vacío a una carga fallida.
- Perfiles filtrados por compañía y ordenador, con deduplicación de personas.
- Software se monta después de abrir su pestaña: evita coste inicial innecesario.
Accesibilidad, usabilidad y responsive pendientes
El JSX permite comprobar regiones etiquetadas en DetailPanel, nombres accesibles en acciones, iconos decorativos ocultos, role=status/alert, fechas en TimeLine y uso de primitivas Base UI. Esto no acredita el comportamiento del teclado, el foco ni el contraste calculado.
Playwright MCP respondió a browser_tabs con una sola pestaña about:blank. La comprobación de http://localhost:5173/ con curl falló (HTTP 000, conexión rechazada/no disponible desde este entorno); ss -ltnp no pudo abrir netlink por permisos. No se confirmó otro origen Vite ni una sesión sintética utilizable. No se navegó a una ficha ni se tomó una captura. No se inició la API por la prohibición de ejecutar migraciones. La disponibilidad del MCP está comprobada; la ficha visual no.
Pendiente: escritorio/móvil, ventana baja, zoom 200/400 %, Tab/Shift+Tab, enlaces y menús, Escape y retorno de foco de editores, orden de lectura, nombre completo accesible, no desbordamiento global, contraste, lector de pantalla, estados de carga/refetch/error y volumen. Matriz propuesta de resolución y datos: escenarios. Volumen persistente utilizado: 0 compañías, 0 personas, 0 activos y 0 recursos. El fixture de diseño no sustituye esta validación.