Skip to content

Repository files navigation

Pipeline Transdata → MySQL → Painel Web / Power BI

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

O que este projeto faz

[ 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_diario para consultas rápidas no painel
  • Retry HTTP automático (rede / 429 / 5xx)
  • Validação do .env antes de correr
  • Logs em logs/etl_YYYYMMDD.log
  • Painel web Flask com alertas antifraude, export CSV/PDF e login opcional
  • Testes automatizados + GitHub Actions

Stack

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)

Dashboard (Power BI)

Página: Visão Geral — acessos diários, valor usado e comparativo por operadora.

Dashboard Visão Geral — Power BI

Guia: docs/POWERBI_PAGINA1.md

Painel web interno

Substitui o Power BI no uso diário interno. Identidade visual Viação Praiana.

Visão geral do painel web

Operação — mapa de calor

Revisão antifraude estudantil

Substitua os SVGs por capturas reais quando possível — veja docs/COMO_ADICIONAR_PRINT.md.

Funcionalidades

  • 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

Como executar

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 .env

Edite o .env com CLIENT_ID, CLIENT_SECRET, DB_URI e DATA_INICIAL.

python main.py
# ou
.\scripts\run_etl.bat

Painel web

.\scripts\run_dashboard.bat

Acesse http://localhost:5050. Atalho na área de trabalho:

.\scripts\create_dashboard_shortcut.ps1

Login opcional — defina no .env:

DASHBOARD_USER=admin
DASHBOARD_PASSWORD=sua_senha
DASHBOARD_SECRET_KEY=chave-aleatoria

Resumo diário

.\scripts\run_daily_summary.bat

Agendar às 07:00:

.\scripts\register_daily_summary_task.ps1

Testes

pytest tests/ -q

Estrutura

├── 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/

GitHub (portfólio)

Sugestão de topics: python, etl, flask, mysql, power-bi, data-engineering, transport

Descrição sugerida: ETL Transdata → MySQL → painel web interno + Power BI

Segurança

  • Secrets ficam só no .env local (não versionado)
  • Login do painel é opcional; na rede interna pode ficar desativado
  • Alertas usam série interna (NumSerie), não dados pessoais

Autor

Auxiliar de TI em transição para desenvolvimento / dados.
Aberto a oportunidades de programador júnior ou analista de dados júnior.

About

ETL Transdata → MySQL → painel web interno + Power BI

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages