susflow 0.1.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,27 @@
1
+ # Python
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+ *.so
6
+ .Python
7
+ *.egg-info/
8
+ dist/
9
+ build/
10
+
11
+ # Cache local da biblioteca
12
+ .susflow/
13
+
14
+ # IDEs
15
+ .vscode/
16
+ .idea/
17
+ *.swp
18
+ *.swo
19
+
20
+ # Testes
21
+ .pytest_cache/
22
+ .coverage
23
+ htmlcov/
24
+
25
+ # Mapas FTP gerados
26
+ tools/mapas/mapa_ftp_*.txt
27
+ NEXT.md
susflow-0.1.1/PKG-INFO ADDED
@@ -0,0 +1,195 @@
1
+ Metadata-Version: 2.4
2
+ Name: susflow
3
+ Version: 0.1.1
4
+ Summary: Acesso programático aos dados do DATASUS
5
+ Project-URL: Homepage, https://github.com/OncoAtlas/susflow
6
+ License: MIT
7
+ Requires-Python: >=3.10
8
+ Requires-Dist: dbfread
9
+ Requires-Dist: pandas
10
+ Requires-Dist: pyreaddbc
11
+ Description-Content-Type: text/markdown
12
+
13
+ # SUSFlow
14
+
15
+ [![Python Version](https://img.shields.io/badge/python-3.10%20%7C%203.11%20%7C%203.12%20%7C%203.13-blue.svg)](https://www.python.org/)
16
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
17
+ [![Code Style: Black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
18
+ [![Formato de Saída](https://img.shields.io/badge/output-pandas.DataFrame-orange.svg)](#)
19
+
20
+ Biblioteca Python moderna para automação, download e engenharia de dados dos sistemas de informação do DATASUS. O susflow abstrai de forma transparente o protocolo FTP governamental, gerencia cache local, lida com a descompressão de arquivos proprietários .dbc e entrega dados limpos diretamente em estruturas do Pandas.
21
+
22
+ ---
23
+
24
+ ## Sumário de Documentação Técnica
25
+
26
+ Os guias detalhados sobre layouts de arquivos, variáveis específicas e regras de cada sistema de informação estão localizados na pasta /docs. Navegue diretamente por aqui:
27
+
28
+ - [**CNES** — Cadastro Nacional de Estabelecimentos de Saúde](./docs/cnes.md)
29
+ - [**PNI** — Programa Nacional de Imunizações](./docs/pni.md)
30
+ - [**SIM** — Sistema de Informações sobre Mortalidade](./docs/sim.md)
31
+ - [**SINAN** — Sistema de Informação de Agravos de Notificação](./docs/sinan.md)
32
+ - [**SINASC** — Sistema de Informações sobre Nascidos Vivos](./docs/sinasc.md)
33
+ - [**SIASUS** — Sistema de Informações Ambulatoriais do SUS](./docs/siasus.md) (Em breve)
34
+ - [**SIHSUS** — Sistema de Informações Hospitalares do SUS](./docs/sihsus.md) (Em breve)
35
+
36
+ ---
37
+
38
+ ## Instalação
39
+
40
+ Como o projeto está em desenvolvimento ativo, instale em modo editável (-e):
41
+
42
+ ```bash
43
+ git clone [https://github.com/seu-usuario/susflow.git](https://github.com/seu-usuario/susflow.git)
44
+ cd susflow
45
+ pip install -e .
46
+
47
+ ```
48
+
49
+ ### Requisitos Base
50
+
51
+ - pandas (Manipulação de dados)
52
+ - pyreaddbc (Motor de descompressão do algoritmo BLAST)
53
+ - dbfread (Leitor nativo de estruturas DBF)
54
+ - pyarrow / fastparquet (Opcional, altamente recomendado para cache de alta performance)
55
+
56
+ ---
57
+
58
+ ## Como Usar (Exemplos Rápidos)
59
+
60
+ ### 1. SINASC — Nascidos Vivos
61
+
62
+ ```python
63
+ from susflow.systems import sinasc
64
+
65
+ # Listar arquivos disponíveis no servidor FTP
66
+ sinasc.listar(uf="PB")
67
+
68
+ # Baixar e carregar diretamente em um DataFrame pronto para análise
69
+ df_sinasc = sinasc.ler(uf="SP", ano=2022)
70
+
71
+ ```
72
+
73
+ ### 2. PNI — Imunizações (Formato DBF Puro)
74
+
75
+ ```python
76
+ from susflow.systems import pni
77
+
78
+ # Cobertura histórica anual por UF (1994 a 2019)
79
+ df_pni = pni.ler(uf="RJ", ano=2015)
80
+
81
+ ```
82
+
83
+ ### 3. CNES — Estabelecimentos de Saúde (Granularidade Mensal)
84
+
85
+ ```python
86
+ from susflow.systems import cnes
87
+
88
+ # Leitura mensal parametrizada por tipo de tabela (ex: "ST" = Estabelecimentos)
89
+ df_cnes = cnes.ler(uf="MG", ano=2022, mes=5, tipo="ST")
90
+
91
+ ```
92
+
93
+ ---
94
+
95
+ ## Gerenciamento de Cache Inteligente
96
+
97
+ Para evitar sobrecarregar o servidor do DATASUS e acelerar seus scripts, o susflow implementa um cache local persistente em ~/.susflow/cache/, espelhando fielmente a árvore de diretórios do FTP original:
98
+
99
+ ```text
100
+ ~/.susflow/cache/
101
+ └── dissemin/publicos/
102
+ ├── SINASC/NOV/DNRES/DNSP2022.dbc
103
+ ├── PNI/DADOS/DPNISP15.DBF
104
+ └── CNES/200508_/Dados/ST/STPB2201.dbc
105
+
106
+ ```
107
+
108
+ - **Validação:** Se o arquivo solicitado já existir no diretório local, a biblioteca pula o download e faz a leitura imediata.
109
+ - **Sobrescrita:** Para atualizar dados preliminares ou forçar uma nova cópia do servidor, utilize o parâmetro forcar=True:
110
+
111
+ ```python
112
+ df = sinasc.ler(uf="BA", ano=2023, forcar=True)
113
+
114
+ ```
115
+
116
+ ---
117
+
118
+ ## Dicas de Desempenho e Memória
119
+
120
+ Bases de dados de saúde pública do Brasil podem ser massivas, frequentemente congelando ou travando o Jupyter Notebook se não tratadas corretamente. Siga as boas práticas abaixo:
121
+
122
+ 1. **Otimização de Tipos (Downcasting):** Converta colunas de strings altamente repetitivas (como códigos de UF, Sexo ou Municípios) para o tipo category do Pandas. Reduza tipos de inteiros int64 genéricos para int16 ou int8 no seu pipeline. Isso pode reduzir o consumo de RAM em até 80%.
123
+ 2. **Transição de Formato de Longo Prazo:** Arquivos .DBF e .DBC são extremamente lentos para leitura analítica. Após efetuar o primeiro pni.ler() ou cnes.ler(), salve o DataFrame resultante em formato Parquet:
124
+
125
+ ```python
126
+ df.to_parquet("meus_dados.parquet", compression="snappy")
127
+
128
+ ```
129
+
130
+ 3. **Ajuste do Jupyter IOPub:** Se o seu Jupyter travar ao exibir ou processar DataFrames massivos, inicialize-o via terminal expandindo os limites de taxa de dados:
131
+
132
+ ```bash
133
+ jupyter notebook --NotebookApp.iopub_data_rate_limit=1.0e10
134
+
135
+ ```
136
+
137
+ ---
138
+
139
+ ## Escopo e Mapeamento dos Sistemas
140
+
141
+ ### v1 — Matriz de Implementação Atual
142
+
143
+ | Sistema | Sigla | Granularidade | Formato | Status |
144
+ | --------------------------------------------------- | ---------- | ---------------- | ------- | --------- |
145
+ | Sistema de Informações sobre Nascidos Vivos | **SINASC** | Anual / Por UF | .dbc | Concluído |
146
+ | Sistema de Informações sobre Mortalidade (Geral) | **SIM** | Anual / Por UF | .dbc | Concluído |
147
+ | Sistema de Informações sobre Mortalidade (Especial) | **SIM** | Anual / Nacional | .dbc | Concluído |
148
+ | Sistema de Informação de Agravos de Notificação | **SINAN** | Anual / Nacional | .dbc | Concluído |
149
+ | Cadastro Nacional de Estabelecimentos de Saúde | **CNES** | Mensal / Por UF | .dbc | Concluído |
150
+ | Programa Nacional de Imunizações | **PNI** | Anual / Por UF | .dbf | Concluído |
151
+ | Sistema de Informações Hospitalares | **SIHSUS** | Mensal / Por UF | .dbc | Planejado |
152
+ | Sistema de Informações Ambulatoriais | **SIASUS** | Mensal / Por UF | .dbc | Planejado |
153
+
154
+ ---
155
+
156
+ ## Engenharia Reversa do Fluxo de Dados
157
+
158
+ ```text
159
+ ┌───────────────────────┐
160
+ │ FTP DATASUS (.dbc) │ <- Arquivo compactado no servidor público
161
+ └──────────┬────────────┘
162
+ │ (Susflow faz o download & valida cache)
163
+
164
+ ┌───────────────────────┐
165
+ │ Descompressão BLAST │ <- Traduz .dbc para .dbf estruturado em Python puro
166
+ └──────────┬────────────┘
167
+ │ (Motor de parsing do reader)
168
+
169
+ ┌───────────────────────┐
170
+ │ Pandas DataFrame │ <- Pronto para análise, gráficos e ML
171
+ └───────────────────────┘
172
+
173
+ ```
174
+
175
+ ---
176
+
177
+ ## Ferramentas de Mapeamento (Diretório tools/)
178
+
179
+ O DATASUS frequentemente altera de forma silenciosa os caminhos ou padrões de nomenclatura de arquivos no FTP. A pasta tools/ contém scripts utilitários robustos para varredura e auditoria desses diretórios:
180
+
181
+ ```bash
182
+ # Mapear e atualizar de forma automática os caminhos base da v1
183
+ python tools/mapear_ftp.py
184
+
185
+ # Executar mapeamento silencioso salvando o log estruturado em json/csv
186
+ python tools/mapear_ftp.py --salvar --quiet
187
+
188
+ # Auditar uma árvore de diretórios específica no FTP profundo
189
+ python tools/mapear_ftp.py --alvo /dissemin/publicos/SINAN/DADOS --profundo
190
+
191
+ ```
192
+
193
+ ---
194
+
195
+ Desenvolvido para simplificar a pesquisa epidemiológica e a ciência de dados em saúde no Brasil. Contribuições e pull requests são bem-vindos!
@@ -0,0 +1,183 @@
1
+ # SUSFlow
2
+
3
+ [![Python Version](https://img.shields.io/badge/python-3.10%20%7C%203.11%20%7C%203.12%20%7C%203.13-blue.svg)](https://www.python.org/)
4
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
5
+ [![Code Style: Black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
6
+ [![Formato de Saída](https://img.shields.io/badge/output-pandas.DataFrame-orange.svg)](#)
7
+
8
+ Biblioteca Python moderna para automação, download e engenharia de dados dos sistemas de informação do DATASUS. O susflow abstrai de forma transparente o protocolo FTP governamental, gerencia cache local, lida com a descompressão de arquivos proprietários .dbc e entrega dados limpos diretamente em estruturas do Pandas.
9
+
10
+ ---
11
+
12
+ ## Sumário de Documentação Técnica
13
+
14
+ Os guias detalhados sobre layouts de arquivos, variáveis específicas e regras de cada sistema de informação estão localizados na pasta /docs. Navegue diretamente por aqui:
15
+
16
+ - [**CNES** — Cadastro Nacional de Estabelecimentos de Saúde](./docs/cnes.md)
17
+ - [**PNI** — Programa Nacional de Imunizações](./docs/pni.md)
18
+ - [**SIM** — Sistema de Informações sobre Mortalidade](./docs/sim.md)
19
+ - [**SINAN** — Sistema de Informação de Agravos de Notificação](./docs/sinan.md)
20
+ - [**SINASC** — Sistema de Informações sobre Nascidos Vivos](./docs/sinasc.md)
21
+ - [**SIASUS** — Sistema de Informações Ambulatoriais do SUS](./docs/siasus.md) (Em breve)
22
+ - [**SIHSUS** — Sistema de Informações Hospitalares do SUS](./docs/sihsus.md) (Em breve)
23
+
24
+ ---
25
+
26
+ ## Instalação
27
+
28
+ Como o projeto está em desenvolvimento ativo, instale em modo editável (-e):
29
+
30
+ ```bash
31
+ git clone [https://github.com/seu-usuario/susflow.git](https://github.com/seu-usuario/susflow.git)
32
+ cd susflow
33
+ pip install -e .
34
+
35
+ ```
36
+
37
+ ### Requisitos Base
38
+
39
+ - pandas (Manipulação de dados)
40
+ - pyreaddbc (Motor de descompressão do algoritmo BLAST)
41
+ - dbfread (Leitor nativo de estruturas DBF)
42
+ - pyarrow / fastparquet (Opcional, altamente recomendado para cache de alta performance)
43
+
44
+ ---
45
+
46
+ ## Como Usar (Exemplos Rápidos)
47
+
48
+ ### 1. SINASC — Nascidos Vivos
49
+
50
+ ```python
51
+ from susflow.systems import sinasc
52
+
53
+ # Listar arquivos disponíveis no servidor FTP
54
+ sinasc.listar(uf="PB")
55
+
56
+ # Baixar e carregar diretamente em um DataFrame pronto para análise
57
+ df_sinasc = sinasc.ler(uf="SP", ano=2022)
58
+
59
+ ```
60
+
61
+ ### 2. PNI — Imunizações (Formato DBF Puro)
62
+
63
+ ```python
64
+ from susflow.systems import pni
65
+
66
+ # Cobertura histórica anual por UF (1994 a 2019)
67
+ df_pni = pni.ler(uf="RJ", ano=2015)
68
+
69
+ ```
70
+
71
+ ### 3. CNES — Estabelecimentos de Saúde (Granularidade Mensal)
72
+
73
+ ```python
74
+ from susflow.systems import cnes
75
+
76
+ # Leitura mensal parametrizada por tipo de tabela (ex: "ST" = Estabelecimentos)
77
+ df_cnes = cnes.ler(uf="MG", ano=2022, mes=5, tipo="ST")
78
+
79
+ ```
80
+
81
+ ---
82
+
83
+ ## Gerenciamento de Cache Inteligente
84
+
85
+ Para evitar sobrecarregar o servidor do DATASUS e acelerar seus scripts, o susflow implementa um cache local persistente em ~/.susflow/cache/, espelhando fielmente a árvore de diretórios do FTP original:
86
+
87
+ ```text
88
+ ~/.susflow/cache/
89
+ └── dissemin/publicos/
90
+ ├── SINASC/NOV/DNRES/DNSP2022.dbc
91
+ ├── PNI/DADOS/DPNISP15.DBF
92
+ └── CNES/200508_/Dados/ST/STPB2201.dbc
93
+
94
+ ```
95
+
96
+ - **Validação:** Se o arquivo solicitado já existir no diretório local, a biblioteca pula o download e faz a leitura imediata.
97
+ - **Sobrescrita:** Para atualizar dados preliminares ou forçar uma nova cópia do servidor, utilize o parâmetro forcar=True:
98
+
99
+ ```python
100
+ df = sinasc.ler(uf="BA", ano=2023, forcar=True)
101
+
102
+ ```
103
+
104
+ ---
105
+
106
+ ## Dicas de Desempenho e Memória
107
+
108
+ Bases de dados de saúde pública do Brasil podem ser massivas, frequentemente congelando ou travando o Jupyter Notebook se não tratadas corretamente. Siga as boas práticas abaixo:
109
+
110
+ 1. **Otimização de Tipos (Downcasting):** Converta colunas de strings altamente repetitivas (como códigos de UF, Sexo ou Municípios) para o tipo category do Pandas. Reduza tipos de inteiros int64 genéricos para int16 ou int8 no seu pipeline. Isso pode reduzir o consumo de RAM em até 80%.
111
+ 2. **Transição de Formato de Longo Prazo:** Arquivos .DBF e .DBC são extremamente lentos para leitura analítica. Após efetuar o primeiro pni.ler() ou cnes.ler(), salve o DataFrame resultante em formato Parquet:
112
+
113
+ ```python
114
+ df.to_parquet("meus_dados.parquet", compression="snappy")
115
+
116
+ ```
117
+
118
+ 3. **Ajuste do Jupyter IOPub:** Se o seu Jupyter travar ao exibir ou processar DataFrames massivos, inicialize-o via terminal expandindo os limites de taxa de dados:
119
+
120
+ ```bash
121
+ jupyter notebook --NotebookApp.iopub_data_rate_limit=1.0e10
122
+
123
+ ```
124
+
125
+ ---
126
+
127
+ ## Escopo e Mapeamento dos Sistemas
128
+
129
+ ### v1 — Matriz de Implementação Atual
130
+
131
+ | Sistema | Sigla | Granularidade | Formato | Status |
132
+ | --------------------------------------------------- | ---------- | ---------------- | ------- | --------- |
133
+ | Sistema de Informações sobre Nascidos Vivos | **SINASC** | Anual / Por UF | .dbc | Concluído |
134
+ | Sistema de Informações sobre Mortalidade (Geral) | **SIM** | Anual / Por UF | .dbc | Concluído |
135
+ | Sistema de Informações sobre Mortalidade (Especial) | **SIM** | Anual / Nacional | .dbc | Concluído |
136
+ | Sistema de Informação de Agravos de Notificação | **SINAN** | Anual / Nacional | .dbc | Concluído |
137
+ | Cadastro Nacional de Estabelecimentos de Saúde | **CNES** | Mensal / Por UF | .dbc | Concluído |
138
+ | Programa Nacional de Imunizações | **PNI** | Anual / Por UF | .dbf | Concluído |
139
+ | Sistema de Informações Hospitalares | **SIHSUS** | Mensal / Por UF | .dbc | Planejado |
140
+ | Sistema de Informações Ambulatoriais | **SIASUS** | Mensal / Por UF | .dbc | Planejado |
141
+
142
+ ---
143
+
144
+ ## Engenharia Reversa do Fluxo de Dados
145
+
146
+ ```text
147
+ ┌───────────────────────┐
148
+ │ FTP DATASUS (.dbc) │ <- Arquivo compactado no servidor público
149
+ └──────────┬────────────┘
150
+ │ (Susflow faz o download & valida cache)
151
+
152
+ ┌───────────────────────┐
153
+ │ Descompressão BLAST │ <- Traduz .dbc para .dbf estruturado em Python puro
154
+ └──────────┬────────────┘
155
+ │ (Motor de parsing do reader)
156
+
157
+ ┌───────────────────────┐
158
+ │ Pandas DataFrame │ <- Pronto para análise, gráficos e ML
159
+ └───────────────────────┘
160
+
161
+ ```
162
+
163
+ ---
164
+
165
+ ## Ferramentas de Mapeamento (Diretório tools/)
166
+
167
+ O DATASUS frequentemente altera de forma silenciosa os caminhos ou padrões de nomenclatura de arquivos no FTP. A pasta tools/ contém scripts utilitários robustos para varredura e auditoria desses diretórios:
168
+
169
+ ```bash
170
+ # Mapear e atualizar de forma automática os caminhos base da v1
171
+ python tools/mapear_ftp.py
172
+
173
+ # Executar mapeamento silencioso salvando o log estruturado em json/csv
174
+ python tools/mapear_ftp.py --salvar --quiet
175
+
176
+ # Auditar uma árvore de diretórios específica no FTP profundo
177
+ python tools/mapear_ftp.py --alvo /dissemin/publicos/SINAN/DADOS --profundo
178
+
179
+ ```
180
+
181
+ ---
182
+
183
+ Desenvolvido para simplificar a pesquisa epidemiológica e a ciência de dados em saúde no Brasil. Contribuições e pull requests são bem-vindos!
@@ -0,0 +1,160 @@
1
+ # CNES — Cadastro Nacional de Estabelecimentos de Saúde
2
+
3
+ Base FTP: `ftp.datasus.gov.br/dissemin/publicos/CNES/200508_/Dados/`
4
+
5
+ ---
6
+
7
+ ## Tipos de dados disponíveis
8
+
9
+ | Tipo | Função | Retorno | Descrição |
10
+ |------|--------|---------|-----------|
11
+ | Por UF | `ler(uf, ano, mes)` | `DataFrame` | Dados cadastrais de um subtipo para uma UF |
12
+ | Por UF | `baixar(uf, ano, mes)` | `Path` | Arquivo `.dbc` bruto |
13
+
14
+ ---
15
+
16
+ ## Subtipos disponíveis
17
+
18
+ **Padrão de arquivo:** `{TYPE}/{TYPE}{UF}{YY}{MM}.dbc`
19
+ **Granularidade:** mensal / por UF
20
+
21
+ > O arquivo fica dentro de um subdiretório com o mesmo nome do subtipo:
22
+ > ex: `ST/STSP2501.dbc` → estabelecimentos de SP, janeiro de 2025.
23
+
24
+ ```python
25
+ from susflow.systems import cnes
26
+
27
+ # ver todos os subtipos disponíveis
28
+ print(cnes.subtipos())
29
+
30
+ # Estabelecimentos — subtipo padrão
31
+ df = cnes.ler(uf="SP", ano=2025, mes=1)
32
+ df = cnes.ler(uf="SP", ano=2025, mes=1, tipo="ST")
33
+
34
+ # outros subtipos
35
+ df = cnes.ler(uf="SP", ano=2025, mes=1, tipo="PF") # profissionais
36
+ df = cnes.ler(uf="RJ", ano=2024, mes=6, tipo="LT") # leitos
37
+ df = cnes.ler(uf="MG", ano=2023, mes=3, tipo="EQ") # equipamentos
38
+
39
+ # só baixar
40
+ path = cnes.baixar(uf="SP", ano=2025, mes=1)
41
+ path = cnes.baixar(uf="SP", ano=2025, mes=1, tipo="PF")
42
+
43
+ # listar arquivos disponíveis
44
+ cnes.listar() # todos os ST
45
+ cnes.listar(uf="SP") # ST de SP
46
+ cnes.listar(uf="SP", tipo="PF") # profissionais de SP
47
+ ```
48
+
49
+ ### Subtipos ativos
50
+
51
+ | Tipo | Arquivo exemplo | Conteúdo | Cobertura |
52
+ |------|----------------|----------|-----------|
53
+ | `ST` | `STSP2501.dbc` | **Estabelecimentos** — identificação, localização, tipo | 2005–2026 |
54
+ | `PF` | `PFSP2501.dbc` | **Profissionais de saúde** — vínculos e CBO | 2005–2026 |
55
+ | `DC` | `DCSP2501.dbc` | Dados complementares do estabelecimento | 2005–2026 |
56
+ | `EQ` | `EQSP2501.dbc` | Equipamentos disponíveis | 2005–2026 |
57
+ | `SR` | `SRSP2501.dbc` | Serviços especializados ofertados | 2005–2026 |
58
+ | `LT` | `LTSP0510.dbc` | Leitos (SUS e não-SUS) | 2005–2026 |
59
+ | `HB` | `HBSP0703.dbc` | Habilitações e certificações | 2007–2026 |
60
+ | `EF` | `EFSP0703.dbc` | Centros cirúrgicos e obstétricos | 2007–2026 |
61
+ | `EP` | `EPSP0704.dbc` | Equipes de saúde (eSF, eAP, etc.) | 2007–2026 |
62
+ | `RC` | `RCSP0703.dbc` | Regras contratuais | 2007–2026 |
63
+ | `IN` | `INSP0711.dbc` | Incentivos financeiros | 2007–2026 |
64
+ | `GM` | `GMSP1407.dbc` | Gestão e metas | 2014–2026 |
65
+
66
+ ### Subtipos encerrados (ainda disponíveis no FTP)
67
+
68
+ | Tipo | Arquivo exemplo | Conteúdo | Cobertura | Observação |
69
+ |------|----------------|----------|-----------|------------|
70
+ | `EE` | `EESP0703.dbc` | Equipamentos e produções | 2007–2019 | Encerrado em dez/2019 |
71
+
72
+ ---
73
+
74
+ ## Principais variáveis por subtipo
75
+
76
+ ### ST — Estabelecimentos
77
+
78
+ | Variável | Tipo | Descrição |
79
+ |----------|------|-----------|
80
+ | `CNES` | str | Código CNES (identificador único) |
81
+ | `CODUFMUN` | str | Código IBGE do município |
82
+ | `REGSAUDE` | str | Região de saúde |
83
+ | `MICR_REG` | str | Microrregião de saúde |
84
+ | `DISTRSAN` | str | Distrito sanitário |
85
+ | `DISTRADM` | str | Distrito administrativo |
86
+ | `TPGESTAO` | str | Tipo de gestão (M=municipal, E=estadual, D=dupla) |
87
+ | `PF_PJ` | str | Pessoa física ou jurídica |
88
+ | `CPF_CNPJ` | str | CPF ou CNPJ |
89
+ | `NIV_DEP` | str | Nível de dependência |
90
+ | `CNPJ_MAN` | str | CNPJ da mantenedora |
91
+ | `ESFERA_A` | str | Esfera administrativa |
92
+ | `ATIVIDAD` | str | Atividade de ensino/pesquisa |
93
+ | `RETENCAO` | str | Tipo de retenção |
94
+ | `NATUREZA` | str | Natureza jurídica |
95
+ | `CLIENTEL` | str | Clientela atendida |
96
+ | `TP_UNID` | str | Tipo de unidade |
97
+ | `TURNO_AT` | str | Turno de atendimento |
98
+ | `NIV_HIER` | str | Nível hierárquico |
99
+ | `TERCEIRO` | str | Indicador de terceirização |
100
+ | `COMPETEN` | str | Competência (AAAAMM) |
101
+
102
+ ### PF — Profissionais
103
+
104
+ | Variável | Tipo | Descrição |
105
+ |----------|------|-----------|
106
+ | `CNES` | str | Código CNES do estabelecimento |
107
+ | `CBO` | str | Código CBO da ocupação |
108
+ | `NOMEPROF` | str | Nome do profissional |
109
+ | `CNS_PROF` | str | CNS do profissional |
110
+ | `CONSELHO` | str | Conselho profissional |
111
+ | `REGISTRO` | str | Número de registro no conselho |
112
+ | `VINCULAC` | str | Tipo de vínculo |
113
+ | `SUBVINCUL` | str | Subtipo de vínculo |
114
+ | `TP_SUS` | str | Atende pelo SUS |
115
+ | `COMPETEN` | str | Competência (AAAAMM) |
116
+
117
+ ### LT — Leitos
118
+
119
+ | Variável | Tipo | Descrição |
120
+ |----------|------|-----------|
121
+ | `CNES` | str | Código CNES do estabelecimento |
122
+ | `TP_LEITO` | str | Tipo de leito |
123
+ | `CODLEITO` | str | Código do leito |
124
+ | `QT_EXIST` | str | Quantidade existente |
125
+ | `QT_CONTR` | str | Quantidade contratada (SUS) |
126
+ | `QT_SUS` | str | Quantidade SUS |
127
+ | `COMPETEN` | str | Competência (AAAAMM) |
128
+
129
+ ---
130
+
131
+ ## Fluxo recomendado
132
+
133
+ ```
134
+ 1. Explorar o que existe
135
+ print(cnes.subtipos()) ← todos os subtipos e descrições
136
+ cnes.listar(uf="SP") ← arquivos ST de SP disponíveis
137
+ cnes.listar(uf="SP", tipo="PF") ← profissionais de SP
138
+
139
+ 2. Baixar os dados
140
+ df = cnes.ler(uf="SP", ano=2025, mes=1) ← estabelecimentos
141
+ df = cnes.ler(uf="SP", ano=2025, mes=1, tipo="PF") ← profissionais
142
+ df = cnes.ler(uf="SP", ano=2025, mes=1, tipo="LT") ← leitos
143
+
144
+ 3. Combinar meses em série histórica
145
+ import pandas as pd
146
+ dfs = [cnes.ler(uf="SP", ano=2024, mes=m) for m in range(1, 13)]
147
+ df_ano = pd.concat(dfs, ignore_index=True)
148
+ ```
149
+
150
+ ---
151
+
152
+ ## Notas
153
+
154
+ - Arquivos `.dbc` são DBF comprimidos com o algoritmo proprietário **blast** (PKWARE). A biblioteca descomprime automaticamente via `pyreaddbc`.
155
+ - O ano usa **2 dígitos** e o mês **2 dígitos com zero à esquerda**: `STSP2501.dbc` = SP, janeiro de 2025.
156
+ - O arquivo fica dentro de um subdiretório com o mesmo nome do subtipo — isso é tratado automaticamente pela biblioteca.
157
+ - Cada subtipo tem sua própria cobertura temporal. Tentar baixar `EE` para 2022 levanta erro com a cobertura correta (2007–2019).
158
+ - `ST` e `PF` são os subtipos mais usados: `ST` para análises de distribuição de estabelecimentos, `PF` para análises de força de trabalho em saúde.
159
+ - O campo `CNES` é a chave de cruzamento entre todos os subtipos — use-o para enriquecer `ST` com dados de `LT`, `EQ`, `PF`, etc.
160
+ - Para cruzar municípios com nomes, use `CADMUN.DBF` disponível no SIM (`sim.baixar_tabelas("CADMUN.DBF")`).
@@ -0,0 +1,76 @@
1
+ # PNI — Programa Nacional de Imunizações
2
+
3
+ Base FTP: `/dissemin/publicos/PNI/DADOS/`
4
+
5
+ ---
6
+
7
+ ## Tipos de dados disponíveis
8
+
9
+ | Tipo | Função | Retorno | Descrição |
10
+ | ------ | ----------------- | ----------- | ---------------------------------------------- |
11
+ | Por UF | `ler(uf, ano)` | `DataFrame` | Dados de imunização registrados na UF, por ano |
12
+ | Por UF | `baixar(uf, ano)` | `Path` | Arquivo `.DBF` bruto da UF |
13
+
14
+ ---
15
+
16
+ ## Dados por UF e Ano — `DADOS/`
17
+
18
+ **Padrão de arquivo:** `DPNI{UF}{YY}.DBF` (Sufixo do ano com 2 dígitos)
19
+
20
+ **Cobertura:** 1994–2019, todas as 27 UFs
21
+
22
+ **Granularidade:** anual / por UF
23
+
24
+ ```python
25
+ from susflow.systems import pni
26
+
27
+ # Baixa (se necessário) e carrega os dados em um DataFrame
28
+ df = pni.ler(uf="SP", ano=2015)
29
+
30
+ # Apenas realiza o download do arquivo bruto
31
+ path = pni.baixar(uf="RJ", ano=2010)
32
+
33
+ # Lista os arquivos filtrando por uma UF específica
34
+ arquivos = pni.listar(uf="PB")
35
+
36
+ ```
37
+
38
+ ### Principais variáveis do DataFrame
39
+
40
+ > **Nota de Variabilidade:** Como a cobertura do PNI é extensa (1994–2019), a estrutura de colunas dos arquivos `.DBF` pode variar significativamente dependendo do período e das atualizações do sistema de informação do Ministério da Saúde. Abaixo estão listadas as variáveis base mais comuns encontradas nas séries históricas de coberturas vacinais e doses aplicadas:
41
+
42
+ | Variável | Tipo | Descrição |
43
+ | ---------------------- | ----------- | --------------------------------------------------------------------- |
44
+ | `CODMUNRES` / `MUNCOD` | str | Código IBGE do município (geralmente 6 dígitos) |
45
+ | `CODVAC` / `VACCOD` | str | Código da vacina (ex: BCG, Poliomielite, Tríplice Viral) |
46
+ | `DOSE` | str | Tipo/Número da dose (1ª dose, 2ª dose, reforço, dose única) |
47
+ | `FXETARIA` / `FAIXA` | str | Código identificador da faixa etária do vacinado |
48
+ | `QTDE` / `NUM_DOSES` | int / float | Quantidade de doses aplicadas registradas |
49
+ | `COBER` / `COBERTURA` | float | Taxa de cobertura vacinal calculada para a região (quando disponível) |
50
+ | `POPULACAO` | int / float | População alvo estimada para o cálculo da cobertura |
51
+
52
+ ---
53
+
54
+ ## Fluxo recomendado
55
+
56
+ ```
57
+ 1. Explorar o que existe no FTP
58
+ pni.listar(uf="PB") ← lista todos os anos da Paraíba
59
+
60
+ 2. Baixar e processar os dados
61
+ df = pni.ler(uf="SP", ano=2015) ← dados de imunização de SP em 2015
62
+
63
+ 3. Persistir localmente de forma otimizada
64
+ # Recomendado converter para Parquet após a leitura para melhorar a performance
65
+ df.to_parquet("pni_sp_2015.parquet", index=False)
66
+
67
+ ```
68
+
69
+ ---
70
+
71
+ ## Notas
72
+
73
+ - **Formato dos Arquivos:** Diferente de outros sistemas do DATASUS (como o SINASC), os arquivos do PNI nesta pasta estão em formato **.DBF puro** (sem compressão proprietária _blast_). Eles são lidos diretamente pela biblioteca utilizando o `dbfread` interno do módulo `reader.py`.
74
+ - **Regra de Sufixo do Ano:** O arquivo utiliza o ano com 2 dígitos (`YY`). Anos de 1994 a 1999 usam `94` a `99`, enquanto anos de 2000 a 2009 utilizam `00` a `09`. A normalização é feita de forma transparente pela biblioteca utilizando o operador `ano % 100`.
75
+ - **Limites da Série Histórica:** A cobertura de dados deste diretório FTP encerra-se estritamente em **2019**. Não existem dados preliminares ou anos posteriores a este período mapeados neste módulo (`year_range: 1994–2019`). Tentativas de passar anos fora deste escopo resultarão em um `ValueError`.
76
+ - **Códigos de Municípios:** Assim como no SINASC, os municípios são identificados por seus códigos IBGE. Caso precise realizar o cruzamento com o nome das localidades ou regionalizações de saúde, recomenda-se correlacionar com as tabelas auxiliares (`CADMUN`).