# Auditoría de separación lógica del cliente Informe de una revisión anterior, no un inventario ni una instrucción de implementación vigente. Las cifras y resultados corresponden al cierre de aquella revisión. Para trabajar sobre el código actual, consultar `AGENTS.md`, las guías normativas y las [funcionalidades archivadas](funcionalidades-archivadas.md). ## Alcance y referencia Revisión de `modules/core/src/web`, `modules/identity/src/web`, `modules/assets/src/web`, `modules/resources/src/web` y `modules/companies/src/web`, usando `AGENTS.md`, la documentación normativa y el código de `customer-invoices.zip` como referencia de separación de responsabilidades. Se excluyen los cambios en `apps/web/src`, vendor, backend, schemas HTTP y persistencia. La referencia aporta controllers, adapters y acceso a API por operaciones. No se incorporan sus dependencias, factories, tipos genéricos, memoización o servicios ajenos al proyecto. ## Áreas revisadas - Core: health y home; la consulta ya tiene API y claves separadas. No se añade un controller que únicamente envuelva esa consulta. - Identity: sesión, autenticación, logout, contraseñas, gestión de usuarios y workspace. - Assets: inventario, detalle, características, relaciones, puestos, marcas, catálogos y soporte. - Resources: catálogos, plantillas, editor, valores iniciales e integraciones de recursos. - Companies: compañías, logos, personas, departamentos, sedes, asignaciones, accesos, dashboard y workspace; correo, usos de buzón, perfiles, carpetas, aplicaciones, certificados e impresoras; procesos y sus plantillas, teletrabajo y remotos. La inspección combina inventario y análisis sintáctico del código, revisión de dependencias, lectura de las responsabilidades y diffs afectados y comprobaciones por módulos. ## Incumplimientos y cambios 1. Formularios y páginas coordinaban consultas, mutaciones, invalidación, defaults y grandes bloques visuales en el mismo componente. Se extraen 78 controllers con responsabilidades concretas, conservando RHF y TanStack Query como fuentes de verdad. 2. Cálculos reutilizados se exportaban desde `.tsx`, incluso para usarlos desde coordinación. Se separan filtros, integración, destino remoto, navegación, fechas y progreso de pasos. 3. Schemas locales y contratos de formularios se mezclaban con la presentación. Se colocan en `schemas` y `types`, sin duplicar DTOs HTTP. Los adapters separan conversiones reales de personas, sedes e instrucciones de procesos. 4. Clientes compartidos agrupaban varias entidades. Se trasladan 31 operaciones de identidad, inventario, soporte, compañías y procesos a sus ámbitos. Accesos y buzones distinguen consulta y guardado. Los clientes pequeños que ya tienen un ámbito cohesivo se conservan. 5. Los callbacks de altas anidadas exponían refs de montaje a UI. Su coordinación y protección ante desmontaje quedan privadas de los controllers. 6. Los índices se ajustan a sus consumidores y a la responsabilidad que exportan, evitando compatibilidad artificial desde UI y ciclos por composición de API. Los componentes simples, helpers visuales privados y hooks existentes que ya resuelven su responsabilidad permanecen próximos a su consumidor. No se fragmenta JSX trivial, se duplica estado remoto ni se añaden dependencias o nuevas capas de negocio. Se preservan el comportamiento y las composiciones públicas requeridas por la aplicación y los demás módulos, incluidas identidad, inventario y catálogos. No cambian endpoints, schemas, datos persistidos, migraciones ni textos de interfaz. ## Comprobaciones - Typechecks y pruebas dirigidas de los módulos y de la aplicación, sin modificar esta última. - Doce pruebas nuevas incluidas en los scripts de paquete: sesión y autenticación, rutas, métodos HTTP, CSRF, errores seguros, respuestas inválidas, accesos, usos de buzón, adapters, integración y límites de logos. - Comparación sintáctica de los cuerpos y parámetros de las 31 operaciones trasladadas, normalizando únicamente el nombre del transporte compartido. - Análisis de dependencias relativas de los cinco módulos, sin ciclos detectados. - Comparación de elementos JSX y atributos estáticos de los 252 componentes inventariados frente a Git, sin cambios accidentales en estructura, clases o atributos estáticos. Resultados globales del cierre de esta revisión: | Comando | Resultado | | --- | --- | | `pnpm typecheck` | Correcto | | `pnpm lint` | Correcto, sin avisos | | `pnpm test` | Correcto: 236 pruebas, ningún fallo | | `pnpm check` | Correcto; se corrigió el orden de imports detectado en core | | `pnpm build` | Correcto, con aviso de bundle web superior a 500 kB | Las pruebas de UI existentes comprueban renderizado, estados, traducciones y contratos observables. No sustituyen una prueba manual en navegador de foco, teclado y apertura/cierre de todas las combinaciones de modales; esta revisión no incorpora un runner de navegador. ## Pendientes y trabajo ajeno No se ha necesitado una decisión arquitectónica para esta separación. Los cambios previos del usuario en `TODO.md` y el ZIP de referencia se conservan. Las nuevas funcionalidades anotadas allí, como búsqueda de logos SVG y routing, no forman parte de esta auditoría. El aviso de tamaño del bundle no impide el build. Su posible división requiere un trabajo específico de carga de pantallas y no se introduce como efecto secundario de esta separación.