basedosdados / basedosdados/pipelines
[chore] Arrumar a organização do repositório de pipelines
- Dominant language
- Python
- Stars
- 49
- Forks
- 22
- Avg merge
- 1d 3h
- Merged PRs (30d)
- 167
Description
## Contexto
A pasta `pipelines/crawler/` concentra o código de ingestão de dados externos — downloads, scraping e parsing de fontes primárias. Ela surgiu no Prefect 0 com um padrão genérico chamado "dump from URL / dump to GCS" e cresceu sem uma convenção de nomenclatura uniforme.
Enquanto `pipelines/datasets/` usa o `dataset_id` exato do BigQuery como nome de pasta (ex: `br_me_caged/`), `crawler/` usa nomes arbitrários — às vezes o órgão (`cgu/`), às vezes a tabela (`bcb_taxa_cambio/`), às vezes um código diferente do dataset real (`bcb/` para `br_bcb_sicor`, `isp/` para `br_rj_isp_estatisticas_seguranca`).
## Problemas identificados
### 1. Nomenclatura inconsistente com `datasets/`
| Pasta em `crawler/` | Dataset real em `datasets/` | Problema |
|---|---|---|
| `bcb/` | `br_bcb_sicor` | Nome genérico |
| `cvm/` | `br_cvm_fi` | Ambíguo — CVM tem 3 datasets distintos |
| `isp/` | `br_rj_isp_estatisticas_seguranca` | Nome completamente diferente |
| `bndes/` | `br_bndes_operacoes_contratadas` | Nome truncado |
| `rf/` | `br_rf_cno` | Genérico — Receita Federal tem múltiplos datasets |
| `datasus/` | `br_ms_cnes`, `br_ms_sia`, `br_ms_sih`, `br_ms_sinan` | 4 datasets do MS sob um nome interno |
### 2. Crawlers que servem múltiplos datasets
Três crawlers concentram código de múltiplos datasets usando `if dataset_id == ...` nas tasks:
- **`crawler/cgu/`** → `br_cgu_beneficios_cidadao`, `br_cgu_cartao_pagamento`, `br_cgu_licitacao_contrato`, `br_cgu_servidores_executivo_federal`
- **`crawler/datasus/`** → `br_ms_cnes`, `br_ms_sia`, `br_ms_sih`, `br_ms_sinan`
- **`crawler/ibge_inflacao/`** → `br_ibge_inpc`, `br_ibge_ipca`, `br_ibge_ipca15`
### 3. O nome "crawler" não descreve bem o conteúdo
A maioria não faz scraping — são downloads diretos de portais de dados abertos (FTP, zip, CSV). O nome vem do jargão do Prefect 0.
### 4. Status de migração para Prefect 3
- **14 crawlers migrados** (com `flows.py`): `bcb`, `bndes`, `camara_dados_abertos`, `cgu`, `cvm`, `cvm_administradores_carteira`, `datasus`, `fgv_igp`, `ibge_inflacao`, `isp`, `me_cnpj`, `me_rais`, `rf`, `tse_eleicoes`
- **22 crawlers não migrados** (código legado Prefect 0, sem `flows.py`)
## Proposta
**Eliminar a pasta `crawler/` progressivamente**, movendo cada crawler para dentro de `datasets//` conforme é migrado para Prefect 3. O código de ingestão vai junto — não há razão para separá-lo do flow que o usa.
### Regras por tipo
**Caso 1 — 1 crawler : 1 dataset**
Mover tudo para `datasets//`:
```
crawler/bcb_taxa_cambio/ → datasets/br_bcb_taxa_cambio/
crawler/tse_eleicoes/ → datasets/br_tse_eleicoes/
```
**Caso 2 — 1 crawler : N datasets** (`cgu`, `datasus`, `ibge_inflacao`)
- Se a lógica de download é genuinamente compartilhada (mesmo endpoint): extrair para `utils/.py` e criar `flows.py` separado em cada `datasets//`
- Se apenas coexistem historicamente: separar em pastas independentes
`ibge_inflacao/` é o candidato mais claro para utils compartilhado: IPCA, INPC e IPCA15 usam a mesma API com parâmetros diferentes.
**Caso 3 — `anatel/` com subpastas**
Aplanar para o padrão:
```
crawler/anatel/banda_larga_fixa/ → datasets/br_anatel_banda_larga_fixa/
crawler/anatel/telefonia_movel/ → datasets/br_anatel_telefonia_movel/
```
### Recomendação
Não criar uma nova pasta intermediária. Migrar direto para `datasets/` e deixar `crawler/` encolher até poder ser removida.
Contributor guide
Assessment
This issue has not been assessed yet.