# Referencia de Base de Datos - ERP Construcción

**Fecha:** 2025-12-08
**Versión:** 1.1
**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      │               │
│  │   2 tbl     │ │   3 tbl     │ │  28 tbl     │               │
│  │ (proyectos) │ │ (empleados) │ │ (seguridad) │               │
│  └─────────────┘ └─────────────┘ └─────────────┘               │
│                                                                 │
│  Schemas propios: 3 | Tablas propias: 33                        │
│  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 `construccion` (2 tablas)

**Propósito:** Gestión de proyectos de obra y fraccionamientos

```sql
-- Extiende: projects schema del core
-- Relaciones:
--   proyectos -> core.partners (cliente)
--   fraccionamientos -> proyectos
--   fraccionamientos usa PostGIS para ubicación

construccion.proyectos
construccion.fraccionamientos
```

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

**Propósito:** Gestión de personal de obra

```sql
-- Extiende: hr schema del core
-- Adiciona campos específicos de construcción:
--   CURP, NSS, nivel_riesgo, capacitaciones

hr.employees (extendido)
hr.puestos
hr.employee_fraccionamientos
```

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

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

```sql
-- Nuevo schema específico de construcción
-- 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 (10 tablas)
- Gestión Ambiental (8 tablas)
- Permisos de Trabajo (8 tablas)
- Indicadores HSE (7 tablas)
```

---

## 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
cd apps/verticales/construccion/database
psql $DATABASE_URL -f schemas/01-construction-schema-ddl.sql
psql $DATABASE_URL -f schemas/02-hr-schema-ddl.sql
psql $DATABASE_URL -f schemas/03-hse-schema-ddl.sql
```

---

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