From fbb411832751230dcbbbd2570f823f558372f372 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arthur=20Gusm=C3=A3o?= Date: Thu, 25 Apr 2024 12:00:07 -0300 Subject: [PATCH] feat: add br_ms_sih models --- dbt_project.yml | 3 + .../br_ms_sih__servicos_profissionais.sql | 103 +++++++++++++ models/br_ms_sih/schema.yml | 142 ++++++++++++++++++ 3 files changed, 248 insertions(+) create mode 100644 models/br_ms_sih/br_ms_sih__servicos_profissionais.sql create mode 100644 models/br_ms_sih/schema.yml diff --git a/dbt_project.yml b/dbt_project.yml index 93e7944a..a8f21f3c 100644 --- a/dbt_project.yml +++ b/dbt_project.yml @@ -249,6 +249,9 @@ models: br_ms_sia: +materialized: table +schema: br_ms_sia + br_ms_sih: + +materialized: table + +schema: br_ms_sih br_ms_sim: +materialized: table +schema: br_ms_sim diff --git a/models/br_ms_sih/br_ms_sih__servicos_profissionais.sql b/models/br_ms_sih/br_ms_sih__servicos_profissionais.sql new file mode 100644 index 00000000..e4bc5175 --- /dev/null +++ b/models/br_ms_sih/br_ms_sih__servicos_profissionais.sql @@ -0,0 +1,103 @@ +{{ + config( + alias="servicos_profissionais", + schema="br_ms_sih", + materialized="table", + partition_by={ + "field": "ano", + "data_type": "int64", + "range": {"start": 2005, "end": 2024, "interval": 1}, + }, + cluster_by=["mes", "sigla_uf"], + ) +}} + +select + safe_cast(ano as int64) ano, + safe_cast(mes as int64) mes, + safe_cast(sp_aa as int64) ano_internacao, + safe_cast(sp_mm as int64) mes_internacao, + safe_cast( + format_date('%Y-%m-%d', safe.parse_date('%Y%m%d', sp_dtinter)) as date + ) data_entrada_internacao, + safe_cast( + format_date('%Y-%m-%d', safe.parse_date('%Y%m%d', sp_dtsaida)) as date + ) data_saida_iternacao, + safe_cast(sp_uf as string) sigla_uf, + safe_cast(id_municipio as string) id_municipio_estabelecimento_aih, + safe_cast(sp_m_pac as string) id_municipio_paciente, + safe_cast(sp_gestor as string) id_gestor, + safe_cast(sp_cnes as string) id_estabelecimento_cnes, + safe_cast(sp_naih as string) id_aih, + safe_cast(sp_procrea as string) id_procedimento_principal, + safe_cast(serv_cla as string) tipo_servico, + safe_cast(sp_cpfcgc as string) id_prestador_servico, + safe_cast(sp_atoprof as string) id_procedimento, + safe_cast(sp_pf_cbo as string) cbo_2002_profissional, + safe_cast(ltrim(sp_qt_proc) as int64) quantidade_procedimentos, + safe_cast( + trim( + case when length(trim(sp_cidpri)) = 3 then sp_cidpri else null end + ) as string + ) id_cid_principal, + safe_cast( + trim( + case + when length(trim(sp_cidpri)) = 4 and sp_cidpri != '0000' + then sp_cidpri + when + length(trim(sp_cidpri)) = 3 + and sp_cidpri in ( + select subcategoria + from `basedosdados.br_bd_diretorios_brasil.cid_10` + where length(subcategoria) = 3 + ) + then sp_cidpri + else null + end + ) as string + ) as id_cid_principal_subcategoria, + safe_cast( + trim( + case when length(trim(sp_cidsec)) = 3 then sp_cidsec else null end + ) as string + ) id_cid_secundario, + safe_cast( + trim( + case + when length(trim(sp_cidsec)) = 4 and sp_cidsec != '0000' + then sp_cidsec + when + length(trim(sp_cidsec)) = 3 + and sp_cidsec in ( + select subcategoria + from `basedosdados.br_bd_diretorios_brasil.cid_10` + where length(subcategoria) = 3 + ) + then sp_cidsec + else null + end + ) as string + ) as id_cid_secundario_subcategoria, + safe_cast(sp_complex as string) complexidade_ato_profissional, + safe_cast(ltrim(sp_qtd_ato) as int64) quantidade_atos_profissionais, + safe_cast(ltrim(sp_ptsp) as int64) quantidade_pontos, + safe_cast(sp_nf as string) nota_fiscal, + safe_cast(ltrim(sp_valato) as float64) valor_ato_profissional, + safe_cast(sp_des_hos as int64) indicador_uf_paciente, + safe_cast(sp_des_pac as int64) indicador_uf_paciente, + safe_cast(sp_u_aih as int64) indicador_id_aih, + safe_cast(sp_financ as string) tipo_financiamento_ato_profissional, + safe_cast(sp_co_faec as string) tipo_subtipo_financiamento_ato_profissional, + safe_cast(sp_pf_doc as string) tipo_documento_pf, + safe_cast(sp_pj_doc as string) tipo_documento_pj, + safe_cast(in_tp_val as string) tipo_valor, + safe_cast(ltrim(sequencia) as string) sequencia, + safe_cast(remessa as string) nome_remessa, +from `basedosdados-dev.br_ms_sih_staging.servicos_profissionais` as sih +left join + ( + select id_municipio, id_municipio_6, + from `basedosdados.br_bd_diretorios_brasil.municipio` + ) as mun + on sih.sp_m_hosp = mun.id_municipio_6 diff --git a/models/br_ms_sih/schema.yml b/models/br_ms_sih/schema.yml new file mode 100644 index 00000000..7b8e9238 --- /dev/null +++ b/models/br_ms_sih/schema.yml @@ -0,0 +1,142 @@ +version: 2 + +models: + - name: br_ms_sih__servicos_profissionais + description: Insert `servicos_profissionais` table description here + tests: + - dbt_utils.unique_combination_of_columns: + combination_of_columns: + - id_aih + - not_null_proportion_multiple_columns: + at_least: 0.05 + columns: + - name: ano + description: Ano + tests: + - relationships: + to: ref('br_bd_diretorios_data_tempo__ano') + field: ano.ano + - name: mes + description: Mês + tests: + - relationships: + to: ref('br_bd_diretorios_data_tempo__ano') + field: mes + - name: ano_internacao + description: Ano da internação + tests: + - relationships: + to: ref('br_bd_diretorios_data_tempo__ano') + field: ano.ano + - name: mes_internacao + description: Mes da internação + tests: + - relationships: + to: ref('br_bd_diretorios_data_tempo__ano') + field: mes + - name: data_entrada_internacao + description: Data do início da internação + tests: + - relationships: + to: ref('br_bd_diretorios_data_tempo__data') + field: data.data + - name: data_saida_iternacao + description: Data do final da internação + tests: + - relationships: + to: ref('br_bd_diretorios_data_tempo__data') + field: data.data + - name: sigla_uf + description: Sigla unidade da fedaração + tests: + - relationships: + to: ref('br_bd_diretorios_data_tempo__uf') + field: sigla + - name: id_municipio_estabelecimento_aih + description: Município de localização do Estabelecimento Executante da AIH + tests: + - relationships: + to: ref('br_bd_diretorios_brasil__municipio') + field: id_municipio + - name: id_municipio_paciente + description: Município de residência do paciente + tests: + - relationships: + to: ref('br_bd_diretorios_brasil__municipio') + field: id_municipio + - name: id_gestor + description: Unidade de Federação + Código Município de Gestão ou UF0000 se + o Estabelecimento Executante está sob Gestão Estadual. + - name: id_estabelecimento_cnes + description: ID do estabelecimento de saúde executante da Autorização de Internação + Hospitalar (AIH) + - name: id_aih + description: ID Autorização de Internação Hospitalar (AIH) + - name: id_procedimento_principal + description: Procedimento principal realizado na AIH. + - name: tipo_servico + description: Classificação do tipo de serviço + - name: id_prestador_servico + description: CNES, CPF ou CNPJ do prestador do serviço do ato profissional + - name: id_procedimento + description: Procedimento referente ao ato profissional + - name: cbo_2002_profissional + description: Identificador de Ocupação Brasileira do Profissional que realizou + o ato ou “00000” caso não tenha sido + tests: + - relationships: + to: ref('br_bd_diretorios_brasil__cbo_2002') + field: cbo_2002.cbo_2002 + - name: quantidade_procedimentos + description: Quantidade de procedimentos realizados + - name: id_cid_principal + description: Identificador principal da Classificação Internacional de Doenças + e Problemas Relacionados com a Saúde (CID) + - name: id_cid_principal_subcategoria + description: Subcategoria do identificador principal da Classificação Internacional de Doenças + e Problemas Relacionados com a Saúde (CID) + tests: + - relationships: + to: ref('br_bd_diretorios_brasil__cid_10') + field: subcategoria + - name: id_cid_secundario + description: Identificador secundário da Classificação Internacional de Doenças + e Problemas Relacionados com a Saúde (CID) + - name: id_cid_secundario_subcategoria + description: Subcategoria do identificador secundário da Classificação Internacional de Doenças + e Problemas Relacionados com a Saúde (CID) + tests: + - relationships: + to: ref('br_bd_diretorios_brasil__cid_10') + field: subcategoria + - name: complexidade_ato_profissional + description: Complexidade do ato profissional + - name: quantidade_atos_profissionais + description: Quantidade de atos profissionais + - name: quantidade_pontos + description: Quantidade de pontos + - name: nota_fiscal + description: Nota fiscal do material empregado quando órtese/prótese, quando não, o campo representa a data do ato + - name: valor_ato_profissional + description: Valor do ato profissional + - name: indicador_uf_paciente + description: Indica se a UF de residência do paciente é diferente da UF de localização do estabelecimento + - name: indicador_uf_paciente + description: Indica se a UF de residência do paciente é diferente da UF de + localização do estabelecimento + - name: indicador_id_aih + description: Indica quais id_aih são únicos + - name: tipo_financiamento_ato_profissional + description: Tipo de financiamento do ato profissional + - name: tipo_subtipo_financiamento_ato_profissional + description: Tipo de financiamento (04-FAEC) + Subtipo de financiamento relacionado ao tipo de financiamento (04-FAEC) do ato profissional + - name: tipo_documento_pf + description: Documento de pessoa jurídica + - name: tipo_documento_pj + description: Documento de pessoa física + - name: tipo_valor + description: 'Tipo de valor: 1 - SP /2 –SH' + - name: sequencia + description: Código sequencial + - name: nome_remessa + description: Nome da remessa