- Added `removeAccessAccount` function to handle account deletion in the database, ensuring no external references exist. - Created `deleteAccount` API function to facilitate account deletion requests from the client. - Developed `AccountDeleteDialog` component for user confirmation before account deletion, integrating with the delete API. - Introduced resource image handling with validation for PNG uploads, including UI components for image selection and preview. - Implemented resource icon template evolution logic to maintain icon bindings without overwriting existing fields. - Added scripts for auditing account deletion and usage checks, ensuring robust testing of the new features.
54 lines
3.9 KiB
Markdown
54 lines
3.9 KiB
Markdown
# Edición de Uso de cuentas — 27/10/2026
|
|
|
|
En el formulario existente Editar → Uso se habilitan Personal, Compartida y Técnica.
|
|
El dominio acepta los cambios compatibles conservando UUID, estado y relaciones, y
|
|
registra la revisión con el valor previo. Repetir la edición sin cambios no añade revisiones.
|
|
Sistema y entorno siguen fijos. No se necesita migración ni cambia el contrato de guardado.
|
|
|
|
La conversión Compartida → Personal comprueba solapamientos de titulares, incluidos
|
|
los históricos, mediante la política de periodos existente. Cambiar entre Técnica y
|
|
Personal/Compartida se rechaza si hay relaciones con personas, incluso cerradas:
|
|
responsabilidad técnica y acceso tienen contratos distintos. El error traducido
|
|
ACCOUNT_USAGE_CONFLICT conserva el borrador y permite seleccionar un uso compatible.
|
|
|
|
Archivos principales:
|
|
- `modules/companies/src/web/access/shared/helpers/access-fields.ts`
|
|
- `modules/companies/src/api/domain/access/access-item.entity.ts`
|
|
- `modules/companies/src/api/domain/access/access-policy.ts`
|
|
- `modules/companies/src/api/domain/access/access-workspace.aggregate.ts`
|
|
- `modules/companies/src/api/domain/access/access.test.ts`
|
|
- `scripts/account-usage-ui-checks.py`
|
|
|
|
## Comprobaciones ejecutadas
|
|
|
|
Correctas:
|
|
- `pnpm --filter @metis/companies typecheck` y `pnpm --filter @metis/server typecheck`.
|
|
- `TSX_TSCONFIG_PATH=tsconfig.json node --import tsx --test modules/companies/src/api/domain/access/access.test.ts modules/companies/src/web/access/shared/access.test.tsx`.
|
|
- Prueba MariaDB `apps/server/src/account-deletion.integration.test.ts` con NODE_ENV=test y DB_NAME=metis_desk_test: cambio Personal → Compartida, relectura y conservación del historial, además de su cobertura de borrado.
|
|
- Biome dirigido a los diez archivos TypeScript/JSON cambiados: sin errores ni advertencias. ESLint dirigido: correcto. `git diff --check`: correcto.
|
|
- `pnpm build`: correcto, con el aviso existente de tamaño de chunks.
|
|
- `python3 scripts/visual-audit.py --account-deletion --check`: 8 comprobaciones específicas de Uso y 17 de regresión de eliminación mediante Playwright MCP Docker stdio. Edición real, selector habilitado, sistema bloqueado, selección por teclado, guardado persistido, mismo UUID/historial, cancelación sin guardar, error por relación incompatible conservando el borrador y recuperación con Compartida.
|
|
- Diálogo a 1440, 390 y 320 px sin desbordamiento horizontal. Abiertas e inspeccionadas las capturas de 320 px y error incompatible. El cuerpo mantiene desplazamiento y pie visible.
|
|
- Volumen sintético: 15 compañías; principal con 50 personas, 51 activos, 66 recursos, 50 perfiles, 50 puestos y 62 cuentas creadas durante el recorrido. Solo metis_desk_test desechable. Entorno retirado y sesión eliminada.
|
|
|
|
Se ejecutaron también `pnpm typecheck`, `pnpm lint`, `pnpm test` y `pnpm check` globales.
|
|
Mantienen fallos ajenos a este cambio: locale en el calendario vendor, dos pruebas de
|
|
textos en companies-page.test.tsx y diagnósticos de lint/formato de otros archivos.
|
|
No se modificaron vendor ni esos archivos para ocultarlos. Logs de esta ejecución en
|
|
este directorio. No se han cambiado cuentas reales durante las pruebas.
|
|
|
|
## Skills y límites
|
|
|
|
Consultadas `rdx-solid`, `ux-inputs-and-forms`, `shadcn` y las reglas React ya revisadas
|
|
para este formulario. Influyeron en la validación de relaciones en dominio, el campo
|
|
con etiqueta persistente, el uso de las primitivas existentes y la conservación del
|
|
borrador sin duplicar estado remoto. No están disponibles los auditores ux-*-audit;
|
|
no se invocaron ni instalaron. No se afirma validación WCAG completa, lector de
|
|
pantalla, contraste global o tema oscuro.
|
|
|
|
[Informe MCP](../playwright/authenticated-g5yiyswy/account-usage-report.json)
|
|
|
|
[Captura de edición a 320 px](../playwright/authenticated-g5yiyswy/account-usage-320.png)
|
|
|
|
[Error recuperable por relaciones incompatibles](../playwright/authenticated-g5yiyswy/account-usage-incompatible.png)
|