# Guía de Alineación de Verticales con ERP-Core **Versión:** 1.0.0 **Fecha:** 2025-12-09 **Propósito:** Estándar para mantener verticales alineadas con erp-core --- ## 1. Arquitectura Base ### ERP-Core como Fundación Todas las verticales heredan de **erp-core** que provee: | Schema | Tablas | Propósito | |--------|--------|-----------| | auth | 26 | Autenticación, MFA, OAuth, API Keys, roles, permisos | | core | 12 | Partners, catálogos, UoM, monedas, secuencias | | financial | 15 | Contabilidad, facturas, pagos, asientos | | inventory | 20 | Productos, stock, valoración FIFO/AVCO, lotes | | purchase | 8 | Órdenes de compra, proveedores | | sales | 10 | Ventas, cotizaciones, equipos de venta | | projects | 10 | Proyectos, tareas, dependencias | | analytics | 7 | Contabilidad analítica, centros de costo | | system | 13 | Mensajes, notificaciones, logs, auditoría | | billing | 11 | SaaS/Suscripciones (opcional) | | crm | 6 | Leads, oportunidades (opcional) | | hr | 6 | Empleados, contratos, ausencias | | **TOTAL** | **144** | | ### Variable RLS Estándar ```sql current_setting('app.current_tenant_id', true)::UUID ``` **IMPORTANTE:** Todas las verticales DEBEN usar esta variable exacta para RLS. --- ## 2. Estructura de Archivos Requerida ### Estructura Mínima por Vertical ``` apps/verticales/{vertical}/ ├── backend/ # Código backend (NestJS/Express) ├── frontend/ # Código frontend (React/Vue) ├── database/ │ ├── HERENCIA-ERP-CORE.md # REQUERIDO: Documento de herencia │ ├── README.md # Descripción de BD │ ├── init/ # DDL files (si implementado) │ │ ├── 00-extensions.sql │ │ ├── 01-create-schemas.sql │ │ ├── 02-rls-functions.sql │ │ └── XX-{schema}-tables.sql │ └── seeds/ # Datos iniciales ├── docs/ # Documentación del proyecto └── orchestration/ └── inventarios/ # REQUERIDO: Inventarios YAML ├── MASTER_INVENTORY.yml ├── DATABASE_INVENTORY.yml ├── BACKEND_INVENTORY.yml ├── FRONTEND_INVENTORY.yml ├── DEPENDENCY_GRAPH.yml └── TRACEABILITY_MATRIX.yml ``` --- ## 3. Formato Estándar de DATABASE_INVENTORY.yml ### Sección herencia_core (OBLIGATORIA) ```yaml herencia_core: base_de_datos: erp-core version_core: "1.2.0" tablas_heredadas: 144 # NO MODIFICAR - valor fijo schemas_heredados: - nombre: auth tablas: 26 uso: "Descripción contextualizada a la vertical" - nombre: core tablas: 12 uso: "..." # ... todos los 12 schemas referencia_ddl: "apps/erp-core/database/ddl/" documento_herencia: "../database/HERENCIA-ERP-CORE.md" variable_rls: "app.current_tenant_id" ``` ### Sección schemas_especificos ```yaml schemas_especificos: - nombre: {schema_vertical} descripcion: "Propósito del schema" estado: PLANIFICADO | EN_DESARROLLO | IMPLEMENTADO tablas_estimadas: N modulos_relacionados: [MOD-001, MOD-002] tablas: - nombre_tabla_1 - nombre_tabla_2 ``` --- ## 4. Reglas de Nomenclatura DDL ### Archivos SQL ``` 00-extensions.sql # Extensiones PostgreSQL 01-create-schemas.sql # CREATE SCHEMA IF NOT EXISTS 02-rls-functions.sql # Funciones de contexto RLS 03-{dominio}-tables.sql # Tablas por dominio 04-{dominio}-tables.sql ... 99-seed-data.sql # Datos iniciales ``` ### Tablas - Usar snake_case: `service_orders`, `order_items` - Prefijo de schema obligatorio en FK: `auth.users`, `core.partners` - Columnas de auditoría estándar: ```sql created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), created_by UUID REFERENCES auth.users(id), updated_at TIMESTAMPTZ, updated_by UUID REFERENCES auth.users(id), deleted_at TIMESTAMPTZ, deleted_by UUID REFERENCES auth.users(id) ``` ### RLS Policy ```sql CREATE POLICY tenant_isolation_{tabla} ON {schema}.{tabla} FOR ALL USING (tenant_id = current_setting('app.current_tenant_id', true)::UUID); ``` --- ## 5. Estado de Verticales Actuales | Vertical | Estado | DDL | Backend | Frontend | Próximo Paso | |----------|--------|-----|---------|----------|--------------| | **Construcción** | 35% | ✅ 7 archivos | Parcial | Estructura | Completar backend | | **Mecánicas Diesel** | 95% | ✅ 6 archivos | Estructura | Estructura | Iniciar Sprint 1 | | **Clínicas** | 25% | ❌ Pendiente | No iniciado | No iniciado | Crear DDL | | **Retail** | 25% | ❌ Pendiente | No iniciado | No iniciado | Crear DDL | | **Vidrio Templado** | 25% | ❌ Pendiente | No iniciado | No iniciado | Crear DDL | --- ## 6. Checklist de Alineación ### Antes de iniciar desarrollo: - [ ] `herencia_core.tablas_heredadas` = 144 - [ ] `herencia_core.version_core` = "1.2.0" - [ ] `herencia_core.variable_rls` = "app.current_tenant_id" - [ ] Los 12 schemas heredados están documentados - [ ] `HERENCIA-ERP-CORE.md` existe en database/ - [ ] DDL usa `current_setting('app.current_tenant_id', true)::UUID` - [ ] FK a auth.tenants y auth.users (NO core.*) ### Validación de DDL: ```bash # Verificar variable RLS correcta grep -r "current_tenant_id" database/init/*.sql # Verificar NO usar variable incorrecta grep -r "current_tenant'" database/init/*.sql # Debe retornar vacío # Verificar FK correctas grep -r "auth.tenants" database/init/*.sql grep -r "auth.users" database/init/*.sql ``` --- ## 7. Proceso de Actualización Cuando erp-core se actualice: 1. Verificar cambios en `INVENTARIO-OBJETOS-BD.yml` 2. Actualizar `tablas_heredadas` si cambió 3. Actualizar `version_core` 4. Revisar si hay nuevos schemas 5. Actualizar `DATABASE_INVENTORY.yml` de cada vertical 6. Verificar compatibilidad de DDL existente --- ## 8. Contacto y Soporte - **Documentación Core:** `/apps/erp-core/docs/` - **Inventario Core:** `/apps/erp-core/docs/04-modelado/trazabilidad/INVENTARIO-OBJETOS-BD.yml` - **DDL Core:** `/apps/erp-core/database/ddl/` --- **Última actualización:** 2025-12-09 **Mantenido por:** Architecture Analyst Agent