419 lines
10 KiB
Markdown
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`
|