datasus_db.datasources.sih_sp
1import polars as pl 2import logging 3from ..pl_utils import to_schema, Column, DateColumn 4from ..datasus import import_from_ftp 5from ..utils import format_year, format_month 6from ..ftp import fetch_dbc_as_df 7 8MAIN_TABLE = "SIH_SP" 9 10 11def import_sih_sp(db_file="datasus.db", years=["*"], states=["*"], months=["*"]): 12 """Import SP (Autorização de Internação Hospitalar Saúde do Profissional) from SIHSUS (Sistema de Informações Hospitalares do SUS). 13 14 Args: 15 db_file (str, optional): path to the duckdb file in which the data will be imported to. Defaults to "datasus.db". 16 years (list, optional): list of years for which data will be imported (if available). Eg: `[2012, 2000, 2010]`. Defaults to ["*"]. 17 states (list, optional): list of brazilian 2 letters state for which data will be imported (if available). Eg: `["SP", "RJ"]`. Defaults to ["*"]. 18 months (list, optional): list of months numbers (1-12) for which data will be imported (if available). Eg: `[1, 12, 6]`. Defaults to ["*"]. 19 20 --- 21 22 Extra: 23 - **Data description**: https://github.com/mymatsubara/datasus-db/blob/main/docs/sih_sp.pdf 24 - **ftp path**: ftp.datasus.gov.br/dissemin/publicos/SIHSUS/200801_/Dados/SP*.dbc 25 """ 26 logging.info(f"⏳ [{MAIN_TABLE}] Starting import...") 27 28 import_from_ftp( 29 [MAIN_TABLE], 30 [ 31 f"/dissemin/publicos/SIHSUS/200801_/Dados/SP{state.upper()}{format_year(year)}{format_month(month)}.dbc*" 32 for year in years 33 for state in states 34 for month in months 35 ], 36 fetch_sih_rh, 37 db_file=db_file, 38 ) 39 40 41def fetch_sih_rh(ftp_path: str): 42 df = fetch_dbc_as_df(ftp_path) 43 return {MAIN_TABLE: map_sih_sp(df)} 44 45 46def map_sih_sp(df: pl.DataFrame): 47 df = df.with_columns( 48 pl.when(pl.col(pl.Utf8).str.len_chars() == 0) 49 .then(None) 50 .otherwise(pl.col(pl.Utf8)) 51 .name.keep(), 52 ) 53 54 return to_schema( 55 df, 56 [ 57 Column("SP_GESTOR", pl.Utf8), 58 Column("SP_UF", pl.Utf8), 59 Column("SP_AA", pl.Utf8), 60 Column("SP_MM", pl.Utf8), 61 Column("SP_CNES", pl.Utf8), 62 Column("SP_NAIH", pl.Utf8), 63 Column("SP_PROCREA", pl.Utf8), 64 Column("SP_DTINTER", pl.Utf8), 65 Column("SP_DTSAIDA", pl.Utf8), 66 Column("SP_NUM_PR", pl.Utf8), 67 Column("SP_TIPO", pl.Utf8), 68 Column("SP_CPFCGC", pl.Utf8), 69 Column("SP_ATOPROF", pl.Utf8), 70 Column("SP_TP_ATO", pl.Utf8), 71 Column("SP_QTD_ATO", pl.Utf8), 72 Column("SP_PTSP", pl.Utf8), 73 Column("SP_NF", pl.Utf8), 74 Column("SP_VALATO", pl.Utf8), 75 Column("SP_M_HOSP", pl.Utf8), 76 Column("SP_M_PAC", pl.Utf8), 77 Column("SP_DES_HOS", pl.Utf8), 78 Column("SP_DES_PAC", pl.Utf8), 79 Column("SP_COMPLEX", pl.Utf8), 80 Column("SP_FINANC", pl.Utf8), 81 Column("SP_CO_FAEC", pl.Utf8), 82 Column("SP_PF_CBO", pl.Utf8), 83 Column("SP_PF_DOC", pl.Utf8), 84 Column("SP_PJ_DOC", pl.Utf8), 85 Column("IN_TP_VAL", pl.Utf8), 86 Column("SEQUENCIA", pl.Utf8), 87 Column("REMESSA", pl.Utf8), 88 Column("SERV_CLA", pl.Utf8), 89 Column("SP_CIDPRI", pl.Utf8), 90 Column("SP_CIDSEC", pl.Utf8), 91 Column("SP_QT_PROC", pl.Utf8), 92 Column("SP_U_AIH", pl.Utf8), 93 ], 94 )
MAIN_TABLE =
'SIH_SP'
def
import_sih_sp(db_file='datasus.db', years=['*'], states=['*'], months=['*']):
12def import_sih_sp(db_file="datasus.db", years=["*"], states=["*"], months=["*"]): 13 """Import SP (Autorização de Internação Hospitalar Saúde do Profissional) from SIHSUS (Sistema de Informações Hospitalares do SUS). 14 15 Args: 16 db_file (str, optional): path to the duckdb file in which the data will be imported to. Defaults to "datasus.db". 17 years (list, optional): list of years for which data will be imported (if available). Eg: `[2012, 2000, 2010]`. Defaults to ["*"]. 18 states (list, optional): list of brazilian 2 letters state for which data will be imported (if available). Eg: `["SP", "RJ"]`. Defaults to ["*"]. 19 months (list, optional): list of months numbers (1-12) for which data will be imported (if available). Eg: `[1, 12, 6]`. Defaults to ["*"]. 20 21 --- 22 23 Extra: 24 - **Data description**: https://github.com/mymatsubara/datasus-db/blob/main/docs/sih_sp.pdf 25 - **ftp path**: ftp.datasus.gov.br/dissemin/publicos/SIHSUS/200801_/Dados/SP*.dbc 26 """ 27 logging.info(f"⏳ [{MAIN_TABLE}] Starting import...") 28 29 import_from_ftp( 30 [MAIN_TABLE], 31 [ 32 f"/dissemin/publicos/SIHSUS/200801_/Dados/SP{state.upper()}{format_year(year)}{format_month(month)}.dbc*" 33 for year in years 34 for state in states 35 for month in months 36 ], 37 fetch_sih_rh, 38 db_file=db_file, 39 )
Import SP (Autorização de Internação Hospitalar Saúde do Profissional) from SIHSUS (Sistema de Informações Hospitalares do SUS).
Arguments:
- db_file (str, optional): path to the duckdb file in which the data will be imported to. Defaults to "datasus.db".
- years (list, optional): list of years for which data will be imported (if available). Eg:
[2012, 2000, 2010]
. Defaults to ["*"]. - states (list, optional): list of brazilian 2 letters state for which data will be imported (if available). Eg:
["SP", "RJ"]
. Defaults to ["*"]. - months (list, optional): list of months numbers (1-12) for which data will be imported (if available). Eg:
[1, 12, 6]
. Defaults to ["*"].
Extra:
- Data description: https://github.com/mymatsubara/datasus-db/blob/main/docs/sih_sp.pdf
- ftp path: ftp.datasus.gov.br/dissemin/publicos/SIHSUS/200801_/Dados/SP*.dbc
def
fetch_sih_rh(ftp_path: str):
def
map_sih_sp(df: polars.dataframe.frame.DataFrame):
47def map_sih_sp(df: pl.DataFrame): 48 df = df.with_columns( 49 pl.when(pl.col(pl.Utf8).str.len_chars() == 0) 50 .then(None) 51 .otherwise(pl.col(pl.Utf8)) 52 .name.keep(), 53 ) 54 55 return to_schema( 56 df, 57 [ 58 Column("SP_GESTOR", pl.Utf8), 59 Column("SP_UF", pl.Utf8), 60 Column("SP_AA", pl.Utf8), 61 Column("SP_MM", pl.Utf8), 62 Column("SP_CNES", pl.Utf8), 63 Column("SP_NAIH", pl.Utf8), 64 Column("SP_PROCREA", pl.Utf8), 65 Column("SP_DTINTER", pl.Utf8), 66 Column("SP_DTSAIDA", pl.Utf8), 67 Column("SP_NUM_PR", pl.Utf8), 68 Column("SP_TIPO", pl.Utf8), 69 Column("SP_CPFCGC", pl.Utf8), 70 Column("SP_ATOPROF", pl.Utf8), 71 Column("SP_TP_ATO", pl.Utf8), 72 Column("SP_QTD_ATO", pl.Utf8), 73 Column("SP_PTSP", pl.Utf8), 74 Column("SP_NF", pl.Utf8), 75 Column("SP_VALATO", pl.Utf8), 76 Column("SP_M_HOSP", pl.Utf8), 77 Column("SP_M_PAC", pl.Utf8), 78 Column("SP_DES_HOS", pl.Utf8), 79 Column("SP_DES_PAC", pl.Utf8), 80 Column("SP_COMPLEX", pl.Utf8), 81 Column("SP_FINANC", pl.Utf8), 82 Column("SP_CO_FAEC", pl.Utf8), 83 Column("SP_PF_CBO", pl.Utf8), 84 Column("SP_PF_DOC", pl.Utf8), 85 Column("SP_PJ_DOC", pl.Utf8), 86 Column("IN_TP_VAL", pl.Utf8), 87 Column("SEQUENCIA", pl.Utf8), 88 Column("REMESSA", pl.Utf8), 89 Column("SERV_CLA", pl.Utf8), 90 Column("SP_CIDPRI", pl.Utf8), 91 Column("SP_CIDSEC", pl.Utf8), 92 Column("SP_QT_PROC", pl.Utf8), 93 Column("SP_U_AIH", pl.Utf8), 94 ], 95 )