# ROADMAP DE DISEÑO DE BASE DE DATOS **Objetivo:** Crear DDL completo para 9 schemas del ERP Genérico **Fecha Inicio:** 2025-11-24 **Meta:** Completar DDL de todos los schemas antes de implementación backend --- ## Estado Actual | Schema | Tablas | DDL | Índices | Functions | Triggers | RLS | Seeds | Estado | |--------|--------|-----|---------|-----------|----------|-----|-------|--------| | **auth** | 10 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | COMPLETADO | | **core** | 12 | ⏳ | ⏳ | ⏳ | ⏳ | ⏳ | ⏳ | PENDIENTE | | **financial** | 15 | ⏳ | ⏳ | ⏳ | ⏳ | ⏳ | ⏳ | PENDIENTE | | **inventory** | 10 | ⏳ | ⏳ | ⏳ | ⏳ | ⏳ | ⏳ | PENDIENTE | | **purchase** | 8 | ⏳ | ⏳ | ⏳ | ⏳ | ⏳ | ⏳ | PENDIENTE | | **sales** | 10 | ⏳ | ⏳ | ⏳ | ⏳ | ⏳ | ⏳ | PENDIENTE | | **analytics** | 6 | ⏳ | ⏳ | ⏳ | ⏳ | ⏳ | ⏳ | PENDIENTE | | **projects** | 8 | ⏳ | ⏳ | ⏳ | ⏳ | ⏳ | ⏳ | PENDIENTE | | **system** | 10 | ⏳ | ⏳ | ⏳ | ⏳ | ⏳ | ⏳ | PENDIENTE | **Total:** 1/9 schemas completados (11%) --- ## Schemas Completados ### ✅ auth (Completado 2025-11-24) **Tablas:** 10 - tenants - companies - users - roles - permissions - user_roles - role_permissions - sessions - user_companies - password_resets **Características:** - ✅ ENUMs definidos (user_status, tenant_status, session_status, permission_action) - ✅ Funciones de contexto (get_current_tenant_id, get_current_user_id, get_current_company_id) - ✅ Función de autorización (user_has_permission) - ✅ Triggers para updated_at - ✅ Trigger de validación (al menos 1 admin por tenant) - ✅ RLS policies para tenant isolation - ✅ Índices en campos clave - ✅ Vistas útiles (user_permissions_view, active_sessions_view) - ✅ Seed data (50+ permisos estándar) **Archivos:** - `/schemas/auth-schema-ddl.sql` (completado) --- ## Próximos Schemas a Implementar ### 1. Schema: core (PRIORIDAD ALTA) **Propósito:** Datos maestros (partners, currencies, countries, UoM) **Módulos:** MGN-002 (Empresas), MGN-003 (Catálogos) **Dependencias:** auth (companies, tenants) **Tablas Estimadas:** 12 1. partners 2. partner_addresses 3. currencies 4. currency_rates 5. countries 6. states 7. cities (opcional) 8. uom_categories 9. uoms 10. product_categories 11. payment_terms 12. fiscal_positions (opcional) **Características Requeridas:** - Jerarquía de partners (parent_id) - Flags: is_customer, is_supplier, is_employee - Conversión automática entre UoMs de misma categoría - Tasas de cambio con vigencia temporal - Seed data: países (ISO 3166-1), monedas (ISO 4217), UoMs estándar **Estimación:** 2-3 días --- ### 2. Schema: financial (PRIORIDAD ALTA) **Propósito:** Contabilidad general **Módulos:** MGN-004 (Financiero Básico) **Dependencias:** core (partners, currencies), auth (companies) **Tablas Estimadas:** 15 1. accounts (plan de cuentas) 2. journals 3. journal_entries 4. journal_lines 5. invoices 6. invoice_lines 7. invoice_taxes 8. payments 9. payment_invoice (many-to-many) 10. taxes 11. bank_accounts 12. reconciliation_lines (opcional) 13. fiscal_years 14. account_types 15. account_templates **Características Requeridas:** - Validación: SUM(debit) = SUM(credit) - Generación automática de asientos desde transacciones - Multi-moneda con conversión automática - Estado immutable (posted journal entries) - Seed data: plan de cuentas México/USA, impuestos estándar **Estimación:** 4-5 días --- ### 3. Schema: inventory (PRIORIDAD MEDIA) **Propósito:** Gestión de inventario **Módulos:** MGN-005 (Inventario Básico) **Dependencias:** core (products, UoMs), auth (companies) **Tablas Estimadas:** 10 1. products 2. product_variants (opcional) 3. warehouses 4. locations 5. stock_quants 6. stock_moves 7. pickings 8. lots 9. serial_numbers 10. valuation_layers **Características Requeridas:** - Actualización automática de stock_quants desde stock_moves - Trazabilidad completa (lotes/series) - Valoración FIFO/LIFO/Average - Ubicaciones jerárquicas - Seed data: UoMs de inventario, tipos de ubicación **Estimación:** 3-4 días --- ### 4. Schema: purchase (PRIORIDAD MEDIA) **Propósito:** Gestión de compras **Módulos:** MGN-006 (Compras Básico) **Dependencias:** core (partners), inventory (products) **Tablas Estimadas:** 8 1. purchase_orders 2. purchase_order_lines 3. purchase_requisitions (opcional) 4. rfqs (Request for Quotation) 5. rfq_lines 6. purchase_agreements (opcional) 7. supplier_pricelists 8. supplier_pricelist_items **Características Requeridas:** - Workflow: draft → confirmed → received → billed - Generación automática de picking al confirmar - 3-way match (PO vs Receipt vs Invoice) - Aprobaciones con umbrales - Seed data: términos de pago estándar **Estimación:** 2-3 días --- ### 5. Schema: sales (PRIORIDAD MEDIA) **Propósito:** Gestión de ventas **Módulos:** MGN-007 (Ventas Básico) **Dependencias:** core (partners), inventory (products) **Tablas Estimadas:** 10 1. sale_orders 2. sale_order_lines 3. quotations 4. quotation_signatures 5. pricelists 6. pricelist_items 7. discounts (opcional) 8. sales_teams 9. down_payments (opcional) 10. sale_order_templates (opcional) **Características Requeridas:** - Workflow: quotation → sale → delivery → invoice - Firma electrónica de cotizaciones - Generación automática de picking al confirmar - Control de cantidades entregadas/facturadas - Seed data: pricelists estándar, términos de venta **Estimación:** 3 días --- ### 6. Schema: analytics (PRIORIDAD MEDIA) **Propósito:** Contabilidad analítica **Módulos:** MGN-008 (Contabilidad Analítica) **Dependencias:** core, financial, purchase, sales **Tablas Estimadas:** 6 1. analytic_accounts 2. analytic_lines 3. analytic_distributions 4. analytic_tags 5. analytic_tag_lines (many-to-many) 6. analytic_plans (opcional) **Características Requeridas:** - Generación automática de líneas desde transacciones - Distribución analítica multi-cuenta (%) - Tags multi-dimensionales - Jerarquía de cuentas analíticas - Integración con projects (1-1) **Estimación:** 2 días --- ### 7. Schema: projects (PRIORIDAD MEDIA) **Propósito:** Gestión de proyectos **Módulos:** MGN-011 (Proyectos Genéricos) **Dependencias:** core (partners), analytics (analytic_accounts) **Tablas Estimadas:** 8 1. projects 2. tasks 3. task_dependencies 4. stages 5. milestones 6. project_tags 7. project_tag_tasks (many-to-many) 8. timesheets (puede ir en HR) **Características Requeridas:** - Integración 1-1 con analytic_accounts - Jerarquía de tareas (parent_id) - Dependencias entre tareas (finish_to_start, etc.) - Kanban stages configurables - Timesheet vinculado a tareas **Estimación:** 2-3 días --- ### 8. Schema: system (PRIORIDAD BAJA) **Propósito:** Mensajería, notificaciones, logs **Módulos:** MGN-012 (Reportes), MGN-014 (Mensajería) **Dependencias:** Todos los schemas (genérico) **Tablas Estimadas:** 10 1. messages (chatter) 2. message_subtypes 3. followers 4. notifications 5. activities 6. activity_types 7. attachments 8. email_templates 9. tracking_values 10. audit_logs **Características Requeridas:** - Chatter genérico (model + res_id) - Notificaciones multi-canal (inbox, email, push) - Tracking automático de cambios - WebSocket para real-time - Storage de attachments (S3 o filesystem) **Estimación:** 3 días --- ## Cronograma Estimado | Schema | Días | Inicio | Fin | |--------|------|--------|-----| | auth | - | 2025-11-24 | ✅ Completado | | core | 3 | TBD | TBD | | financial | 5 | TBD | TBD | | inventory | 4 | TBD | TBD | | purchase | 3 | TBD | TBD | | sales | 3 | TBD | TBD | | analytics | 2 | TBD | TBD | | projects | 3 | TBD | TBD | | system | 3 | TBD | TBD | **Total Estimado:** 26 días de trabajo **Con 1 desarrollador a tiempo parcial:** ~6-8 semanas --- ## Orden de Implementación (Recomendado) ### Sprint 1: Fundamentos (Semana 1-2) 1. ✅ auth (completado) 2. ⏳ core (partners, currencies, UoMs) ### Sprint 2: Transaccionales Core (Semana 3-4) 3. ⏳ financial (contabilidad general) 4. ⏳ inventory (inventario básico) ### Sprint 3: Compras y Ventas (Semana 5-6) 5. ⏳ purchase (compras) 6. ⏳ sales (ventas) ### Sprint 4: Analítica y Proyectos (Semana 7) 7. ⏳ analytics (analítica) 8. ⏳ projects (proyectos) ### Sprint 5: Sistema (Semana 8) 9. ⏳ system (mensajería, notificaciones) --- ## Próximos Pasos Inmediatos 1. **Completar schema `core`:** - Crear DDL completo - Seed data: países (ISO 3166-1), monedas (ISO 4217) - Validar con modelos de dominio 2. **Completar schema `financial`:** - Crear DDL completo - Funciones: validar balance, generar asientos - Seed data: plan de cuentas México 3. **Generar Prisma Schema:** - Convertir DDL a schema.prisma - O usar prisma db pull desde DDL 4. **Crear Migrations:** - Setup Prisma migrations - Crear migration inicial por schema 5. **Testing:** - Scripts de test de integridad referencial - Test de RLS policies - Test de funciones y triggers --- ## Recursos Necesarios ### Desarrollador Backend - Conocimiento PostgreSQL avanzado - Experiencia con Prisma ORM - Conocimiento de patrones ERP ### Herramientas - PostgreSQL 15+ - Prisma CLI - pgAdmin o DBeaver - Git para versionado de DDL ### Referencias - Modelos de dominio (../domain-models/) - ADR-007 (Database Design) - Documentación Odoo (para patrones) --- ## Métricas de Progreso **Completado:** - Schemas: 1/9 (11%) - Tablas: 10/89 (11%) - DDL Lines: ~1000 / ~9000 (11%) **Meta para Fase 2:** - Completar al menos auth + core + financial (33%) - Documentar todos los schemas restantes - Crear plan detallado para implementación --- ## Notas Importantes ### Decisiones de Diseño - UUID para PKs (mejor para distributed systems) - Soft delete obligatorio (deleted_at) - Auditoría obligatoria (created_at, created_by, updated_at, updated_by) - RLS para tenant isolation - JSONB para settings (flexibilidad) ### Convenciones - snake_case para todo - Prefijo de schema en queries - Sufijos estándar (_id, _at, _by) ### Performance - Índices en FKs - Índices en campos de filtro frecuente - Índices parciales (WHERE deleted_at IS NULL) --- **Última Actualización:** 2025-11-24 **Próxima Revisión:** Al completar schema `core`