Código aberto · dados oficiais do TSE

Apuração das eleições ao vivo, num mapa do Brasil

Um painel que lê os arquivos públicos do TSE, confere as contas e mostra cada estado se preenchendo a cada 15 segundos.

Banner: apuração ao vivo, Eleições 2026 com dados oficiais do TSE
Em resumo

O INEMA Eleições 2026 é um painel aberto para acompanhar a apuração do 2º turno para Presidente com os dados oficiais do TSE (Tribunal Superior Eleitoral). Serve para quem quer ver o resultado do Brasil e de cada estado num mapa, sem números inventados. Um coletor busca os arquivos públicos do TSE a cada 15 segundos, confere as contas e publica arquivos prontos; o site só lê esses arquivos. Para acompanhar, basta abrir eleicoes.inema.club; para rodar o seu, você só precisa de Python 3.

O que é

Coleta, contrato e painel: três partes separadas

A coleta lê o TSE e grava arquivos; o contrato define o formato desses arquivos; o painel só lê os arquivos e desenha a tela. A coleta não sabe nada de tela, e o painel nunca fala com o TSE.

Mapa do Brasil, coletor do TSE, conferência, evolução, estados e código aberto

🗳️ Coletor que confere

Baixa só o estado que mudou. Antes de publicar, confere: votos dos candidatos = válidos; válidos + brancos + nulos = total; seções nunca diminuem. Se algo não fecha, aquele estado não é publicado e fica o último valor válido.

🗳️ Painel em duas versões

Central, com mapa real do Brasil que se preenche estado por estado, e Clássica, com 4 estilos (noite, papel, telejornal e alto contraste). Clique num estado e abre o painel dele.

🗳️ Simulação para testar

Botão Simulação no menu: a apuração vai de 0% a 100% em cerca de um minuto, com nomes fictícios e com eleitorado, comparecimento, brancos e nulos de cada estado tirados do 1º turno.

Como funciona

Do arquivo do TSE até a sua tela

Quem visita o site só baixa arquivos prontos. O único que conversa com o TSE é o coletor, uma vez a cada 15 segundos. O manifesto (latest.json) é a lista do que está valendo agora; ele é sempre o último arquivo publicado, para nunca apontar para um arquivo que ainda não chegou.

Índice do TSE (só o que mudou)→ Guarda o arquivo original→ Confere as contas→ Publica versões novas→ Manifesto por último→ Site lê a cada 15 s

Só o que mudou

O coletor pede o índice com etiqueta de versão (ETag). Sem novidade, o TSE responde "não mudou" e nada é baixado.

Nada inventado

Percentuais vêm do próprio TSE. O que é conta do painel (diferença entre os dois, por exemplo) aparece marcado como calculado.

Rastreável

Cada número publicado traz a hora oficial do TSE, a hora da coleta, a versão e a impressão digital (sha256) do arquivo original.

Pré-requisitos

O que você precisa

Para só acompanhar a apuração: nada, é abrir o site. Para rodar o seu painel:

Python 3

Versão 3.8 ou mais nova. O coletor e o servidor de teste usam só a biblioteca padrão: não precisa instalar pacote. Os comandos são para Linux ou macOS (bash); no Windows, use o WSL.

python3 --version

Git

Para baixar o projeto.

git --version

Opcional: Cloudflare

Só se quiser publicar na internet. Precisa de Node.js e do wrangler logado na sua conta.

npx wrangler login
Guia de uso · passo a passo

Rodando o painel na sua máquina

Comandos reais do repositório, na ordem. Rode a partir da pasta do projeto.

1

Baixe o projeto

Clona o repositório público.

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

Veja funcionando com a simulação

Sobe o servidor de teste em segundo plano (o & no fim) e abre o painel no modo simulação acelerada. Não precisa do TSE nem de dados. O servidor não mostra nada na tela; ele fica rodando até você parar.

python3 coleta/servidor_local.py --pasta site --porta 8470 &
# abra no navegador: http://localhost:8470/?sim=1
# não pare ainda: o passo 4 usa este servidor. Para parar no fim:
pkill -f "porta 8470"
3

Teste o coletor com o 1º turno real

Lê os dados finais do 1º turno (eleição 6257, 12 candidatos), confere tudo e publica em saida/teste1t/data. Rodando de novo, o TSE responde "não mudou".

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

No TSE, o pleito é a votação de um dia (3220 = 04/10/2026) e cada pleito tem as suas eleições (6257 = Presidente no 1º turno); --n-cand 0 desliga a conferência da quantidade de candidatos (no 1º turno são 12) e --uma-vez roda um ciclo só. Os passos 3, 4 e 5 precisam de internet: os dois primeiros acessam resultados.tse.jus.br e o 5 baixa de lá os dados do 1º turno que servem de base à simulação.

4

Ligue a coleta oficial do 2º turno

Fica vigiando o TSE a cada 15 segundos (eleição 6258, Presidente). Depois aponte o site para os dados oficiais.

python3 coleta/coletor.py --saida saida/oficial --intervalo 15 &
ln -sfn ../saida/oficial/data site/data   # o site passa a ler os dados oficiais
sleep 20; cat saida/oficial/status.json             # último ok, erros, bloqueios

O & no fim da primeira linha deixa o coletor rodando em segundo plano, junto com o servidor do passo 2; o sleep 20 espera o 1º ciclo antes de mostrar o status. Abra http://localhost:8470/ (sem ?sim=1): os dados aparecem depois do 1º ciclo, uns 15 segundos. Até a apuração começar (25/10, por volta das 17h), o painel mostra "Aguardando apuração" com tudo zerado: é o normal. Para parar o coletor: pkill -f "saida/oficial".

5

Teste as falhas com um "TSE falso"

Um servidor local imita o TSE com problemas de propósito: arquivo corrompido, seções diminuindo, índice e arquivos fora de ordem. O coletor tem de passar por tudo sem publicar nada errado.

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

O coletor para sozinho em 4 minutos (timeout 240), tempo para a simulação ir de 0% a 100%. Deu certo se saida/testemock/status.json mostrar pendentes e bloqueios vazios e grep BLOQUEIO saida/testemock/coleta.jsonl mostrar um bloqueio de SP (arquivo corrompido) e outro de RJ (seções diminuíram); BLOQUEIO é o nome do evento no log. O simulador termina sozinho; depois pare o servidor falso: pkill -f "porta 8471". Antes de começar, o simulador baixa uns 29 arquivos do TSE; com internet lenta, aumente o timeout.

6

Publique na internet (opcional)

Troque o domínio em ferramentas/cloudflare/wrangler.toml pelo seu e rode o publicador: ele envia ao Cloudflare a cada mudança dos dados.

python3 ferramentas/publicar_cf.py --laco 20

O wrangler é a ferramenta de linha de comando do Cloudflare; o publicador roda npx --yes wrangler@4 deploy, por isso o npx wrangler login dos pré-requisitos é obrigatório. Ele envia saida/oficial/data para a raiz do site e, se existir, a simulação em saida/simficticio/data para /simulacao/; então o coletor do passo 4 precisa estar rodando. Para publicar também a simulação, gere antes: python3 coleta/simular.py --saida saida/simficticio/data --intervalo 60 --ficticio &. O publicador fica rodando e vigiando; para parar, Ctrl+C. O domínio tem de estar numa zona da sua conta Cloudflare (zona = um domínio administrado nela).

Municípios · sistema à parte

Cada cidade no mapa, saindo do cinza conforme o TSE apura

Em municipios.inema.club cada estado aparece com os seus municípios desenhados. A cidade começa cinza e fica vermelha ou azul, na cor de quem lidera nela; quanto mais forte a cor, mais seções já foram apuradas. No painel, o item Municípios do menu e o botão Ver os municípios no quadro do estado levam direto para lá.

Mapa de Minas Gerais com os municípios coloridos, votos do estado, evolução e lista de cidades (simulação com nomes fictícios)

🗺️ Mapa por estado

Escolha o estado nos botões de cima. Passe o mouse ou o dedo numa cidade para ver os números; clique para abrir o quadro completo dela. Tem zoom e busca pelo nome.

📊 Votos e evolução

Barra com o total de cada candidato no estado (soma das cidades já apuradas, marcada como cálculo do INEMA) e gráfico da evolução ao longo da noite.

🏙️ 10 cidades

Lista das 10 cidades em três ordens: maiores (mais eleitores), mais apuradas e 100% apuradas.

Separado do painel

Coletor, arquivos e site próprios. O coletor lê os 27 índices por estado do TSE e baixa só as cidades que mudaram, as que esperam há mais tempo primeiro. Se ele parar, o painel principal não é afetado.

Mesmas conferências

Cada cidade passa pelas mesmas regras do painel. Uma cidade com conta que não fecha fica com o último valor bom; o resto do estado segue.

Mapa do IBGE

Desenho dos 5.570 municípios vindo da malha oficial do IBGE, ligado ao TSE pelo código IBGE de cada cidade.

Rodando os municípios na sua máquina

Depois do passo 1 do guia (projeto baixado). Comandos reais do repositório, a partir da pasta do projeto.

# 1. (opcional) o desenho já vem no repositório; isto o refaz a partir da malha do IBGE
python3 municipios/gerar_malhas.py
# 2. coletor do 2º turno (fica rodando; a cada 15 s)
python3 municipios/coletor_mun.py --saida saida/municipios &
# 3. site local
ln -sfn ../../saida/municipios/data municipios/site/data
python3 coleta/servidor_local.py --pasta municipios/site --porta 8471 &
# abra: http://localhost:8471/   # ou a simulação: http://localhost:8471/?sim=1

Detalhes, testes com o 1º turno e limites conhecidos: municipios/README.md.

Projeção INEMA · estimativa

Para onde a apuração está indo, antes de terminar

Em eleicoes.inema.club/projecao.html (item Projeção do menu) o INEMA estima o resultado final a partir dos votos já apurados. O número parcial engana porque as cidades pequenas e algumas regiões fecham antes; a projeção corrige isso. É estimativa, sempre marcada como tal: quem vence é quem o TSE declarar eleito.

Página da Projeção: os dois candidatos com a faixa provável, o que falta para a virada e o gráfico da projeção ao longo da noite (simulação)

🔁 Transferência de votos

Nas cidades que já encerraram, comparamos o 1º e o 2º turno e estimamos para onde foi cada grupo (eleitores de cada candidato, brancos e nulos, quem não votou), por região, estado, porte e perfil da cidade. Depois aplicamos isso no 1º turno das cidades que faltam.

📏 Faixa medida

Cada número vem com uma faixa provável. Testamos com a eleição real de 2022 e com a simulação: com 5% das cidades encerradas o erro médio foi de 0,3 ponto, contra 4,7 do número parcial, e a faixa conteve o resultado final em 98,7% dos 224 cenários.

🗺️ Por estado

O botão Ver por estado mostra cada estado numa linha, com barra, faixa e o apurado do TSE. Estado com pouca apuração aparece como “instável”. Nos testes, a faixa dos estados acertou em 95,5% dos casos.

O que falta para a virada

Quantos votos válidos ainda faltam e que fatia deles o candidato que está atrás precisaria para virar, comparado com o que a projeção indica.

Histórico da noite

Cada projeção publicada fica guardada, sem ser reescrita, e vira um gráfico comparando a projeção com o apurado do TSE. Dá para conferir depois onde acertou e onde errou.

Liga sozinha

Só aparece com pelo menos 250 cidades encerradas, 15 em cada região, 3 em cada um de 20 estados e 1% do eleitorado. Não usa pesquisa de opinião, só votos oficiais do TSE. Na simulação, não aparece.

Lista Ver por estado: cada estado com barra, faixa provável e apurado do TSE (simulação)

Fonte e auditoria · Compartilhar

No painel, a seção Fonte e auditoria mostra o dado da tela com o link para o arquivo oficial do TSE, os horários (totalização, geração, coleta), a versão e a impressão digital (sha256), além de como buscamos, o que conferimos e como qualquer pessoa pode conferir. O botão Compartilhar abre o menu do celular ou copia o link, sem servidor e sem custo.

Rodando a projeção na sua máquina

# teste com a eleição de 2022 (dados abertos do TSE em saida/backtest2022/bruto)
python3 projecao/backtest_2022.py saida/backtest2022/bruto
# medição da faixa (vários cenários, em paralelo)
python3 projecao/calibracao.py saida/backtest2022/bruto 14
# serviço: recalcula quando os dados mudam e grava saida/oficial/data/projecao.json
python3 projecao/projetar.py --laco 60

Código e detalhes: projecao/. Precisa de numpy e scipy.

Depois da apuração

Análises do resultado e um chat para tirar dúvidas

Com o resultado final do TSE, o painel ganhou páginas que comparam o 1º e o 2º turno cidade a cidade, sempre separando o que é fato (conta sobre os números do TSE) do que é estimativa (modelo da Projeção). Todas estão no menu do painel.

📊 Análise

O que mudou do 1º para o 2º turno em cada cidade e estado, cidades que viraram, senado e governador comparados com presidente.

🔎 Raio-X

De onde veio a diferença, onde ela se concentrou e o papel do comparecimento.

✅ Conferência

Brasil = soma dos estados + exterior, cada estado = soma das cidades, integridade dos arquivos baixados e o exterior seção a seção pelos boletins de urna.

❓ Por que perdeu

Aliados eleitos de cada lado, onde o voto se dividiu e as explicações possíveis, rotuladas como hipótese.

± A virada

Como Lula ganhou 10,4 milhões de votos do 1º para o 2º turno: a conta que sempre fecha, a "coincidência" que não prova nada e a checagem dos gráficos que circularam.

💬 Tire suas dúvidas

Chat grande à direita de todas as páginas: uma IA (Claude) responde só com os números do site e diz de qual página eles vêm. As conversas são gravadas de forma anônima para análise.

🏗️ Como foi construído

Por que o painel aguenta milhões de pessoas sem derrubar servidor, quanto custa, a VPS de reserva e as técnicas usadas: página Como foi feito e ARQUITETURA.md.

Exemplos

Como fica na tela

Imagens da simulação (nomes fictícios). No dia da eleição, os mesmos painéis mostram os dados oficiais.

Painel Central: mapa do Brasil se preenchendo, distribuição dos votos e resultado por estado
Central: mapa do Brasil, indicadores, distribuição dos votos, andamento da apuração e resultado por estado.
Painel de um estado, com o estado destacado no mapa
Clicando num estado: os mesmos blocos só daquele estado, com ele destacado no mapa.
Roadmap

O que já existe e o que vem depois

A primeira versão foi feita para o 2º turno de 25/10/2026.

Feito
Presidente · Brasil + 27 estados + exteriorColetor com conferência, painéis Central e Clássica, mapa real, simulação acelerada, publicação estática.
Feito
MunicípiosMapa de cada estado com as cidades colorindo ao vivo, votos e evolução do estado, 10 cidades e simulação, em municipios.inema.club (24/10/2026).
Feito
Projeção, auditoria e compartilharProjeção do resultado final por transferência de votos, com faixa medida, lista por estado, histórico da noite e o que falta para a virada; seção Fonte e auditoria e botão Compartilhar (25/10/2026).
Feito
Análises do resultado e chatAnálise, Raio-X, Conferência, Por que perdeu, A virada e o chat "Tire suas dúvidas" (25 e 26/10/2026).
Feito
Operação na VPSDepois da apuração, coleta, análises e publicação passaram para a VPS de reserva; o site seguiu no Cloudflare sem sair do ar (26/10/2026).
Depois
Outras eleiçõesGovernador e as próximas eleições: como coleta e tela são separadas, muda só a parte da coleta.