47 lines
6.7 KiB
Markdown
47 lines
6.7 KiB
Markdown
# Software del ordenador
|
|
|
|
## Uso
|
|
|
|
La ficha de un puesto muestra **Software del ordenador**, asociado a su ordenador principal. Permite registrar el sistema operativo actual y las aplicaciones instaladas para el equipo, sin exigir persona ni perfil. Dos perfiles del mismo equipo consultan la misma instalación; cambiar el responsable no cambia el software. Al sustituir el ordenador principal, la ficha consulta las instalaciones del equipo nuevo y conserva las del anterior.
|
|
|
|
El sistema operativo es un recurso de la plantilla global **Sistema operativo**, con proveedor, edición y descripción; las copias y plantillas propias admiten uso explícito `os`. Las aplicaciones usan el recurso de uso `application`. La versión/build concreta pertenece a la instalación; el producto y edición pertenecen al recurso. Se aceptan varias instalaciones de sistemas operativos distintos (por ejemplo, arranque dual); no se deduce su tipo por el nombre ni se guarda el SO actual en las características del activo. El SO de fábrica sigue describiendo la compra original.
|
|
|
|
El alta y la edición utilizan modal. Hay altas rápidas para sistema operativo y aplicación reutilizando el editor de recursos sin un tercer nivel de formularios. Cancelar el hijo conserva el padre; un recurso ya guardado permanece aunque se cancele la instalación. El listado reutiliza EntityListHeader, EntityTable, acciones por fila y paginación compartida, con búsqueda, columnas, ordenación, inclusión de cerradas y limpiar filtros. Recurso enlaza a su ficha.
|
|
|
|
## Relación con perfiles
|
|
|
|
La instalación del ordenador y la disponibilidad de una aplicación para una persona son relaciones distintas. El bloque de aplicaciones del perfil conserva sus registros, forma de uso y versiones; puede representar aplicaciones web o instalaciones propias de ese usuario. No se generan instalaciones de equipo a partir de registros antiguos porque no documentan ese ámbito. Tampoco se crean aplicaciones en todos los perfiles por registrar software en el equipo. No se instalan programas ni se asignan o consumen licencias automáticamente.
|
|
|
|
## Reglas
|
|
|
|
La pareja ordenador/recurso es fija y solo admite una instalación abierta. Una cerrada permite un nuevo registro. Se comparte el ciclo ya existente: pendiente → configurado o nunca configurado; configurado → pendiente de retirar → retirado. Los estados terminales no se editan. Las notas pueden completarse mientras se revisa o retira una instalación.
|
|
|
|
El servidor comprueba pertenencia a compañía, tipo de recurso, disponibilidad del activo y actividad del recurso. Las altas o reconfiguraciones pendientes/configuradas exigen referencias disponibles; retirar y completar notas sigue siendo posible si el activo está retirado o el recurso inactivo. Se conserva historial y aparece un aviso de revisión. Eliminar corrige un alta por error y elimina también sus revisiones, con confirmación explícita en la interfaz.
|
|
|
|
## Persistencia y API
|
|
|
|
SoftwareInstallation es un agregado, con SoftwareInstallationValues y revisiones con UUID propio. `software_installations` y `software_installation_revisions` guardan columnas tradicionales: compañía, activo, recurso, versión, estado, notas, actor y fecha. Claves foráneas protegen referencias, una clave nullable única protege la pareja abierta y el índice de revisiones protege su orden. No se persiste JSON.
|
|
|
|
Migración explícita e idempotente al inicializar el módulo. Las escrituras se serializan con el bloqueo de compañía y guardan raíz/revisiones dentro de la misma transacción. Una actualización semánticamente equivalente no añade revisión. El mapper comprueba identidad, pareja fija, fechas, transiciones, última revisión y clave abierta.
|
|
|
|
`GET /api/software-installations/:companyId` consulta todas las instalaciones de la compañía; la ficha filtra por ordenador. `POST` crea; `POST /:companyId/:id/update` edita; `POST /:companyId/:id/delete` elimina. Sesión obligatoria, validación estricta, origen y CSRF en escrituras; actor tomado de la sesión. La auditoría central continúa como entrega independiente.
|
|
|
|
## Verificación
|
|
|
|
Pruebas de dominio y persistencia: referencias, SO/aplicaciones, duplicados, ámbito, identidad fija, idempotencia, versiones, revisión, transiciones e historial corrupto. Pruebas HTTP con MariaDB: migración repetida, concurrencia, CSRF/origen, compañía ajena, versiones históricas, recursos inactivos, retirada y eliminación. Pruebas de interfaz es/en: filtrado por ordenador, enlaces, versiones, ausencia de formularios incrustados y ayuda.
|
|
|
|
|
|
## Licencia vinculada
|
|
|
|
Cada instalación admite una referencia opcional a un recurso de uso **Licencia de software** de la misma compañía. Se elige en el formulario y se muestra como enlace en el listado y en cada revisión del historial. Puede añadirse, sustituirse o quitarse mientras la instalación no esté cerrada. La pareja ordenador/software sigue fija. Repetir los mismos valores no añade historial.
|
|
|
|
Este vínculo documenta la licencia indicada por el técnico. No reserva plazas, valida el contrato del fabricante, demuestra cobertura ni deduce que dos productos con nombres parecidos sean compatibles. El software gratuito o una instalación cuya licencia aún no se conoce pueden quedar sin vínculo. Las asignaciones por persona/cuenta y el cálculo de capacidad disponible siguen pendientes.
|
|
|
|
Una licencia nueva o un cambio de configuración requieren licencia activa y no caducada. Una instalación abierta con licencia desactivada o caducada aparece para revisión; se pueden completar notas, desvincular la licencia y registrar la retirada. No se elimina ni retira software automáticamente. La caducidad es inclusiva y se consulta mediante el campo de serie de vigencia, usando la fecha UTC igual que el resto del backend.
|
|
|
|
El uso `license` permite reconocer también plantillas propias y copias de la plantilla de serie, sin depender del nombre. Una migración idempotente clasifica la plantilla de serie existente; no reclasifica copias anteriores sin uso explícito. El tipo de uso se fija al crear la plantilla, igual que en aplicaciones o certificados.
|
|
|
|
`licenseResourceId` es una columna UUID nullable con clave foránea en `software_installations` y `software_installation_revisions`. Las instalaciones y revisiones anteriores conservan NULL: no se inventan relaciones. Las claves foráneas protegen tanto la referencia actual como las históricas. No se añade JSON ni nuevos endpoints.
|
|
|
|
Se comprueban referencias de otra compañía o de tipo incorrecto, inactividad/caducidad, idempotencia, desvinculación, revisiones anteriores, migración repetida y enlaces/traducciones es/en. La limpieza de la base exclusiva de pruebas elimina primero las instalaciones y revisiones para permitir ejecuciones consecutivas sin desactivar claves foráneas.
|