metis-desk/docs/rutas-del-cliente.md

152 lines
7.0 KiB
Markdown
Raw Permalink Normal View History

2026-10-09 08:18:00 +00:00
# Rutas del cliente
La URL del navegador identifica el espacio, la sección y, cuando existe una ficha,
el registro seleccionado. No cambia los endpoints HTTP de `/api`, los permisos ni
la persistencia. Los identificadores de compañía y de registros son UUID.
## Destinos generales
| Ruta | Pantalla |
| --- | --- |
| `/dashboard` | Inicio y resumen global; admite `companyId` para limitar el ámbito. |
| `/companies` | Directorio de compañías. |
| `/companies/:companyId` | Estado y resumen operativo de la compañía. |
| `/catalogs` | Índice explicativo de catálogos globales. |
| `/settings/users` | Gestión de usuarios, reservada al administrador inicial. |
| `/settings/password` | Cambio de contraseña del usuario conectado. |
| `/login` | Acceso cuando no hay sesión. |
| `/setup` | Alta del administrador inicial únicamente cuando el servidor la requiere. |
`/` se normaliza a `/dashboard`. Las barras finales se eliminan conservando la
consulta. El acceso sin sesión conserva el destino interno en `returnTo`; tras
autenticar se recupera ese destino. No se aceptan redirecciones a otros orígenes.
## Espacio de compañía
Todas las secciones siguientes cuelgan de `/companies/:companyId`:
```text
/companies/:companyId → resumen, no inventario
├── assets
├── resources
├── workstations
├── work-profiles
├── telework-authorizations
├── remote-connections
├── processes
├── people
├── departments
├── sites
├── access
├── folder-mappings
├── certificate-configurations
├── application-configurations
├── printer-configurations
├── mail-configurations
└── catalogs → índice de catálogos de la compañía
├── assets
└── resources
```
`assets` contiene equipos concretos. `workstations` contiene puestos que agrupan
activos exclusivos o compartidos; no es un alias de activos. `work-profiles`
representa el entorno de una persona en un dispositivo. Sus rutas independientes
respetan las responsabilidades existentes, sin introducir entidades nuevas.
Las fichas existentes de activos, recursos, personas, perfiles y procesos
utilizan `/<section>/:entityId`. El inventario
2026-10-09 08:18:00 +00:00
conserva el panel lateral en escritorio y el diálogo de ficha en anchuras menores
de 1100 px, ambos asociados al UUID de la URL.
Las configuraciones de un perfil tienen rutas contextuales:
```text
/companies/:companyId/work-profiles/:profileId
├── folder-mappings
├── mail-configurations
├── certificate-configurations
├── application-configurations
└── printer-configurations
```
Los accesos remotos y el teletrabajo de una persona se consultan en sus secciones
propias con `personId`. Las vistas generales de configuraciones admiten `profileId`.
No se crean fichas URL para entidades que actualmente solo tienen editor o historial.
## Catálogos globales
```text
/catalogs
├── access
├── assets
├── resources
├── brands
└── process-templates
```
El índice ofrece enlaces y explica el ámbito; no inventa estadísticas. Los catálogos
de compañía representan las variantes de activos y recursos disponibles en ese
ámbito, no duplicados de las rutas de inventario.
## Filtros y estado temporal
La consulta conserva los filtros que ya están conectados a la URL:
- Dashboard y directorio: `companyId`; directorio también `activeOnly` y `q`.
- Activos: `q` y `template` (UUID de plantilla), tanto en el listado como en la ficha seleccionada.
- Recursos: `q` y `template` (UUID de plantilla), tanto en el listado como en la ficha seleccionada.
2026-10-09 08:18:00 +00:00
- Perfiles y procesos: `q`, con `archived` o `closed`, respectivamente.
- Catálogos de activos y recursos: `q` y `tab`; `relations` solo en activos.
- Cuentas y accesos: `q` y `kind`, respetando los tipos disponibles en cada ámbito.
Los booleanos se serializan como `true` o `false`. Los UUID, las pestañas y los
parámetros repetidos o desconocidos se rechazan antes de seleccionar una pantalla. La búsqueda admite
2026-10-09 08:18:00 +00:00
hasta 200 caracteres. Un `companyId` de consulta no puede contradecir la compañía
del pathname. Esta validación del navegador no sustituye la autorización del servidor.
Cambiar filtros reemplaza la entrada actual del historial; abrir otra sección o
ficha añade una entrada. Atrás y Adelante recuperan los destinos y filtros. Cerrar
una ficha vuelve al destino interno anterior; si se abrió directamente, sustituye
la entrada por su listado o por el contexto del perfil correspondiente.
Altas, ediciones, confirmaciones, historiales y detalles auxiliares del dashboard
siguen siendo diálogos locales. No se añaden rutas `/new`, `/edit` ni parámetros
`view` sin una necesidad concreta. El alta rápida que cambia de sección lleva una
señal temporal en `history.state`, consumida cuando monta la pantalla que abre el
formulario, sin introducirla en la URL compartida. Los restantes filtros locales,
la paginación, ordenación y preferencias de columnas mantienen su estado existente.
## Implementación y futuros destinos
- `@metis/core/client` centraliza la History API, suscripciones con cleanup,
enlaces internos, búsqueda y selección de fichas. No se añade una dependencia
de routing externa.
- `workspace/shared/helpers/workspace-routes.ts` es la fuente de rutas de compañía,
construcción de destinos y validación del espacio. No repartir condiciones de
pathname entre componentes de presentación.
- `apps/web/src/navigation` coordina los destinos según la sesión. El servidor
mantiene su autenticación, autorización y validación HTTP existentes.
- `BrowserLink` produce enlaces reales y conserva abrir en otra pestaña, clic
modificado y navegación por teclado. Las secciones activas indican `aria-current`.
- Un UUID válido ausente en el ámbito muestra ausencia explícita: no selecciona
otro registro silenciosamente. Rutas mal formadas y destinos desconocidos tienen
estados diferenciados y acceso de regreso a Inicio.
Para añadir una sección, actualizar los contratos y el mapa del espacio, revisar sus
consumidores y probar construcción, acceso directo, recarga, historial y casos
inválidos. No cambiar el modelo de dominio únicamente para reproducir una jerarquía URL.
La organización de ficheros sigue el [estándar web](estructura-web-por-entidades-y-operaciones.md).
## Servicio de la SPA
Vite en desarrollo y en preview entrega la SPA para estas rutas. Un servidor de
producción debe servir `index.html` para los destinos del cliente y mantener el
tratamiento propio de `/api` y de los archivos estáticos. Sin ese fallback, abrir
o recargar una ficha dará un 404 del alojamiento aunque la navegación interna funcione.
La API compilada todavía no sirve el frontend estático: no se ha cambiado su
despliegue ni añadido un fallback a Express en esta adaptación.
## Funcionalidades archivadas
Tickets, intervenciones y plantillas de intervención no tienen rutas activas. Sus antiguas direcciones muestran página no encontrada. Consultar [el archivo](funcionalidades-archivadas.md).