metis-desk/docs/architecture/implementacion-catalogo-global-sistemas-operativos.md
David d2bf856c97 feat(global-operating-systems): implement global operating systems management features
- Add softwareReferenceHref helper function for generating resource links.
- Create useGlobalResourceEditor hook for managing global application resources.
- Implement useGlobalResourceForm hook for handling global resource forms.
- Introduce GlobalSoftwareCatalogProvider for context management of global applications.
- Develop GlobalOperatingSystemsPage to render global operating systems using the existing GlobalApplicationsPage.
- Add operating system form identity helpers for managing OS-specific fields.
- Create operating system specification labels for better localization.
- Implement OperatingSystemIdentityReview component for reviewing OS identities.
- Add OperatingSystemProductFields component for displaying OS product details.
- Write tests for resource characteristic control to ensure proper translation and value handling.
- Create a Python script for auditing global operating systems UI interactions.
- Add tests for expanded workstation profiles to ensure proper functionality and responsiveness.
2026-10-25 20:39:06 +01:00

53 lines
6.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Implementación — Catálogo global de sistemas operativos
Fecha: 25 de octubre de 2026. Base: rama `main`, HEAD inicial `ddebfadc1c01117f73f757a91e030b9944427bba`. El árbol estaba limpio al iniciar. Durante el trabajo aparecieron modificaciones concurrentes en perfiles de puesto y documentación de interfaz; se conservaron y no se atribuyen a esta implementación.
La [decisión aprobada](decision-catalogo-global-sistemas-operativos.md) materializa D-SO-01–07. La [auditoría arquitectónica](auditoria-catalogo-global-sistemas-operativos.md) permanece como evidencia anterior a la implementación.
## Código y contratos
| Fase | Implementación |
| --- | --- |
| F1 | Seed y evolución de `template:os`; identidad declarativa, edición explícita y comparación semántica conservadora. Campos nuevos opcionales para particulares. |
| F2 | DTO SO públicos específicos, contrato Resources 3, negociación controlada de clientes anteriores, resolver por propósito y gates independientes. Lectura de aplicaciones filtrada también en R2.6. |
| F3 | Superficie `/api/resource-global-operating-systems`, repositorio global compartido configurado por tipo, revisión y comprobación transaccional de duplicados, identidad fija desde primera publicación y propagación protegida. Administración web compartida con identidad y textos SO propios. |
| F4 | Candidatos mixtos, capabilities por tipo, enlaces SO correctos en activo/puesto/panel/historial/mapa, scope conservado en el selector del SO actual e invalidación por UUID y catálogo. |
| F5 | Unitarias, componentes, contratos, HTTP/MariaDB y Playwright MCP, con evidencias y límites descritos abajo. |
| F6 | ADR, procedimiento de habilitación/rollback y este registro. Producción sin activar. |
Archivos principales:
- Resources: `api/domain/operating-system-identity.ts`, `evolve-operating-system-template.ts`, `resource-catalog-seed.ts`; `api/application/operating-system-identity-policy.ts`, `global-resource.use-cases.ts`, `global-resource-specification.ts` y `resource-global-gates.ts`.
- Persistencia: `sequelize-global-resource.repository.ts`, `resource-reference-metadata.ts`, `resource-reference-reader.ts`, `global-operating-system-reader.ts`, `prepare-resource-template-updates.ts` y `verify-global-resource-enablement.ts`.
- Contratos: `common/operating-system-identity.ts`, DTO de referencias/requests/responses y `resource-client-contract.ts`. Companies propaga las capacidades v3 de software y mantiene los propósitos de perfiles.
- Web: `global-applications` compone el comportamiento compartido; `global-operating-systems` aporta página, lectura/etiquetas de identidad y revisión. `software-reference-href.ts` centraliza destinos por tipo/scope.
- Configuración: `apps/server/src/config/database.ts`, composición de Identity y Resources. Ambos flags SO conservan el predeterminado `false`.
- Reproducción: `pnpm test:global-operating-systems`, `python3 scripts/visual-audit.py --global-operating-systems --check`, suites unitarias de Resources y pruebas de SO actual/rutas de Companies.
No se añadieron entidades, tablas, columnas o relaciones de instalación. La evolución de datos del catálogo y la migración scoped previa se ensayaron en contenedores desechables; no se modificó ninguna base real ni configuración desplegada.
## Validación y evidencias
Los resultados finales se recogen en el informe de validación adjunto a esta implementación. Se distinguen comprobaciones dirigidas correctas de los fallos generales ajenos al cambio; ninguna incidencia general se interpreta como una validación global correcta.
La integración nueva usa 15 compañías y una principal con 50 personas, 50 activos, 50 puestos, 50 perfiles y al menos 50 recursos particulares, además de SO globales y licencias locales. Prueba identidad, borrador, edición no aplicable, revisión obsoleta, equivalentes concurrentes, scopes, CSRF, perfil rechazado, licencias ajenas, contrato v2/v3, versión instalada, desactivación, carrera de instalación y rollback de gates.
La auditoría visual usa otra instalación desechable, 15 compañías, el mismo volumen mínimo por entidad principal y 51 productos SO globales de prueba. Realiza escrituras mediante formularios y HTTP públicos. Las capturas se producen en esta intervención; no se reutilizan evidencias de auditorías anteriores. Los fallos de transporte se simulan únicamente para probar carga/error/reintento, conservando el servidor y persistencia reales para las operaciones funcionales.
Se consultaron `rdx-solid`, las guías React de composición y rendimiento, `shadcn`, `ui-ux-pro-max`, búsqueda y formularios. Guiaron la reutilización del repositorio, el contexto de tipo entre consumidores reales, el estado remoto en TanStack Query y la revisión accesible en el formulario. No existe una skill específica de Resources; se siguió la documentación normativa del repositorio. No se instalaron skills ni plugins.
Durante la prueba de clic real del mapa se detectó que React Flow desactiva eventos de
puntero en contenedores de nodos no seleccionables. Los overlays de enlace de
`WorkplaceEquipmentCard` y `WorkplaceSoftwareCard` declaran `pointer-events-auto`,
igual que la acción existente de añadir activo. El canvas permanece sin selección ni
arrastre; se recupera únicamente la interacción de los enlaces. Se comprueban ambos
casos equivalentes, además de la navegación de SO por scope.
## Activación y límites
**Preparado y habilitado solo en entorno aislado. No desplegado ni activado en producción.**
La unicidad semántica depende de las policies y locks de la aplicación, sin UNIQUE SQL EAV. La coexistencia puede conservar productos locales equivalentes; no se fusionan. La identidad fija desde publicación exige crear otro UUID para otro producto comercial. El rollback mantiene lectores v3 y cierra gates; volver a un backend previo después de persistir SO globales rompería sus supuestos.
La autorización separada para el entorno desplegado, su preflight y su verificación posterior permanecen pendientes operativos. No son acciones realizadas por esta entrega.