Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
72 commits
Select commit Hold shift + click to select a range
c46e6af
feat: criação de flow para o conjunto br_ms_sim
DaviMacielCavalcante Sep 3, 2026
079c31d
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] Sep 3, 2026
a3037cc
fix: ajustando para pedir * G de RAM
DaviMacielCavalcante Sep 3, 2026
dd101a9
Merge branch 'pipeline/br_ms_sim' of https://github.com/basedosdados/…
DaviMacielCavalcante Sep 3, 2026
5718249
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] Sep 3, 2026
b32ab64
chore: verificando se os recursos são alocados corretamente
DaviMacielCavalcante Sep 3, 2026
42f043e
Merge branch 'pipeline/br_ms_sim' of https://github.com/basedosdados/…
DaviMacielCavalcante Sep 3, 2026
0ef2b27
fix: trocando por cliente com autenticação
DaviMacielCavalcante Sep 3, 2026
61d4bc7
chore: removendo funções e logs de depuração
DaviMacielCavalcante Sep 3, 2026
2468e1a
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] Sep 3, 2026
2f4c18e
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] Sep 3, 2026
39211af
fix: adicionando uma coluna nova e impedindo do código continuar dele…
DaviMacielCavalcante Sep 3, 2026
27e2753
Merge branch 'pipeline/br_ms_sim' of https://github.com/basedosdados/…
DaviMacielCavalcante Sep 3, 2026
b3c05da
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] Sep 4, 2026
c51c05f
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] Sep 4, 2026
965a9fb
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] Sep 4, 2026
5aa8c17
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] Sep 4, 2026
68da8d3
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] Sep 4, 2026
4b0fa4d
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] Sep 7, 2026
874ab2c
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] Sep 7, 2026
5de24c2
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] Sep 7, 2026
d5c3c5b
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] Sep 7, 2026
0215acd
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] Sep 7, 2026
8a49427
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] Sep 7, 2026
08c5353
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] Sep 7, 2026
b50ffc7
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] Sep 7, 2026
4223e0e
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] Sep 8, 2026
f837655
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] Sep 8, 2026
8023d86
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] Sep 8, 2026
61b2be7
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] Sep 8, 2026
24cea63
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] Sep 8, 2026
f07ac41
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] Sep 8, 2026
451a1ec
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] Sep 9, 2026
3130f8c
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] Sep 9, 2026
4d6d5dc
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] Sep 9, 2026
9540ff1
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] Sep 9, 2026
2e3ae1f
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] Sep 9, 2026
40a57e2
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] Sep 9, 2026
a132c39
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] Sep 9, 2026
57e8e46
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] Sep 9, 2026
56a2e26
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] Sep 9, 2026
831e334
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] Sep 10, 2026
9d21398
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] Sep 10, 2026
82e05d8
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] Sep 10, 2026
f484a4f
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] Sep 10, 2026
49f9a0a
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] Sep 10, 2026
3eacabf
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] Sep 10, 2026
0e2857e
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] Sep 10, 2026
8a53d27
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] Sep 10, 2026
9c2984e
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] Sep 10, 2026
ad8f268
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] Sep 10, 2026
4d0eeea
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] Sep 10, 2026
a0e53f2
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] Sep 11, 2026
752a003
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] Sep 11, 2026
61c09b5
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] Sep 11, 2026
54af205
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] Sep 11, 2026
ae225eb
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] Sep 11, 2026
e4b13d9
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] Sep 11, 2026
085d339
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] Sep 11, 2026
2cb1c5e
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] Sep 11, 2026
2911b4d
chore: deixando o flow mais no padrão do repo
DaviMacielCavalcante Sep 11, 2026
b61661a
Merge branch 'pipeline/br_ms_sim' of https://github.com/basedosdados/…
DaviMacielCavalcante Sep 11, 2026
9ec90ea
fix(br_ms_sim): descrição de dado_preliminar sem quebra final
DaviMacielCavalcante Sep 11, 2026
d88406c
fix(br_ms_sim): remove chave memory, que o work pool descarta
DaviMacielCavalcante Sep 11, 2026
08f0d93
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] Sep 12, 2026
4fc414d
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] Sep 12, 2026
13ff52a
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] Sep 14, 2026
f0c65f3
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] Sep 15, 2026
7de81b7
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] Sep 15, 2026
e7109b0
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] Sep 15, 2026
4a980d5
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] Sep 15, 2026
4e8a127
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] Sep 15, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 3 additions & 4 deletions models/br_ms_sim/br_ms_sim__microdados.sql
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
-- Microdados SIM: carga 2020-2024; particao end: 2024 (ver README).
-- Staging reprocessado com cleaning.py (circunstancia_obito, estado_civil).
{{
config(
alias="microdados",
Expand All @@ -8,7 +6,7 @@
partition_by={
"field": "ano",
"data_type": "int64",
"range": {"start": 1996, "end": 2024, "interval": 1},
"range": {"start": 1996, "end": 2031, "interval": 1},
Comment thread
laura-l-amaral marked this conversation as resolved.
},
cluster_by="sigla_uf",
)
Expand Down Expand Up @@ -105,5 +103,6 @@ select
safe_cast(tipo_nivel_investigador as string) tipo_nivel_investigador,
safe_cast(numero_dias_informacao as int64) numero_dias_informacao,
safe_cast(fontes_informacao as string) fontes_informacao,
safe_cast(alt_causa as string) alt_causa
safe_cast(alt_causa as string) alt_causa,
safe_cast(coalesce(dado_preliminar, '0') as string) dado_preliminar
from {{ set_datalake_project("br_ms_sim_staging.microdados") }} as t
4 changes: 4 additions & 0 deletions models/br_ms_sim/schema.yml
Original file line number Diff line number Diff line change
Expand Up @@ -213,6 +213,10 @@ models:
description: Fontes Informação
- name: alt_causa
description: Alt. Causa
- name: dado_preliminar
description: >-
Indica se o registro vem da versão preliminar da fonte, ainda sujeita
a revisão (1), ou da versão definitiva (0)
- name: br_ms_sim__dicionario
description: Dicionário para tradução dos códigos do conjunto br_ms_sim. Para
taduzir códigos compartilhados entre instituições, como id_municipio, buscar
Expand Down
102 changes: 102 additions & 0 deletions pipelines/datasets/br_ms_sim/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
# br_ms_sim — pipeline

Carga dos microdados de óbitos não fetais (CID-10) do SIM/DATASUS, do FTP até a
materialização em `basedosdados.br_ms_sim.microdados`.

Contexto da base, investigações de qualidade e decisões de tratamento estão em
[`models/br_ms_sim/README.md`](../../../models/br_ms_sim/README.md).

## Sem schedule, por quê

O DATASUS republica o SIM duas vezes por ano, sem data fixa. O flow é deployado
sem `deploy_schedules`: o deployment existe, aceita execução avulsa e não dispara
sozinho. Para armar depois, basta acrescentar a lista de crons em `flows.py`.

## Definitivo e preliminar

A fonte serve o mesmo ano em dois diretórios:

| Diretório | Conteúdo |
|---|---|
| `SIM/CID10/DORES/` | definitivo, publicado cerca de um ano após o fechamento |
| `SIM/PRELIM/DORES/` | preliminar, ainda sujeito a revisão |

`resolve_year_source` dá precedência ao definitivo. Reprocessar um ano depois do
fechamento troca o dado e muda `dado_preliminar` de `1` para `0` — não há passo
manual para a virada, só rodar o flow com aquele ano.

## Parâmetros

| Parâmetro | Padrão | Efeito |
|---|---|---|
| `ano` | vazio | Vazio pega o ano mais recente da fonte. Preenchido é backfill: o flow pula o poll e não mexe no metadado da fonte |
| `materialize_after_dump` | `True` | Sobe para prod e materializa lá |
| `update_metadata` | `True` | Registra a cobertura materializada |
| `force_run` | `False` | Materializa mesmo sem novidade na fonte |

Execução de teste no pool de dev, sem tocar em produção:

```json
{"materialize_after_dump": false, "update_metadata": false, "force_run": true}
```

Os padrões escrevem em **produção**, mesmo saindo do pool de teste.

## Qual ano entra

Sem `ano`, o flow carrega o ano mais recente que existe na fonte, que é o ano em
curso: o diretório preliminar publica o ano corrente antes de ele fechar.

O poll compara esse ano com o fim da cobertura da tabela. Depois que a cobertura
alcança o ano, as execuções seguintes encerram sem carregar nada, e as revisões
que o DATASUS publicar naquele ano preliminar não entram. Para trazê-las, executar
com `ano` preenchido ou com `force_run`.

## Formato da staging

A staging é CSV desde a carga original. O particionado sai em
`ano=<ano>/sigla_uf=<UF>/microdados.csv` e sobe com `dump_mode="append"`: os
caminhos são fixos, então reenviar um ano sobrescreve aquele ano e preserva o
resto da série. `overwrite` apagaria o prefixo inteiro, com ele 1996 em diante.

Trocar para parquet exigiria recriar a tabela externa e, com ela, recarregar
toda a série.

## Carga manual

`utils.py` não importa Prefect, então a transformação roda fora do flow:

```python
from pipelines.datasets.br_ms_sim import utils

source = utils.resolve_year_source(2025)
utils.download_table("microdados", 2025, source)
utils.clean_table("microdados", 2025, source)
```

## Série histórica

Os CSVs de 1996–2024 na staging foram gravados pela limpeza anterior, que
nulificava o código `6` de `local_ocorrencia` (aldeia indígena) antes do upload.
O dado não chegou à staging, então `full-refresh` não o recupera — só
reprocessar os `.dbc`. É o que faz `reprocess_br_ms_sim.py`, na raiz do repo.

Enquanto o histórico não é reprocessado, ele também não traz `dado_preliminar`,
e a coluna volta nula nesses anos. O modelo aplica `coalesce(dado_preliminar,
'0')`: tudo anterior à primeira execução do pipeline veio do diretório
definitivo. Depois do reprocessamento o `coalesce` deixa de encontrar nulos e
continua correto.

## Pontos de atenção

- `dado_preliminar` é coluna nova no modelo, e em `dump_mode="append"` quem
amplia o schema da tabela externa é o `_sync_staging_schema`
(`pipelines/utils/tasks.py`). Esse caminho nunca tinha sido exercitado e
falhava com `403 bigquery.tables.update`, porque abria o cliente do BigQuery
sem credencial; corrigido nesta mesma branch para usar o cliente da lib.
- O dicionário do conjunto vem de uma staging própria, alimentada por
`models/br_ms_sim/code/update_dicionario.py`. As linhas de `dado_preliminar`
precisam ser acrescentadas por lá.
- Os scripts em `models/br_ms_sim/code/microdados/` são a carga anterior e não
conhecem `dado_preliminar`: gravam CSV com uma coluna a menos do que o modelo
espera. Usar o flow.
Empty file.
Loading
Loading