Skip to content

Esquema de Base de Datos

Estructura de la base de datos en Supabase (PostgreSQL) para el sistema ETL de datos energéticos.

Diagrama Relacional

                              ┌─────────────────┐
                              │   etl_sources   │
                              └────────┬────────┘
                                       │ 1:N
    ┌──────────────┬───────────────────┼───────────────────┬──────────────────┐
    │              │                   │                   │                  │
    ▼              ▼                   ▼                   ▼                  ▼
┌─────────┐  ┌───────────────┐  ┌─────────────┐  ┌────────────┐  ┌─────────────────┐
│fact_    │  │fact_demanda_  │  │fact_energia_│  │fact_poten- │  │fact_capacidad_  │
│regalias │  │ gas_natural   │  │  electrica  │  │cia_maxima  │  │   instalada     │
│ (ANH)   │  │   (UPME)      │  │   (UPME)    │  │  (UPME)    │  │     (UPME)      │
└────┬────┘  └───────┬───────┘  └──────┬──────┘  └─────┬──────┘  └────────┬────────┘
     │               │                 │               │                  │
     └───────────────┴────────┬────────┴───────────────┴──────────────────┘
                              ▼
                       ┌──────────────┐
                       │  dim_tiempo  │
                       └──────────────┘

┌──────────────────┐    ┌───────────────┐    ┌───────────────┐
│dim_areas_electric│    │  dim_campos   │───►│dim_territorios│
└──────────────────┘    └───────────────┘    └───────────────┘

    ┌────────────────┐    ┌──────────────────────┐
    │dim_resoluciones│    │fact_participacion_   │
    └────────────────┘    │       campo          │
                          └──────────────────────┘

Tablas de Configuración ETL

etl_sources

Configuración maestra de cada fuente de datos.

Columna Tipo Descripción
id text PK. Identificador único.
name text Nombre legible.
active boolean Activar/desactivar fuente.
type text Tipo: api, scrape, complex_scraper.
schedule_cron text Expresión CRON.
config jsonb Configuración del checker.
storage_config jsonb Configuración de almacenamiento.

source_check_history

Bitácora de ejecuciones del proceso check-updates.

Columna Tipo Descripción
id bigint PK.
source_id text FKetl_sources.id.
status enum no_change, changed, failed.
checksum text Hash MD5 del contenido.
metadata jsonb Datos de la ejecución.

Tablas de Dimensiones

dim_tiempo

Dimensión temporal compartida. Granularidad mensual.

Columna Tipo Descripción
id serial PK.
fecha date Fecha del período (UNIQUE).
anio smallint Año.
mes smallint Mes (1-12).
trimestre smallint GENERATED. (1-4).
semestre smallint GENERATED. (1-2).
nombre_mes text Nombre en español.
es_proyeccion boolean Dato proyectado vs histórico.

dim_territorios

Dimensión geográfica con departamentos y municipios.

Columna Tipo Descripción
id serial PK.
departamento text Nombre del departamento.
municipio text Nombre del municipio.
latitud numeric(10,7) Coordenada.
longitud numeric(10,7) Coordenada.
divipola text Código DANE DIVIPOLA.

dim_campos

Dimensión de campos petroleros/gasíferos.

Columna Tipo Descripción
id serial PK.
nombre_campo text Nombre del campo (UNIQUE).
contrato text Contrato asociado.
operador text Empresa operadora.
asociados text[] Empresas asociadas.
participacion_estado numeric(5,2) % participación estatal.
territorio_id int FKdim_territorios.id.
activo boolean Estado del campo.

dim_areas_electricas

Catálogo de ámbitos/áreas para proyecciones eléctricas.

Columna Tipo Descripción
id serial PK.
codigo text Código único.
nombre text Nombre del área.
categoria text nacional, area_sin, combinado, gd, proyecto.
descripcion text Descripción.

dim_resoluciones

Resoluciones MinMinas con periodos de vigencia.

Columna Tipo Descripción
id serial PK.
numero_resolucion text Número de resolución (UNIQUE).
fecha_resolucion date Fecha de emisión.
periodo_desde date Inicio de vigencia.
periodo_hasta date Fin de vigencia.
url_pdf text Enlace al PDF.
url_soporte_magnetico text Enlace a anexos.

Tablas de Referencia

ref_unidades

Factores de conversión entre unidades de medida.

Código Nombre Factor a GBTUD Descripción
GBTUD Giga BTU por Día 1.0 Unidad base demanda
KPCD Kilo Pies Cúbicos por Día 0.001 1 KPCD ≈ 0.001 GBTUD
MPCD Millones Pies Cúbicos por Día 1.0 1 MPCD ≈ 1 GBTUD
BLS Barriles NULL Unidad de líquidos
KPC Kilo Pies Cúbicos 0.001 Volumen gas

Tablas de Hechos

fact_regalias

Fuente: API Socrata ANH (j7js-yk74)

Columna Tipo Descripción
id bigserial PK.
tiempo_id int FKdim_tiempo.id.
campo_id int FKdim_campos.id.
tipo_produccion text Tipo (QB/P/B/I/QI).
tipo_hidrocarburo char(1) G=Gas, O=Petróleo.
precio_usd numeric(12,4) Precio USD.
porcentaje_regalia numeric(5,2) % gravable.
produccion_gravable numeric(18,4) Volumen producción.
volumen_regalia numeric(18,4) Volumen regalías.
valor_regalias_cop numeric(18,2) Valor en COP.

fact_demanda_gas_natural

Fuente: UPME - Proyección de Demanda Gas Natural

Columna Tipo Descripción
id bigserial PK.
tiempo_id int FKdim_tiempo.id.
periodicidad text mensual, anual.
categoria text COMPRESORES, INDUSTRIAL, PETROLERO, PETROQUIMICO, RESIDENCIAL, TERCIARIO, TERMOELECTRICO, GNC_TRANSPORTE, GNL_TRANSPORTE, AGREGADO.
region text Región geográfica.
nodo text Nodo específico.
escenario text ESC_BAJO, ESC_MEDIO, ESC_ALTO.
valor numeric(18,6) Valor en GBTUD.
revision text Etiqueta de revisión.

fact_energia_electrica

Fuente: UPME - Proyección de Demanda Energía Eléctrica

Columna Tipo Descripción
id bigserial PK.
tiempo_id int FKdim_tiempo.id.
periodicidad text mensual, anual.
unidad text GWh-mes, GWh-año.
area_id int FKdim_areas_electricas.id.
descriptor text Descriptor adicional.
escenario text ESC_BAJO, ESC_MEDIO, ESC_ALTO, IC_SUP_95, IC_INF_95, IC_SUP_68, IC_INF_68.
revision text Etiqueta de revisión.
valor numeric(18,6) Valor en GWh.

fact_potencia_maxima

Fuente: UPME - Proyección de Potencia Máxima

Columna Tipo Descripción
id bigserial PK.
tiempo_id int FKdim_tiempo.id.
periodicidad text mensual, anual.
unidad text MW-mes, MW-año.
area_id int FKdim_areas_electricas.id.
descriptor text Descriptor adicional.
escenario text ESC_BAJO, ESC_MEDIO, ESC_ALTO, IC_SUP_95, IC_INF_95, IC_SUP_68, IC_INF_68.
revision text Etiqueta de revisión.
valor numeric(18,6) Valor en MW.

fact_capacidad_instalada

Fuente: UPME - Proyección de Capacidad Instalada GD

Columna Tipo Descripción
id bigserial PK.
tiempo_id int FKdim_tiempo.id.
periodicidad text anual (solo anual).
unidad text MW-año.
area_id int FKdim_areas_electricas.id.
descriptor text Descriptor adicional.
escenario text ESC_BAJO, ESC_MEDIO, ESC_ALTO, IC_SUP_95, IC_INF_95, IC_SUP_68, IC_INF_68.
revision text Etiqueta de revisión.
valor numeric(18,6) Valor en MW.

fact_oferta_gas

Fuente: MinMinas - Declaración de Producción

Columna Tipo Descripción
id bigserial PK.
tiempo_id int FKdim_tiempo.id.
campo_id int FKdim_campos.id.
resolucion_id int FKdim_resoluciones.id.
tipo_produccion text PTDV, PC_CONTRATOS, PC_EXPORTACIONES, PP, GAS_OPERACION, CIDV.
operador text Operador.
es_operador_campo boolean ¿Es operador principal?
es_participacion_estado boolean ¿Es parte del Estado?
valor_gbtud numeric(18,6) Valor normalizado.
poder_calorifico_btu_pc numeric(12,4) BTU/PC del campo.

fact_participacion_campo

Fuente: MinMinas - Participación por resolución

Columna Tipo Descripción
id bigserial PK.
campo_id int FKdim_campos.id.
resolucion_id int FKdim_resoluciones.id.
periodo_desde date Inicio del periodo.
periodo_hasta date Fin del periodo.
asociado text Empresa asociada.
participacion_pct numeric(5,2) % participación.
estado_pct numeric(5,2) % Estado.

Tipos Enumerados

  • source_update_method: 'api', 'scraping', 'html', 'archivo', 'complex_scraper'
  • source_check_status: 'no_change', 'changed', 'failed'

Script de Migración

Ver: init_db.sql