Deja de pelear con planillas, enlaces rotos y esquemas incompatibles.
Datos públicos de Chile curados, normalizados, validados y listos para Python, SQL, Excel y pipelines.
La última milla entre “el dato existe” y “el dato ya sirve”.
Explorar datos en el navegador · Instalar · Ver capas · Auditar calidad
Si trabajas con datos de Chile, probablemente ya conoces la fricción: archivos Excel con formatos cambiantes, códigos territoriales que pierden ceros, fuentes dispersas, APIs inconsistentes y cruces que fallan por diferencias mínimas de nombres.
chile-hub convierte esa última milla en infraestructura reutilizable.
| Necesitas | chile-hub te entrega |
|---|---|
| Cruzar comunas, regiones o distritos sin limpiar claves a mano | Códigos CUT normalizados y contratos de esquema |
| Analizar datos oficiales desde Python o SQL | Parquet + Polars + DuckDB + SQLite |
| Llevar datos a Excel o automatizaciones | JSON y workbook multipestaña listos para consumo |
| Saber de dónde salió un dato y cuándo se obtuvo | Procedencia, frescura, licencia y estado por capa |
| Detectar cambios silenciosos en las fuentes | Validaciones, drift detection y pipeline fail-loud |
Tip
¿Solo quieres probarlo? Abre el explorador SQL y consulta los Parquet directamente en tu navegador con DuckDB-WASM. Sin instalar nada.
Un artefacto, no una síntesis. Cada cifra viene de una corrida reproducible contra la fuente oficial, con hash, fecha y advertencias. Lo que no se puede verificar, no se publica.
pip install chile-hubfrom chile_hub import ChileHub
hub = ChileHub()
comunas = hub.load_polars("comunas") # 346 comunas, códigos CUT como texto
censo = hub.load_polars("censo_comunal") # población censada por comuna
# Cruce territorial garantizado: la clave es el CUT, nunca un int
df = (
comunas.join(censo, on="codigo_comuna")
.select("codigo_comuna", "nombre_comuna", "nombre_region", "poblacion_censada")
.sort("poblacion_censada", descending=True)
.head(5)
)
print(df)Resultado real (Censo 2024):
shape: (5, 4)
┌───────────────┬───────────────┬─────────────────────────────────┬───────────────────┐
│ codigo_comuna ┆ nombre_comuna ┆ nombre_region ┆ poblacion_censada │
│ --- ┆ --- ┆ --- ┆ --- │
│ str ┆ str ┆ str ┆ i64 │
╞═══════════════╪═══════════════╪═════════════════════════════════╪═══════════════════╡
│ 13201 ┆ Puente Alto ┆ Región Metropolitana de Santia… ┆ 568086 │
│ 13119 ┆ Maipú ┆ Región Metropolitana de Santia… ┆ 503635 │
│ 13101 ┆ Santiago ┆ Región Metropolitana de Santia… ┆ 438856 │
│ 02101 ┆ Antofagasta ┆ Región de Antofagasta ┆ 401096 │
│ 13110 ┆ La Florida ┆ Región Metropolitana de Santia… ┆ 374836 │
└───────────────┴───────────────┴─────────────────────────────────┴───────────────────┘
En el sitio puedes consultar los mismos Parquet con SQL en el navegador (motor DuckDB-WASM, sin instalar nada):
La primera ejecución descarga el bundle validado desde GitHub Releases, verifica su
integridad SHA256 y lo deja en cache local; a partir de ahí todo corre contra el cache.
La comprobación semanal de novedades no envía datos de uso y se desactiva con
CHILE_HUB_NO_UPDATE_CHECK=1 (CHILE_HUB_LANG=es|en elige el idioma del aviso).
chile-hub cache update # Forzar descarga del bundle más reciente
chile-hub cache status # Ubicación y estado del cache local
chile-hub cache clear # Liberar espacioVariante pipeline:
pip install chile-hub[pipeline]agrega DuckDB, Pandas, XlsxWriter y curl_cffi para ejecutar el pipeline completo de extracción y build. La instalación mínima solo incluye Polars, PyArrow, requests y platformdirs — suficiente para consumir datos.
Note
chile-hub no busca "tener todos los datos de Chile". Busca reducir drásticamente el costo técnico de encontrar, limpiar, validar, cruzar y consumir datasets geográficos, demográficos, electorales y económicos críticos de Chile.
Tampoco es un portal ni una fuente oficial: trabaja aguas abajo de
datos.gob.cl y de las instituciones que publican cada dato,
y siempre enlaza a la fuente oficial. Es un proyecto independiente, sin afiliación con
esas instituciones. Misión y principios: docs/product-spec.md.
En la práctica, responde preguntas como:
- ¿Cómo cruzo mi base de clientes, escuelas o centros de salud con comunas oficiales sin perder ceros en los códigos?
- ¿Qué comunas concentran población censada, establecimientos públicos o indicadores urbanos?
- ¿Cómo llevo datos oficiales a Polars, DuckDB, SQLite, Excel o CI sin depender de enlaces cambiantes?
Versionado: Para entornos productivos, fija la versión exacta en
requirements.txt(revisa el badge de PyPI al inicio de este README para la versión más reciente):chile-hub==1.55.4El bundle de datos se publica con cada release. La API del módulo
ChileHubsigue versionado semántico: cambios de interfaz pública solo en major releases.
Cada decisión de ingeniería de este proyecto está diseñada para que no tengas que confiar ciegamente: los datos vienen con la evidencia que los respalda.
Trabajar con datos públicos chilenos suele implicar los mismos obstáculos:
| Sin chile-hub | Con chile-hub |
|---|---|
| Enlaces rotos y APIs inconsistentes | Pipeline automatizado con fallbacks y verificación de integridad |
| Planillas Excel deformes con celdas combinadas | Parquet, DuckDB y JSON listos para producción |
Códigos CUT que pierden ceros al leerse como int |
CUT garantizados como VARCHAR de largo fijo ("01101") |
| Nombres de comunas imposibles de cruzar (Ñuñoa vs Nunoa) | Columna nombre_comuna_clean normalizada para cruces exactos |
| Cero trazabilidad sobre origen y vigencia del dato | Metadatos con fuente, fecha de extracción, licencia y modo |
| Pilar | Descripción | Artefacto auditable |
|---|---|---|
| Procedencia documentada | Cada dataset declara su fuente oficial exacta con URL directa al organismo público emisor (BCN, INE, MINEDUC, BCCh, MINSAL, datos.gob.cl). | provenance_report.md — fuente, modo y timestamp por capa |
| Auditoría legal explícita | Licencia, atribución requerida y permiso de redistribución verificados dataset por dataset — reporte regenerado en cada build en redistribution_report.md. |
redistribution_report.md + AGENTS.md §6 |
| Pipeline fail-loud | Si una validación falla, el pipeline aborta — no publica datos corruptos, no emite advertencias silenciosas. | ADR-001 — fail-loud como decisión de arquitectura |
| Contratos de esquema | 26 contratos JSON Schema (contracts/datasets/) definen columnas esperadas, tipos, claves primarias y cobertura. Se validan en cada build automáticamente. |
ADR-005 + contracts/datasets/*.json |
| Salud transparente | Dashboard público con severidad, frescura, cobertura, drift y degradación por dataset — regenerado en cada build en hub_health.md. |
hub_health.md — estado completo actualizado en cada build |
| Calidad medida | Puntuación compuesta A-F por dataset (validación, contrato, madurez de fuente, frescura, cobertura y política de reúso); scorecard completo en dataset_quality.md. |
dataset_quality.md — scorecard completo |
Cada pilar se audita automáticamente en cada ejecución del pipeline. Los reportes se regeneran en cada build — no son documentos estáticos mantenidos a mano. Para auditar el estado exacto de cualquier capa:
chile-hub provenance # fuente, modo y timestamp por dataset
chile-hub health # severidad, frescura, drift y coberturaEl mismo estado se publica en el sitio, con historial de builds y detalle por capa:
- 1495 tests (
pytest --collect-only) que validan extracción, contratos e integridad de datos.
- 25 ADRs (
docs/adr/) que documentan cada decisión de arquitectura con su contexto, consecuencias y tradeoffs — no solo el "qué", sino el "por qué".
- Drift monitoreado: todos los datasets bajo vigilancia de deriva de esquema; cualquier
cambio en la fuente se detecta y registra (
drift_report.md). - Trazabilidad completa: cada build registra timestamp, versión de extractor y
snapshot de entrada en
provenance_report.md.
Reconstruir la serie completa de empresas exige 13 archivos anuales (≈215 MB) y parsear 1,6 millones de filas. El bundle con las 22 capas, ya normalizadas y validadas, pesa 31 MB. No medimos el ahorro energético: es una propiedad del diseño —el trabajo pesado se hace una vez por build y se comparte—, no una cifra de carbono.
Para una explicación más detallada de la arquitectura y las decisiones de diseño, lee el caso de estudio: cómo está construido chile-hub.
Cómo leer los conteos: 23 capas construibles (
make buildlocal, incl. 1 en carrilcandidate) · 22 publicables (bundle ZIP) · 26 registradas en el catálogo (3 sin datos: geometría, delincuencia —rejected— y autoridades locales). La convención completa vive junto al badge superior y endata/source_registry.json.
Mapa territorial interactivo: las 346 comunas con 7 métricas seleccionables (población, pobreza, permisos, equipamiento, MP2.5) y ficha por comuna.
| # | Capa | Fuente | Licencia | Actualización |
|---|---|---|---|---|
| 1 | Regiones | BCN ArcGIS | CC BY | — |
| 2 | Provincias | BCN ArcGIS | CC BY | — |
| 3 | Comunas | BCN ArcGIS | CC BY | — |
| 4 | Comunas Enriquecidas | BCN + INE | CC BY | — |
| 5 | Indicadores Económicos | BCCh / mindicador.cl | Libre c/cita | Diaria |
| 6 | Censo Comunal 2024 | INE | CC BY 4.0 | Decenal |
| 7 | Censo Hogares y Viviendas | INE | CC BY 4.0 | Decenal |
| 8 | Establecimientos de Salud | MINSAL / datos.gob.cl | CC0 | Mensual |
| 9 | Distritos Electorales | BCN / Ley 20.840 | CC0 | — |
| 10 | Establecimientos Educacionales | MINEDUC | CC BY 3.0 CL | Anual |
| 11 | Finanzas Municipales | SINIM / SUBDERE | Revisión términos | Anual |
| 12 | Resultados Educacionales | MINEDUC | CC BY 3.0 CL | Anual |
| 13 | Indicadores Urbanos SIEDU | INE / SIEDU | Datos abiertos INE | Anual |
| 14 | Perfil Territorial Comunal | chile-hub derivado | Fuentes abiertas | Derivada |
| 15 | Empresas (RES) | Min. Economía / datos.gob.cl | CC-BY 3.0 CL | Mensual |
| 16 | Pobreza Comunal (SAE) | MDS / Observatorio Social | Datos abiertos MDS | Bienal/trienal |
| 17 | Consumo Eléctrico Comunal | CNE / Energía Abierta | CC BY | Anual |
| 18 | Partidos Políticos | Cámara de Diputados | CC BY | Bajo_demanda |
| 19 | Autoridades Electas | Cámara de Diputados + Senado | CC BY | Bajo_demanda |
| 20 | Estadísticas Vitales | INE | CC BY 4.0 | Anual |
| 21 | Permisos de Edificación | MINVU / CEDOC | Uso c/cita | Mensual |
| 22 | Calidad del Aire | MMA / SINCA | Revisión términos | Diaria |
| 23 | Precipitaciones DGAC | DGAC / datos.gob.cl | CC BY / CC0 | Trimestral |
| 24 | Geometría Comunal | BCN ArcGIS | CC BY | — |
| 25 | Delincuencia Comunal | CEAD / SPD | Revisión términos | — |
| 26 | Autoridades Locales | BCN SIIT + Wikipedia | CC BY / CC BY-SA | — |
Métricas por build: el modo de la última extracción, el conteo de registros, la cobertura y la frescura viven en
hub_health.md,dataset_status.jsonydataset_quality.md, regenerados en cada build; los badges resumen frescura y estado:![]()
Para auditar el estado exacto de cada capa:
chile-hub provenanceychile-hub health.
El schema de columnas, tipos y PK de cada capa vive en
contracts/datasets/ y en docs/datasets/;
el volcado completo está en el apéndice.
Cada ejecución del pipeline genera en data/normalized/:
| Tipo | Archivo | Uso |
|---|---|---|
| Base de datos | chile_data.duckdb |
Analítica local de alto rendimiento |
| Base de datos | chile_data.db |
SQLite para aplicaciones embebidas |
| Intercambio | *.parquet por capa |
Polars / Pandas / DuckDB |
| Intercambio | *.json por capa |
Pipelines y automatización |
| Intercambio | chile_data_latest.xlsx |
Excel multipestaña (códigos CUT como texto) |
| Metadatos | artifact_manifest.json, hub_health.*, dataset_status.json, dataset_changelog.json, dataset_catalog.*, provenance_report.*, redistribution_report.* |
Catálogo físico, salud, changelog y auditoría |
| Bundle | chile-hub-publishable-bundle.zip |
Paquete público con verificación SHA256 |
¿Prefieres notebooks? Las cuatro recetas están en
examples/notebooks/ con botón de Colab, o ejecutables
en el explorador SQL del sitio.
1. Últimos indicadores económicos disponibles
from chile_hub import ChileHub
df = ChileHub().load_polars("indicadores")
ultimos = (
df.sort("fecha", descending=True)
.group_by("codigo_indicador")
.first()
.select("codigo_indicador", "fecha", "valor")
.sort("codigo_indicador")
)
print(ultimos)2. Salud y educación por comuna
from chile_hub import ChileHub
hub = ChileHub()
salud = hub.load_polars("establecimientos_salud")
educacion = hub.load_polars("establecimientos_educacionales")
salud_por_comuna = salud.group_by("codigo_comuna").len("establecimientos_salud")
educacion_por_comuna = educacion.group_by("codigo_comuna").len("establecimientos_educacionales")
resumen = (
hub.load_polars("comunas")
.join(salud_por_comuna, on="codigo_comuna", how="left")
.join(educacion_por_comuna, on="codigo_comuna", how="left")
.fill_null(0)
.select(
"codigo_comuna", "nombre_comuna", "establecimientos_salud", "establecimientos_educacionales"
)
)
print(resumen.head())3. SQL directo con DuckDB
-- Top 10 comunas por población censada
SELECT nombre_comuna, poblacion_censada, hombres, mujeres
FROM 'data/normalized/censo_comunal.parquet'
ORDER BY poblacion_censada DESC
LIMIT 10;
-- Cruce territorial: comunas × distritos electorales
SELECT c.nombre_comuna, c.nombre_region,
e.distrito_electoral, e.circunscripcion_senatorial
FROM 'data/normalized/comunas.parquet' c
JOIN 'data/normalized/distritos_electorales.parquet' e
ON c.codigo_comuna = e.codigo_comuna
WHERE c.nombre_region = 'Valparaíso';| API | Uso |
|---|---|
ChileHub() |
Inicializa el helper; descarga y verifica el bundle si no hay cache local. |
ChileHub(data_dir="data/normalized") |
Usa artefactos locales generados por el pipeline. |
hub.list_datasets() |
Lista los nombres canónicos disponibles para load_polars(). |
hub.load_polars("comunas") |
Carga una capa como polars.DataFrame desde Parquet. |
hub.summary() / hub.summary_table() |
Resume modo de fuente, filas, validación, frescura y warnings. |
hub.health() / hub.status() |
Reporta salud operativa para personas y CI/CD. |
hub.redistribution() |
Expone estado legal de reúso y atribución por dataset. |
hub.provenance() |
Muestra fuente, URL, modo de extracción y timestamps. |
chile-hub cache update/status/clear |
Administra el cache local del bundle publicado. |
¿Construyes agentes? El proyecto incluye un servidor MCP con catálogo, consultas y resolución de comunas para que tu agente consuma los datos sin integraciones propias:
docs/mcp.md.
| Comando | Para qué |
|---|---|
chile-hub list |
Lista todos los datasets registrados. |
chile-hub show <capa> |
Schema y metadatos detallados de una capa. |
chile-hub example <capa> --kind duckdb |
Receta de consumo lista para copiar y pegar. |
chile-hub cross <a> <b> |
Cruza dos datasets por clave territorial común. |
chile-hub export <capa> --output archivo |
Exporta un dataset a CSV, JSON o Parquet. |
chile-hub health |
Reporte consolidado de salud del hub. |
chile-hub status |
JSON ultraliviano para CI/CD. |
chile-hub provenance |
URLs de origen y métodos de extracción. |
chile-hub redistribution |
Reporte legal de reúso por capa. |
chile-hub dataset-quality |
Puntuación de calidad A-F por dataset. |
chile-hub --help |
Listado completo y siempre actualizado. |
Referencia completa de CLI
| Comando | Descripción |
|---|---|
chile-hub list |
Lista todos los datasets registrados |
chile-hub version |
Muestra la versión instalada del paquete |
chile-hub cache status |
Muestra ubicación y estado del cache local |
chile-hub cache update |
Descarga y verifica el bundle publicado |
chile-hub cache clear |
Elimina el cache local |
chile-hub show <capa> |
Schema y metadatos detallados de una capa |
chile-hub path <capa> --output parquet |
Ruta física al archivo de una capa |
chile-hub example <capa> --kind duckdb |
Receta de consumo lista para copiar y pegar |
chile-hub overview |
Resumen general del build y estado actual |
chile-hub inventory |
Archivos en data/normalized/ con tamaños y hashes |
chile-hub snapshot |
Snapshot humano y compacto del hub |
chile-hub summary |
Resumen breve de datasets |
chile-hub search <keyword> |
Busca datasets por keyword, fuente o madurez |
chile-hub cross <a> <b> |
Cruza dos datasets por clave territorial común |
chile-hub export <capa> --output archivo |
Exporta un dataset a CSV, JSON o Parquet |
| Comando | Descripción |
|---|---|
chile-hub health |
Reporte consolidado de salud del hub |
chile-hub freshness-audit |
Auditoría de frescura contra el reloj actual |
chile-hub runtime-status |
Salud registrada + vigencia en vivo |
chile-hub top-issue |
Capa con mayor degradación operativa |
chile-hub drift |
Desvíos, fallbacks activos y regresiones |
chile-hub status |
JSON ultraliviano para CI/CD |
chile-hub dataset-status |
Estado detallado machine-readable por dataset |
chile-hub dataset-changelog |
Cambios entre el build actual y el metadata anterior |
chile-hub source-readiness |
Madurez de fuente por dataset |
chile-hub dataset-quality |
Puntuación de calidad A-F por dataset |
chile-hub check-sources |
Verifica conectividad en vivo con las fuentes oficiales |
chile-hub validate <capa> |
Valida un dataset (o un CSV/Parquet propio) contra su schema |
| Comando | Descripción |
|---|---|
chile-hub bundle |
Metadata consolidada en un solo JSON |
chile-hub redistribution |
Reporte legal de reúso por capa |
chile-hub provenance |
URLs de origen y métodos de extracción |
chile-hub verify-package |
Instrucción de verificación de integridad del ZIP |
chile-hub artifacts |
Artefactos publicables del hub |
chile-hub shared-artifacts |
Artefactos compartidos del hub (reportes, manifest) |
chile-hub reports |
Lista los reportes compartidos disponibles |
chile-hub report <nombre> |
Resuelve la metadata de un reporte compartido |
chile-hub packages |
Paquetes publicables del hub |
chile-hub package |
Metadata del package principal del hub |
En entorno de desarrollo, usa
python -m chile_hubopython -m src.chile_hubcomo alternativa al comandochile-hubsi el paquete no está instalado en modo editable.
El pipeline es lineal, determinista y estricto: si una validación falla, el build se cancela antes de publicar datos corruptos.
flowchart TB
classDef extract fill:#e0f2fe,stroke:#0284c7,stroke-width:2px,color:#0f172a;
classDef stage fill:#ecfeff,stroke:#0891b2,stroke-width:2px,color:#0f172a;
classDef build fill:#fef9c3,stroke:#ca8a04,stroke-width:2px,color:#0f172a;
classDef verify fill:#f0fdf4,stroke:#16a34a,stroke-width:2px,color:#0f172a;
classDef test fill:#fae8ff,stroke:#c084fc,stroke-width:2px,color:#0f172a;
classDef publish fill:#ffe4e6,stroke:#f43f5e,stroke-width:2px,color:#0f172a;
subgraph EXTRACT["1. EXTRACT - fuentes oficiales"]
direction TB
X1["Territorio<br/>BCN / SERVEL"]:::extract
X2["Demografía 2024<br/>INE"]:::extract
X3["Servicios públicos<br/>MINSAL / MINEDUC"]:::extract
X4["Economía<br/>BCCh / SINIM / RES"]:::extract
X5["Indicadores urbanos<br/>SIEDU"]:::extract
end
S["data/staging/<br/>CSV + metadata.json"]:::stage
B["2. BUILD<br/>build_dev_db.py"]:::build
N["data/normalized/<br/>artefactos publicables"]:::stage
V["3. VERIFY<br/>verify_pipeline.py"]:::verify
T["4. TEST<br/>pytest"]:::test
L["5. SMOKE + PUBLISH<br/>landing + bundle"]:::publish
X1 --> S
X2 --> S
X3 --> S
X4 --> S
X5 --> S
S --> B --> N --> V --> T --> L
Important
Invariante crítica: El pipeline aborta si la cardinalidad de comunas ≠ 346, si los códigos CUT pierden el formato VARCHAR, o si alguna regla de negocio se rompe. Nunca se publican datos corruptos.
Extractores incluidos en el paso 1
| Dominio | Extractores |
|---|---|
| Territorio | subdere_extractor.py, electoral_extractor.py, geometria_comunal_extractor.py |
| Demografía | censo_extractor.py, censo_hogares_viviendas_extractor.py, pobreza_extractor.py, estadisticas_vitales_extractor.py |
| Servicios públicos | salud_extractor.py, mineduc_establecimientos_extractor.py, mineduc_resultados_extractor.py |
| Economía | bcentral_extractor.py, sinim_finanzas_extractor.py, sinim_finanzas_live_extractor.py, res_extractor.py, consumo_electrico_extractor.py, permisos_edificacion_extractor.py |
| Indicadores urbanos | siedu_extractor.py |
| Medio ambiente | calidad_aire_extractor.py, precipitaciones_dgac_extractor.py |
| Política | partidos_politicos_extractor.py, autoridades_electas_extractor.py, autoridades_locales_extractor.py |
Seguridad (carril candidate) |
cead_delincuencia_live_extractor.py |
Derivado en build_dev_db.py (sin extractor) |
perfil_territorial_comunal |
El mapeo autoritativo entre dataset y extractor vive en
data/dataset_catalog_config.json; esta tabla es solo orientativa. Detalle completo enAGENTS.md §2.
El valor central de chile-hub es que todas las capas se vinculan jerárquicamente mediante los Códigos Únicos Territoriales (CUT) de SUBDERE/INE:
flowchart TB
R["Territorio base<br/><b>REGIONES</b><br/>codigo_region"]
P["<b>PROVINCIAS</b><br/>codigo_provincia + codigo_region"]
C["<b>COMUNAS</b><br/>codigo_comuna + codigo_provincia + codigo_region"]
L["Capas comunales<br/>codigo_comuna<br/>censo · hogares · salud<br/>educación · distritos · enriquecimiento"]
R --> P --> C --> L
| Grupo | Clave principal | Capas |
|---|---|---|
| Territorio base | codigo_region, codigo_provincia, codigo_comuna |
regiones, provincias, comunas |
| Capas comunales | codigo_comuna |
censo, hogares y viviendas, salud, educación, distritos electorales, pobreza, permisos de edificación, calidad del aire, estadísticas vitales, perfil territorial y más |
| Series temporales | fecha o anio + clave propia |
indicadores, calidad_aire, permisos_edificacion |
| Registros | clave propia | empresas (RUT), partidos_politicos, autoridades_electas |
El diagrama entidad-relación completo está en el apéndice.
El roadmap actual prioriza crecer en usabilidad y confianza antes que agregar más capas.
| Horizonte | Foco | Entregable | Estado |
|---|---|---|---|
| Now | Ejemplos, notebooks, errores claros, referencia API | Usuarios cargan y cruzan datos sin leer el pipeline completo | En progreso |
| Next | Contratos de schema, source readiness, criterios públicos | Contribuidores proponen datasets con reglas claras y verificables | Planeado |
| Later | Nuevas capas solo si pasan criterios de inclusión | El catálogo crece sin perder mantenibilidad ni claridad legal | Futuro |
Especificación completa:
docs/product-spec.mdCriterios de inclusión:docs/dataset-inclusion-criteria.mdEstado del último build:data/normalized/pipeline_status.md
No necesitas saber programar ni traer los datos limpios: basta con la fuente y para qué sirve (o la necesidad, si solo quieres pedirlo). La guía de 2 minutos y los dos formularios están en Aportar o solicitar un dataset (criterios completos).
Esta sección es para contribuidores que ejecutan el pipeline de extracción, build y
verificación en su máquina. Si solo necesitas consumir los datos, usa
pip install chile-hub (ver Instalación).
Requiere uv y Git.
Python lo gestiona uv (make bootstrap).
# Entorno
git clone https://github.com/cortega26/chile-hub.git
cd chile-hub
make bootstrap # Crea .venv, instala dependencias + Playwright
make doctor # Verifica versión de Python y dependencias críticas
# Pipeline completo
make refresh # extract → build → verify → test → landing
# Pasos individuales
make extract # Ejecuta los extractores → data/staging/
make build # Compila artefactos → data/normalized/
make verify # Verifica integridad (SHA256, conteos, schema)
make test # pytest (lee data/normalized/, no corre el pipeline)
make coverage # pytest + cobertura de src/ (term-missing + coverage.xml)
make verify-landing # Pruebas de humo de landing page con Playwright
autoridades_electasrequiere scrapling para no degradar a 155 registros (0 senadores); el comando local está en Carriles de extracción.
El ZIP publicable no se versiona:
make buildlo genera localmente y el sitio lo descarga desde el asset del último GitHub Release. Para clones más livianos:git clone --filter=blob:none https://github.com/cortega26/chile-hub.
Para entender la arquitectura, las reglas no negociables y el flujo de trabajo, revisa
AGENTS.md; el punto de partida rápido es
SOURCE_OF_TRUTH.md.
¿Encontraste un error o tienes un caso de uso? Abre un issue — ayuda a priorizar el roadmap.
| Semáforo | Estado | Licencia típica | Acción |
|---|---|---|---|
| Verde | open-attribution |
CC BY, CC0 o equivalente | Se incluye en el bundle público |
| Amarillo | public-api-review-terms |
API pública sin licencia explícita | Se distribuye tras verificar el origen primario |
| Rojo | restricted |
Derechos de autor, Ley 19.628 | Nunca se integra al bundle público |
El código Python se distribuye bajo MIT. Los datasets conservan
las licencias, permisos y requisitos de atribución de sus fuentes oficiales.
Consulta DATA_LICENSES.md, chile-hub redistribution y
chile-hub provenance antes de redistribuir artefactos derivados.
Si usas chile-hub en un paper, tesis, curso o informe, cita el software y
atribuye la fuente de cada capa. GitHub muestra el botón "Cite this
repository" a partir de CITATION.cff; las recetas BibTeX/APA
y la ruta para un DOI Zenodo están en docs/citation.md.
Autor y mantenedor: Carlos Ortega — ORCID 0009-0000-3470-6181.
Schema completo de cada capa
1. regiones — Capa derivada de regiones para filtros, joins y referencias administrativas de alto nivel. (PK: codigo_region)
| Columna | Tipo | Ejemplo |
|---|---|---|
codigo_region |
VARCHAR(2) |
"01" |
nombre_region |
VARCHAR |
"Tarapacá" |
2. provincias — Capa derivada de provincias para cruces intermedios entre region y comuna. (PK: codigo_provincia)
| Columna | Tipo | Ejemplo |
|---|---|---|
codigo_region |
VARCHAR(2) |
"01" |
nombre_region |
VARCHAR |
"Tarapacá" |
codigo_provincia |
VARCHAR(3) |
"011" |
nombre_provincia |
VARCHAR |
"Iquique" |
3. comunas — Base territorial normalizada para cruces por region, provincia y comuna. (PK: codigo_comuna)
| Columna | Tipo | Ejemplo |
|---|---|---|
codigo_comuna |
VARCHAR(5) |
"01101" |
nombre_comuna |
VARCHAR |
"Iquique" |
nombre_comuna_clean |
VARCHAR |
"iquique" |
codigo_provincia |
VARCHAR(3) |
"011" |
codigo_region |
VARCHAR(2) |
"01" |
nombre_region |
VARCHAR |
"Tarapacá" |
latitud_cabecera |
DOUBLE |
-20.2138 |
longitud_cabecera |
DOUBLE |
-70.1508 |
poblacion_estimada |
INTEGER |
223400 |
4. comunas_enriquecidas — Comunas con coordenadas de cabecera y poblacion estimada INE, listas para analisis territorial sin joins adicionales. (PK: codigo_comuna)
| Columna | Tipo | Ejemplo |
|---|---|---|
codigo_comuna |
VARCHAR(5) |
"01101" |
nombre_comuna |
VARCHAR |
"Iquique" |
nombre_comuna_clean |
VARCHAR |
"iquique" |
codigo_provincia |
VARCHAR(3) |
"011" |
codigo_region |
VARCHAR(2) |
"01" |
latitud_cabecera |
DOUBLE |
-20.2138 |
longitud_cabecera |
DOUBLE |
-70.1508 |
poblacion_estimada |
INTEGER |
223400 |
5. indicadores — Serie de indicadores economicos diarios de referencia para analisis y software. (PK: fecha, codigo_indicador)
| Columna | Tipo | Ejemplo |
|---|---|---|
fecha |
DATE |
"2026-05-30" |
codigo_indicador |
VARCHAR |
"uf" |
valor |
DOUBLE |
39420.5 |
6. censo_comunal — Perfil demografico comunal del Censo 2024 con sexo y grandes grupos de edad. (PK: codigo_comuna)
| Columna | Tipo | Ejemplo |
|---|---|---|
codigo_region |
VARCHAR(2) |
"01" |
codigo_provincia |
VARCHAR(3) |
"011" |
codigo_comuna |
VARCHAR(5) |
"01101" |
nombre_comuna |
VARCHAR |
"Iquique" |
poblacion_censada |
INTEGER |
223400 |
hombres / mujeres |
INTEGER |
"111200 / 112200" |
razon_hombre_mujer |
DOUBLE |
99.11 |
poblacion_0_14 … poblacion_65_mas |
INTEGER |
"5 tramos etarios" |
7. censo_hogares_viviendas — Viviendas y hogares censados por comuna, ocupacion y tamano medio del hogar. (PK: codigo_comuna)
| Columna | Tipo | Ejemplo |
|---|---|---|
codigo_comuna |
VARCHAR(5) |
"01101" |
viviendas_censadas |
INTEGER |
85000 |
viviendas_particulares_ocupadas |
INTEGER |
75000 |
viviendas_colectivas |
INTEGER |
200 |
hogares_censados |
INTEGER |
73000 |
promedio_personas_hogar |
DOUBLE |
3.06 |
8. establecimientos_salud — Directorio vigente de establecimientos de salud con tipo, dependencia, urgencia y ubicacion. (PK: codigo_establecimiento)
| Columna | Tipo | Ejemplo |
|---|---|---|
codigo_establecimiento |
VARCHAR |
"101101" |
nombre_establecimiento |
VARCHAR |
"Hospital Dr. Ernesto Torres Galdames" |
tipo_establecimiento |
VARCHAR |
"Hospital" |
nivel_atencion |
VARCHAR |
"Alta Complejidad" |
codigo_comuna |
VARCHAR(5) |
"01101" |
tiene_servicio_urgencia |
VARCHAR |
"SI" / "NO" |
latitud / longitud |
DOUBLE |
"Coordenadas geográficas" |
estado_funcionamiento |
VARCHAR |
"Vigente" |
9. distritos_electorales — Asociación de comunas a distritos electorales (diputados) y circunscripciones senatoriales. (PK: codigo_comuna)
| Columna | Tipo | Ejemplo |
|---|---|---|
codigo_comuna |
VARCHAR(5) |
"01101" |
nombre_comuna |
VARCHAR |
"Las Condes" |
distrito_electoral |
VARCHAR |
"10" |
circunscripcion_senatorial |
VARCHAR |
"3" |
10. establecimientos_educacionales — Directorio oficial del Ministerio de Educación (MINEDUC) con Rol Base de Datos (RBD), ubicación y dependencia administrativa. (PK: rbd)
| Columna | Tipo | Ejemplo |
|---|---|---|
rbd |
VARCHAR |
"1234-5" |
dv_rbd |
VARCHAR |
"4" |
nombre_establecimiento |
VARCHAR |
"Liceo Abate Molina" |
codigo_comuna |
VARCHAR(5) |
"01101" |
dependencia_administrativa |
VARCHAR |
"Municipal" |
latitud / longitud |
DOUBLE |
"Coordenadas geográficas" |
estado_funcionamiento |
VARCHAR |
"Vigente" |
11. finanzas_municipales — Indicadores financieros municipales anuales desde SINIM/SUBDERE. Cobertura 345/346 comunas (año 2024; falta Antártica 12202, hueco conocido de la fuente). Extracción mensual vía monthly-scrape. (PK: anio, codigo_comuna)
| Columna | Tipo | Ejemplo |
|---|---|---|
anio |
INTEGER |
2024 |
codigo_comuna |
VARCHAR(5) |
"01101" |
ingresos_totales / gastos_totales |
DOUBLE |
245000000000.0 |
ingresos_propios_permanentes |
DOUBLE |
162000000000.0 |
fondo_comun_municipal |
DOUBLE |
39000000000.0 |
12. resultados_educacionales — Resultados educacionales agregados por comuna y año, sin registros personales. (PK: anio, codigo_comuna)
| Columna | Tipo | Ejemplo |
|---|---|---|
anio |
INTEGER |
2024 |
codigo_comuna |
VARCHAR(5) |
"01101" |
matricula_total |
INTEGER |
122000 |
asistencia_promedio |
DOUBLE |
86.2 |
tasa_aprobacion / tasa_retiro |
DOUBLE |
"91.4 / 4.5" |
13. indicadores_urbanos_siedu — Indicadores urbanos SIEDU en formato largo con cobertura comunal parcial esperada. (PK: anio, codigo_comuna, codigo_indicador)
| Columna | Tipo | Ejemplo |
|---|---|---|
anio |
INTEGER |
2024 |
codigo_comuna |
VARCHAR(5) |
"01101" |
codigo_indicador |
VARCHAR |
"siedu_acceso_areas_verdes" |
categoria |
VARCHAR |
"Espacio publico" |
valor / unidad |
DOUBLE |
"71.4 / "porcentaje" |
14. perfil_territorial_comunal — Perfil comunal curado que consolida DPA, censo, salud, educación, finanzas, SIEDU y distritos. (PK: codigo_comuna)
| Columna | Tipo | Ejemplo |
|---|---|---|
codigo_comuna |
VARCHAR(5) |
"01101" |
poblacion_censada |
INTEGER |
223400 |
establecimientos_salud_total |
INTEGER |
140 |
establecimientos_educacionales_total |
INTEGER |
410 |
distrito_electoral |
VARCHAR |
"10" |
crecimiento_natural_ultimo_anio |
INTEGER |
12 |
anio_estadisticas_vitales |
INTEGER |
2023 |
viviendas_autorizadas_ultimo_anio |
INTEGER |
2451 |
superficie_autorizada_m2_ultimo_anio |
INTEGER |
187320 |
anio_permisos_edificacion |
INTEGER |
2023 |
mp25_promedio_ultimo_anio |
DOUBLE |
18.4 |
anio_calidad_aire |
INTEGER |
2026 |
tasa_pobreza_ingresos_ultimo_anio |
DOUBLE |
9.0 |
tasa_pobreza_multidimensional_ultimo_anio |
DOUBLE |
19.5 |
anio_pobreza |
INTEGER |
2022 |
15. empresas — Registro de Empresas y Sociedades (RES) con RUT, razon social, tipo societario, capital, fecha de constitucion y comuna de domicilio. (PK: rut)
| Columna | Tipo | Ejemplo |
|---|---|---|
rut |
VARCHAR |
"76286049-K" |
razon_social |
VARCHAR |
"COMERCIALIZADORA EJEMPLO SPA" |
codigo_sociedad |
VARCHAR |
"SPA" |
capital |
INTEGER |
5000000 |
fecha_actuacion |
DATE |
"2020-06-15" |
anio |
INTEGER |
2020 |
comuna_tributaria |
VARCHAR |
"SANTIAGO" |
region_tributaria |
VARCHAR |
"13" |
16. pobreza_comunal — Estimaciones de pobreza comunal por ingresos y multidimensional derivadas de la encuesta CASEN mediante metodología SAE (Estimación de Áreas Pequeñas). Incluye tasa, límite inferior y superior del intervalo de confianza por comuna, año y dimensión. (PK: codigo_comuna, anio, dimension)
| Columna | Tipo | Ejemplo |
|---|---|---|
codigo_region |
VARCHAR(2) |
"01" |
codigo_comuna |
VARCHAR(5) |
"01101" |
nombre_comuna |
VARCHAR |
"Santiago" |
anio |
INTEGER |
2022 |
dimension |
VARCHAR |
"ingresos" / "multidimensional" |
tasa |
DOUBLE |
15.3 |
limite_inferior |
DOUBLE |
12.1 |
limite_superior |
DOUBLE |
18.9 |
metodologia |
VARCHAR |
"SAE" |
fuente |
VARCHAR |
"Observatorio Social — MDS" |
17. consumo_electrico_comunal — Consumo eléctrico anual por comuna y tipo de cliente (Residencial, Comercial, Industrial, Agrícola, Alumbrado Público, Otros), publicado por la Comisión Nacional de Energía (CNE) en el portal Energía Abierta. DEPRECATED: la fuente Junar de energiaabierta.cl fue decomisionada (investigado 2026-07-07); el dataset solo publica datos de muestra (FALLBACK_ROWS), no está en el bundle público. Ver data/source_registry.json. (PK: codigo_comuna, anio, tipo_cliente)
| Columna | Tipo | Ejemplo |
|---|---|---|
codigo_region |
VARCHAR(2) |
"01" |
codigo_comuna |
VARCHAR(5) |
"01101" |
nombre_comuna |
VARCHAR |
"Santiago" |
anio |
INTEGER |
2023 |
tipo_cliente |
VARCHAR |
"Residencial" |
consumo_kwh |
DOUBLE |
1523400.5 |
numero_clientes |
INTEGER |
45800 |
fuente |
VARCHAR |
"CNE — Energía Abierta" |
18. partidos_politicos — Roster de partidos políticos de Chile (Cámara de Diputadas y Diputados), con estado_legal y fecha_constitucion completados por join de nombre contra el registro público de SERVEL. (PK: id_partido)
| Columna | Tipo | Ejemplo |
|---|---|---|
id_partido |
VARCHAR |
"DC" |
nombre |
VARCHAR |
"Partido Demócrata Cristiano" |
sigla |
VARCHAR |
"DC" |
estado_legal |
VARCHAR |
"constituido" (nulo si no matchea con SERVEL)"` |
fecha_constitucion |
DATE |
"1988-05-02" |
ambito |
VARCHAR |
"null (sin fuente que lo provea)"` |
fuente |
VARCHAR |
"Cámara de Diputadas y Diputados" |
19. autoridades_electas — Autoridades electas en ejercicio de Chile (diputados y senadores): partido, distrito electoral/circunscripción senatorial, región y período de mandato. (PK: id_autoridad)
| Columna | Tipo | Ejemplo |
|---|---|---|
id_autoridad |
VARCHAR |
"diputado_1009" |
nombre |
VARCHAR |
"Jorge Alessandri Vergara" |
cargo |
VARCHAR |
"diputado" / "senador" |
institucion |
VARCHAR |
"Cámara de Diputadas y Diputados" / "Senado" |
partido |
VARCHAR |
"Unión Demócrata Independiente" |
distrito_electoral |
VARCHAR |
"10" (solo diputados)"` |
circunscripcion_senatorial |
VARCHAR |
"3" (solo senadores)"` |
codigo_region |
VARCHAR(2) |
"02" (solo senadores)"` |
periodo_inicio / periodo_fin |
DATE |
"2026-03-11 / 2030-03-10" |
estado_mandato |
VARCHAR |
"vigente" |
20. estadisticas_vitales — Nacimientos y defunciones por comuna de residencia y sexo, desde los Anuarios de Estadísticas Vitales del INE (definitivos, 2010 en adelante). (PK: anio, codigo_comuna, evento, sexo)
| Columna | Tipo | Ejemplo |
|---|---|---|
anio |
INTEGER |
2023 |
codigo_region |
VARCHAR(2) |
"13" |
codigo_comuna |
VARCHAR(5) |
"13101" |
nombre_comuna |
VARCHAR |
"Santiago" |
evento |
VARCHAR |
"nacimiento" |
sexo |
VARCHAR |
"hombre" |
cantidad |
INTEGER |
4521 |
estado_dato |
VARCHAR |
"definitivo" |
fuente |
VARCHAR |
"Instituto Nacional de Estadísticas (INE) — Estadísticas Vitales" |
url_fuente |
VARCHAR |
"https://www.ine.gob.cl/docs/default-source/.../2023/....xlsx" |
fecha_fuente |
VARCHAR |
"2026-09-14" |
21. permisos_edificacion — Viviendas en unidades y superficie (m2) por comuna y año —casas y departamentos— desde las estadísticas de permisos de edificación del CEDOC (MINVU), serie desde 2002. (PK: anio, codigo_comuna)
| Columna | Tipo | Ejemplo |
|---|---|---|
anio |
INTEGER |
2023 |
codigo_region |
VARCHAR(2) |
"13" |
codigo_comuna |
VARCHAR(5) |
"13101" |
nombre_comuna |
VARCHAR |
"Santiago" |
unidades_total |
INTEGER |
2451 |
superficie_m2_total |
INTEGER |
187320 |
unidades_casas |
INTEGER |
312 |
superficie_m2_casas |
INTEGER |
24810 |
unidades_departamentos |
INTEGER |
2139 |
superficie_m2_departamentos |
INTEGER |
162510 |
estado_dato |
VARCHAR |
"definitivo" |
fuente |
VARCHAR |
"MINVU — Centro de Estudios de Ciudad y Territorio (CEDOC)" |
url_fuente |
VARCHAR |
"https://catalogo.minvu.cl/cgi-bin/koha/opac-retrieve-file.pl?id=..." |
fecha_fuente |
VARCHAR |
"2026-09-15" |
22. calidad_aire — Promedios diarios de contaminantes atmosféricos (MP2.5, MP10, SO2, NO2, CO, O3) por estación de monitoreo, desde el SINCA (MMA). Cobertura parcial: ~65 comunas con estación. (PK: fecha, id_estacion, codigo_contaminante)
| Columna | Tipo | Ejemplo |
|---|---|---|
fecha |
VARCHAR |
"2026-09-14" |
id_estacion |
VARCHAR |
"271" |
nombre_estacion |
VARCHAR |
"Quilicura" |
codigo_region |
VARCHAR(2) |
"13" |
codigo_comuna |
VARCHAR(5) |
"13144" |
nombre_comuna |
VARCHAR |
"Quilicura" |
latitud |
DOUBLE |
-33.36 |
longitud |
DOUBLE |
-70.73 |
codigo_contaminante |
VARCHAR |
"mp25" |
nombre_contaminante |
VARCHAR |
"MP 2,5" |
unidad |
VARCHAR |
"ug/m3" |
valor_promedio_diario |
DOUBLE |
18.4 |
valor_max_horario |
DOUBLE |
42.0 |
horas_validas |
INTEGER |
24 |
estado_dato |
VARCHAR |
"definitivo" |
fuente |
VARCHAR |
"SINCA — Ministerio del Medio Ambiente" |
url_fuente |
VARCHAR |
"https://sinca.mma.gob.cl/index.php/json/listadomapa2k19/" |
fecha_fuente |
VARCHAR |
"2026-09-15" |
23. precipitaciones_dgac — Precipitaciones diarias por estación meteorológica DGAC: serie 2013–2026 con 143 meses verificables, sin interpolación ni asignación de CUT; lagunas de cobertura y licencias explícitas. (PK: fecha, id_estacion)
| Columna | Tipo | Ejemplo |
|---|---|---|
fecha |
VARCHAR |
"2013-01-01" |
id_estacion |
VARCHAR(6) |
"180005" |
nombre_estacion |
VARCHAR |
"Chacalluta, Arica Ap." |
latitud_dms |
VARCHAR |
"18° 21' 20'' S" |
altitud_m |
DOUBLE |
50 |
precipitacion_mm |
DOUBLE |
0.5 |
url_fuente |
VARCHAR |
"https://datos.gob.cl/dataset/.../download/precipitacion_012013.csv" |
licencia_fuente |
VARCHAR |
"cc-by" |
24. geometria_comunal — Límites poligonales de las 346 comunas de Chile (GeoParquet, geometría 'generalizada' — simplificada para cartografía a escala nacional, no apta para trabajo de precisión geodésica ni catastral). Fuente: BCN ArcGIS (tematico/Comunas_Generalizadas). Artefacto separado de comunas, unido por codigo_comuna. (en carril candidate — datos no incluidos en el bundle público) (PK: codigo_comuna)
| Columna | Tipo | Ejemplo |
|---|---|---|
codigo_region |
VARCHAR(2) |
"01" |
codigo_comuna |
VARCHAR(5) |
"01101" |
nombre_comuna |
VARCHAR |
"Iquique" |
nombre_comuna_clean |
VARCHAR |
"iquique" |
nombre_region |
VARCHAR |
"Región de Tarapacá" |
geometry |
BINARY |
"WKB — Polygon o MultiPolygon en EPSG:4326 (WGS84), geoparquet 1.0" |
25. delincuencia_comunal — DEPRECATED 2026-09-15: Casos policiales de Delitos de Mayor Connotación Social (DMCS) y otras categorías por comuna y mes. Sin fuente estructurada oficial (solo scraping frágil) y no redistribuible; extractor neutralizado y fuera del scrape mensual. Ver docs/datasets/delincuencia_comunal.md. (en carril candidate — datos no incluidos en el bundle público) (PK: anio, mes, codigo_comuna, familia_delito)
| Columna | Tipo | Ejemplo |
|---|---|---|
codigo_comuna |
VARCHAR(5) |
"01101" |
nombre_comuna |
VARCHAR |
"Santiago" |
anio |
INTEGER |
2024 |
mes |
INTEGER |
1 |
familia_delito |
VARCHAR |
"robos_violentos" |
casos |
INTEGER |
245 |
26. autoridades_locales — Autoridades locales/subnacionales de Chile: gobernadores regionales (Wikipedia, CC-BY-SA) y alcaldes (BCN SIIT, dato público gubernamental). Wikipedia se mantiene como fuente de gobernadores y enriquecimiento opcional de periodo_inicio para alcaldes. Dataset segregado de autoridades_electas por licencia mixta. (en carril candidate — datos no incluidos en el bundle público) (PK: id_autoridad)
| Columna | Tipo | Ejemplo |
|---|---|---|
id_autoridad |
VARCHAR |
"gobernador_01" |
nombre |
VARCHAR |
"null si no hay evidencia clara del titular"` |
cargo |
VARCHAR |
"gobernador_regional" / "alcalde" |
codigo_region |
VARCHAR(2) |
"01" |
codigo_comuna |
VARCHAR(5) |
"01101" (solo alcaldes)"` |
partido |
VARCHAR |
"nulo si no identificado" |
estado_mandato |
VARCHAR |
"vigente" / "sin_identificar" |
Diagrama entidad-relación (capas principales)
erDiagram
REGIONES {
VARCHAR codigo_region PK "Ej: '01' (Tarapacá)"
VARCHAR nombre_region
}
PROVINCIAS {
VARCHAR codigo_provincia PK "Ej: '011' (Iquique)"
VARCHAR codigo_region FK
VARCHAR nombre_provincia
}
COMUNAS {
VARCHAR codigo_comuna PK "Ej: '01101' (Iquique)"
VARCHAR codigo_provincia FK
VARCHAR codigo_region FK
VARCHAR nombre_comuna
VARCHAR nombre_comuna_clean "Ej: 'iquique' (sin tildes)"
}
COMUNAS_ENRIQUECIDAS {
VARCHAR codigo_comuna PK
VARCHAR nombre_comuna
DOUBLE latitud_cabecera
DOUBLE longitud_cabecera
INTEGER poblacion_estimada
}
CENSO_COMUNAL {
VARCHAR codigo_comuna PK
INTEGER poblacion_censada
INTEGER hombres
INTEGER mujeres
INTEGER poblacion_0_14
}
CENSO_HOGARES_VIVIENDAS {
VARCHAR codigo_comuna PK
INTEGER viviendas_censadas
INTEGER hogares_censados
DOUBLE promedio_personas_hogar
}
ESTABLECIMIENTOS_SALUD {
VARCHAR codigo_establecimiento PK
VARCHAR codigo_comuna FK
VARCHAR nombre_establecimiento
VARCHAR tipo_establecimiento
}
DISTRITOS_ELECTORALES {
VARCHAR codigo_comuna PK
VARCHAR distrito_electoral
VARCHAR circunscripcion_senatorial
}
ESTABLECIMIENTOS_EDUCACIONALES {
VARCHAR rbd PK "Rol Base de Datos"
VARCHAR codigo_comuna FK
VARCHAR nombre_establecimiento
}
INDICADORES {
DATE fecha PK
VARCHAR codigo_indicador PK "Ej: 'uf', 'dolar'"
DOUBLE valor
}
REGIONES ||--o{ PROVINCIAS : "contiene"
PROVINCIAS ||--o{ COMUNAS : "contiene"
COMUNAS ||--|| COMUNAS_ENRIQUECIDAS : "enriquece"
COMUNAS ||--o| CENSO_COMUNAL : "demografía"
COMUNAS ||--o| CENSO_HOGARES_VIVIENDAS : "hogares"
COMUNAS ||--o{ ESTABLECIMIENTOS_SALUD : "salud"
COMUNAS ||--o{ ESTABLECIMIENTOS_EDUCACIONALES : "educación"
COMUNAS ||--o| DISTRITOS_ELECTORALES : "electoral"
Hecho con datos públicos chilenos, para quienes construyen sobre Chile.
Parte del ecosistema Tooltician — datos públicos, interoperables y listos para IA.



