erp-core/docs/04-modelado/database-design/database-roadmap.md

419 lines
10 KiB
Markdown

# 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`