metis-desk/.artifacts/account-usage/validacion.md
David 0e8e15c9c2 feat: Implement account deletion functionality with UI and API integration
- 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.
2026-10-27 11:39:53 +01:00

3.9 KiB

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

Captura de edición a 320 px

Error recuperable por relaciones incompatibles