erp-core/docs/01-analisis-referencias/construccion/COMPONENTES-GENERICOS.md

25 KiB

Componentes Genéricos Identificados en ERP Construcción

Documento: Análisis de Componentes Genéricos Proyecto Fuente: ERP Construcción Proyecto Destino: ERP Genérico Fecha: 2025-11-23 Analista: Architecture-Analyst Estado: Completado


Introducción

Este documento identifica y cataloga todos los componentes del ERP Construcción que son genéricos y deben migrarse al ERP Genérico para ser reutilizados por otros proyectos (ERP Vidrio, ERP Mecánicas, etc.).

Criterios para Considerar un Componente Genérico

Un componente se considera genérico si cumple al menos 2 de los siguientes criterios:

  1. Aplicabilidad Universal: Puede usarse en cualquier industria sin cambios significativos
  2. Lógica de Negocio Independiente: No contiene lógica específica de construcción
  3. Patrón Estándar: Implementa un patrón común en ERPs (autenticación, RBAC, catálogos, etc.)
  4. Reutilización Probable: Al menos 2 proyectos específicos lo necesitarían
  5. Configurabilidad: Puede adaptarse mediante configuración sin cambiar código

1. COMPONENTES DE BASE DE DATOS

1.1 Schemas Genéricos

Schema Ubicación Actual Descripción Mapeo a MGN Prioridad Reutilización
auth_management construccion/apps/database/ddl/ Autenticación, usuarios, roles, permisos MGN-001 (Core/Auth) P0 100%
audit_logging construccion/apps/database/ddl/ Auditoría de cambios, bitácora de eventos MGN-001 (Core/Audit) P0 100%
financial_management construccion/apps/database/ddl/ Cuentas contables, asientos, pagos MGN-004 (Financiero) P0 95%
purchasing_management construccion/apps/database/ddl/ Compras, órdenes, proveedores MGN-006 (Compras) P0 90%

Total Schemas Genéricos: 4 de 7 (57%)

1.2 Tablas Genéricas por Schema

Schema: auth_management (100% genérico)

Tabla Descripción Justificación Genérica MGN Mapping Prioridad
tenants Tenants para multi-tenancy Todos los ERPs necesitan multi-tenancy core.companies P0
users Usuarios del sistema Usuario es concepto universal auth.users P0
profiles Perfiles de usuario Perfiles personalizables para cualquier industria auth.profiles P0
roles Roles del sistema RBAC es patrón universal auth.roles P0
user_roles Asignación usuario-rol Relación M2M estándar auth.user_roles P0
permissions Permisos granulares Sistema de permisos universal auth.permissions P0
role_permissions Asignación rol-permiso Relación M2M estándar auth.role_permissions P0
auth_providers Proveedores OAuth (Google, etc.) OAuth es estándar auth.providers P1
password_resets Tokens de reset de contraseña Funcionalidad estándar auth.password_resets P0
sessions Sesiones activas Gestión de sesiones universal auth.sessions P0

Subtotal: 10 tablas (100% genéricas)

Schema: audit_logging (100% genérico)

Tabla Descripción Justificación Genérica MGN Mapping Prioridad
audit_logs Registro de cambios Auditoría es universal audit.logs P0
activity_logs Actividades de usuarios Tracking de actividades universal audit.activities P0
login_history Historial de logins Seguridad estándar audit.login_history P0
api_logs Logs de llamadas API Monitoreo de API universal audit.api_logs P1

Subtotal: 4 tablas (100% genéricas)

Schema: financial_management (90% genérico)

Tabla Descripción Justificación Genérica MGN Mapping Prioridad
chart_of_accounts Plan de cuentas contables Contabilidad universal financial.accounts P0
account_types Tipos de cuenta (Activo, Pasivo, etc.) Clasificación contable estándar financial.account_types P0
journal_entries Asientos contables Doble partida universal financial.journal_entries P0
journal_entry_lines Líneas de asientos Detalle de asientos universal financial.journal_entry_lines P0
journals Diarios contables Contabilidad estándar financial.journals P0
currencies Monedas (ISO 4217) Catálogo universal core.currencies P0
exchange_rates Tasas de cambio Multi-moneda universal financial.exchange_rates P0
fiscal_years Ejercicios fiscales Periodos contables universales financial.fiscal_years P0
fiscal_periods Periodos fiscales (mensual) Cierre de periodos universal financial.fiscal_periods P0
payments Pagos Pagos universales financial.payments P0
payment_methods Métodos de pago Catálogo universal financial.payment_methods P0
bank_accounts Cuentas bancarias Gestión bancaria universal financial.bank_accounts P0

Subtotal: 12 tablas (90% genéricas - 1 tabla específica construcción)

Schema: purchasing_management (85% genérico)

Tabla Descripción Justificación Genérica MGN Mapping Prioridad
suppliers Proveedores Proveedores universales (adaptado de partners) core.partners (is_supplier) P0
supplier_contacts Contactos de proveedores Gestión de contactos universal core.partner_contacts P0
purchase_requisitions Requisiciones de compra Workflow de compras estándar purchase.requisitions P0
purchase_orders Órdenes de compra Documento de compra universal purchase.orders P0
purchase_order_lines Líneas de OC Detalle de OC universal purchase.order_lines P0
rfq Solicitudes de cotización RFQ es patrón estándar purchase.rfq P1
quotations Cotizaciones de proveedores Comparación de cotizaciones universal purchase.quotations P1

Subtotal: 7 tablas (85% genéricas)

Tablas Adicionales Genéricas (Sin Schema Definido en Construcción)

Tabla Schema Recomendado Descripción Justificación MGN Mapping Prioridad
companies core_system Empresas del grupo/holdings Multi-company universal core.companies P0
partners core_system Clientes, proveedores, contactos universales Patrón Odoo universal core.partners P0
countries core_system Catálogo de países (ISO 3166) Catálogo universal core.countries P0
states core_system Estados/provincias Catálogo universal core.states P0
cities core_system Ciudades Catálogo universal core.cities P1
units_of_measure core_system Unidades de medida + conversiones UoM universal core.uom P0
uom_categories core_system Categorías de UoM UoM universal core.uom_categories P0
products inventory Productos/servicios (genéricos) Productos base universales inventory.products P0
product_categories inventory Categorías de productos Clasificación universal inventory.product_categories P0
warehouses inventory Almacenes Gestión de almacenes universal inventory.warehouses P0
locations inventory Ubicaciones en almacén Jerarquía de ubicaciones universal inventory.locations P0

Subtotal: 11 tablas adicionales genéricas (no implementadas en construcción, pero necesarias en genérico)

1.3 Funciones PL/pgSQL Genéricas

Función Ubicación Descripción Justificación Prioridad
update_updated_at_column() public Trigger function para updated_at Función universal P0
get_current_user_id() auth_management Obtener user_id del contexto RLS universal P0
get_current_tenant_id() auth_management Obtener tenant_id del contexto Multi-tenancy universal P0
check_permission() auth_management Verificar permiso de usuario RBAC universal P0
calculate_account_balance() financial_management Calcular balance de cuenta Contabilidad universal P0

Total: 5 funciones genéricas

1.4 Triggers Genéricos

Trigger Tabla Descripción Justificación Prioridad
trg_*_updated_at TODAS Actualizar updated_at automáticamente Patrón universal P0
trg_audit_*_changes Tablas críticas Auditoría automática de cambios Seguridad universal P0
trg_validate_*_status Tablas con estados Validar transiciones de estado Business rules universales P1

Total: 3 patrones de triggers genéricos

1.5 ENUMs Genéricos

ENUM Ubicación Valores Justificación Prioridad
account_status auth_management active, suspended, banned, pending Estados de usuario universales P0
auth_provider auth_management local, google, facebook, microsoft OAuth universal P1
permission_action auth_management create, read, update, delete, approve CRUD universal P0
payment_method_type financial_management cash, check, transfer, card, other Métodos de pago universales P0
document_status global draft, pending_approval, approved, rejected, cancelled Workflow universal P0

Total: 5 ENUMs genéricos (10+ necesarios en total)


2. COMPONENTES DE BACKEND

2.1 Módulos Backend Genéricos

Módulo Ubicación Actual Descripción Reutilización MGN Mapping Prioridad
auth backend/src/modules/auth/ Autenticación JWT, login, register, reset password 100% MGN-001 (Auth) P0
users backend/src/modules/users/ Gestión de usuarios, perfiles, preferencias 95% MGN-001 (Users) P0
roles backend/src/modules/roles/ Gestión de roles y permisos (RBAC) 100% MGN-001 (RBAC) P0
companies backend/src/modules/companies/ Gestión de empresas/tenants 100% MGN-002 (Companies) P0
audit backend/src/modules/audit/ Logs de auditoría, tracking de cambios 100% MGN-001 (Audit) P0
notifications backend/src/modules/notifications/ Sistema de notificaciones 95% MGN-014 (Notifications) P0
files backend/src/modules/files/ Upload/download de archivos 95% MGN-013 (Files) P1
catalogs backend/src/modules/catalogs/ Catálogos maestros (countries, currencies, uom) 100% MGN-003 (Catalogs) P0

Total: 8 módulos backend genéricos (de ~13 módulos totales = 62%)

2.2 Servicios Compartidos (Shared Services)

Servicio Archivo Descripción Reutilización Prioridad
DatabaseService shared/services/database.service.ts Pool de conexiones, queries base 100% P0
CryptoService shared/services/crypto.service.ts Hashing, encryption, JWT 100% P0
EmailService shared/services/email.service.ts Envío de emails (templates) 100% P0
StorageService shared/services/storage.service.ts Gestión de archivos (S3/local) 100% P0
LoggerService shared/services/logger.service.ts Logging estructurado (Winston) 100% P0
CacheService shared/services/cache.service.ts Redis caching 100% P1
ValidationService shared/services/validation.service.ts Validación de datos (Zod) 100% P0

Total: 7 servicios compartidos genéricos

2.3 Middleware Genéricos

Middleware Archivo Descripción Reutilización Prioridad
authMiddleware shared/middleware/auth.middleware.ts Verificación de JWT 100% P0
rbacMiddleware shared/middleware/rbac.middleware.ts Verificación de permisos 100% P0
validationMiddleware shared/middleware/validation.middleware.ts Validación de request body 100% P0
errorMiddleware shared/middleware/error.middleware.ts Error handling centralizado 100% P0
loggingMiddleware shared/middleware/logging.middleware.ts Request/response logging 100% P0
rateLimitMiddleware shared/middleware/rate-limit.middleware.ts Rate limiting 100% P1
corsMiddleware shared/middleware/cors.middleware.ts CORS configuration 100% P0

Total: 7 middleware genéricos

2.4 Guards y Decorators

Guard/Decorator Archivo Descripción Reutilización Prioridad
@Public() shared/decorators/public.decorator.ts Marcar endpoint público 100% P0
@Roles() shared/decorators/roles.decorator.ts Especificar roles requeridos 100% P0
@Permissions() shared/decorators/permissions.decorator.ts Especificar permisos 100% P0
@CurrentUser() shared/decorators/current-user.decorator.ts Inyectar usuario actual 100% P0
@Tenant() shared/decorators/tenant.decorator.ts Inyectar tenant actual 100% P0

Total: 5 decorators genéricos


3. COMPONENTES DE FRONTEND

3.1 Shared Components (Componentes UI Reutilizables)

Átomos (Atomic Design)

Componente Archivo Descripción Reutilización Prioridad
Button shared/components/atoms/Button.tsx Botón con variantes 100% P0
Input shared/components/atoms/Input.tsx Input text con validación 100% P0
Select shared/components/atoms/Select.tsx Select dropdown 100% P0
Checkbox shared/components/atoms/Checkbox.tsx Checkbox 100% P0
Radio shared/components/atoms/Radio.tsx Radio button 100% P0
DatePicker shared/components/atoms/DatePicker.tsx Selector de fecha 100% P0
Icon shared/components/atoms/Icon.tsx Iconos SVG 100% P0
Badge shared/components/atoms/Badge.tsx Badge de estado 100% P0
Avatar shared/components/atoms/Avatar.tsx Avatar de usuario 100% P0
Spinner shared/components/atoms/Spinner.tsx Loading spinner 100% P0

Subtotal: 10 átomos genéricos

Moléculas

Componente Archivo Descripción Reutilización Prioridad
FormField shared/components/molecules/FormField.tsx Label + Input + Error 100% P0
SearchBar shared/components/molecules/SearchBar.tsx Barra de búsqueda 100% P0
Pagination shared/components/molecules/Pagination.tsx Paginación de tablas 100% P0
Alert shared/components/molecules/Alert.tsx Alertas/notificaciones 100% P0
Card shared/components/molecules/Card.tsx Tarjeta de contenido 100% P0
Modal shared/components/molecules/Modal.tsx Modal dialog 100% P0
Dropdown shared/components/molecules/Dropdown.tsx Dropdown menu 100% P0
Tabs shared/components/molecules/Tabs.tsx Pestañas 100% P0
Breadcrumb shared/components/molecules/Breadcrumb.tsx Migas de pan 100% P0
Tooltip shared/components/molecules/Tooltip.tsx Tooltip 100% P0

Subtotal: 10 moléculas genéricas

Organismos

Componente Archivo Descripción Reutilización Prioridad
DataTable shared/components/organisms/DataTable.tsx Tabla con sorting, filtering, pagination 100% P0
Form shared/components/organisms/Form.tsx Formulario con validación Zod 100% P0
Sidebar shared/components/organisms/Sidebar.tsx Sidebar de navegación 100% P0
Navbar shared/components/organisms/Navbar.tsx Navbar superior 100% P0
DashboardWidget shared/components/organisms/DashboardWidget.tsx Widget de dashboard 95% P0
UserMenu shared/components/organisms/UserMenu.tsx Menú de usuario 100% P0
FileUploader shared/components/organisms/FileUploader.tsx Upload de archivos 100% P1
Calendar shared/components/organisms/Calendar.tsx Calendario 100% P1

Subtotal: 8 organismos genéricos

Templates

Componente Archivo Descripción Reutilización Prioridad
DashboardLayout shared/components/templates/DashboardLayout.tsx Layout principal con sidebar 100% P0
AuthLayout shared/components/templates/AuthLayout.tsx Layout para login/register 100% P0
EmptyLayout shared/components/templates/EmptyLayout.tsx Layout vacío 100% P0

Subtotal: 3 templates genéricos

Total Componentes UI: 31 componentes genéricos

3.2 Hooks Personalizados

Hook Archivo Descripción Reutilización Prioridad
useAuth shared/hooks/useAuth.ts Hook de autenticación 100% P0
useUser shared/hooks/useUser.ts Hook de usuario actual 100% P0
usePermissions shared/hooks/usePermissions.ts Hook de permisos 100% P0
useApi shared/hooks/useApi.ts Hook para llamadas API 100% P0
useQuery shared/hooks/useQuery.ts Hook para queries 100% P0
useMutation shared/hooks/useMutation.ts Hook para mutations 100% P0
useDebounce shared/hooks/useDebounce.ts Hook de debounce 100% P0
useLocalStorage shared/hooks/useLocalStorage.ts Hook para localStorage 100% P0
useToast shared/hooks/useToast.ts Hook para notificaciones toast 100% P0
useModal shared/hooks/useModal.ts Hook para modales 100% P0

Total: 10 hooks genéricos

3.3 Stores (Zustand)

Store Archivo Descripción Reutilización Prioridad
useAuthStore stores/auth.store.ts Estado de autenticación 100% P0
useUserStore stores/user.store.ts Estado de usuario 100% P0
useCompanyStore stores/company.store.ts Estado de empresa/tenant 100% P0
useUIStore stores/ui.store.ts Estado de UI (sidebar, theme) 100% P0
useNotificationStore stores/notification.store.ts Estado de notificaciones 100% P0
usePermissionsStore stores/permissions.store.ts Permisos del usuario 100% P0

Total: 6 stores genéricos

3.4 Páginas Genéricas

Página Ruta Descripción Reutilización Prioridad
Login /login Página de login 100% P0
Register /register Página de registro 100% P0
ForgotPassword /forgot-password Recuperar contraseña 100% P0
ResetPassword /reset-password Resetear contraseña 100% P0
Profile /profile Perfil de usuario 100% P0
Settings /settings Configuración de usuario 100% P0
Unauthorized /unauthorized Sin permisos 100% P0
NotFound /404 Página no encontrada 100% P0

Total: 8 páginas genéricas


4. RESUMEN CUANTITATIVO

Categoría Componentes Genéricos Componentes Totales % Reutilización
Schemas DB 4 7 57%
Tablas DB 44 70+ 63%
Funciones DB 5 8 63%
Triggers DB 3 patrones 3 patrones 100%
ENUMs DB 5 10 50%
Módulos Backend 8 13 62%
Servicios Compartidos 7 7 100%
Middleware 7 7 100%
Guards/Decorators 5 5 100%
Componentes UI 31 50 62%
Hooks 10 15 67%
Stores 6 10 60%
Páginas 8 30+ 27%
TOTAL 143 componentes 235+ componentes ~61%

Desglose de Prioridades

Prioridad Componentes Porcentaje
P0 (Crítico) 120 84%
P1 (Alta) 23 16%
P2 (Media) 0 0%

5. ANÁLISIS DE REUTILIZACIÓN POR PROYECTO

5.1 ERP Construcción

  • Componentes genéricos utilizados: 143
  • Componentes específicos construcción: 92
  • Total componentes: 235
  • % Reutilización del genérico: 61%

5.2 ERP Vidrio (Estimado)

  • Componentes genéricos a reutilizar: ~135 (94% de los 143)
  • Componentes específicos vidrio nuevos: ~60
  • Total componentes estimado: 195
  • % Reutilización del genérico: 69%
  • Componentes a migrar de construcción: 8 (calendarios, reportes avanzados)

5.3 ERP Mecánicas (Estimado)

  • Componentes genéricos a reutilizar: ~140 (98% de los 143)
  • Componentes específicos mecánicas nuevos: ~45
  • Total componentes estimado: 185
  • % Reutilización del genérico: 76%
  • Componentes a migrar de construcción: 3 (gestión de proyectos base)

5.4 Resumen de Reutilización

Proyecto Reutilización ERP Genérico Componentes Específicos Ahorro de Desarrollo
ERP Construcción 61% 39% Baseline (0%)
ERP Vidrio 69% 31% ~30%
ERP Mecánicas 76% 24% ~40%
Promedio 69% 31% 35%

6. COMPONENTES P0 (CRÍTICOS PARA TODOS LOS PROYECTOS)

Fase 0 - Infraestructura Base (Crítico)

  1. Database:

    • Schema auth_management completo (10 tablas)
    • Schema audit_logging completo (4 tablas)
    • Tablas: companies, partners, currencies, countries, uom
    • Funciones: update_updated_at_column(), get_current_user_id(), get_current_tenant_id()
    • Triggers: trg_*_updated_at en todas las tablas
  2. Backend:

    • Módulos: auth, users, roles, companies, audit
    • Servicios: DatabaseService, CryptoService, EmailService, LoggerService
    • Middleware: authMiddleware, rbacMiddleware, validationMiddleware, errorMiddleware
    • Decorators: @Public(), @Roles(), @Permissions(), @CurrentUser(), @Tenant()
  3. Frontend:

    • Átomos: Button, Input, Select, Checkbox, DatePicker, Icon
    • Moléculas: FormField, SearchBar, Alert, Modal
    • Organismos: DataTable, Form, Sidebar, Navbar
    • Templates: DashboardLayout, AuthLayout
    • Hooks: useAuth, useUser, usePermissions, useApi
    • Stores: useAuthStore, useUserStore, useCompanyStore, useUIStore
    • Páginas: Login, Register, Profile, Settings

Total P0: 120 componentes críticos


7. RECOMENDACIONES DE MIGRACIÓN

7.1 Orden Sugerido de Migración

Fase 0 (Semana 1-2): Infraestructura Crítica

  1. Schema auth_management (10 tablas)
  2. Schema audit_logging (4 tablas)
  3. Funciones DB universales (5)
  4. Módulo backend auth completo
  5. Módulo backend users completo
  6. Componentes UI críticos (20)

Fase 1 (Semana 3-4): Catálogos y Core

  1. Tablas: companies, partners, currencies, countries, uom (11 tablas)
  2. Schema financial_management (12 tablas)
  3. Módulos backend: companies, catalogs
  4. Componentes UI adicionales (11)

Fase 2 (Semana 5-6): Módulos de Negocio Básicos

  1. Schema purchasing_management (7 tablas)
  2. Módulos backend: notifications, files
  3. Resto de componentes UI (20)

7.2 Estrategia de Adaptación

Para cada componente genérico:

  1. Extraer: Copiar del ERP Construcción
  2. Limpiar: Remover lógica específica de construcción
  3. Parametrizar: Hacer configurable mediante settings
  4. Documentar: Agregar JSDoc completo
  5. Testear: Unit tests + integration tests
  6. Validar: Verificar en al menos 2 contextos (construcción + vidrio)

8. CONCLUSIONES

8.1 Hallazgos Principales

  1. 61% de componentes son genéricos: 143 de 235 componentes pueden reutilizarse
  2. 84% son prioridad P0: Componentes críticos que deben migrarse primero
  3. Alta reutilización esperada: 69% promedio en proyectos futuros
  4. ROI significativo: 35% ahorro promedio en desarrollo

8.2 Beneficios de la Migración

  1. Reducción de duplicación: ~35% menos código a mantener
  2. Consistencia: UI/UX uniforme entre proyectos
  3. Velocidad de desarrollo: 30-40% más rápido en proyectos nuevos
  4. Calidad: Componentes probados en producción
  5. Mantenibilidad: Bugs fixeados una vez, benefician a todos

8.3 Próximos Pasos

  1. Revisar este documento con equipo de desarrollo
  2. Priorizar componentes P0 para migración inmediata
  3. Crear plan detallado de migración (tareas, responsables, timeline)
  4. Iniciar migración con Fase 0 (infraestructura crítica)
  5. Validar componentes migrados con proyecto piloto

Fecha de Creación: 2025-11-23 Versión: 1.0 Estado: Completado Próximo Documento: COMPONENTES-ESPECIFICOS.md