Skip to content

feat(eixo1): fontes do Cultura em Números por DAG e IPCA 433 no BACEN - #146

Merged
devwallyson merged 2 commits into
mainfrom
feat/eixo1-fontes-ingestao
Nov 3, 2026
Merged

devwallyson merged 2 commits into
mainfrom
feat/eixo1-fontes-ingestao

Conversation

@ananunesv

Copy link
Copy Markdown
Collaborator

Descrição

Traz para o pipeline as fontes do Eixo 1 do Cultura em Números que estavam fora dele, levantadas no relatório de cobertura das 65 análises do repositório cultura-em-numeros-eixo-1.

Ajustes em DAGs existentes

  • bacen_sgs_ingest_dag: o default passa a trazer o IPCA (SGS 433), deflator dos scripts do Eixo 1, além do IPCA-Serviços (10844).
  • extracao_bbagil_dag: Variable nova bsc_pnab_anos_extras_por_programa ({"<codigo_programa>": [anos]}), que pede anos a mais só para as contas daquele programa. Serve para a LAB 1 de 2020 a 2022. Vazia por padrão: comportamento igual ao de hoje.

DAGs novas (ADR 0012: raw → staging → seeds)

  • ibge_perfil_dag: 10 edições da MUNIC e da ESTADIC do FTP do IBGE, uma tabela por aba e edição (seeds.ibge_<edicao>_<aba>). O catálogo guarda as abas esperadas e o número de entes por aba; edição republicada com outra aba ou outra contagem faz a task falhar.
  • siop_execucao_dag: execução orçamentária federal pelo SPARQL público do SIOP, por exercício (seeds.siop_execucao_orcamentaria). Substitui a planilha carregada à mão em siop.execucao_orcamentaria. A soma é feita em centavos porque o Virtuoso arredonda SUM de decimal.
  • tesouro_transparente_dag: RCL da União de 2000 ao 2º quadrimestre de 2018, do conjunto “Limites da LRF para a União: DCL” (seeds.tesouro_transparente_lrf_uniao_dcl).

Apoio: plugins/seeds_carga.py (carga genérica em seeds, DELETE + COPY por período, tabela de controle por fonte) e datalakehouse.gravar_parquet (staging dividido em partes abaixo do limite do proxy do MinIO).

Issue relacionada

Closes #

Tipo de mudança

  • Ingestão — cliente de API, DAG, carga
  • Documentação

Impacto em dados

  • Schemas e tabelas afetados: seeds.ibge_* (90 tabelas), seeds.siop_execucao_orcamentaria, seeds.tesouro_transparente_lrf_uniao_dcl, seeds.<fonte>_controle_carga; bacen.serie_sgs ganha a série 433.
  • Camada: raw / staging / seeds.
  • Precisa reexecutar alguma coisa depois do merge? Sim, em qualquer ordem: ibge_perfil_dag com {}; siop_execucao_dag uma vez com {"anos": [2003, ..., 2026]}; tesouro_transparente_dag com {}; bacen_sgs_ingest_dag. Se a Variable bacen_series_sgs existir no servidor, incluir "ipca": 433 nela, porque ela vence o default.
  • Muda número que já está em uso? Não. Nenhum modelo dbt lê as tabelas novas ainda; silver_serie_sgs passa a ter duas séries, e quem usar como deflator precisa filtrar codigo_serie.

Como testar

make test

Evidências

  • IBGE: aba Cultura da MUNIC 2021 (5.570 × 239), Cultura da ESTADIC 2021 (27 × 202) e Conselhos da MUNIC 2006 (5.564 × 67) idênticas à carga manual em munic.* e estadic.*, exceto uma data de 2006 que sai sem T00:00:00. As 10 planilhas do FTP passam na conferência de abas e de entes.
  • SIOP 2023: R$ 4.593.770.423.086,37 empenhados, igual à planilha; 2.562 combinações contra 2.559, e as 3 a mais têm empenho zero.
  • Carga em Postgres descartável: duas cargas seguidas da MUNIC 2021 deram 5.570 linhas, sem duplicar.
  • Suíte completa numa imagem construída do Dockerfile: 8.184 passed, 61 skipped.

Checklist

  • Título segue Conventional Commits
  • Issue relacionada referenciada acima
  • Rodei make lint localmente — black, ruff e mypy nos arquivos alterados; os avisos que sobram já existiam na main
  • Rodei make test localmente — na imagem do Airflow construída do Dockerfile
  • Nenhuma credencial, CPF, CNPJ ou dado pessoal no código, no log ou no print
  • Branch atualizada com origin/main
  • Documentação afetada atualizada (make docs-collect; entregas.json ficou como na main)## Descrição

Traz para o pipeline as fontes do Eixo 1 do Cultura em Números que estavam fora dele, levantadas no relatório de cobertura das 65 análises do repositório cultura-em-numeros-eixo-1.

Ajustes em DAGs existentes

  • bacen_sgs_ingest_dag: o default passa a trazer o IPCA (SGS 433), deflator dos scripts do Eixo 1, além do IPCA-Serviços (10844).
  • extracao_bbagil_dag: Variable nova bsc_pnab_anos_extras_por_programa ({"<codigo_programa>": [anos]}), que pede anos a mais só para as contas daquele programa. Serve para a LAB 1 de 2020 a 2022. Vazia por padrão: comportamento igual ao de hoje.

DAGs novas (ADR 0012: raw → staging → seeds)

  • ibge_perfil_dag: 10 edições da MUNIC e da ESTADIC do FTP do IBGE, uma tabela por aba e edição (seeds.ibge_<edicao>_<aba>). O catálogo guarda as abas esperadas e o número de entes por aba; edição republicada com outra aba ou outra contagem faz a task falhar.
  • siop_execucao_dag: execução orçamentária federal pelo SPARQL público do SIOP, por exercício (seeds.siop_execucao_orcamentaria). Substitui a planilha carregada à mão em siop.execucao_orcamentaria. A soma é feita em centavos porque o Virtuoso arredonda SUM de decimal.
  • tesouro_transparente_dag: RCL da União de 2000 ao 2º quadrimestre de 2018, do conjunto “Limites da LRF para a União: DCL” (seeds.tesouro_transparente_lrf_uniao_dcl).

Apoio: plugins/seeds_carga.py (carga genérica em seeds, DELETE + COPY por período, tabela de controle por fonte) e datalakehouse.gravar_parquet (staging dividido em partes abaixo do limite do proxy do MinIO).

Issue relacionada

Closes #

Tipo de mudança

  • Ingestão — cliente de API, DAG, carga
  • Documentação

Impacto em dados

  • Schemas e tabelas afetados: seeds.ibge_* (90 tabelas), seeds.siop_execucao_orcamentaria, seeds.tesouro_transparente_lrf_uniao_dcl, seeds.<fonte>_controle_carga; bacen.serie_sgs ganha a série 433.
  • Camada: raw / staging / seeds.
  • Precisa reexecutar alguma coisa depois do merge? Sim, em qualquer ordem: ibge_perfil_dag com {}; siop_execucao_dag uma vez com {"anos": [2003, ..., 2026]}; tesouro_transparente_dag com {}; bacen_sgs_ingest_dag. Se a Variable bacen_series_sgs existir no servidor, incluir "ipca": 433 nela, porque ela vence o default.
  • Muda número que já está em uso? Não. Nenhum modelo dbt lê as tabelas novas ainda; silver_serie_sgs passa a ter duas séries, e quem usar como deflator precisa filtrar codigo_serie.

Como testar

make test

Evidências

  • IBGE: aba Cultura da MUNIC 2021 (5.570 × 239), Cultura da ESTADIC 2021 (27 × 202) e Conselhos da MUNIC 2006 (5.564 × 67) idênticas à carga manual em munic.* e estadic.*, exceto uma data de 2006 que sai sem T00:00:00. As 10 planilhas do FTP passam na conferência de abas e de entes.
  • SIOP 2023: R$ 4.593.770.423.086,37 empenhados, igual à planilha; 2.562 combinações contra 2.559, e as 3 a mais têm empenho zero.
  • Carga em Postgres descartável: duas cargas seguidas da MUNIC 2021 deram 5.570 linhas, sem duplicar.
  • Suíte completa numa imagem construída do Dockerfile: 8.184 passed, 61 skipped.

Checklist

  • Título segue Conventional Commits
  • Issue relacionada referenciada acima
  • Rodei make lint localmente — black, ruff e mypy nos arquivos alterados; os avisos que sobram já existiam na main
  • Rodei make test localmente — na imagem do Airflow construída do Dockerfile
  • Nenhuma credencial, CPF, CNPJ ou dado pessoal no código, no log ou no print
  • Branch atualizada com origin/main
  • Documentação afetada atualizada (make docs-collect; entregas.json ficou como na main)

Copilot AI balanced review requested due to automatic review settings November 3, 2026 12:00

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

Anos extras repetidos geram chamadas duplicadas ao BB Ágil, e faltam testes de integração de substituir_periodo para verificar recarga sem duplicação, preservação de outros períodos e rollback quando o COPY falha.

2 open issues
What changed in this PR

Integra ao pipeline as fontes do Eixo 1 do Cultura em Números, reduzindo a dependência de cargas manuais e preparando os dados para consumo pelo dbt.

Mudanças:

  • Adiciona ingestões de IBGE, SIOP e Tesouro no fluxo raw → staging → seeds, com conferência de contagens.
  • Inclui IPCA 433 no padrão do BACEN e permite anos extras por programa no BB Ágil.
  • Acrescenta utilitários de carga, testes e atualiza o catálogo de documentação.
File Description
tests/​test_seeds_carga.py Testa normalização, CSV e conferência de contagens.
tests/​test_dags_fontes_eixo1.py Verifica dependências, parâmetros e saídas das DAGs.
tests/​test_cliente_tesouro_transparente.py Testa leitura do CSV e descoberta do recurso CKAN.
tests/​test_cliente_siop.py Testa consulta e conversão exata de valores monetários.
tests/​test_cliente_ibge_perfil.py Valida catálogo, abas, contagens e arquivos ZIP.
tests/​test_agencias_bbagil.py Testa períodos extras por programa.
plugins/​seeds_carga.py Implementa substituição por período e controle de carga.
plugins/​schemas_minc.py Centraliza identificadores das novas fontes.
plugins/​config_bsc_pnab.py Adiciona configuração de anos extras por programa.
plugins/​cliente_tesouro_transparente.py Obtém metadados e registros do Tesouro.
plugins/​cliente_siop.py Consulta execução federal e converte centavos em reais.
plugins/​cliente_ibge_perfil.py Cataloga e lê edições da MUNIC e ESTADIC.
plugins/​agencias_bbagil.py Combina períodos-base e extras por programa.
helpers/​datalakehouse.py Expõe gravação de registros em Parquet particionado.
docs-pages/​src/​_data/​dbt.json Atualiza descrições das séries BACEN no catálogo.
docs-pages/​src/​_data/​airflow.json Registra novas DAGs e clientes no catálogo.
dbt/​minc/​models/​bacen/​schema.yml Documenta IPCA 433 e filtro por série.
dags/​data_ingest/​tesouro/​tesouro_transparente_dag.py Orquestra carga dos recursos do Tesouro em seeds.
dags/​data_ingest/​siop/​siop_execucao_dag.py Orquestra carga da execução federal por exercício.
dags/​data_ingest/​ibge/​ibge_perfil_dag.py Orquestra carga das planilhas por edição e aba.
dags/​data_ingest/​bsc_pnab/​extracao_bbagil_dag.py Aplica períodos extras às contas dos programas configurados.
dags/​data_ingest/​bacen/​bacen_sgs_ingest_dag.py Inclui IPCA 433 nas séries padrão.

Review effort: Balanced

Comment on lines +64 to +65
vistos = set(periodos)
return list(periodos) + [p for p in adicionais if p not in vistos]
Comment thread plugins/seeds_carga.py

alvo = f"{_ident(schema)}.{_ident(tabela)}"
lista = ", ".join(_ident(c) for c in colunas)
with psycopg2.connect(conn_str) as conn, conn.cursor() as cursor:
@devwallyson
devwallyson merged commit 3c2d5c6 into main Nov 3, 2026
7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants