omnisus 0.2.0__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.
Files changed (283) hide show
  1. omnisus-0.2.0/.gitignore +41 -0
  2. omnisus-0.2.0/CHANGELOG.md +105 -0
  3. omnisus-0.2.0/LICENSE +21 -0
  4. omnisus-0.2.0/PKG-INFO +169 -0
  5. omnisus-0.2.0/README.md +113 -0
  6. omnisus-0.2.0/pyproject.toml +137 -0
  7. omnisus-0.2.0/src/omnisus/__init__.py +643 -0
  8. omnisus-0.2.0/src/omnisus/_loop.py +24 -0
  9. omnisus-0.2.0/src/omnisus/_version.py +1 -0
  10. omnisus-0.2.0/src/omnisus/cli/__init__.py +0 -0
  11. omnisus-0.2.0/src/omnisus/cli/main.py +442 -0
  12. omnisus-0.2.0/src/omnisus/data/__init__.py +0 -0
  13. omnisus-0.2.0/src/omnisus/data/auxiliares-bootstrap.zip +0 -0
  14. omnisus-0.2.0/src/omnisus/data/dicionarios/__init__.py +0 -0
  15. omnisus-0.2.0/src/omnisus/data/dicionarios/aux_cid10.yaml +25 -0
  16. omnisus-0.2.0/src/omnisus/data/dicionarios/aux_municipios.yaml +57 -0
  17. omnisus-0.2.0/src/omnisus/data/dicionarios/aux_ocupacoes.yaml +20 -0
  18. omnisus-0.2.0/src/omnisus/data/dicionarios/aux_paises.yaml +17 -0
  19. omnisus-0.2.0/src/omnisus/data/dicionarios/aux_sigtap_procedimentos.yaml +52 -0
  20. omnisus-0.2.0/src/omnisus/data/dicionarios/aux_uf.yaml +22 -0
  21. omnisus-0.2.0/src/omnisus/data/dicionarios/cnes_dados_complementares.yaml +532 -0
  22. omnisus-0.2.0/src/omnisus/data/dicionarios/cnes_equipamentos.yaml +204 -0
  23. omnisus-0.2.0/src/omnisus/data/dicionarios/cnes_equipes.yaml +616 -0
  24. omnisus-0.2.0/src/omnisus/data/dicionarios/cnes_estabelecimentos.yaml +191 -0
  25. omnisus-0.2.0/src/omnisus/data/dicionarios/cnes_estabelecimentos_ensino.yaml +247 -0
  26. omnisus-0.2.0/src/omnisus/data/dicionarios/cnes_estabelecimentos_filantropicos.yaml +249 -0
  27. omnisus-0.2.0/src/omnisus/data/dicionarios/cnes_gestao_metas.yaml +232 -0
  28. omnisus-0.2.0/src/omnisus/data/dicionarios/cnes_habilitacoes.yaml +234 -0
  29. omnisus-0.2.0/src/omnisus/data/dicionarios/cnes_incentivos.yaml +232 -0
  30. omnisus-0.2.0/src/omnisus/data/dicionarios/cnes_leitos.yaml +294 -0
  31. omnisus-0.2.0/src/omnisus/data/dicionarios/cnes_regras_contratuais.yaml +196 -0
  32. omnisus-0.2.0/src/omnisus/data/dicionarios/cnes_servicos_especializados.yaml +220 -0
  33. omnisus-0.2.0/src/omnisus/data/dicionarios/ibge_populacao.yaml +32 -0
  34. omnisus-0.2.0/src/omnisus/data/dicionarios/sia_apac_acompanhamento_bariatrica.yaml +489 -0
  35. omnisus-0.2.0/src/omnisus/data/dicionarios/sia_apac_acompanhamento_multiprofissional.yaml +168 -0
  36. omnisus-0.2.0/src/omnisus/data/dicionarios/sia_apac_cirurgia_bariatrica.yaml +506 -0
  37. omnisus-0.2.0/src/omnisus/data/dicionarios/sia_apac_fistula_arteriovenosa.yaml +504 -0
  38. omnisus-0.2.0/src/omnisus/data/dicionarios/sia_apac_laudos_diversos.yaml +413 -0
  39. omnisus-0.2.0/src/omnisus/data/dicionarios/sia_apac_medicamentos.yaml +460 -0
  40. omnisus-0.2.0/src/omnisus/data/dicionarios/sia_apac_nefrologia.yaml +610 -0
  41. omnisus-0.2.0/src/omnisus/data/dicionarios/sia_apac_quimioterapia.yaml +499 -0
  42. omnisus-0.2.0/src/omnisus/data/dicionarios/sia_apac_radioterapia.yaml +564 -0
  43. omnisus-0.2.0/src/omnisus/data/dicionarios/sia_apac_tratamento_dialitico.yaml +471 -0
  44. omnisus-0.2.0/src/omnisus/data/dicionarios/sia_atencao_domiciliar.yaml +407 -0
  45. omnisus-0.2.0/src/omnisus/data/dicionarios/sia_bpa_individualizado.yaml +301 -0
  46. omnisus-0.2.0/src/omnisus/data/dicionarios/sia_producao_ambulatorial.yaml +550 -0
  47. omnisus-0.2.0/src/omnisus/data/dicionarios/sia_producao_ambulatorial_1994_2007.yaml +72 -0
  48. omnisus-0.2.0/src/omnisus/data/dicionarios/sia_psicossocial.yaml +382 -0
  49. omnisus-0.2.0/src/omnisus/data/dicionarios/sih_aih_reduzida.yaml +2544 -0
  50. omnisus-0.2.0/src/omnisus/data/dicionarios/sih_aih_reduzida_1992_2007.yaml +462 -0
  51. omnisus-0.2.0/src/omnisus/data/dicionarios/sih_aih_rejeitada.yaml +1671 -0
  52. omnisus-0.2.0/src/omnisus/data/dicionarios/sih_aih_rejeitada_erro.yaml +659 -0
  53. omnisus-0.2.0/src/omnisus/data/dicionarios/sih_servicos_profissionais.yaml +109 -0
  54. omnisus-0.2.0/src/omnisus/data/dicionarios/sim_obitos.yaml +1956 -0
  55. omnisus-0.2.0/src/omnisus/data/dicionarios/sim_obitos_cid9.yaml +236 -0
  56. omnisus-0.2.0/src/omnisus/data/dicionarios/sim_obitos_externos.yaml +1754 -0
  57. omnisus-0.2.0/src/omnisus/data/dicionarios/sim_obitos_fetais.yaml +603 -0
  58. omnisus-0.2.0/src/omnisus/data/dicionarios/sim_obitos_infantis.yaml +1754 -0
  59. omnisus-0.2.0/src/omnisus/data/dicionarios/sim_obitos_maternos.yaml +1754 -0
  60. omnisus-0.2.0/src/omnisus/data/dicionarios/sinan_chagas.yaml +549 -0
  61. omnisus-0.2.0/src/omnisus/data/dicionarios/sinan_hanseniase.yaml +495 -0
  62. omnisus-0.2.0/src/omnisus/data/dicionarios/sinan_tuberculose.yaml +1173 -0
  63. omnisus-0.2.0/src/omnisus/data/dicionarios/sinasc_1994_1995.yaml +76 -0
  64. omnisus-0.2.0/src/omnisus/data/dicionarios/sinasc_nascidos_vivos.yaml +1111 -0
  65. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/cnes/CNV/Ativ_Ens.CNV +7 -0
  66. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/cnes/CNV/ESTABENS.CNV +2 -0
  67. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/cnes/CNV/ESTABFIL.CNV +2 -0
  68. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/cnes/CNV/Esp_leit.CNV +71 -0
  69. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/cnes/CNV/Flux_Cli.CNV +6 -0
  70. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/cnes/CNV/IND_SUS.CNV +3 -0
  71. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/cnes/CNV/NIVELDEP.CNV +3 -0
  72. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/cnes/CNV/Srv_Caract.CNV +7 -0
  73. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/cnes/CNV/TPGESTAO.CNV +6 -0
  74. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/cnes/CNV/TP_DESAT.CNV +5 -0
  75. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/cnes/CNV/TP_ESTAB.CNV +46 -0
  76. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/cnes/CNV/TurnosAt.CNV +9 -0
  77. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/cnes/CNV/Vinc_SUS.cnv +3 -0
  78. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/cnes/CNV/motdesat.cnv +12 -0
  79. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/cnes/CNV/tip1leit.cnv +8 -0
  80. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/cnes/CNV/tipoeqpC.cnv +65 -0
  81. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/cnes/CNV/tiposegm.cnv +4 -0
  82. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/cnes/DadosComplementares.def +443 -0
  83. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/cnes/Equipamento.def +238 -0
  84. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/cnes/Equipes.def +521 -0
  85. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/cnes/Estabel_Ensino.def +196 -0
  86. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/cnes/Estabel_Filantropico.def +192 -0
  87. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/cnes/Estabelecimento.def +487 -0
  88. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/cnes/Gestao_de_Metas.def +193 -0
  89. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/cnes/Habilitacao.def +201 -0
  90. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/cnes/Incentivos.def +202 -0
  91. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/cnes/Leitos_Especialidade.def +195 -0
  92. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/cnes/Regras_Contratuais.def +195 -0
  93. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/cnes/Servico_Especializado_200803_.def +200 -0
  94. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sia/APAC_Cirurgia_Bariatica.DEF +455 -0
  95. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sia/APAC_Confeccao_de_Fistula.DEF +365 -0
  96. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sia/APAC_Laudos_Diversos.DEF +438 -0
  97. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sia/APAC_Medicamentos.DEF +443 -0
  98. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sia/APAC_Nefrologia.DEF +455 -0
  99. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sia/APAC_Pos_Cirurgia_Bariatica.def +366 -0
  100. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sia/APAC_Quimioterapia.DEF +484 -0
  101. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sia/APAC_Radioterapia.DEF +478 -0
  102. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sia/APAC_Tratamento_Dialitico.DEF +317 -0
  103. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sia/Atencao_Domiciliar.def +408 -0
  104. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sia/CNV/ACES_VASC.CNV +3 -0
  105. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sia/CNV/ALTA.CNV +3 -0
  106. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sia/CNV/CARAT_AT.CNV +12 -0
  107. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sia/CNV/CNCDO.CNV +4 -0
  108. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sia/CNV/COBERTURA.CNV +3 -0
  109. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sia/CNV/COMPLEX.CNV +5 -0
  110. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sia/CNV/CONT_TRAT.CNV +3 -0
  111. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sia/CNV/ENCERRAM.CNV +3 -0
  112. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sia/CNV/ESTADIO.CNV +7 -0
  113. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sia/CNV/FINALID.CNV +8 -0
  114. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sia/CNV/FL_IDADE.CNV +6 -0
  115. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sia/CNV/GESTANTE.CNV +3 -0
  116. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sia/CNV/HBSAG.CNV +3 -0
  117. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sia/CNV/INDICA.cnv +4 -0
  118. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sia/CNV/Invasao.CNV +4 -0
  119. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sia/CNV/LINF_INV.CNV +4 -0
  120. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sia/CNV/LOC_REALIZ.CNV +3 -0
  121. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sia/CNV/MANT_IND.CNV +3 -0
  122. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sia/CNV/MOTSAIPE.CNV +23 -0
  123. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sia/CNV/OBITO.CNV +3 -0
  124. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sia/CNV/PERMANEN.CNV +3 -0
  125. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sia/CNV/RACA_COR.CNV +11 -0
  126. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sia/CNV/REGRA_C.cnv +20 -0
  127. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sia/CNV/SEXO.CNV +4 -0
  128. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sia/CNV/TP_APAC.CNV +4 -0
  129. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sia/CNV/TP_ATEND.CNV +7 -0
  130. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sia/CNV/TP_ESTAB.CNV +43 -0
  131. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sia/CNV/TP_GESTAO.CNV +8 -0
  132. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sia/CNV/TRANSFER.CNV +3 -0
  133. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sia/CNV/TRANSPL.CNV +3 -0
  134. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sia/CNV/destino.cnv +9 -0
  135. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sia/CNV/origem.cnv +7 -0
  136. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sia/Producao_Ambulatorial.DEF +522 -0
  137. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sia/RAAS_Psicossocial.def +337 -0
  138. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sih/CNV/CARATEND.CNV +7 -0
  139. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sih/CNV/COMPLEX2.CNV +5 -0
  140. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sih/CNV/CONTRAC.CNV +14 -0
  141. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sih/CNV/FINANC.CNV +8 -0
  142. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sih/CNV/GESTAO.CNV +5 -0
  143. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sih/CNV/IDENT.CNV +4 -0
  144. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sih/CNV/INSTRU.CNV +6 -0
  145. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sih/CNV/LEITOS.CNV +42 -0
  146. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sih/CNV/MARCAUCI.cnv +5 -0
  147. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sih/CNV/MARCAUTI.CNV +18 -0
  148. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sih/CNV/MORTES.CNV +3 -0
  149. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sih/CNV/NACION3D.CNV +333 -0
  150. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sih/CNV/NATUREZA.CNV +19 -0
  151. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sih/CNV/RACACOR.CNV +7 -0
  152. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sih/CNV/REGCT.cnv +21 -0
  153. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sih/CNV/SAIDAPERM.CNV +29 -0
  154. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sih/CNV/SEXO.CNV +4 -0
  155. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sih/CNV/SIMNAO.CNV +4 -0
  156. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sih/CNV/TP_DIAGSEC.CNV +3 -0
  157. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sih/CNV/TP_VAL.CNV +7 -0
  158. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sih/CNV/VINCPREV.CNV +8 -0
  159. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sih/CNV/motbloqueio.cnv +45 -0
  160. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sih/CNV/sitbloqueio.cnv +5 -0
  161. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sih/CNV/sitrejeicao.cnv +3 -0
  162. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sih/DBF/MOTERRO.dbf +0 -0
  163. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sih/Motivo_de_Erro.DEF +74 -0
  164. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sih/RD2008.DEF +532 -0
  165. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sih/RJ2008.DEF +489 -0
  166. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sih/SP2008.DEF +310 -0
  167. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sih_199201_199712/MORTES.CNV +3 -0
  168. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sih_199201_199712/RD.DEF +547 -0
  169. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sih_199201_199712/VINCPREV.CNV +8 -0
  170. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sih_199801_200307/RD.DEF +550 -0
  171. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sih_200308_200712/RD.DEF +549 -0
  172. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sim/ACIDTRAB.CNV +5 -0
  173. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sim/ASSMEDIC.CNV +5 -0
  174. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sim/ATESTANT.CNV +8 -0
  175. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sim/CBO2002.CNV +2430 -0
  176. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sim/CODIFICA1.cnv +4 -0
  177. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sim/DONOVA.CNV +4 -0
  178. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sim/ESCAGR1.CNV +15 -0
  179. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sim/ESTCIV.CNV +8 -0
  180. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sim/FONTEINV.CNV +12 -0
  181. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sim/FONTINFO.CNV +7 -0
  182. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sim/GRAVIDEZ.CNV +6 -0
  183. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sim/INSTRUC.CNV +8 -0
  184. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sim/INVESTIG.CNV +5 -0
  185. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sim/LOCOCOR.CNV +8 -0
  186. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sim/OBITOFE1.CNV +5 -0
  187. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sim/OBITOFE2.CNV +5 -0
  188. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sim/OMUFER.CNV +9 -0
  189. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sim/Obito_1979_95_CID-09.DEF +217 -0
  190. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sim/Obito_1996_CID10.def +1096 -0
  191. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sim/PARTO.CNV +5 -0
  192. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sim/RACACOR.CNV +8 -0
  193. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sim/SEMANAS.CNV +9 -0
  194. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sim/SERIEFAL.CNV +12 -0
  195. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sim/TIPOACID.CNV +8 -0
  196. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sim/TIPOBITO.CNV +4 -0
  197. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sim/TIPOVIOL.CNV +7 -0
  198. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sim/VERSCB.CNV +23 -0
  199. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sim/obitoPUE.cnv +7 -0
  200. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sim/obitogra.cnv +5 -0
  201. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sim/oparto.cnv +7 -0
  202. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sinan/AvaliaN.cnv +8 -0
  203. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sinan/ChagasNET.def +643 -0
  204. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sinan/Escolarnet.cnv +13 -0
  205. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sinan/HansNET.def +492 -0
  206. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sinan/SAIDAhans.cnv +12 -0
  207. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sinan/TuberculNET5_0.def +514 -0
  208. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sinan/reacional.cnv +8 -0
  209. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sinasc/ANOMAL.CNV +6 -0
  210. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sinasc/CONSULT.CNV +7 -0
  211. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sinasc/ESC2010.CNV +9 -0
  212. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sinasc/ESCAGR1.CNV +15 -0
  213. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sinasc/ESTCIV.CNV +8 -0
  214. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sinasc/GRAVIDEZ.CNV +6 -0
  215. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sinasc/INSTRUC.CNV +8 -0
  216. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sinasc/KOTELCHUCK.CNV +7 -0
  217. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sinasc/LOCOCOR.CNV +7 -0
  218. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sinasc/NASCIDO.def +876 -0
  219. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sinasc/ORIGEM.CNV +6 -0
  220. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sinasc/PARAPRE.CNV +7 -0
  221. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sinasc/PARTO.CNV +5 -0
  222. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sinasc/RACA.CNV +8 -0
  223. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sinasc/ROBSON.CNV +12 -0
  224. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sinasc/SEMANAS.CNV +9 -0
  225. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sinasc/SEXO.CNV +4 -0
  226. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sinasc/STPARTO.CNV +7 -0
  227. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sinasc/TPASSIST.CNV +7 -0
  228. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sinasc/TPFUNC.CNV +7 -0
  229. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sinasc/TPMETODO.CNV +7 -0
  230. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/sinasc/idanomal.cnv +6 -0
  231. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/cnv/vinculos.json +1743 -0
  232. omnisus-0.2.0/src/omnisus/data/dicionarios/sources/registry.json +554 -0
  233. omnisus-0.2.0/src/omnisus/data/dicionarios/versoes.json +152 -0
  234. omnisus-0.2.0/src/omnisus/lake/__init__.py +14 -0
  235. omnisus-0.2.0/src/omnisus/lake/_transactions.py +15 -0
  236. omnisus-0.2.0/src/omnisus/lake/catalog.py +107 -0
  237. omnisus-0.2.0/src/omnisus/lake/connection.py +137 -0
  238. omnisus-0.2.0/src/omnisus/lake/locking.py +55 -0
  239. omnisus-0.2.0/src/omnisus/lake/maintenance.py +37 -0
  240. omnisus-0.2.0/src/omnisus/lake/operations.py +633 -0
  241. omnisus-0.2.0/src/omnisus/lake/publication.py +449 -0
  242. omnisus-0.2.0/src/omnisus/lake/schema.py +28 -0
  243. omnisus-0.2.0/src/omnisus/lake/session.py +213 -0
  244. omnisus-0.2.0/src/omnisus/lake/sql.py +17 -0
  245. omnisus-0.2.0/src/omnisus/metadata.py +218 -0
  246. omnisus-0.2.0/src/omnisus/products.py +91 -0
  247. omnisus-0.2.0/src/omnisus/py.typed +0 -0
  248. omnisus-0.2.0/src/omnisus/research.py +406 -0
  249. omnisus-0.2.0/src/omnisus/sources/__init__.py +0 -0
  250. omnisus-0.2.0/src/omnisus/sources/_base.py +179 -0
  251. omnisus-0.2.0/src/omnisus/sources/cnes/__init__.py +0 -0
  252. omnisus-0.2.0/src/omnisus/sources/cnes/importers/__init__.py +0 -0
  253. omnisus-0.2.0/src/omnisus/sources/cnes/importers/master.py +212 -0
  254. omnisus-0.2.0/src/omnisus/sources/datasus_ftp/__init__.py +0 -0
  255. omnisus-0.2.0/src/omnisus/sources/datasus_ftp/_cache.py +144 -0
  256. omnisus-0.2.0/src/omnisus/sources/datasus_ftp/_ftp.py +41 -0
  257. omnisus-0.2.0/src/omnisus/sources/datasus_ftp/_runner.py +604 -0
  258. omnisus-0.2.0/src/omnisus/sources/datasus_ftp/datasets.py +242 -0
  259. omnisus-0.2.0/src/omnisus/sources/datasus_ftp/dbc.py +199 -0
  260. omnisus-0.2.0/src/omnisus/sources/datasus_ftp/dbf_batches.py +172 -0
  261. omnisus-0.2.0/src/omnisus/sources/datasus_ftp/dbf_contract.py +149 -0
  262. omnisus-0.2.0/src/omnisus/sources/datasus_ftp/fetch.py +214 -0
  263. omnisus-0.2.0/src/omnisus/sources/datasus_ftp/filenames.py +96 -0
  264. omnisus-0.2.0/src/omnisus/sources/datasus_ftp/identity.py +75 -0
  265. omnisus-0.2.0/src/omnisus/sources/datasus_ftp/inventory.py +438 -0
  266. omnisus-0.2.0/src/omnisus/sources/datasus_ftp/native.py +40 -0
  267. omnisus-0.2.0/src/omnisus/sources/datasus_ftp/parse.py +87 -0
  268. omnisus-0.2.0/src/omnisus/sources/datasus_ftp/staging.py +242 -0
  269. omnisus-0.2.0/src/omnisus/sources/ibge/__init__.py +0 -0
  270. omnisus-0.2.0/src/omnisus/sources/ibge/fetch.py +140 -0
  271. omnisus-0.2.0/src/omnisus/sources/ibge/importers/__init__.py +0 -0
  272. omnisus-0.2.0/src/omnisus/sources/ibge/importers/pop.py +100 -0
  273. omnisus-0.2.0/src/omnisus/sources/ibge/parse.py +88 -0
  274. omnisus-0.2.0/src/omnisus/sources/ibge/products.py +60 -0
  275. omnisus-0.2.0/src/omnisus/sources/medicamentos/__init__.py +5 -0
  276. omnisus-0.2.0/src/omnisus/sources/medicamentos/horus.py +137 -0
  277. omnisus-0.2.0/src/omnisus/sources/sigtap/__init__.py +172 -0
  278. omnisus-0.2.0/src/omnisus/transforms/__init__.py +0 -0
  279. omnisus-0.2.0/src/omnisus/transforms/age.py +226 -0
  280. omnisus-0.2.0/src/omnisus/transforms/analytics.py +252 -0
  281. omnisus-0.2.0/src/omnisus/transforms/cnv.py +235 -0
  282. omnisus-0.2.0/src/omnisus/transforms/columns.py +113 -0
  283. omnisus-0.2.0/src/omnisus/transforms/dictionaries.py +253 -0
@@ -0,0 +1,41 @@
1
+ __pycache__/
2
+ __marimo__/
3
+ *.py[cod]
4
+ *.so
5
+ .venv/
6
+ .uv/
7
+ .pytest_cache/
8
+ .ruff_cache/
9
+ .mypy_cache/
10
+ htmlcov/
11
+ .coverage
12
+ coverage.xml
13
+ dist/
14
+ build/
15
+ native/**/target/
16
+ native/**/fuzz/artifacts/
17
+ native/**/fuzz/corpus/
18
+ *.whl
19
+ *.egg-info/
20
+ .DS_Store
21
+ .idea/
22
+ .vscode/
23
+
24
+ # DuckLake / DuckDB local artifacts
25
+ *.ducklake
26
+ *.ducklake-catalog.sqlite
27
+ *.duckdb
28
+ /data/
29
+
30
+ # Notebook results (tables and citations)
31
+ /resultados/
32
+
33
+ # Fixtures cached
34
+ tests/.cache/
35
+
36
+ # Docs build
37
+ site/
38
+
39
+ # Tool scratch directories
40
+ .hypothesis/
41
+ .playwright-mcp/
@@ -0,0 +1,105 @@
1
+ # Changelog
2
+
3
+ ## v0.2.0 — 2026-10-01
4
+
5
+ ### Rust decoder by default
6
+
7
+ - `omnisus` depends on `omnisus-dbf` 0.2.0, now on PyPI, on Linux x86_64, macOS
8
+ (arm64, x86_64) and Windows x86_64 (#38). The `auto` backend then reads DBF and
9
+ decompresses DBC in Rust; other platforms keep the Python decoders, and no install
10
+ needs a Rust toolchain. `OMNISUS_DBF_BACKEND=python` and `OMNISUS_DBC_BACKEND=python`
11
+ still select Python. The `--find-links` install is gone.
12
+ - A `dbf-v*` tag publishes `omnisus-dbf` to PyPI after the full native matrix passes
13
+ (#37).
14
+
15
+ ### On PyPI
16
+
17
+ - `omnisus` is published to PyPI: `pip install omnisus`. The Colab notebook and the
18
+ PEP 723 header of every marimo notebook install `omnisus==0.2.0` from PyPI instead
19
+ of a git commit.
20
+
21
+ ### Import alias (breaking for copied code)
22
+
23
+ - Docs, notebooks and examples use `import omnisus as sus` instead of `odb` (#21).
24
+ Only the alias in examples changed; the API names are the same.
25
+
26
+ ### SIH dictionaries
27
+
28
+ - RD: `regct` gets the `REGCT.CNV` map, conflicts between the CNVs and the older
29
+ map are resolved in favour of the CNV (#5); `tpdisec1`–`tpdisec9` get
30
+ `TP_DIAGSEC.CNV` (#14); `diagsec1`–`diagsec9` link to `aux_cid10` (#22).
31
+ - RD and RJ: `nacional`, `contracep1`, `contracep2` and RJ `st_mot_blo` get the
32
+ TAB_SIH maps (#20).
33
+ - `sih_aih_reduzida_1992_2007` gets the maps of `TAB_SIH_199201-199712.zip`, checked
34
+ against the three packages of the era (#23, #36).
35
+ - Each identical CNV is stored once, and the evidence of the three RD eras is
36
+ generated instead of written by hand (#36).
37
+
38
+ ### Dictionary versions
39
+
40
+ - `src/omnisus/data/dicionarios/versoes.json` locks each dictionary's `x-version`
41
+ to its content; a changed dictionary needs a higher version (#35).
42
+ - A publication's `parser_version` hashes only what the import reads from the
43
+ dictionary, so editing a label or a claim no longer forces `replace` on scopes
44
+ already imported (#19).
45
+
46
+ ### Docs and notebooks
47
+
48
+ - README and site for researchers, Colab notebook, generated dataset arguments (#4);
49
+ notebooks use only the public API (#16); leaner `AGENTS.md` (#15).
50
+
51
+ ## v0.1.0 — 2026-09-25
52
+
53
+ First release of `omnisus` in this repository. It continues the `omnisus-db` package
54
+ (last release v0.3.2, in the repository's earlier history, which is not carried over).
55
+ The sections below say what the package does and what changed since `omnisus-db` v0.3.2.
56
+
57
+ ### What the package does
58
+
59
+ - Imports DATASUS FTP datasets (SIM and its subsets, SINASC, SIH, SIA, CNES, SINAN
60
+ Chagas, hanseníase and tuberculose), IBGE population editions, CNES establishment
61
+ names, SIGTAP and Hórus stock into a DuckLake lake. [Datasets](docs/datasets.md) lists
62
+ every registry row.
63
+ - Records each imported scope as a publication with its server files and their
64
+ SHA-256; `odb.cite` turns a snapshot into a citation.
65
+ - `odb.load`, `odb.label` and `odb.check_columns` cover an analysis from download to
66
+ labelled rows. Labels come from dictionaries whose claims cite official documents
67
+ registered with URL and SHA-256.
68
+ - Decodes DBC and DBF in Python, or in Rust with the optional `omnisus-dbf` package.
69
+
70
+ ### Renamed: `omnisus-db` is now `omnisus` (breaking)
71
+
72
+ - Distribution, import and CLI are `omnisus`: `import omnisus as odb`,
73
+ `omnisus import ...`. The native package is `omnisus-dbf` (import `omnisus_dbf`),
74
+ in `native/omnisus-dbf`. No `omnisus_db` alias is kept.
75
+ - The inventory cache moves from `<cache>/omnisus-db/inventory` to
76
+ `<cache>/omnisus/inventory`; the old one is only a cache and is rebuilt.
77
+ - Citations say "Importado com omnisus <versão>".
78
+ - Environment variables (`OMNISUS_*`) and lake tables (`_omnisus_*`) keep their
79
+ names: existing lakes open unchanged.
80
+
81
+ ### Removed since `omnisus-db` v0.3.2
82
+
83
+ - **`cnes_profissionais` (CNES `PF`).** The file names each professional with CPF and
84
+ CNS and answers no clinical question. Its registry row, dictionary, DEF and fixture
85
+ are gone.
86
+ - **`omnisus.transforms.cns`.** It deciphered the patient CNS of SIA files and had no
87
+ public consumer.
88
+ - `Lake.vacuum` and `omnisus lake vacuum`, already deprecated: use `cleanup_files` /
89
+ `lake cleanup-files`. Also the uncalled `import_st_scope` and
90
+ `lake.schema.canonical_type`/`ddl_for_field`.
91
+ - Runtime dependencies nothing imported: `pandera`, `obstore`, `pydantic`,
92
+ `pydantic-settings`, `tomli-w`; `moto` and `pyfakefs` from `dev`. `frictionless`
93
+ is now a `dev` dependency.
94
+ - Tutorials 01–05 (they repeated the per-base notebooks), the exploration and
95
+ development notebooks, and the 2026-09-10 audit snapshot pages (`catalogo.md`,
96
+ `campos.csv`, `cobertura.csv`, `fontes/registro.json`) with their generator.
97
+
98
+ ### Changed
99
+
100
+ - Notebooks live in `notebooks/`, one per base plus `linkage.py`, and pin
101
+ `marimo>=0.25.0,<0.26` like the `notebooks` extra.
102
+ - Evidence cited by dictionaries, tests and docs lives in `evidence/`.
103
+ - URLs point to `github.com/raphaelfh/omnisus` and `raphaelfh.github.io/omnisus`.
104
+ - Docs match the code: `skip_same` skips without downloading, `not_listed` versus
105
+ `fetch_failed`, a second writer fails at once with `WriterBusyError`.
omnisus-0.2.0/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Raphael Federicci
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
omnisus-0.2.0/PKG-INFO ADDED
@@ -0,0 +1,169 @@
1
+ Metadata-Version: 2.5
2
+ Name: omnisus
3
+ Version: 0.2.0
4
+ Summary: Python library for ingesting Brazilian public health databases into DuckLake
5
+ Project-URL: Homepage, https://github.com/raphaelfh/omnisus
6
+ Project-URL: Documentation, https://raphaelfh.github.io/omnisus
7
+ Project-URL: Repository, https://github.com/raphaelfh/omnisus
8
+ Author-email: Raphael Federicci <rfh.federicci@gmail.com>
9
+ License: MIT
10
+ License-File: LICENSE
11
+ Keywords: brazil,datasus,duckdb,ducklake,epidemiology,health,polars
12
+ Classifier: Development Status :: 3 - Alpha
13
+ Classifier: Intended Audience :: Science/Research
14
+ Classifier: License :: OSI Approved :: MIT License
15
+ Classifier: Programming Language :: Python :: 3.12
16
+ Classifier: Programming Language :: Python :: 3.13
17
+ Classifier: Programming Language :: Python :: 3.14
18
+ Classifier: Topic :: Scientific/Engineering :: Bio-Informatics
19
+ Requires-Python: >=3.12
20
+ Requires-Dist: dbfread2<2.0,>=0.1.0
21
+ Requires-Dist: duckdb<2.0,>=1.5.5
22
+ Requires-Dist: httpx>=0.28.1
23
+ Requires-Dist: omnisus-dbf>=0.2.0; (sys_platform == 'linux' and platform_machine == 'x86_64') or sys_platform == 'darwin' or (sys_platform == 'win32' and platform_machine == 'AMD64')
24
+ Requires-Dist: polars<2.0,>=1.44.2
25
+ Requires-Dist: pyarrow>=25.0.1
26
+ Requires-Dist: pyyaml>=6.0.3
27
+ Requires-Dist: rich>=13.8.0
28
+ Requires-Dist: structlog>=26.1.0
29
+ Requires-Dist: typer>=0.27.2
30
+ Requires-Dist: tzdata>=2026.3; sys_platform == 'win32'
31
+ Provides-Extra: dev
32
+ Requires-Dist: frictionless>=5.19.0; extra == 'dev'
33
+ Requires-Dist: hypothesis>=6.168.0; extra == 'dev'
34
+ Requires-Dist: marimo<0.26,>=0.25.0; extra == 'dev'
35
+ Requires-Dist: mypy>=2.3.1; extra == 'dev'
36
+ Requires-Dist: pre-commit>=4.6.2; extra == 'dev'
37
+ Requires-Dist: pytest-asyncio>=1.4.0; extra == 'dev'
38
+ Requires-Dist: pytest-benchmark>=5.3.0; extra == 'dev'
39
+ Requires-Dist: pytest-cov>=7.1.0; extra == 'dev'
40
+ Requires-Dist: pytest-xdist>=3.8.0; extra == 'dev'
41
+ Requires-Dist: pytest>=9.1.1; extra == 'dev'
42
+ Requires-Dist: respx>=0.23.1; extra == 'dev'
43
+ Requires-Dist: ruff>=0.16.6; extra == 'dev'
44
+ Requires-Dist: sqlglot>=30.18.0; extra == 'dev'
45
+ Requires-Dist: types-pyyaml>=6.0.12.20260906; extra == 'dev'
46
+ Provides-Extra: docs
47
+ Requires-Dist: mkdocs-material>=9.7.7; extra == 'docs'
48
+ Requires-Dist: mkdocs<2.0,>=1.6.1; extra == 'docs'
49
+ Requires-Dist: mkdocstrings[python]>=1.0.6; extra == 'docs'
50
+ Provides-Extra: notebooks
51
+ Requires-Dist: marimo<0.26,>=0.25.0; extra == 'notebooks'
52
+ Requires-Dist: sqlglot>=30.18.0; extra == 'notebooks'
53
+ Provides-Extra: postgres
54
+ Requires-Dist: psycopg[binary]>=3.3.5; extra == 'postgres'
55
+ Description-Content-Type: text/markdown
56
+
57
+ # omnisus
58
+
59
+ Importa bases públicas de saúde do Brasil (DATASUS, IBGE, CNES) para um lake
60
+ [DuckLake](https://ducklake.select), no seu computador, no Google Drive ou na nuvem, com
61
+ a procedência necessária para citar cada resultado.
62
+
63
+ *Brazilian public health data (DATASUS, IBGE, CNES) in a DuckLake lake (on your computer, on Google
64
+ Drive or in the cloud), with the provenance needed to cite it. Documentation: <https://raphaelfh.github.io/omnisus/>.*
65
+
66
+ > [!WARNING]
67
+ > **Trabalho em construção.** A API ainda pode mudar entre versões menores, e
68
+ > nem todo dicionário foi conferido contra o documento oficial. Antes de publicar um
69
+ > número, confira as contagens, as colunas e os rótulos (veja
70
+ > [Confira antes de usar](#confira-antes-de-usar)). Um rótulo errado é um bug:
71
+ > [abra uma issue](https://github.com/raphaelfh/omnisus/issues/new/choose).
72
+
73
+ ## Instalação
74
+
75
+ Python 3.12 ou mais novo:
76
+
77
+ ```bash
78
+ pip install omnisus
79
+ ```
80
+
81
+ Em Linux x86_64, macOS (arm64/x86_64) e Windows x86_64 isso instala também o
82
+ decodificador Rust `omnisus-dbf`. Nas demais plataformas, o Python
83
+ decodifica os mesmos arquivos.
84
+
85
+ ## Início rápido
86
+
87
+ Sem instalar nada:
88
+
89
+ [![Abrir no Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/raphaelfh/omnisus/blob/main/notebooks/colab.ipynb)
90
+ [![Open in molab](https://molab.marimo.io/molab-shield.svg)](https://molab.marimo.io/github/raphaelfh/omnisus/blob/main/notebooks/sim_obitos.py)
91
+
92
+ O Colab baixa os óbitos de Roraima em 2023, põe rótulos, confere as colunas e imprime a
93
+ citação, com o lake opcionalmente no seu Google Drive. O molab abre os notebooks marimo
94
+ de cada base. Outros caminhos (marimo no seu computador, Jupyter) estão em
95
+ [Comece aqui](https://raphaelfh.github.io/omnisus/pesquisa/).
96
+
97
+ Em Python:
98
+
99
+ ```python
100
+ import omnisus as sus
101
+
102
+ dados = sus.load("sim_obitos", years=[2023], ufs=["RR"]) # baixa e devolve as linhas
103
+ dados = sus.label("sim_obitos", dados, columns=["sexo", "racacor"]) # + sexo_rotulo, racacor_rotulo
104
+ sus.check_columns("sim_obitos", dados) # vazios, códigos sem rótulo, datas
105
+ ```
106
+
107
+ O lake fica em `data/raw/` no diretório de trabalho, e um segundo `load` do mesmo
108
+ recorte não baixa nada. Toda função documenta seus parâmetros com um exemplo:
109
+ `help(sus.load)`.
110
+
111
+ Para ir além:
112
+
113
+ - [Guia do pesquisador](https://raphaelfh.github.io/omnisus/pesquisa/): qual base
114
+ responde a cada pergunta, o que um registro representa e como citar.
115
+ - [Notebooks](https://github.com/raphaelfh/omnisus/blob/main/notebooks/README.md): um por base, com as mesmas seis etapas, que abrem no
116
+ navegador pelo molab.
117
+ - [Getting Started](https://raphaelfh.github.io/omnisus/guides/getting-started/):
118
+ onde fica o lake, Colab, linha de comando e lakes na nuvem.
119
+ - [Bases e argumentos](https://raphaelfh.github.io/omnisus/datasets/): cada base, com o
120
+ que passar em `years`, `ufs` e `months` e quais colunas têm rótulo. É gerada do
121
+ código a cada versão, como a [API](https://raphaelfh.github.io/omnisus/api/);
122
+ `help(sus.load)` mostra o mesmo na versão instalada.
123
+
124
+ ## Confira antes de usar
125
+
126
+ - **Contagens.** Compare o total de linhas com o que o DATASUS publica (TabNet, painéis
127
+ oficiais) antes de analisar. `sus.check_columns` mostra, por coluna, a proporção de
128
+ vazios, os códigos que o dicionário não conhece e as datas mínima e máxima.
129
+ - **Rótulos.** Um código que o dicionário não conhece fica sem rótulo (`None`); ele nunca
130
+ é adivinhado. Cada mapa de códigos diz se foi conferido no documento oficial:
131
+
132
+ ```python
133
+ campo = next(f for f in sus.describe_dataset("sim_obitos")["fields"]
134
+ if f["field"]["name"] == "sexo")
135
+ [(c["status"], c["evidence"]) for c in campo["claims"] if c["target"] == "/field/codes"]
136
+ # status: verified_in_source, conflicting ou unreviewed; evidence: documento e página
137
+ ```
138
+
139
+ Só use um rótulo `unreviewed` ou `conflicting` depois de conferir o documento você
140
+ mesmo.
141
+ - **Escopo das regras.** Idade em anos, sexo e datas harmonizados só aparecem para os
142
+ arquivos cujo SHA-256 foi auditado (`describe_dataset(...)["analytics"]`); os outros
143
+ saem como publicados.
144
+
145
+ ## De onde vêm os dados e os rótulos
146
+
147
+ | O que | Onde |
148
+ | --- | --- |
149
+ | Arquivo de origem de cada linha importada | `reader.publications()` e `sus.cite(reader)` num `sus.LakeReader()`: caminho no servidor, SHA-256, `snapshot_id` |
150
+ | Diretório do FTP de cada base | [Bases e argumentos](https://raphaelfh.github.io/omnisus/datasets/) |
151
+ | Dicionários (de-para de códigos, descrições, tipos) | [`src/omnisus/data/dicionarios/<base>.yaml`](https://github.com/raphaelfh/omnisus/tree/main/src/omnisus/data/dicionarios), campo `x-decode` |
152
+ | Documentos oficiais citados (PDF, TabWin), com URL e SHA-256 | [`src/omnisus/data/dicionarios/sources/registry.json`](https://github.com/raphaelfh/omnisus/blob/main/src/omnisus/data/dicionarios/sources/registry.json) |
153
+ | Tabelas CNV do TabWin de onde saem muitos rótulos | [`src/omnisus/data/dicionarios/sources/cnv/`](https://github.com/raphaelfh/omnisus/tree/main/src/omnisus/data/dicionarios/sources/cnv) |
154
+ | Auditorias que sustentam as regras (contagens, hashes, reprodução) | [`evidence/`](https://github.com/raphaelfh/omnisus/tree/main/evidence) |
155
+
156
+ O [dicionário de dados](https://raphaelfh.github.io/omnisus/dicionario/) explica como
157
+ ler esses arquivos e como conferir um rótulo.
158
+
159
+ ## Como contribuir
160
+
161
+ Leia o [CONTRIBUTING.md](https://github.com/raphaelfh/omnisus/blob/main/CONTRIBUTING.md). Em resumo: todo fato no código ou na
162
+ documentação vem do servidor do DATASUS ou de um arquivo com SHA-256 registrado, todo
163
+ teste roda sobre trechos de arquivos reais, e o repositório é público. Um rótulo
164
+ errado, uma base que falta ou uma contagem que não bate com o DATASUS são boas
165
+ primeiras issues.
166
+
167
+ ## Licença
168
+
169
+ [MIT](https://github.com/raphaelfh/omnisus/blob/main/LICENSE).
@@ -0,0 +1,113 @@
1
+ # omnisus
2
+
3
+ Importa bases públicas de saúde do Brasil (DATASUS, IBGE, CNES) para um lake
4
+ [DuckLake](https://ducklake.select), no seu computador, no Google Drive ou na nuvem, com
5
+ a procedência necessária para citar cada resultado.
6
+
7
+ *Brazilian public health data (DATASUS, IBGE, CNES) in a DuckLake lake (on your computer, on Google
8
+ Drive or in the cloud), with the provenance needed to cite it. Documentation: <https://raphaelfh.github.io/omnisus/>.*
9
+
10
+ > [!WARNING]
11
+ > **Trabalho em construção.** A API ainda pode mudar entre versões menores, e
12
+ > nem todo dicionário foi conferido contra o documento oficial. Antes de publicar um
13
+ > número, confira as contagens, as colunas e os rótulos (veja
14
+ > [Confira antes de usar](#confira-antes-de-usar)). Um rótulo errado é um bug:
15
+ > [abra uma issue](https://github.com/raphaelfh/omnisus/issues/new/choose).
16
+
17
+ ## Instalação
18
+
19
+ Python 3.12 ou mais novo:
20
+
21
+ ```bash
22
+ pip install omnisus
23
+ ```
24
+
25
+ Em Linux x86_64, macOS (arm64/x86_64) e Windows x86_64 isso instala também o
26
+ decodificador Rust `omnisus-dbf`. Nas demais plataformas, o Python
27
+ decodifica os mesmos arquivos.
28
+
29
+ ## Início rápido
30
+
31
+ Sem instalar nada:
32
+
33
+ [![Abrir no Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/raphaelfh/omnisus/blob/main/notebooks/colab.ipynb)
34
+ [![Open in molab](https://molab.marimo.io/molab-shield.svg)](https://molab.marimo.io/github/raphaelfh/omnisus/blob/main/notebooks/sim_obitos.py)
35
+
36
+ O Colab baixa os óbitos de Roraima em 2023, põe rótulos, confere as colunas e imprime a
37
+ citação, com o lake opcionalmente no seu Google Drive. O molab abre os notebooks marimo
38
+ de cada base. Outros caminhos (marimo no seu computador, Jupyter) estão em
39
+ [Comece aqui](https://raphaelfh.github.io/omnisus/pesquisa/).
40
+
41
+ Em Python:
42
+
43
+ ```python
44
+ import omnisus as sus
45
+
46
+ dados = sus.load("sim_obitos", years=[2023], ufs=["RR"]) # baixa e devolve as linhas
47
+ dados = sus.label("sim_obitos", dados, columns=["sexo", "racacor"]) # + sexo_rotulo, racacor_rotulo
48
+ sus.check_columns("sim_obitos", dados) # vazios, códigos sem rótulo, datas
49
+ ```
50
+
51
+ O lake fica em `data/raw/` no diretório de trabalho, e um segundo `load` do mesmo
52
+ recorte não baixa nada. Toda função documenta seus parâmetros com um exemplo:
53
+ `help(sus.load)`.
54
+
55
+ Para ir além:
56
+
57
+ - [Guia do pesquisador](https://raphaelfh.github.io/omnisus/pesquisa/): qual base
58
+ responde a cada pergunta, o que um registro representa e como citar.
59
+ - [Notebooks](https://github.com/raphaelfh/omnisus/blob/main/notebooks/README.md): um por base, com as mesmas seis etapas, que abrem no
60
+ navegador pelo molab.
61
+ - [Getting Started](https://raphaelfh.github.io/omnisus/guides/getting-started/):
62
+ onde fica o lake, Colab, linha de comando e lakes na nuvem.
63
+ - [Bases e argumentos](https://raphaelfh.github.io/omnisus/datasets/): cada base, com o
64
+ que passar em `years`, `ufs` e `months` e quais colunas têm rótulo. É gerada do
65
+ código a cada versão, como a [API](https://raphaelfh.github.io/omnisus/api/);
66
+ `help(sus.load)` mostra o mesmo na versão instalada.
67
+
68
+ ## Confira antes de usar
69
+
70
+ - **Contagens.** Compare o total de linhas com o que o DATASUS publica (TabNet, painéis
71
+ oficiais) antes de analisar. `sus.check_columns` mostra, por coluna, a proporção de
72
+ vazios, os códigos que o dicionário não conhece e as datas mínima e máxima.
73
+ - **Rótulos.** Um código que o dicionário não conhece fica sem rótulo (`None`); ele nunca
74
+ é adivinhado. Cada mapa de códigos diz se foi conferido no documento oficial:
75
+
76
+ ```python
77
+ campo = next(f for f in sus.describe_dataset("sim_obitos")["fields"]
78
+ if f["field"]["name"] == "sexo")
79
+ [(c["status"], c["evidence"]) for c in campo["claims"] if c["target"] == "/field/codes"]
80
+ # status: verified_in_source, conflicting ou unreviewed; evidence: documento e página
81
+ ```
82
+
83
+ Só use um rótulo `unreviewed` ou `conflicting` depois de conferir o documento você
84
+ mesmo.
85
+ - **Escopo das regras.** Idade em anos, sexo e datas harmonizados só aparecem para os
86
+ arquivos cujo SHA-256 foi auditado (`describe_dataset(...)["analytics"]`); os outros
87
+ saem como publicados.
88
+
89
+ ## De onde vêm os dados e os rótulos
90
+
91
+ | O que | Onde |
92
+ | --- | --- |
93
+ | Arquivo de origem de cada linha importada | `reader.publications()` e `sus.cite(reader)` num `sus.LakeReader()`: caminho no servidor, SHA-256, `snapshot_id` |
94
+ | Diretório do FTP de cada base | [Bases e argumentos](https://raphaelfh.github.io/omnisus/datasets/) |
95
+ | Dicionários (de-para de códigos, descrições, tipos) | [`src/omnisus/data/dicionarios/<base>.yaml`](https://github.com/raphaelfh/omnisus/tree/main/src/omnisus/data/dicionarios), campo `x-decode` |
96
+ | Documentos oficiais citados (PDF, TabWin), com URL e SHA-256 | [`src/omnisus/data/dicionarios/sources/registry.json`](https://github.com/raphaelfh/omnisus/blob/main/src/omnisus/data/dicionarios/sources/registry.json) |
97
+ | Tabelas CNV do TabWin de onde saem muitos rótulos | [`src/omnisus/data/dicionarios/sources/cnv/`](https://github.com/raphaelfh/omnisus/tree/main/src/omnisus/data/dicionarios/sources/cnv) |
98
+ | Auditorias que sustentam as regras (contagens, hashes, reprodução) | [`evidence/`](https://github.com/raphaelfh/omnisus/tree/main/evidence) |
99
+
100
+ O [dicionário de dados](https://raphaelfh.github.io/omnisus/dicionario/) explica como
101
+ ler esses arquivos e como conferir um rótulo.
102
+
103
+ ## Como contribuir
104
+
105
+ Leia o [CONTRIBUTING.md](https://github.com/raphaelfh/omnisus/blob/main/CONTRIBUTING.md). Em resumo: todo fato no código ou na
106
+ documentação vem do servidor do DATASUS ou de um arquivo com SHA-256 registrado, todo
107
+ teste roda sobre trechos de arquivos reais, e o repositório é público. Um rótulo
108
+ errado, uma base que falta ou uma contagem que não bate com o DATASUS são boas
109
+ primeiras issues.
110
+
111
+ ## Licença
112
+
113
+ [MIT](https://github.com/raphaelfh/omnisus/blob/main/LICENSE).
@@ -0,0 +1,137 @@
1
+ [project]
2
+ name = "omnisus"
3
+ dynamic = ["version"]
4
+ description = "Python library for ingesting Brazilian public health databases into DuckLake"
5
+ requires-python = ">=3.12"
6
+ license = { text = "MIT" }
7
+ authors = [{ name = "Raphael Federicci", email = "rfh.federicci@gmail.com" }]
8
+ readme = "README.md"
9
+ keywords = ["datasus", "duckdb", "ducklake", "polars", "brazil", "health", "epidemiology"]
10
+ classifiers = [
11
+ "Development Status :: 3 - Alpha",
12
+ "Intended Audience :: Science/Research",
13
+ "License :: OSI Approved :: MIT License",
14
+ "Programming Language :: Python :: 3.12",
15
+ "Programming Language :: Python :: 3.13",
16
+ "Programming Language :: Python :: 3.14",
17
+ "Topic :: Scientific/Engineering :: Bio-Informatics",
18
+ ]
19
+ dependencies = [
20
+ "duckdb>=1.5.5,<2.0",
21
+ "polars>=1.44.2,<2.0",
22
+ "pyarrow>=25.0.1",
23
+ "dbfread2>=0.1.0,<2.0",
24
+ "typer>=0.27.2",
25
+ "rich>=13.8.0",
26
+ "structlog>=26.1.0",
27
+ "httpx>=0.28.1",
28
+ "pyyaml>=6.0.3",
29
+ # Windows has no system time-zone database; pyarrow needs it to convert the
30
+ # TIMESTAMPTZ columns that expire_snapshots and cleanup_files return.
31
+ "tzdata>=2026.3; sys_platform == 'win32'",
32
+ # Rust DBF reader and DBC decompressor, on the platforms with a published
33
+ # wheel; elsewhere the Python decoders run (ADR 0001).
34
+ "omnisus-dbf>=0.2.0; (sys_platform == 'linux' and platform_machine == 'x86_64') or sys_platform == 'darwin' or (sys_platform == 'win32' and platform_machine == 'AMD64')",
35
+ ]
36
+
37
+ [project.optional-dependencies]
38
+ postgres = [
39
+ "psycopg[binary]>=3.3.5",
40
+ ]
41
+ dev = [
42
+ "pytest>=9.1.1",
43
+ "pytest-asyncio>=1.4.0",
44
+ "pytest-benchmark>=5.3.0",
45
+ "pytest-cov>=7.1.0",
46
+ "pytest-xdist>=3.8.0",
47
+ "hypothesis>=6.168.0",
48
+ "respx>=0.23.1",
49
+ # Validates every packaged dictionary (tests/unit/transforms/test_frictionless_schemas.py).
50
+ "frictionless>=5.19.0",
51
+ "ruff>=0.16.6",
52
+ "mypy>=2.3.1",
53
+ "types-PyYAML>=6.0.12.20260906",
54
+ "pre-commit>=4.6.2",
55
+ # The notebook tests import marimo; keep one pin, in the notebooks extra.
56
+ "omnisus[notebooks]",
57
+ ]
58
+ docs = [
59
+ "mkdocs>=1.6.1,<2.0",
60
+ "mkdocs-material>=9.7.7",
61
+ "mkdocstrings[python]>=1.0.6",
62
+ ]
63
+ notebooks = [
64
+ "marimo>=0.25.0,<0.26",
65
+ # marimo parses mo.sql cells with sqlglot; no library code imports it.
66
+ "sqlglot>=30.18.0",
67
+ ]
68
+
69
+ [project.scripts]
70
+ omnisus = "omnisus.cli.main:app"
71
+
72
+ [project.urls]
73
+ Homepage = "https://github.com/raphaelfh/omnisus"
74
+ Documentation = "https://raphaelfh.github.io/omnisus"
75
+ Repository = "https://github.com/raphaelfh/omnisus"
76
+
77
+ [build-system]
78
+ requires = ["hatchling>=1.32.0,<2.0"]
79
+ build-backend = "hatchling.build"
80
+
81
+ [tool.hatch.version]
82
+ # The version has one home: _version.py.
83
+ path = "src/omnisus/_version.py"
84
+
85
+ # Without this list hatch packs the whole checkout (evidence, notebooks,
86
+ # fixtures) into the sdist.
87
+ [tool.hatch.build.targets.sdist]
88
+ only-include = ["src/omnisus", "README.md", "CHANGELOG.md", "LICENSE"]
89
+
90
+ [tool.hatch.build.targets.wheel]
91
+ packages = ["src/omnisus"]
92
+
93
+ [tool.hatch.build.targets.wheel.force-include]
94
+ "src/omnisus/data/auxiliares-bootstrap.zip" = "omnisus/data/auxiliares-bootstrap.zip"
95
+
96
+ [tool.ruff]
97
+ target-version = "py312"
98
+ line-length = 99
99
+ src = ["src", "tests"]
100
+
101
+ [tool.ruff.lint]
102
+ select = ["E", "F", "I", "N", "W", "UP", "B", "SIM", "RUF", "ASYNC"]
103
+ ignore = ["E501"]
104
+
105
+ [tool.ruff.lint.flake8-bugbear]
106
+ extend-immutable-calls = ["typer.Argument", "typer.Option"]
107
+
108
+ [tool.ruff.lint.per-file-ignores]
109
+ # marimo displays final expressions and injects imported classes as cell arguments.
110
+ "notebooks/**/*.py" = ["B018", "N803", "N806"]
111
+ # Archived evidence scripts import the package under its old name, omnisus_db,
112
+ # which isort no longer knows as first-party. They stay byte-for-byte as recorded.
113
+ "evidence/**/*.py" = ["I001"]
114
+
115
+ [tool.ruff.format]
116
+ quote-style = "double"
117
+ # Ruff 0.16 includes Markdown by default. Keep the existing Python-only
118
+ # formatting scope; historical design documents contain illustrative snippets.
119
+ exclude = ["*.md"]
120
+
121
+ [tool.pytest.ini_options]
122
+ testpaths = ["tests"]
123
+ pythonpath = ["src"]
124
+ python_files = ["test_*.py", "bench_*.py"]
125
+ asyncio_mode = "auto"
126
+ markers = [
127
+ "rust_dbf: requires the optional native DBF extension",
128
+ "integration: tests that hit external resources or real lake",
129
+ "e2e: full-stack end-to-end tests (slow, manual/cron)",
130
+ "perf: performance benchmarks",
131
+ ]
132
+ addopts = "-ra --strict-markers"
133
+
134
+ [tool.mypy]
135
+ python_version = "3.12"
136
+ strict = false
137
+ ignore_missing_imports = true