275 lines
14 KiB
Markdown
275 lines
14 KiB
Markdown
# Auditoría De Layouts De Editores
|
|
|
|
Fecha de auditoría: 18 de agosto de 2026.
|
|
|
|
## Objetivo
|
|
|
|
Inventariar los editores reales del frontend del ERP y clasificarlos respecto a la norma visual vigente de edición focalizada.
|
|
|
|
Esta auditoría:
|
|
|
|
- inventaría rutas, páginas y dialogs de edición activos;
|
|
- clasifica cada caso por tipo;
|
|
- evalúa el layout actual frente a la norma;
|
|
- detecta desviaciones y excepciones justificadas;
|
|
- propone una secuencia pequeña de migración.
|
|
|
|
Esta auditoría no migra masivamente las pantallas.
|
|
|
|
## Norma visual de referencia
|
|
|
|
SSOT vigente:
|
|
|
|
- `packages/rdx-ui/docs/page-layouts.md`
|
|
- `packages/rdx-ui/docs/contributing-ui.md`
|
|
|
|
Resumen operativo:
|
|
|
|
- los editores de página completa deben usar por defecto shell `app-fullscreen`;
|
|
- la navegación mínima sale por `PageFormHeader` o un header de dominio equivalente;
|
|
- el contenido del editor se centra mediante `RdxEditorPageLayout`;
|
|
- `complexity="simple"` aplica a formularios focalizados centrados;
|
|
- `complexity="complex"` aplica a documentos o editores con `main + aside`, bloques especializados y footer sticky;
|
|
- los dialogs e inline editors no deben migrarse automáticamente a fullscreen.
|
|
|
|
## Método de investigación
|
|
|
|
Búsquedas y fuentes revisadas:
|
|
|
|
- rutas y layouts en `apps/web/src/routes/app-routes.tsx` y `modules/*/src/web/*routes.tsx`
|
|
- contratos de layout en `modules/core/src/web/lib/modules/module-client.interface.ts`
|
|
- primitivas Rdx en:
|
|
- `packages/rdx-ui/src/components/editor-page/rdx-editor-page-layout.tsx`
|
|
- `packages/rdx-ui/src/components/editor-page/rdx-editor-sticky-footer.tsx`
|
|
- `modules/core/src/web/components/form/form-actions/page-form-header.tsx`
|
|
- `apps/web/src/layout/app-fullscreen-layout.tsx`
|
|
- `apps/web/src/layout/app-sidebar-layout.tsx`
|
|
- módulos revisados:
|
|
- `identity`
|
|
- `customers`
|
|
- `customer-invoices`
|
|
- `companies`
|
|
- `catalogs`
|
|
- `document-series`
|
|
- `supplier`
|
|
- búsquedas textuales sobre:
|
|
- `layout: "app-fullscreen"`
|
|
- `layout: "app-sidebar"`
|
|
- `RdxEditorPageLayout`
|
|
- `PageFormHeader`
|
|
- `RdxEditorStickyFooter`
|
|
- `create`
|
|
- `update`
|
|
- `edit`
|
|
- `Dialog`
|
|
|
|
## Inventario
|
|
|
|
| Module | Feature | Route | Type | Current layout | Rdx editor layout | Compliance | Risk | Priority | Recommended action | Evidence |
|
|
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
|
|
| `identity` | Account self-service | `/account` | `PAGE_SIMPLE` | `app-fullscreen` | `simple` | `COMPLIANT` | `LOW` | `-` | Ninguna. Mantener como referencia de editor simple focalizado. | `modules/identity/src/web/account-routes.tsx`, `modules/identity/src/web/account/ui/pages/account-page.tsx` |
|
|
| `identity` | Change password dialog | Sin ruta propia. Dialog dentro de `/account` | `DIALOG` | Host `app-fullscreen` | No aplica | `COMPLIANT` | `LOW` | `-` | Ninguna. Mantener como dialog de edición contenida. | `modules/identity/src/web/account/ui/pages/account-page.tsx` |
|
|
| `customers` | Create customer | `/customers/create` | `PAGE_SIMPLE` | `app-fullscreen` | `simple` | `COMPLIANT` | `LOW` | `-` | Ninguna. Referencia vigente de editor simple. | `modules/customers/src/web/customer-routes.tsx`, `modules/customers/src/web/create/ui/pages/customer-create-page.tsx` |
|
|
| `customers` | Update customer | `/customers/:id/edit` | `PAGE_SIMPLE` | `app-fullscreen` | `simple` | `COMPLIANT` | `LOW` | `-` | Ninguna. Referencia vigente de editor simple. | `modules/customers/src/web/customer-routes.tsx`, `modules/customers/src/web/update/ui/pages/customer-update-page.tsx` |
|
|
| `customers` | Quick create customer | Sin ruta propia. Dialog reutilizado desde proformas | `DIALOG` | Host `app-fullscreen` | No aplica | `COMPLIANT` | `LOW` | `-` | Ninguna. Mantenerlo como creación rápida embebida. | `modules/customers/src/common/features/quick-create-customer/ui/dialogs/quick-create-customer-dialog.tsx` |
|
|
| `companies` | Company details settings | `/settings/company/details` | `PAGE_SIMPLE` | `app-sidebar` | No usa `RdxEditorPageLayout` | `EXCEPTION_JUSTIFIED` | `MEDIUM` | `P3` | Mantener en settings por ahora. Revaluar solo si se define una variante focalizada específica para formularios de settings. | `modules/companies/src/web/company-routes.tsx`, `modules/companies/src/web/settings/company-details/ui/pages/company-details-settings-page.tsx` |
|
|
| `customer-invoices` | Verifactu settings | `/settings/billing/verifactu` | `PAGE_SIMPLE` | `app-sidebar` | No usa `RdxEditorPageLayout` | `EXCEPTION_JUSTIFIED` | `MEDIUM` | `P3` | Mantener en settings por ahora. Revaluar junto con una política específica de formularios largos dentro de settings. | `modules/customer-invoices/src/web/customer-invoice-routes.tsx`, `modules/customer-invoices/src/web/settings/verifactu/ui/pages/company-verifactu-settings-page.tsx` |
|
|
| `customer-invoices` | Create proforma | `/proformas/create` | `PAGE_SIMPLE` | `app-fullscreen` | `simple` | `COMPLIANT` | `MEDIUM` | `-` | Ninguna. Mantener como bootstrap inicial de proforma hacia el editor documental completo. | `modules/customer-invoices/src/web/customer-invoice-routes.tsx`, `modules/customer-invoices/src/web/proformas/create/ui/pages/proforma-create-page.tsx`, `modules/customer-invoices/src/web/proformas/create/ui/blocks/proforma-create-form.tsx` |
|
|
| `customer-invoices` | Update proforma | `/proformas/:id/edit` | `PAGE_COMPLEX` | `app-fullscreen` | `complex` | `COMPLIANT` | `HIGH` | `-` | Ninguna. Mantener como referencia vigente de editor complejo. | `modules/customer-invoices/src/web/customer-invoice-routes.tsx`, `modules/customer-invoices/src/web/proformas/update/ui/pages/proforma-update-page.tsx`, `modules/customer-invoices/src/web/proformas/update/ui/editors/proforma-update-editor-form.tsx` |
|
|
| `customer-invoices` | Change proforma status | Sin ruta propia. Dialog usado desde listado y detalle | `DIALOG` | Host mixto (`app-sidebar` o `app-fullscreen`) | No aplica | `COMPLIANT` | `LOW` | `-` | Ninguna. Es una edición contenida por dialog, no candidata a fullscreen. | `modules/customer-invoices/src/web/proformas/change-status/ui/change-status-dialog.tsx`, `modules/customer-invoices/src/web/proformas/list/ui/pages/list-proformas-page.tsx`, `modules/customer-invoices/src/web/proformas/detail/ui/pages/proforma-detail-page.tsx` |
|
|
| `catalogs` | Payment methods create/update | Host: `/settings/general/payment-methods` | `DIALOG` | Host `app-sidebar` | No aplica | `COMPLIANT` | `LOW` | `-` | Ninguna. Mantener como edición contenida en dialog dentro de settings. | `modules/catalogs/src/web/catalogs-routes.tsx`, `modules/catalogs/src/web/settings/payment-methods/ui/pages/payment-methods-settings-page.tsx`, `modules/catalogs/src/web/settings/payment-methods/ui/components/payment-method-form-dialog.tsx` |
|
|
| `catalogs` | Payment terms create/update | Host: `/settings/general/payment-terms` | `DIALOG` | Host `app-sidebar` | No aplica | `COMPLIANT` | `LOW` | `-` | Ninguna. Mantener como dialog aunque su contenido interno sea más rico. | `modules/catalogs/src/web/catalogs-routes.tsx`, `modules/catalogs/src/web/settings/payment-terms/ui/pages/payment-terms-settings-page.tsx`, `modules/catalogs/src/web/settings/payment-terms/ui/components/payment-term-form-dialog.tsx` |
|
|
| `catalogs` | Tax regimes create/update | Host: `/settings/general/tax-regimes` | `DIALOG` | Host `app-sidebar` | No aplica | `COMPLIANT` | `LOW` | `-` | Ninguna. Mantener como dialog de edición contenida. | `modules/catalogs/src/web/catalogs-routes.tsx`, `modules/catalogs/src/web/settings/tax-regimes/ui/pages/tax-regimes-settings-page.tsx`, `modules/catalogs/src/web/settings/tax-regimes/ui/components/tax-regime-form-dialog.tsx` |
|
|
| `customer-invoices` | Issued invoices create/edit references | Referencias a `/issued-invoices/create` y `/customer-invoices/:id/edit`, sin ruta activa | `UNCLEAR` | Sin ruta activa | No aplica | `UNKNOWN` | `MEDIUM` | `P2` | Aclarar si esas rutas deben existir o limpiar referencias muertas antes de cualquier trabajo visual. | `modules/customer-invoices/src/web/issued-invoices/list/ui/pages/list-issued-invoices-page.tsx`, `modules/customer-invoices/src/web/issued-invoices/list/ui/blocks/issued-invoices-grid/issued-invoices-grid.tsx`, `modules/customer-invoices/src/web/customer-invoice-routes.tsx` |
|
|
| `document-series` | Frontend editor activo | No detectado | `LEGACY_OR_UNUSED` | Sin route frontend | No aplica | `UNKNOWN` | `LOW` | `P3` | Confirmar si el módulo tendrá UI activa antes de cualquier migración de layout. | Sin `src/web/*routes.tsx` ni páginas frontend activas en `modules/document-series` |
|
|
| `supplier` | Frontend editor activo | No detectado | `LEGACY_OR_UNUSED` | Sin route frontend | No aplica | `UNKNOWN` | `LOW` | `P3` | Resolver primero si el módulo se reactiva o se limpia; no priorizar migración visual. | Sin `src/web/*routes.tsx`; solo `modules/supplier/src/web/shared/*` |
|
|
|
|
## Editores conformes
|
|
|
|
Conformes respecto a la norma vigente:
|
|
|
|
- `customers/create`
|
|
- `customers/update`
|
|
- `/account`
|
|
- `proformas/:id/edit`
|
|
|
|
Motivos comunes observados:
|
|
|
|
- ruta bajo `app-fullscreen`;
|
|
- navegación mínima por `PageFormHeader` o header de dominio equivalente;
|
|
- uso explícito de `RdxEditorPageLayout`;
|
|
- geometría coherente con `simple` o `complex` según caso;
|
|
- acciones de salida/guardado visibles y no delegadas al sidebar.
|
|
|
|
## Desviaciones
|
|
|
|
### 1. `proformas/create`
|
|
|
|
HECHO OBSERVADO
|
|
|
|
- la ruta usa `app-fullscreen`;
|
|
- la página usa header de edición y `RdxEditorPageLayout complexity="simple"`;
|
|
- el flujo de alta actual solo captura cabecera inicial y deriva después al editor documental completo;
|
|
- no existe todavía editor de líneas, `aside`, totales sticky ni footer persistente equivalentes a `proformas/:id/edit`.
|
|
|
|
IMPACTO
|
|
|
|
- el create queda alineado con el patrón focalizado simple sin fingir que ya es el editor documental completo;
|
|
- la diferencia visual restante frente a `update` responde a una diferencia funcional real y no a drift accidental de layout.
|
|
|
|
DECISIÓN
|
|
|
|
- `PAGE_SIMPLE`;
|
|
- `COMPLIANT`.
|
|
|
|
### 2. Referencias a create/edit de issued invoices sin ruta activa
|
|
|
|
HECHO OBSERVADO
|
|
|
|
- hay referencias a `/issued-invoices/create` y a `/customer-invoices/:id/edit`;
|
|
- `customer-invoice-routes.tsx` no declara esas rutas activas.
|
|
|
|
IMPACTO
|
|
|
|
- el inventario de editores queda ambiguo en esa área;
|
|
- puede existir deuda de navegación muerta o una funcionalidad incompleta;
|
|
- no conviene planificar migración visual ahí hasta aclarar si hay editor real.
|
|
|
|
RECOMENDACIÓN
|
|
|
|
- confirmar si esas rutas deben implementarse;
|
|
- si no, limpiar referencias muertas antes de meterlas en cualquier backlog de layouts.
|
|
|
|
## Excepciones justificadas
|
|
|
|
### Company details settings
|
|
|
|
HECHO OBSERVADO
|
|
|
|
- es un formulario de página completa;
|
|
- vive bajo `/settings/company/details`;
|
|
- depende del shell de settings con `app-sidebar`.
|
|
|
|
INFERENCIA
|
|
|
|
- la navegación lateral de settings forma parte funcional de la tarea y hoy actúa como mecanismo primario de cambio de subsección.
|
|
|
|
DECISIÓN DE AUDITORÍA
|
|
|
|
- `EXCEPTION_JUSTIFIED` por ahora;
|
|
- no priorizar fullscreen salvo que el sistema de settings evolucione con una variante focalizada explícita.
|
|
|
|
### Verifactu settings
|
|
|
|
HECHO OBSERVADO
|
|
|
|
- es un formulario de configuración largo;
|
|
- vive bajo `/settings/billing/verifactu`;
|
|
- comparte patrón de settings con shell lateral.
|
|
|
|
INFERENCIA
|
|
|
|
- igual que en `company/details`, la tarea sigue integrada en navegación de settings y no en un editor aislado.
|
|
|
|
DECISIÓN DE AUDITORÍA
|
|
|
|
- `EXCEPTION_JUSTIFIED` por ahora;
|
|
- revisar sólo si se aborda una política transversal de formularios largos dentro de settings.
|
|
|
|
## Dialogs e inline editors
|
|
|
|
Dialogs correctamente clasificados y no candidatos automáticos a fullscreen:
|
|
|
|
- `QuickCreateCustomerDialog`
|
|
- `PaymentMethodFormDialog`
|
|
- `PaymentTermFormDialog`
|
|
- `TaxRegimeFormDialog`
|
|
- dialog de cambio de contraseña de `/account`
|
|
- `ChangeProformaStatusDialog`
|
|
|
|
No se detectaron rutas independientes que deban reclasificarse desde `DIALOG` o `INLINE` a `PAGE_*`.
|
|
|
|
No se detectaron inline editors de entidad de primer nivel con route propia. Sí existen bloques especializados internos, como el editor de líneas de proformas, pero forman parte de un `PAGE_COMPLEX` y no deben inventariarse como pantalla independiente.
|
|
|
|
## Incoherencias create/update
|
|
|
|
Agregados revisados:
|
|
|
|
- `customers`
|
|
- `create` y `update` comparten patrón y están alineados.
|
|
- `proformas`
|
|
- `create` usa `RdxEditorPageLayout complexity="simple"` porque hoy es un bootstrap inicial;
|
|
- `update` usa `RdxEditorPageLayout complexity="complex"` porque ya es el editor documental completo con `main`, bloques especializados y footer sticky.
|
|
|
|
Conclusión:
|
|
|
|
- la diferencia create/update restante es funcional legítima: `create` todavía no edita el documento completo y `update` sí.
|
|
|
|
## Riesgos de migración
|
|
|
|
Riesgos bajos:
|
|
|
|
- `customers/create`
|
|
- `customers/update`
|
|
- `/account`
|
|
|
|
Riesgos medios:
|
|
|
|
- `proformas/create` por convivencia con quick-create/select customer dialogs y porque el flujo actual parece de bootstrap inicial, no de edición documental completa;
|
|
- `company/details` y `verifactu` si se intentara moverlos fuera del shell settings.
|
|
|
|
Riesgos altos:
|
|
|
|
- `proformas/:id/edit`, aunque hoy ya cumple. Cualquier cambio allí impacta:
|
|
- scroll complejo
|
|
- footer sticky
|
|
- totales embebidos
|
|
- `aside`
|
|
- dialogs anidados
|
|
|
|
## Plan incremental
|
|
|
|
### Fase A
|
|
|
|
- completada: migración de `proformas/create`
|
|
|
|
Motivo:
|
|
|
|
- era el único `PAGE_*` activo no plenamente alineado con el patrón Rdx;
|
|
- ya usaba `app-fullscreen`, así que el salto era incremental;
|
|
- permite distinguir mejor entre bootstrap inicial y editor documental completo del agregado Proforma.
|
|
|
|
### Fase B
|
|
|
|
- revisar si `company/details` y `verifactu` deben seguir como excepción de settings o si merece una variante focalizada específica para formularios largos dentro de settings
|
|
|
|
Motivo:
|
|
|
|
- ahora mismo la excepción parece razonable;
|
|
- no conviene forzar fullscreen sin una decisión explícita sobre el sistema de settings.
|
|
|
|
### Fase C
|
|
|
|
- aclarar `issued-invoices` create/edit
|
|
|
|
Motivo:
|
|
|
|
- primero hay que determinar si existe editor real o solo referencias muertas.
|
|
|
|
### Fase D
|
|
|
|
- hacer una auditoría UX más fina de dialogs ricos, empezando por `payment-terms`
|
|
|
|
Motivo:
|
|
|
|
- no es un incumplimiento de fullscreen;
|
|
- sí es el dialog más complejo de los auditados y puede requerir reglas específicas de consistencia interna.
|
|
|
|
## No cambios
|
|
|
|
Durante esta auditoría:
|
|
|
|
- no se modificaron rutas ni layouts runtime de `customers`, `companies`, `customer-invoices`, `catalogs`, `identity`, `document-series` o `supplier`;
|
|
- no se tocaron hooks, controllers, formularios, React Query ni backend de los editores auditados;
|
|
- el único cambio de código del turno es este documento operativo de auditoría.
|