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