Skip to content

Dashboard público que expõe supersalários do Judiciário brasileiro acima do teto constitucional

Notifications You must be signed in to change notification settings

skottrun/extrateto

Repository files navigation

ExtraTeto

Supersalários do Judiciário Brasileiro expostos em dados

Next.js React TypeScript Tailwind CSS SQLite License: MIT

Dashboard público que expõe remunerações acima do teto constitucional no sistema de Justiça brasileiro. Dados reais. Transparência cidadã. Sem filtro.


Sobre

O ExtraTeto é uma plataforma de jornalismo de dados que monitora e expõe os supersalários do Judiciário brasileiro — remunerações que ultrapassam o teto constitucional de R$ 46.366,19.

O projeto coleta dados públicos da API do DadosJusBr, processa e armazena localmente em SQLite, e apresenta visualizações interativas que permitem qualquer cidadão fiscalizar como o dinheiro público está sendo gasto.

Por que isso importa?

  • Mais de 10.000 membros do Judiciário recebem acima do teto por mês
  • O total pago acima do teto ultrapassa R$ 6,5 bilhões por ano
  • A média de excesso por membro é de R$ 50.000/mês
  • Com esse dinheiro seria possível construir 206 hospitais ou 2.953 creches

Features

  • Ranking interativo — Busca, filtragem e ordenação de todos os membros do Judiciário por remuneração
  • Mapa de calor — Visualização geográfica dos supersalários por estado brasileiro
  • Estatísticas agregadas — Top 10 órgãos, composição da remuneração, comparações salariais
  • Páginas por órgão — Detalhamento individual de cada tribunal e ministério público
  • Detecção de anomalias — Variações atípicas de remuneração entre meses consecutivos com filtros por estado/órgão
  • Evolução temporal — Histórico mensal de pagamentos por membro
  • Sync automático — GitHub Action atualiza os dados nos dias 1, 10 e 20 de cada mês
  • API pública REST — Endpoints documentados para consumo externo dos dados
  • Exportação CSV — Download dos dados filtrados com proteção contra CSV injection
  • Compartilhamento social — Botões para Twitter/X, Facebook, WhatsApp e link direto
  • SEO otimizado — Open Graph, JSON-LD, sitemap, robots.txt
  • Responsivo — Layout adaptável de mobile a desktop

Tech Stack

Camada Tecnologia
Framework Next.js 16 (App Router, Server Components)
UI React 19 + TypeScript 5
Estilização Tailwind CSS 4
Gráficos Recharts 3
Animações Framer Motion 12
Ícones Lucide React
Banco de Dados SQLite via better-sqlite3
ORM Drizzle ORM
Busca SQLite FTS5 (full-text search server-side)
Virtualização @tanstack/react-virtual
Testes Vitest + Playwright
Fonte de Dados DadosJusBr API

Getting Started

Pré-requisitos

Instalação

# Clone o repositório
git clone https://github.com/skottrun/extrateto.git
cd extrateto

# Instale as dependências
npm install

Populando o banco de dados

O projeto usa SQLite local. Você precisa popular o banco antes de rodar:

# Opção 1: Seed com dados mock (rápido, para desenvolvimento)
npm run db:seed

# Opção 2: Sincronizar dados reais da API DadosJusBr
npm run db:sync

# Sincronizar um mês específico
npx tsx scripts/sync-data.ts --year 2025 --month 1

# Sincronizar todos os meses disponíveis
npx tsx scripts/sync-data.ts --all

# Forçar re-sincronização (sobrescreve dados existentes)
npx tsx scripts/sync-data.ts --year 2025 --month 1 --force

Rodando o projeto

# Servidor de desenvolvimento
npm run dev

# Build de produção
npm run build
npm start

Abra http://localhost:3000 no navegador.


Uso

Interface Web

Página Rota Descrição
Ranking / Lista completa com busca, filtros e ordenação
Mapa /mapa Mapa de calor por estado
Estatísticas /estatisticas Gráficos e análises agregadas
Órgãos /orgao Lista de tribunais e MPs
Detalhe Órgão /orgao/[slug] Dados detalhados por órgão
Anomalias /anomalias Detecção de variações atípicas de remuneração
API Docs /api-docs Documentação interativa da API
Metodologia /metodologia Explicação da coleta e tratamento
Sobre /sobre Sobre o projeto

API REST

# Listar membros (paginado)
curl http://localhost:3000/api/v1/membros?page=1&limit=10

# Filtrar por estado
curl http://localhost:3000/api/v1/membros?estado=SP

# Filtrar por órgão
curl http://localhost:3000/api/v1/membros?orgao=TJ-SP

# Buscar por nome
curl http://localhost:3000/api/v1/membros?nome=silva

# Apenas acima do teto
curl http://localhost:3000/api/v1/membros?acima_teto=true

# Ordenar
curl http://localhost:3000/api/v1/membros?sort=maior_acima_teto

# Histórico de um membro
curl "http://localhost:3000/api/v1/membros/historico?nome=João Silva&orgao=TJ-SP"

# Listar estados
curl http://localhost:3000/api/v1/estados

# Listar órgãos
curl http://localhost:3000/api/v1/orgaos

Estrutura de Pastas

extrateto/
├── .github/workflows/       # GitHub Actions (cron-sync automático)
├── data/                    # Banco SQLite (versionado, atualizado pelo cron)
├── e2e/                     # Testes E2E (Playwright)
├── scripts/
│   └── sync-data.ts         # Script de sincronização com DadosJusBr
├── public/                  # Assets estáticos
├── src/
│   ├── app/                 # Rotas (Next.js App Router)
│   │   ├── api/
│   │   │   ├── search/      # GET /api/search (busca FTS5)
│   │   │   └── v1/          # API REST
│   │   │       ├── estados/ # GET /api/v1/estados
│   │   │       ├── membros/ # GET /api/v1/membros
│   │   │       └── orgaos/  # GET /api/v1/orgaos
│   │   ├── anomalias/       # Página de detecção de anomalias
│   │   ├── estatisticas/    # Página de estatísticas
│   │   ├── mapa/            # Página do mapa
│   │   ├── orgao/           # Páginas de órgãos
│   │   └── ...              # Demais páginas
│   ├── components/          # Componentes React reutilizáveis
│   │   ├── brazil-map.tsx   # Mapa interativo do Brasil
│   │   ├── kpi-cards.tsx    # Cards de indicadores
│   │   ├── member-card.tsx  # Card de membro
│   │   ├── salary-bar.tsx   # Barra de composição salarial
│   │   └── ...
│   ├── data/                # Camada de dados e cache
│   │   └── get-members.ts   # Queries com cache em memória
│   └── lib/                 # Utilitários e banco
│       ├── db/              # Schema Drizzle + queries SQLite
│       ├── aggregations.ts  # Funções de agregação
│       ├── constants.ts     # Constantes (estados, órgãos, teto)
│       ├── export-csv.ts    # Exportação CSV segura
│       └── utils.ts         # Formatação de moeda, percentual, etc.
├── next.config.ts           # Configuração Next.js + security headers
├── middleware.ts             # Rate limiting + CORS
├── package.json
└── tsconfig.json

Testes

# Testes unitários
npm test

# Testes unitários em watch mode
npm run test:watch

# Testes E2E (requer servidor rodando)
npm run test:e2e

Roadmap

  • Autenticação para API (rate limiting público já implementado)
  • Notificações de novos dados disponíveis
  • Comparativo temporal (evolução ano a ano)
  • Exportação em PDF dos relatórios
  • Integração com dados do CNJ (Conselho Nacional de Justiça)
  • PWA (Progressive Web App) para acesso offline
  • Modo embarcado (widget para outros sites)
  • i18n (tradução para inglês)

Contribuição

Contribuições são bem-vindas! Para contribuir:

  1. Faça um fork do projeto
  2. Crie uma branch para sua feature (git checkout -b feature/minha-feature)
  3. Commit suas mudanças (git commit -m 'Adiciona minha feature')
  4. Push para a branch (git push origin feature/minha-feature)
  5. Abra um Pull Request

Diretrizes

  • Siga o padrão de código existente (TypeScript strict, ESLint)
  • Adicione testes para novas funcionalidades
  • Mantenha o README atualizado
  • Use commits descritivos em português

Licença

Distribuído sob a licença MIT. Veja LICENSE para mais informações.


Contato


Dados públicos, fiscalização cidadã.

Feito com dados do DadosJusBr

About

Dashboard público que expõe supersalários do Judiciário brasileiro acima do teto constitucional

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages