Código abierto · datos oficiales del TSE

El conteo de las elecciones en vivo, en un mapa de Brasil

Un panel que lee los archivos públicos del TSE, verifica las cuentas y muestra cómo se llena cada estado cada 15 segundos.

Banner: conteo en vivo, Elecciones 2026 con datos oficiales del TSE
En resumen

INEMA Elecciones 2026 es un panel abierto para seguir el conteo de la segunda vuelta para Presidente con los datos oficiales del TSE (Tribunal Superior Electoral de Brasil, el órgano que organiza las elecciones en el país). Sirve para quien quiere ver el resultado de Brasil y de cada estado en un mapa, sin cifras inventadas. Un colector busca los archivos públicos del TSE cada 15 segundos, verifica las cuentas y publica archivos listos; el sitio solo lee esos archivos. Para seguirlo, basta con abrir eleicoes.inema.club; para ejecutar el tuyo, solo necesitas Python 3.

Qué es

Colector, contrato y panel: tres partes separadas

El colector lee el TSE y graba archivos; el contrato define el formato de esos archivos; el panel solo lee los archivos y dibuja la pantalla. El colector no sabe nada de la pantalla, y el panel nunca habla con el TSE.

Mapa de Brasil, colector del TSE, verificación, evolución, estados y código abierto

🗳️ Colector que verifica

Descarga solo el estado que cambió. Antes de publicar, verifica: votos de los candidatos = válidos; válidos + en blanco + nulos = total; las secciones nunca disminuyen. Si algo no cuadra, ese estado no se publica y queda el último valor válido.

🗳️ Panel en dos versiones

Central, con un mapa real de Brasil que se llena estado por estado, y Clásica, con 4 estilos (noche, papel, noticiero y alto contraste). Haz clic en un estado y se abre su panel.

🗳️ Simulación para probar

Botón Simulação (Simulación) en el menú: el conteo va de 0% a 100% en cerca de un minuto, con nombres ficticios y con el padrón, la participación, los votos en blanco y los nulos de cada estado tomados de la primera vuelta.

Cómo funciona

Del archivo del TSE a tu pantalla

Quien visita el sitio solo descarga archivos listos. El único que habla con el TSE es el colector, una vez cada 15 segundos. El manifiesto (latest.json) es la lista de lo que está vigente ahora; siempre es el último archivo publicado, para que nunca apunte a un archivo que aún no llegó.

Índice del TSE (solo lo que cambió)→ Guarda el archivo original→ Verifica las cuentas→ Publica versiones nuevas→ Manifiesto al final→ El sitio lee cada 15 s

Solo lo que cambió

El colector pide el índice con etiqueta de versión (ETag). Si no hay novedades, el TSE responde "no cambió" y no se descarga nada.

Nada inventado

Los porcentajes vienen del propio TSE. Lo que es cálculo del panel (la diferencia entre los dos, por ejemplo) aparece marcado como calculado.

Rastreable

Cada cifra publicada trae la hora oficial del TSE, la hora en que el colector la obtuvo, la versión y la huella digital (sha256) del archivo original.

Requisitos previos

Lo que necesitas

Para solo seguir el conteo: nada, basta con abrir el sitio. Para ejecutar tu propio panel:

Python 3

Versión 3.8 o más reciente. El colector y el servidor de prueba usan solo la biblioteca estándar: no hace falta instalar paquetes. Los comandos son para Linux o macOS (bash); en Windows, usa WSL.

python3 --version

Git

Para descargar el proyecto.

git --version

Opcional: Cloudflare

Solo si quieres publicarlo en internet. Necesitas Node.js y wrangler con sesión iniciada en tu cuenta.

npx wrangler login
Guía de uso · paso a paso

Ejecutar el panel en tu máquina

Comandos reales del repositorio, en orden. Ejecútalos desde la carpeta del proyecto.

1

Descarga el proyecto

Clona el repositorio público.

git clone https://github.com/inematds/eleicoes2026
cd eleicoes2026
2

Míralo funcionar con la simulación

Levanta el servidor de prueba en segundo plano (el & al final) y abre el panel en modo de simulación acelerada. No necesita el TSE ni datos. El servidor no muestra nada en la pantalla; sigue ejecutándose hasta que lo detengas.

python3 coleta/servidor_local.py --pasta site --porta 8470 &
# abre en el navegador: http://localhost:8470/?sim=1
# no lo detengas todavía: el paso 4 usa este servidor. Para detenerlo al final:
pkill -f "porta 8470"
3

Prueba el colector con la primera vuelta real

Lee los datos finales de la primera vuelta (elección 6257, la contienda de Presidente, 12 candidatos), lo verifica todo y publica en saida/teste1t/data. Si lo ejecutas de nuevo, el TSE responde "no cambió".

python3 coleta/coletor.py --saida saida/teste1t --eleicao 6257 --turno 1 --pleito 3220 --n-cand 0 --uma-vez

En el TSE, el «pleito» es la jornada de votación de un día (código 3220 = 04/10/2026), y cada jornada reúne varias elecciones, una por cargo en disputa (código 6257 = Presidente en la 1.ª vuelta); por eso son dos códigos distintos. --n-cand 0 desactiva la verificación de la cantidad de candidatos (en la 1.ª vuelta son 12) y --uma-vez ejecuta un solo ciclo. Los pasos 3, 4 y 5 necesitan internet: los dos primeros acceden a resultados.tse.jus.br y el 5 descarga de allí los datos de la 1.ª vuelta que sirven de base a la simulación.

4

Activa el colector oficial de la segunda vuelta

Vigila el TSE cada 15 segundos (elección 6258, Presidente). Después apunta el sitio a los datos oficiales.

python3 coleta/coletor.py --saida saida/oficial --intervalo 15 &
ln -sfn ../saida/oficial/data site/data   # el sitio pasa a leer los datos oficiales
sleep 20; cat saida/oficial/status.json             # último ok, errores, bloqueos

El & al final de la primera línea deja el colector ejecutándose en segundo plano, junto con el servidor del paso 2; el sleep 20 espera el 1.er ciclo antes de mostrar el estado. Abre http://localhost:8470/ (sin ?sim=1): los datos aparecen después del 1.er ciclo, unos 15 segundos. Hasta que comience el conteo (25/10, alrededor de las 17 h), el panel muestra "Aguardando apuração" (Esperando el conteo) con todo en cero: es lo normal. Para detener el colector: pkill -f "saida/oficial".

5

Prueba las fallas con un "TSE falso"

Un servidor local imita al TSE con problemas a propósito: archivo corrupto, secciones que disminuyen, índice y archivos fuera de orden. El colector tiene que superarlo todo sin publicar nada incorrecto.

mkdir -p saida/tsefalso
python3 coleta/servidor_local.py --pasta saida/tsefalso --porta 8471 &
python3 coleta/simular.py --saida saida/simlixo/data --intervalo 6 --uma-vez --modo-tse saida/tsefalso &
timeout 240 python3 coleta/coletor.py --saida saida/testemock --base http://127.0.0.1:8471/ --intervalo 3

El colector se detiene solo en 4 minutos (timeout 240), el tiempo que necesita la simulación para ir de 0% a 100%. Funcionó si saida/testemock/status.json muestra pendientes y bloqueos vacíos y grep BLOQUEIO saida/testemock/coleta.jsonl muestra un bloqueo de SP (archivo corrupto) y otro de RJ (las secciones disminuyeron); BLOQUEIO (bloqueo) es el nombre del evento en el registro. El simulador termina solo; después detén el servidor falso: pkill -f "porta 8471". Antes de empezar, el simulador descarga unos 29 archivos del TSE; si tu internet es lenta, aumenta el timeout.

6

Publícalo en internet (opcional)

Cambia el dominio en ferramentas/cloudflare/wrangler.toml por el tuyo y ejecuta el publicador: envía los datos a Cloudflare cada vez que cambian.

python3 ferramentas/publicar_cf.py --laco 20

wrangler es la herramienta de línea de comandos de Cloudflare; el publicador ejecuta npx --yes wrangler@4 deploy, por eso el npx wrangler login de los requisitos previos es obligatorio. Envía saida/oficial/data a la raíz del sitio y, si existe, la simulación en saida/simficticio/data a /simulacao/; así que el colector del paso 4 debe estar ejecutándose. Para publicar también la simulación, genérala antes: python3 coleta/simular.py --saida saida/simficticio/data --intervalo 60 --ficticio &. El publicador sigue ejecutándose y vigilando; para detenerlo, Ctrl+C. El dominio debe estar en una zona de tu cuenta de Cloudflare (zona = un dominio administrado en ella).

Municipios · sistema aparte

Cada ciudad en el mapa, saliendo del gris conforme el TSE va escrutando

En municipios.inema.club cada estado aparece con sus municipios dibujados. La ciudad empieza gris y se vuelve roja o azul, según el color de quien lidera en ella; cuanto más fuerte el color, más mesas ya fueron escrutadas. En el panel, el ítem Municipios del menú y el botón Ver los municipios en el cuadro del estado llevan directo allí.

Mapa de Minas Gerais con los municipios coloreados, votos del estado, evolución y lista de ciudades (simulación con nombres ficticios)

🗺️ Mapa por estado

Elija el estado en los botones de arriba. Pase el mouse o el dedo por una ciudad para ver los números; haga clic para abrir su cuadro completo. Tiene zoom y búsqueda por nombre.

📊 Votos y evolución

Barra con el total de cada candidato en el estado (suma de las ciudades ya escrutadas, marcada como cálculo de INEMA) y gráfico de la evolución a lo largo de la noche.

🏙️ 10 ciudades

Lista de las 10 ciudades en tres órdenes: mayores (más electores), más escrutadas y 100% escrutadas.

Separado del panel

Recolector, archivos y sitio propios. El recolector lee los 27 índices por estado del TSE y descarga solo las ciudades que cambiaron, primero las que llevan más tiempo esperando. Si se detiene, el panel principal no se ve afectado.

Mismas verificaciones

Cada ciudad pasa por las mismas reglas del panel. Una ciudad con una cuenta que no cuadra se queda con el último valor bueno; el resto del estado sigue.

Mapa del IBGE

Dibujo de los 5.570 municipios proveniente de la malla oficial del IBGE, vinculado al TSE por el código IBGE de cada ciudad.

Ejecutando los municipios en su máquina

Después del paso 1 de la guía (proyecto descargado). Comandos reales del repositorio, desde la carpeta del proyecto.

# 1. (opcional) el dibujo ya viene en el repositorio; esto lo rehace a partir de la malla del IBGE
python3 municipios/gerar_malhas.py
# 2. recolector del 2º turno (queda ejecutándose; cada 15 s)
python3 municipios/coletor_mun.py --saida saida/municipios &
# 3. sitio local
ln -sfn ../../saida/municipios/data municipios/site/data
python3 coleta/servidor_local.py --pasta municipios/site --porta 8471 &
# abra: http://localhost:8471/   # o la simulación: http://localhost:8471/?sim=1

Detalles, pruebas con el 1er turno y límites conocidos: municipios/README.md.

Proyección INEMA · estimación

Hacia dónde va el conteo, antes de terminar

En eleicoes.inema.club/projecao.html (ítem Projeção del menú) INEMA estima el resultado final a partir de los votos ya escrutados. El número parcial engaña porque las ciudades pequeñas y algunas regiones cierran antes; la proyección corrige eso. Es una estimación, siempre marcada como tal: gana quien el TSE (Tribunal Superior Electoral) declare electo.

Página de la Proyección: los dos candidatos con el rango probable, lo que falta para la remontada y el gráfico de la proyección a lo largo de la noche (simulación)

🔁 Transferencia de votos

En las ciudades que ya cerraron, comparamos la 1.ª y la 2.ª vuelta y estimamos hacia dónde fue cada grupo (votantes de cada candidato, blancos y nulos, quienes no votaron), por región, estado, tamaño y perfil de la ciudad. Después aplicamos eso a la 1.ª vuelta de las ciudades que faltan.

📏 Rango medido

Cada número viene con un rango probable. Lo probamos con la elección real de 2022 y con la simulación: con el 5% de las ciudades cerradas el error medio fue de 0,3 puntos, frente a 4,7 del número parcial, y el rango contuvo el resultado final en el 98,7% de los 224 escenarios.

🗺️ Por estado

El botón Ver por estado (ver por estado) muestra cada estado en una línea, con barra, rango y lo escrutado por el TSE. Un estado con poco escrutinio aparece como “inestable”. En las pruebas, el rango de los estados acertó en el 95,5% de los casos.

Lo que falta para la remontada

Cuántos votos válidos aún faltan y qué porción de ellos necesitaría el candidato que va detrás para darle la vuelta, comparado con lo que indica la proyección.

Historial de la noche

Cada proyección publicada queda guardada, sin reescribirse, y se convierte en un gráfico que compara la proyección con lo escrutado por el TSE. Permite verificar después dónde acertó y dónde falló.

Se activa sola

Solo aparece con al menos 250 ciudades cerradas, 15 en cada región, 3 en cada uno de 20 estados y el 1% del electorado. No usa encuestas de opinión, solo votos oficiales del TSE. En la simulación, no aparece.

Lista Ver por estado: cada estado con barra, rango probable y lo escrutado por el TSE (simulación)

Fonte e auditoria · Compartilhar

En el panel, la sección Fonte e auditoria (fuente y auditoría) muestra el dato de la pantalla con el enlace al archivo oficial del TSE, los horarios (totalización, generación, recolección), la versión y la huella digital (sha256), además de cómo lo obtenemos, qué verificamos y cómo cualquier persona puede verificarlo. El botón Compartilhar (compartir) abre el menú del celular o copia el enlace, sin servidor y sin costo.

Ejecutando la proyección en su máquina

# prueba con la elección de 2022 (datos abiertos del TSE en saida/backtest2022/bruto)
python3 projecao/backtest_2022.py saida/backtest2022/bruto
# medición del rango (varios escenarios, en paralelo)
python3 projecao/calibracao.py saida/backtest2022/bruto 14
# servicio: recalcula cuando los datos cambian y graba saida/oficial/data/projecao.json
python3 projecao/projetar.py --laco 60

Código y detalles: projecao/. Requiere numpy y scipy.

Después del conteo

Análisis del resultado y un chat para resolver dudas

Con el resultado final del TSE, el panel ganó páginas que comparan la 1.ª y la 2.ª vuelta ciudad por ciudad, separando siempre lo que es hecho (cuenta sobre los números del TSE) de lo que es estimación (modelo de la Proyección). Todas están en el menú del panel.

📊 Análise (Análisis)

Qué cambió de la 1.ª a la 2.ª vuelta en cada ciudad y estado, ciudades que cambiaron de ganador, senado y gobernador comparados con presidente.

🔎 Raio-X (Rayos X)

De dónde vino la diferencia, dónde se concentró y el papel de la participación.

✅ Conferência (Verificación)

Brasil = suma de los estados + exterior, cada estado = suma de las ciudades, integridad de los archivos descargados y el exterior sección por sección según los boletines de urna.

❓ Por que perdeu (Por qué perdió)

Aliados electos de cada lado, dónde se dividió el voto y las explicaciones posibles, rotuladas como hipótesis.

± A virada (El vuelco)

Cómo Lula ganó 10,4 millones de votos de la 1.ª a la 2.ª vuelta: la cuenta que siempre cierra, la "coincidencia" que no prueba nada y la verificación de los gráficos que circularon.

💬 Tire suas dúvidas (Resuelve tus dudas)

Chat grande a la derecha de todas las páginas: una IA (Claude) responde solo con los números del sitio y dice de qué página provienen. Las conversaciones se guardan de forma anónima para análisis.

🏗️ Cómo se construyó

Por qué el panel aguanta a millones de personas sin tumbar el servidor, cuánto cuesta, la VPS de reserva y las técnicas usadas: página Cómo se hizo y ARQUITETURA.md (en portugués).

Ejemplos

Cómo se ve en pantalla

Imágenes de la simulación (nombres ficticios). El día de la elección, los mismos paneles muestran los datos oficiales.

Panel Central: mapa de Brasil llenándose, distribución de los votos y resultado por estado
Central: mapa de Brasil, indicadores, distribución de los votos, avance del conteo y resultado por estado.
Panel de un estado, con el estado resaltado en el mapa
Al hacer clic en un estado: los mismos bloques solo de ese estado, resaltado en el mapa.
Roadmap

Lo que ya existe y lo que viene después

La primera versión se hizo para la segunda vuelta del 25/10/2026.

Hecho
Presidente · Brasil + 27 estados + exteriorColector con verificación, paneles Central y Clásica, mapa real, simulación acelerada, publicación estática.
Hecho
MunicipiosMapa de cada estado con las ciudades coloreándose en vivo, votos y evolución del estado, 10 ciudades y simulación, en municipios.inema.club (24/10/2026).
Hecho
Proyección, auditoría y compartirProyección del resultado final por transferencia de votos, con rango medido, lista por estado, historial de la noche y lo que falta para el vuelco; sección Fonte e auditoria (Fuente y auditoría) y botón Compartilhar (Compartir) (25/10/2026).
Hecho
Análisis del resultado y chatAnálise (Análisis), Raio-X (Rayos X), Conferência (Verificación), Por que perdeu (Por qué perdió), A virada (El vuelco) y el chat "Tire suas dúvidas" (Resuelve tus dudas) (25 y 26/10/2026).
Hecho
Operación en la VPSDespués del conteo, la recolección de datos, los análisis y la publicación pasaron a la VPS de reserva; el sitio siguió en Cloudflare sin salir del aire (26/10/2026).
Después
Otras eleccionesGobernador y las próximas elecciones: como el colector y la pantalla están separados, solo cambia la parte del colector.