🏛️ Politics — Cámara de Diputados de Chile
DatosVerExportarAyuda
◆ Resumen
Avisos de calidad
Cargando analytics…
NombrePartidoRegión % Asist.Interv.
Seleccione un período.
NºFechaTipoTema principal PresidenteAsist.
Seleccione un período.
Cargando proyectos…
Cargando senadores…
Comisiones
Selecciona una comisión
Sobre este proyecto
Cobertura por período
Marcadores de sesión
Limitaciones
Notas técnicas
36
años de historial
10
períodos legislativos
+630
diputados históricos
+4.4k
sesiones registradas
+40k
votos individuales
115
proyectos de ley

Dashboard de acceso público a los datos históricos de la Cámara de Diputadas y Diputados de Chile. Centraliza asistencia individual, intervenciones en sala, votaciones detalladas, tramitación legislativa y análisis de sentimiento desde 1990 hasta hoy. Todo el flujo —desde la descarga hasta la visualización— es automatizado y reproducible.

Pipeline de datos — end to end
1
Fuente oficial — opendata.camara.cl Fuente
Todos los datos provienen de la API REST pública de la Cámara de Diputados de Chile (opendata.camara.cl) y de los boletines XML de sala — las actas oficiales de cada sesión plenaria. No se requiere autenticación ni API key; todos los endpoints son de acceso libre. No se usa scraping de HTML ni fuentes de terceros.
Recursos: Sesiones Diputados Proyectos Votaciones XML boletines
2
Scraping automático — cron nocturno Ingesta
Un cron job nocturno (~22:00 hrs) ejecuta scrape_camara.py y scrape_proyectos.py, que consultan la API de la Cámara y descargan sesiones, diputados, proyectos, votaciones por boletín y proyectos de ley del período activo. El XML completo del boletín de cada sesión se almacena íntegramente para su posterior parseo. El ciclo completo tarda menos de 30 minutos.
Escribe en: sesiones_detalle votaciones_boletin proyectos_ley_api
3
Almacenamiento raw — PostgreSQL Ingesta
La base de datos camara_diputados (PostgreSQL) actúa como única fuente de verdad. La tabla sesiones_detalle guarda el XML crudo de cada sesión. Las tablas norm_diputados, norm_periodos y norm_legislaturas almacenan el catálogo base de diputados y períodos legislativos desde 1990.
Tablas clave: sesiones_detalle norm_diputados norm_periodos norm_legislaturas votaciones_boletin proyectos_ley_api tramites
4
Normalización — parseo XML y matching de identidad Proceso
normalize_congreso_data.py parsea el XML de cada sesión y construye tablas estructuradas: norm_sesion_asistencia (asistencia individual), norm_boletin_intervenciones (intervenciones en sala) y norm_boletin_secciones (orden del día). En períodos históricos P3–P6, donde el XML no incluía IDs numéricos, se aplica fuzzy matching de nombres para resolver la identidad de cada diputado con alta precisión.
Produce: norm_sesion_asistencia norm_boletin_intervenciones norm_boletin_secciones
5
Análisis de sentimiento — RoBERTa + Ollama Proceso
Se usan dos modelos distintos según el nivel de granularidad:

pysentimiento / RoBERTa — clasifica cada intervención individual como positiva, neutra o negativa con un score de confianza. Opera a nivel de diputado y sesión: cada texto extraído del XML (atributo DIPUTADOValue) pasa por este modelo y los resultados se agregan por diputado y por sesión. Es determinista y reproducible.

Ollama / llama3.2 — genera el análisis cualitativo a nivel de período completo: el resumen de clima político, las tensiones identificadas y la clasificación de tono general (propositivo, confrontacional, etc.). Recibe como input los datos agregados del período y produce texto interpretativo. Corre localmente, sin envío de datos a servidores externos.
Produce: sentimiento_diputado sentimiento_sesion análisis_periodo (Ollama)
6
Analytics precomputados — métricas agregadas Proceso
compute_analytics.py genera tablas de métricas ya calculadas: analytics_diputado_periodo (asistencia %, intervenciones, sentimiento por diputado), analytics_partido_periodo (comparativas por bloque) y analytics_sesion (resumen por sesión). Esto permite que todas las vistas del dashboard carguen de forma instantánea — sin cálculos en tiempo de consulta.
Produce: analytics_diputado_periodo analytics_partido_periodo analytics_sesion
7
API REST + Dashboard — Flask y Chart.js Servicio
El backend Flask + Waitress (detrás de Nginx) expone dos familias de endpoints: /api/congreso/norm/* para datos normalizados y /api/congreso/analytics/* para métricas pre-computadas. Todos los datos vienen de PostgreSQL — nunca de archivos en disco. El frontend consume estos endpoints con JavaScript puro y renderiza tablas, gráficos de barras, scatter plots y análisis de sentimiento con Chart.js.
Endpoints: /api/congreso/norm/* /api/congreso/analytics/*
Cómo acceder a los datos — guía para desarrolladores
1
Acceder al portal de datos abiertos
Visita opendata.camara.cl. El portal es completamente público: no se requiere registro, autenticación ni API key. Está disponible para uso libre bajo la política de datos abiertos del Estado de Chile.
2
Explorar los recursos disponibles
El portal expone recursos en formato JSON y XML organizados por categoría: Diputados (catálogo por período, militancias, comisiones), Sesiones (metadatos y boletines), Proyectos (tramitación legislativa) y Votaciones. Cada recurso está documentado con sus parámetros de filtrado disponibles (período, fecha, ID).
3
Obtener la lista de sesiones de un período
Consulta el endpoint de sesiones filtrando por número de legislatura o período. La respuesta incluye metadatos de cada sesión: número, fecha, tipo (ordinaria / extraordinaria / especial) y si el boletín XML ya fue publicado. Cada sesión devuelve un id_sesion único necesario para los pasos siguientes.
4
Descargar el boletín XML de una sesión
Usando el id_sesion, solicita el boletín en formato XML. Este documento contiene: la asistencia nominal de todos los diputados (con código de asistencia: Presente, Justificado, Ausente, etc.), el orden del día con los temas y proyectos tratados, y el texto de las intervenciones en sala. No todas las sesiones tienen boletín publicado — ver la pestaña Cobertura.
5
Entender la estructura del XML
El XML tiene estructura jerárquica: <SESION> contiene <ASISTENCIA> con un nodo <DIPUTADO> por cada parlamentario (atributos: nombre, partido, región, código de asistencia) y <INTERVENCIONES> con cada discurso anotado mediante el atributo DIPUTADOValue. El atributo VALID en el nodo raíz indica si la sesión alcanzó quórum reglamentario.
6
Resolver identidad en períodos históricos (P3–P6)
En los períodos 1994–2010, el XML no incluye IDs numéricos para los diputados — solo nombre y partido en texto libre. Para resolver la identidad, construye un catálogo de nombres a partir del endpoint de diputados por período y aplica un algoritmo de fuzzy matching (distancia de Levenshtein o similitud de tokens). Este proyecto usa la librería thefuzz de Python con un umbral de similitud ajustado por período y apellido compuesto.

Disponibilidad de boletines XML (actas oficiales) por período legislativo. Sin boletín no hay datos de asistencia, temas ni intervenciones.

PeríodoAñosSesiones Cobertura actasSin quórumSolo CuentaNotas
P1 1990–1994 429
58%
0 — Datos limitados: boletines sin IDs numéricos, asistencia reconstruida por matching de nombres. Sin partido, región ni distrito.
P2 1994–1998 434
91%
0 — 91% de cobertura. Actas sin IDs numéricos en sesiones pre-1996; asistencia parcial para esas sesiones.
P3 1998–2002 405
63%
1 37 Asistencia por presentes (sin ausentes registrados)
P4 2002–2006 481
69%
4 24 149 sin acta; asistencia = 0 en esas sesiones
P5 2006–2010 527
73%
1 39 142 sin acta; 22% de registros sin región/distrito
P6 2010–2014 540
98%
1 72 Asistencia completa vía API para sesiones sin acta
P7 2014–2018 522
98%
3 54 13 sin acta + 28 con XML inválido
P8 2018–2022 568
71%
0 0 166 sin acta (COVID-19). Sin región/distrito en XML
P9 2022–2026 543
34%
0 34 361 sin acta publicada aún. Sin región/distrito en XML
P58 2026–2030 14 En curso —— 14 sesiones registradas desde el 11/03/2026; sin boletines publicados aún. Datos de asistencia, temas e intervenciones no disponibles.

Cada sesión en la tabla puede mostrar uno de estos iconos indicando una situación especial. Haz clic sobre el icono directamente en la tabla para ver el detalle completo de esa sesión.

⚠
Acta no disponible
La Cámara no ha publicado el boletín XML para esta sesión. La asistencia registrada es 0 y no refleja datos reales. Común en períodos anteriores a 2010 y durante la pandemia (2020–2022).
✕
Sin quórum reglamentario
La sesión fue declarada oficialmente nula al no alcanzar el mínimo de diputados presentes. El acta XML registra VALID="False". Los asistentes mostrados son los que se presentaron, pero insuficientes para constituir quórum.
§
Solo Cuenta parlamentaria
El acta existe y está procesada, pero la sesión estuvo compuesta únicamente por la lectura de la Cuenta (comunicaciones al pleno). No hubo debate legislativo ni orden del día con proyectos identificables. No es un error de datos.
ℹ
Sin tema registrado
El acta fue publicada y procesada, pero la sección de orden del día en el XML estaba vacía o sin contenido identificable. Ocurre en sesiones de instalación de período, sesiones especiales breves y algunas actas históricas.

Restricciones de origen en los datos fuente que afectan la completitud o comparabilidad de ciertas métricas.

Períodos 1 y 2 (1990–1998) — Excluidos del dashboard
Los boletines XML de estos períodos usan formato de texto libre sin IDs numéricos de diputados. La asistencia fue reconstruida mediante matching aproximado de nombres, con una tasa de error significativa: el Período 1 solo resolvió ~50% de los nombres, y el Período 2 tiene un 44% de registros sin partido, región ni distrito. Los datos son demasiado incompletos para ser comparables.
Región y distrito faltantes en Períodos 9 y 10
El formato XML de las actas cambió en el Período 9 (2018–2022): la sección de Asistencia dejó de incluir región y distrito. Ningún diputado de P9 o P10 tiene datos geográficos disponibles directamente desde las actas. Solo ~11% de los diputados de P10 tienen región derivada de mandatos anteriores. La API de la Cámara tampoco expone este dato para estos períodos.
Brecha COVID-19 en Período 9 (2020–2022)
166 sesiones de 2020–2022 no tienen boletín publicado por la Cámara. Las sesiones con boletín en ese período muestran asistencia reducida real (promedio 67–90 diputados) debido a las modalidades remotas e híbridas adoptadas durante la pandemia. No es un error: refleja el funcionamiento real del Congreso en ese período.
Cobertura parcial en Período 9 (2022–2026)
Solo el 34% de las sesiones tienen boletín publicado en la API pública. El período 9 finalizó en marzo 2026. Los datos restantes aparecerán a medida que la Cámara publique los boletines.
Período 2026–2030 (P58) — En curso, sin boletines
La legislatura actual comenzó el 11/03/2026. Se registran 14 sesiones desde esa fecha, pero ninguna tiene boletín XML publicado aún. Todos los datos de asistencia, intervenciones y temas aparecerán automáticamente cuando la Cámara los publique.

Decisiones de implementación y procesamiento que pueden afectar la interpretación de los datos.

Intervenciones
Texto extraído en tiempo real desde el XML
El texto de las intervenciones no está almacenado en la base de datos: se extrae en tiempo real desde el XML del boletín cuando se solicita. Las sesiones sin boletín publicado, o cuyo XML no contenga intervenciones atribuidas al diputado, mostrarán el mensaje correspondiente al intentar verlas.
Partidos
Normalización de nombres a siglas oficiales
Los nombres de partidos han sido normalizados a sus siglas oficiales según SERVEL y BCN. Variantes frecuentes unificadas: DC → PDC, EVOPOLI → EVOP, PRD → RD, PCS → CS. Errores de parseo donde un nombre quedó concatenado con la sigla (ej. "Abel PRSD") también fueron corregidos manualmente.
Proyectos y Senadores
Proyectos: cobertura parcial histórica + período actual
Los proyectos de ley provienen de dos fuentes: la API de tramitación (período activo) y los boletines de sala (cobertura parcial histórica — boletines con votaciones procesadas por el cron). Los senadores son exclusivamente del período en curso.
Sentimiento — RoBERTa
pysentimiento — análisis por diputado y sesión
El análisis a nivel de diputado individual y sesión usa pysentimiento, un modelo RoBERTa fine-tuned en texto en español de redes sociales y prensa. Cada fragmento de intervención es clasificado como positivo, neutro o negativo; los scores se promedian para obtener el perfil de tono del diputado o de la sesión. Es determinista: mismo texto, mismo resultado. Puede cometer errores en lenguaje técnico-legislativo e ironía.
Sentimiento — Ollama
llama3.2 — análisis cualitativo por período
El análisis a nivel de período completo (tono general, clima político, tensiones, logros) es generado por Ollama con llama3.2, un LLM que corre localmente — sin envío de datos a servidores externos. Recibe los datos agregados del período como contexto y produce texto interpretativo. Al ser generativo, puede variar entre ejecuciones y puede contener imprecisiones; se muestra siempre con advertencia explícita.
Fuente
API pública de la Cámara de Diputados
Todos los datos estructurales provienen de opendata.camara.cl. La sincronización es automática y se ejecuta cada noche (~22h). Los boletines XML son descargados, parseados y normalizados por un pipeline propio que detecta y registra las anomalías descritas en esta sección.
Código
Repositorio público en GitHub
El pipeline de scraping, normalización y análisis es de código abierto: github.com/jahadd/Analisis_congreso_Chile