Pipeline ETL em Python para extrair dados operacionais da API Atlas Transdata (OAuth 2.0), gravar em MySQL com carga incremental e disponibilizar indicadores no Power BI ou em painel web interno.
Repo: https://github.com/jbr121/transdata-etl-powerbi
Licença: MIT
[ API Atlas Transdata ] ── OAuth 2.0 ──► [ Python ETL (main.py) ]
│
factos: INCREMENTAL
cadastros: FULL
resumo: tb_resumo_diario
▼
[ Power BI / Painel web ] ◄──── MySQL ──── [ db_transdata ]
- Autenticação OAuth 2.0 (
client_credentials) - Extração paginada por âncora de data (com retry por operadora)
- Suporte a múltiplas operadoras (
ITJ-1,ITJ-2,ITJ-3) - Carga incremental nos factos + full nos cadastros
- Tabela
tb_resumo_diariopara consultas rápidas no painel - Retry HTTP automático (rede / 429 / 5xx)
- Validação do
.envantes de correr - Logs em
logs/etl_YYYYMMDD.log - Painel web Flask com alertas antifraude, export CSV/PDF e login opcional
- Testes automatizados + GitHub Actions
| Tecnologia | Uso |
|---|---|
| Python 3 | ETL, painel e testes |
| Requests | HTTP + retries |
| Pandas + SQLAlchemy | Transformação e carga |
| MySQL | Armazenamento |
| Flask + Waitress | Painel web interno |
| fpdf2 | Exportação PDF de alertas |
| pytest | Testes unitários |
| Power BI | Visualização (opcional) |
Página: Visão Geral — acessos diários, valor usado e comparativo por operadora.
Guia:
docs/POWERBI_PAGINA1.md
Substitui o Power BI no uso diário interno. Identidade visual Viação Praiana.
Substitua os SVGs por capturas reais quando possível — veja
docs/COMO_ADICIONAR_PRINT.md.
- Filtros por operadora, período, tipo de cartão e produto
- Transações, valor usado, viagens e operadoras ativas
- Mapa de calor, arrecadação por hora, linhas e quedas de movimento
- Revisão antifraude (estudante e idoso) com ranking de risco
- Histórico de alertas, exportação CSV e PDF
- Saúde do ETL por operadora (inclui diagnóstico ITJ-3)
- Login opcional via
.env - Resumo diário por e-mail (
scripts/daily_summary.py)
Guia completo: docs/PAINEL_WEB_INTERNO.md
Arquitetura: docs/ARQUITETURA.md
git clone https://github.com/jbr121/transdata-etl-powerbi.git
cd transdata-etl-powerbi
python -m venv .venv
.venv\Scripts\activate
pip install -r requirements.txt
copy .env.example .envEdite o .env com CLIENT_ID, CLIENT_SECRET, DB_URI e DATA_INICIAL.
python main.py
# ou
.\scripts\run_etl.bat.\scripts\run_dashboard.batAcesse http://localhost:5050. Atalho na área de trabalho:
.\scripts\create_dashboard_shortcut.ps1Login opcional — defina no .env:
DASHBOARD_USER=admin
DASHBOARD_PASSWORD=sua_senha
DASHBOARD_SECRET_KEY=chave-aleatoria.\scripts\run_daily_summary.batAgendar às 07:00:
.\scripts\register_daily_summary_task.ps1pytest tests/ -q├── main.py # ETL Transdata → MySQL
├── dashboard.py # Entrada do painel (compat.)
├── painel/ # Módulos Flask refatorados
│ ├── queries.py # Consultas e alertas
│ ├── reviews.py # SQLite de revisões
│ └── auth.py # Login opcional
├── tests/ # pytest
├── scripts/ # .bat e agendamento Windows
├── sql/schema.sql
├── docs/
│ ├── ARQUITETURA.md
│ ├── PAINEL_WEB_INTERNO.md
│ └── painel-*.svg # Previews do painel
├── templates/
└── static/
Sugestão de topics: python, etl, flask, mysql, power-bi, data-engineering, transport
Descrição sugerida: ETL Transdata → MySQL → painel web interno + Power BI
- Secrets ficam só no
.envlocal (não versionado) - Login do painel é opcional; na rede interna pode ficar desativado
- Alertas usam série interna (
NumSerie), não dados pessoais
Auxiliar de TI em transição para desenvolvimento / dados.
Aberto a oportunidades de programador júnior ou analista de dados júnior.
