# Herencia de Base de Datos - ERP Core -> Construcción

**Fecha:** 2025-12-08
**Versión:** 1.0
**Vertical:** Construcción
**Nivel:** 2B.2

---

## RESUMEN

La vertical de Construcción hereda los schemas base del ERP Core y extiende con schemas específicos del dominio.

**Ubicación DDL Core:** `apps/erp-core/database/ddl/`

---

## ARQUITECTURA DE HERENCIA

```
┌─────────────────────────────────────────────────────────────────┐
│                        ERP CORE (Base)                          │
│  ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐   │
│  │  auth   │ │  core   │ │financial│ │inventory│ │ purchase │   │
│  │ 26 tbl  │ │ 12 tbl  │ │ 15 tbl  │ │ 15 tbl  │ │  8 tbl   │   │
│  └─────────┘ └─────────┘ └─────────┘ └─────────┘ └─────────┘   │
│  ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐   │
│  │ projects│ │ hr      │ │ sales   │ │analytics│ │ system   │   │
│  │  5 tbl  │ │  6 tbl  │ │  6 tbl  │ │  5 tbl  │ │ 10 tbl   │   │
│  └─────────┘ └─────────┘ └─────────┘ └─────────┘ └─────────┘   │
│                        TOTAL: 124 tablas base                   │
└─────────────────────────────────────────────────────────────────┘
                              │
                              │ HEREDA
                              ▼
┌─────────────────────────────────────────────────────────────────┐
│                 CONSTRUCCIÓN (Extensiones)                      │
│  ┌─────────────┐ ┌─────────────┐ ┌─────────────┐               │
│  │construccion │ │     hr      │ │    hse      │               │
│  │   2 tbl     │ │   3 tbl     │ │  28 tbl     │               │
│  │ (proyectos) │ │ (empleados) │ │ (seguridad) │               │
│  └─────────────┘ └─────────────┘ └─────────────┘               │
│                   EXTENSIONES: 33 tablas                        │
└─────────────────────────────────────────────────────────────────┘
```

---

## SCHEMAS HEREDADOS DEL CORE

| Schema | Tablas | Uso en Construcción |
|--------|--------|---------------------|
| `auth` | 26 | Autenticación, usuarios, roles, permisos, MFA, OAuth |
| `core` | 12 | Partners (contratistas), catálogos, monedas, UoM |
| `financial` | 15 | Cuentas contables, pólizas, facturas de proveedores |
| `inventory` | 15 | Materiales de construcción, almacenes de obra |
| `purchase` | 8 | Órdenes de compra de materiales |
| `projects` | 5 | Base para proyectos de construcción |
| `hr` | 6 | Base para empleados (extendido con hr específico) |
| `analytics` | 5 | Centros de costo por proyecto |
| `system` | 10 | Mensajes, notificaciones, actividades |

**Total heredado:** 102 tablas

---

## 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 | PENDIENTE |
| SPEC-TRAZABILIDAD-LOTES-SERIES | Lotes de concreto, acero | PENDIENTE |
| SPEC-PROYECTOS-DEPENDENCIAS-BURNDOWN | Partidas de obra | PENDIENTE |
| SPEC-MAIL-THREAD-TRACKING | Historial de presupuestos | PENDIENTE |
| SPEC-WIZARD-TRANSIENT-MODEL | Asistentes de estimaciones | PENDIENTE |

---

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

---

## REFERENCIAS

- ERP Core DDL: `apps/erp-core/database/ddl/`
- ERP Core README: `apps/erp-core/database/README.md`
- HERENCIA-SPECS-ERP-CORE.md: `orchestration/00-guidelines/`
- DATABASE_INVENTORY.yml: `orchestration/inventarios/`

---

**Documento de herencia oficial**
**Última actualización:** 2025-12-08
