- 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.
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.tsmodules/companies/src/api/domain/access/access-item.entity.tsmodules/companies/src/api/domain/access/access-policy.tsmodules/companies/src/api/domain/access/access-workspace.aggregate.tsmodules/companies/src/api/domain/access/access.test.tsscripts/account-usage-ui-checks.py
Comprobaciones ejecutadas
Correctas:
pnpm --filter @metis/companies typecheckypnpm --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.tscon 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.