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:

def fetch_sih_rh(ftp_path: str):
42def fetch_sih_rh(ftp_path: str):
43    df = fetch_dbc_as_df(ftp_path)
44    return {MAIN_TABLE: map_sih_sp(df)}
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    )