# Referencia de Base de Datos - ERP Construcción

**Fecha:** 2025-12-09
**Versión:** 1.2
**Proyecto:** ERP Construcción
**Nivel:** 2B.2 (Proyecto Independiente)

---

## RESUMEN

ERP Construcción es un **proyecto independiente** que implementa y adapta patrones del ERP-Core para el dominio de construcción de vivienda. No es una extensión del core, sino un sistema autónomo que:

1. **Implementa** schemas propios basados en patrones del core
2. **Adapta** estructuras de datos al dominio de construcción
3. **Reutiliza** código y patrones donde tiene sentido
4. **Opera independientemente** del ERP-Core

**DDL de Referencia (Core):** `apps/erp-core/database/ddl/`
**DDL Propio:** `database/schemas/`

---

## ARQUITECTURA DEL PROYECTO

```
┌─────────────────────────────────────────────────────────────────┐
│                    ERP CORE (Referencia)                        │
│  Patrones, specs y estructuras reutilizables                    │
│  ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐               │
│  │  auth   │ │  core   │ │inventory│ │ financial│              │
│  │ patrones│ │ patrones│ │ patrones│ │ patrones │              │
│  └─────────┘ └─────────┘ └─────────┘ └─────────┘               │
└─────────────────────────────────────────────────────────────────┘
                              │
                              │ REFERENCIA / FORK
                              ▼
┌─────────────────────────────────────────────────────────────────┐
│              ERP CONSTRUCCIÓN (Proyecto Independiente)          │
│                                                                 │
│  ┌─────────────┐ ┌─────────────┐ ┌─────────────┐               │
│  │construction │ │     hr      │ │    hse      │               │
│  │   24 tbl    │ │   8 tbl     │ │  58 tbl     │               │
│  │ (proyectos) │ │ (empleados) │ │ (seguridad) │               │
│  └─────────────┘ └─────────────┘ └─────────────┘               │
│                                                                 │
│  ┌─────────────┐ ┌─────────────┐ ┌─────────────┐               │
│  │  estimates  │ │  infonavit  │ │ inventory   │               │
│  │   8 tbl     │ │   8 tbl     │ │   4 tbl     │               │
│  │(estimación) │ │   (ruv)     │ │   (ext)     │               │
│  └─────────────┘ └─────────────┘ └─────────────┘               │
│                                                                 │
│  ┌─────────────┐                                                │
│  │  purchase   │   Schemas propios: 7                           │
│  │   5 tbl     │   Tablas propias: 110                          │
│  │   (ext)     │   Opera de forma INDEPENDIENTE                 │
│  └─────────────┘                                                │
└─────────────────────────────────────────────────────────────────┘
```

---

## PATRONES REUTILIZADOS DEL CORE

Los siguientes patrones del ERP-Core fueron **adaptados e implementados** en este proyecto:

| Patrón del Core | Adaptación en Construcción |
|-----------------|---------------------------|
| `auth.*` | Implementación propia de autenticación multi-tenant |
| `core.partners` | Contratistas, proveedores, clientes |
| `inventory.*` | Materiales de construcción, almacenes de obra |
| `projects.*` | Obras, fraccionamientos, etapas |
| `hr.*` | Personal de obra, cuadrillas, asistencias |

**Nota:** Este proyecto NO depende del ERP-Core para ejecutarse. Implementa sus propios schemas basados en los patrones de referencia.

---

## SCHEMAS ESPECÍFICOS DE CONSTRUCCIÓN

### 1. Schema `construction` (24 tablas)

**Propósito:** Gestión de proyectos de obra, estructura y avances

```sql
-- DDL: 01-construction-schema-ddl.sql
-- Estructura de proyecto (8 tablas):
--   fraccionamientos, etapas, manzanas, lotes, torres, niveles, departamentos, prototipos
-- Presupuestos y Conceptos (3 tablas):
--   conceptos, presupuestos, presupuesto_partidas
-- Programación y Avances (5 tablas):
--   programa_obra, programa_actividades, avances_obra, fotos_avance, bitacora_obra
-- Calidad (5 tablas):
--   checklists, checklist_items, inspecciones, inspeccion_resultados, tickets_postventa
-- Contratos (3 tablas):
--   subcontratistas, contratos, contrato_partidas
```

### 2. Schema `hr` extendido (8 tablas)

**Propósito:** Gestión de personal de obra, asistencias, destajo

```sql
-- DDL: 02-hr-schema-ddl.sql
-- Extiende: hr schema del core

hr.employee_construction    -- Extensión empleados construcción
hr.asistencias             -- Registro con GPS/biométrico
hr.asistencia_biometrico   -- Datos biométricos
hr.geocercas               -- Validación GPS (PostGIS)
hr.destajo                 -- Trabajo a destajo
hr.destajo_detalle         -- Mediciones destajo
hr.cuadrillas              -- Equipos de trabajo
hr.cuadrilla_miembros      -- Miembros cuadrillas
```

### 3. Schema `hse` (58 tablas)

**Propósito:** Health, Safety & Environment

```sql
-- DDL: 03-hse-schema-ddl.sql
-- Implementa 8 requerimientos funcionales (RF-MAA017-001 a 008)

Grupos de tablas:
- Gestión de Incidentes (5 tablas)
- Control de Capacitaciones (6 tablas)
- Inspecciones de Seguridad (7 tablas)
- Control de EPP (7 tablas)
- Cumplimiento STPS (11 tablas)
- Gestión Ambiental (9 tablas)
- Permisos de Trabajo (8 tablas)
- Indicadores HSE (7 tablas)
```

### 4. Schema `estimates` (8 tablas)

**Propósito:** Estimaciones, anticipos, retenciones

```sql
-- DDL: 04-estimates-schema-ddl.sql
-- Módulo: MAI-008 (Estimaciones y Facturación)

estimates.estimaciones         -- Estimaciones de obra
estimates.estimacion_conceptos -- Conceptos estimados
estimates.generadores          -- Números generadores
estimates.anticipos            -- Anticipos de obra
estimates.amortizaciones       -- Amortización de anticipos
estimates.retenciones          -- Retenciones (garantía, IMSS, ISR)
estimates.fondo_garantia       -- Fondo de garantía
estimates.estimacion_workflow  -- Workflow de aprobación
```

### 5. Schema `infonavit` (8 tablas)

**Propósito:** Integración INFONAVIT, RUV, derechohabientes

```sql
-- DDL: 05-infonavit-schema-ddl.sql
-- Módulos: MAI-010/011 (CRM Derechohabientes, Integración INFONAVIT)

infonavit.registro_infonavit   -- Registro RUV
infonavit.oferta_vivienda      -- Oferta registrada
infonavit.derechohabientes     -- Derechohabientes
infonavit.asignacion_vivienda  -- Asignaciones
infonavit.actas                -- Actas de entrega
infonavit.acta_viviendas       -- Viviendas en acta
infonavit.reportes_infonavit   -- Reportes RUV
infonavit.historico_puntos     -- Histórico puntos ecológicos
```

### 6. Schema `inventory` extensión (4 tablas)

**Propósito:** Almacenes de proyecto, requisiciones de obra

```sql
-- DDL: 06-inventory-ext-schema-ddl.sql
-- Extiende: inventory schema del core

inventory.almacenes_proyecto   -- Almacenes por obra
inventory.requisiciones_obra   -- Requisiciones desde obra
inventory.requisicion_lineas   -- Líneas de requisición
inventory.consumos_obra        -- Consumos por lote/concepto
```

### 7. Schema `purchase` extensión (5 tablas)

**Propósito:** Órdenes de compra construcción, comparativos

```sql
-- DDL: 07-purchase-ext-schema-ddl.sql
-- Extiende: purchase schema del core

purchase.purchase_order_construction  -- Extensión OC
purchase.supplier_construction        -- Extensión proveedores
purchase.comparativo_cotizaciones     -- Cuadro comparativo
purchase.comparativo_proveedores      -- Proveedores en comparativo
purchase.comparativo_productos        -- Productos cotizados
```

---

## ORDEN DE EJECUCIÓN DDL

Para recrear la base de datos completa:

```bash
# PASO 1: Cargar ERP Core (base)
cd apps/erp-core/database
./scripts/reset-database.sh --force

# PASO 2: Cargar extensiones de Construcción (orden importante)
cd apps/verticales/construccion/database
psql $DATABASE_URL -f schemas/01-construction-schema-ddl.sql  # 24 tablas
psql $DATABASE_URL -f schemas/02-hr-schema-ddl.sql            # 8 tablas
psql $DATABASE_URL -f schemas/03-hse-schema-ddl.sql           # 58 tablas
psql $DATABASE_URL -f schemas/04-estimates-schema-ddl.sql     # 8 tablas
psql $DATABASE_URL -f schemas/05-infonavit-schema-ddl.sql     # 8 tablas
psql $DATABASE_URL -f schemas/06-inventory-ext-schema-ddl.sql # 4 tablas
psql $DATABASE_URL -f schemas/07-purchase-ext-schema-ddl.sql  # 5 tablas
```

**Nota:** Los archivos 06 y 07 dependen de que 01-construction esté instalado.

---

## DEPENDENCIAS CRUZADAS

### Tablas de Construcción que dependen del Core

| Tabla Construcción | Depende de (Core) |
|--------------------|-------------------|
| `construccion.proyectos` | `core.partners` (cliente) |
| `construccion.proyectos` | `auth.users` (created_by) |
| `construccion.fraccionamientos` | `construccion.proyectos` |
| `hr.employees` | `auth.users` |
| `hr.employee_fraccionamientos` | `construccion.fraccionamientos` |
| `hse.incidentes` | `construccion.fraccionamientos` |
| `hse.incidente_involucrados` | `hr.employees` |
| `hse.*` | `auth.users` (auditoria) |

---

## SPECS DEL CORE IMPLEMENTADAS

| Spec Core | Aplicación en Construcción | Estado |
|-----------|---------------------------|--------|
| SPEC-VALORACION-INVENTARIO | Materiales de construcción | ✅ DDL LISTO |
| SPEC-TRAZABILIDAD-LOTES-SERIES | Lotes de concreto, acero | ✅ DDL LISTO |
| SPEC-PROYECTOS-DEPENDENCIAS-BURNDOWN | Partidas de obra | PENDIENTE |
| SPEC-MAIL-THREAD-TRACKING | Historial de presupuestos | PENDIENTE |
| SPEC-WIZARD-TRANSIENT-MODEL | Asistentes de estimaciones | PENDIENTE |

### Correcciones de DDL Core (2025-12-08)

El DDL del ERP-Core fue corregido para resolver FK inválidas:

1. **stock_valuation_layers**: Campos `journal_entry_id` y `journal_entry_line_id` (antes `account_move_*`)
2. **stock_move_consume_rel**: Nueva tabla de trazabilidad (antes `move_line_consume_rel`)
3. **category_stock_accounts**: FK corregida a `core.product_categories`
4. **product_categories**: ALTERs ahora apuntan a schema `core`

Estas correcciones permiten que el DDL de inventory se ejecute correctamente.

### Correcciones de DDL Construcción (2025-12-08)

El DDL de la vertical Construcción fue corregido para alinearse con ERP-Core:

| Archivo | Correcciones | Detalle |
|---------|--------------|---------|
| `01-construction-schema-ddl.sql` | 4 FK | `core.tenants` → `auth.tenants`, `core.users` → `auth.users` |
| `02-hr-schema-ddl.sql` | 4 FK | Referencias corregidas a `auth.*` |
| `03-hse-schema-ddl.sql` | 42 FK | Todas las referencias corregidas |
| **Total** | **50 FK** | Ahora usa `auth.tenants` y `auth.users` correctamente |

**Verificaciones de prerequisitos actualizadas:**
- Los DDL ahora validan que `auth.tenants` y `auth.users` existan antes de crear tablas
- ERP-Core debe estar instalado antes de ejecutar DDL de Construcción

---

## MAPEO DE NOMENCLATURA

| Core | Construcción |
|------|--------------|
| `core.partners` | Contratistas, proveedores |
| `inventory.products` | Materiales de construcción |
| `inventory.locations` | Almacenes de obra |
| `projects.projects` | Base para `construccion.proyectos` |
| `hr.employees` | Personal de obra |
| `purchase.orders` | Órdenes de compra de materiales |

---

## VALIDACIÓN DE HERENCIA

### Verificar schemas heredados

```sql
-- Verificar que existen los schemas del core
SELECT schema_name
FROM information_schema.schemata
WHERE schema_name IN ('auth', 'core', 'financial', 'inventory',
                      'purchase', 'projects', 'hr', 'analytics', 'system');
```

### Verificar extensiones de construcción

```sql
-- Verificar schemas específicos
SELECT schema_name
FROM information_schema.schemata
WHERE schema_name IN ('construccion', 'hse');

-- Contar tablas por schema
SELECT schemaname, COUNT(*) as tables
FROM pg_tables
WHERE schemaname IN ('construccion', 'hr', 'hse')
GROUP BY schemaname;
```

---

## SPECS DEL CORE APLICABLES

Según el [MAPEO-SPECS-VERTICALES.md](../../../../erp-core/docs/04-modelado/MAPEO-SPECS-VERTICALES.md):

| Categoría | Total | Obligatorias | Opcionales | No Aplican |
|-----------|-------|--------------|------------|------------|
| **Construcción** | 30 | 22 | 4 | 4 |

### SPECS Críticas para Construcción

| SPEC | Aplicación | Estado DDL |
|------|------------|------------|
| SPEC-VALORACION-INVENTARIO | Costeo de materiales | ✅ DDL LISTO |
| SPEC-TRAZABILIDAD-LOTES-SERIES | Lotes de concreto, acero | ✅ DDL LISTO |
| SPEC-PROYECTOS-DEPENDENCIAS-BURNDOWN | Partidas de obra | PENDIENTE |
| SPEC-PRESUPUESTOS-REVISIONES | Control presupuestal | PENDIENTE |
| SPEC-RRHH-EVALUACIONES-SKILLS | Personal de obra | PENDIENTE |

### SPECS No Aplicables

- `SPEC-INTEGRACION-CALENDAR` - Sin necesidad de calendario externo
- `SPEC-OAUTH2-SOCIAL-LOGIN` - Opcional, no crítico
- `SPEC-INVENTARIOS-CICLICOS` - Opcional para construcción
- `SPEC-CONSOLIDACION-FINANCIERA` - Opcional para construcción

---

## REFERENCIAS

- ERP Core DDL: `apps/erp-core/database/ddl/`
- ERP Core README: `apps/erp-core/database/README.md`
- MAPEO-SPECS-VERTICALES: `apps/erp-core/docs/04-modelado/MAPEO-SPECS-VERTICALES.md`
- DATABASE_INVENTORY.yml: `orchestration/inventarios/`

---

**Documento de herencia oficial**
**Última actualización:** 2025-12-09
**Total schemas:** 7 | **Total tablas:** 110
