diff --git a/models/br_ms_sia/br_ms_sia__producao_ambulatorial.sql b/models/br_ms_sia/br_ms_sia__producao_ambulatorial.sql index 62433139..26c16afc 100644 --- a/models/br_ms_sia/br_ms_sia__producao_ambulatorial.sql +++ b/models/br_ms_sia/br_ms_sia__producao_ambulatorial.sql @@ -197,7 +197,9 @@ select safe_cast(pa_fler as string) flag_erro_corpo_apac, from sia_add_municipios {% if is_incremental() %} - where - date(cast(ano as int64), cast(mes as int64), 1) - > (select max(date(cast(ano as int64), cast(mes as int64), 1)) from {{ this }}) + left join + {{ this }} as materialized + on sia_add_municipios.ano = materialized.ano + and sia_add_municipios.mes = materialized.mes + where materialized.ano is null and materialized.mes is null {% endif %} diff --git a/models/br_ms_sia/br_ms_sia__psicossocial.sql b/models/br_ms_sia/br_ms_sia__psicossocial.sql new file mode 100644 index 00000000..02ae0ceb --- /dev/null +++ b/models/br_ms_sia/br_ms_sia__psicossocial.sql @@ -0,0 +1,148 @@ +{{ + config( + alias="psicossocial", + schema="br_ms_sia", + materialized="table", + partition_by={ + "field": "ano", + "data_type": "int64", + "range": {"start": 2005, "end": 2024, "interval": 1}, + }, + cluster_by=["mes", "sigla_uf"], + ) +}} + + +with + sia_add_municipios as ( + -- Adicionar id_municipio de 7 dígitos + select + psicossocial.*, + mun.id_municipio as id_municipio_executante, + mun_res.id_municipio as id_municipio_residencia + from `basedosdados.br_ms_sia_staging.psicossocial` as psicossocial + left join + ( + select id_municipio, id_municipio_6 + from `basedosdados.br_bd_diretorios_brasil.municipio` + ) as mun + on psicossocial.ufmun = mun.id_municipio_6 + left join + ( + select id_municipio, id_municipio_6 + from `basedosdados.br_bd_diretorios_brasil.municipio` + ) as mun_res + on psicossocial.munpac = mun_res.id_municipio_6 + + ) + +select + safe_cast(ano as int64) ano, + safe_cast(mes as int64) mes, + safe_cast(sigla_uf as string) sigla_uf, + safe_cast(id_municipio_executante as string) id_municipio, + safe_cast(cnes_exec as string) id_estabelecimento_cnes, + safe_cast(cnes_esf as string) id_estabelecimento_cnes_familia, + -- colunas removidas da materilização final pois estão todas presentes + -- na tabela de estabelecimento -> basedosdados.br_ms_cnes.estabelecimento + -- safe_cast(gestao as string) id_gestao, + -- safe_cast(condic as string) tipo_gestao, + -- safe_cast(tpups as string) tipo_unidade, + -- safe_cast(tippre__ as string) tipo_prestador, + -- safe_cast(mn_ind as string) tipo_mantenedor_estabelecimento, + -- safe_cast(cnpjcpf as string) cnpj_estabelecimento_executante, + -- safe_cast(cnpjmnt as string) cnpj_mantenedora_estabalecimento, + -- safe_cast(nat_jur as string) natureza_juridica_estabelecimento, + safe_cast(pa_proc_id as string) id_procedimento_ambulatorial, + safe_cast(pa_srv as string) id_servico_especializado, + safe_cast(pa_class_s as string) id_classificacao_servico, + -- retirada pois apresenta dígitos sem sentido + -- safe_cast(cns_pac as string) id_cns_paciente_criptografado, + safe_cast( + format_date('%Y-%m-%d', safe.parse_date('%Y%m%d', inicio)) as date + ) data_inicio_atendimento, + safe_cast( + format_date('%Y-%m-%d', safe.parse_date('%Y%m%d', fim)) as date + ) data_termino_atendimento, + safe_cast(permanen as string) permanencia_atendimento, + safe_cast(mot_cob as string) motivo_saida_permanencia, + safe_cast( + format_date('%Y-%m-%d', safe.parse_date('%Y%m%d', dt_motcob)) as date + ) as data_motivo_saida_permanencia, + safe_cast(substr(dt_process, 1, 4) as int64) as ano_processamento, + safe_cast(substr(dt_process, 5, 2) as int64) as mes_processamento, + safe_cast(substr(dt_atend, 1, 4) as int64) as ano_atendimento, + safe_cast(substr(dt_atend, 5, 2) as int64) as mes_atendimento, + safe_cast( + format_date('%Y-%m-%d', safe.parse_date('%Y%m%d', dtnasc)) as date + ) data_nascimento_paciente, + safe_cast(id_municipio_residencia as string) id_municipio_residencia_paciente, + safe_cast(ltrim(cast(origem_pac as string), '0') as string) origem_paciente, + safe_cast(ltrim(cast(nacion_pac as string), '0') as string) nacionalidade_paciente, + safe_cast(tpidadepac as string) tipo_idade, + safe_cast(idadepac as int64) idade_paciente, + safe_cast(sexopac as string) sexo_paciente, + safe_cast(racacor as string) raca_cor_paciente, + safe_cast(etnia as string) etnia_paciente, + case + when catend = '00' then '0' else cast(ltrim(catend, '0') as string) + end as carater_atendimento, + safe_cast( + trim(case when length(trim(cidpri)) = 3 then cidpri else null end) as string + ) as cid_principal_categoria, + safe_cast( + trim( + case + when length(trim(cidpri)) = 4 and cidpri != '0000' + then cidpri + when + length(trim(cidpri)) = 3 + and cidpri in ( + select subcategoria + from `basedosdados-dev.br_bd_diretorios_brasil.cid_10` + where length(subcategoria) = 3 + ) + then cidpri + else null + end + ) as string + ) as cid_principal_subcategoria, + safe_cast( + trim(case when length(trim(cidassoc)) = 3 then cidassoc else null end) as string + ) as cid_causas_associadas_categoria, + safe_cast( + trim( + case + when length(trim(cidassoc)) = 4 and cidassoc != '0000' + then cidassoc + when + length(trim(cidassoc)) = 3 + and cidassoc in ( + select subcategoria + from `basedosdados-dev.br_bd_diretorios_brasil.cid_10` + where length(subcategoria) = 3 + ) + then cidassoc + else null + end + ) as string + ) as cid_causas_associadas_subcategoria, + safe_cast(tp_droga as string) tipo_droga, + safe_cast(destinopac as string) destino_paciente, + safe_cast(loc_realiz as string) local_realizacao_atendimento, + safe_cast( + case + when sit_rua = 'S' then '1' when sit_rua = 'N' then '0' else sit_rua + end as int64 + ) indicador_situacao_rua, + safe_cast(cob_esf as int64) indicador_estrategia_familia, + safe_cast(pa_qtdpro as int64) quantidade_produzida_procedimento, + safe_cast(pa_qtdapr as int64) quantidade_aprovada_procedimento, + safe_cast(qtdate as int64) quantidade_atendimentos, + safe_cast(qtdpcn as string) quantidade_pacientes, +from sia_add_municipios as t +{% if is_incremental() %} + where + date(cast(ano as int64), cast(mes as int64), 1) + > (select max(date(cast(ano as int64), cast(mes as int64), 1)) from {{ this }}) +{% endif %} diff --git a/models/br_ms_sia/schema.yml b/models/br_ms_sia/schema.yml index 668c3598..61b1f483 100644 --- a/models/br_ms_sia/schema.yml +++ b/models/br_ms_sia/schema.yml @@ -1,20 +1,22 @@ --- version: 2 models: + - name: br_ms_sia__dicionario + description: Dicionário + columns: + - name: id_tabela + description: ID Tabela + - name: nome_coluna + description: Nome da coluna + - name: chave + description: Chave + - name: cobertura_temporal + description: Cobertura temporal + - name: valor + description: Valor - name: br_ms_sia__producao_ambulatorial description: Esta tabela contém o registro de processos ambulatorias realizados em todo sistema de saúde nacional - público e privado. - tests: - - dbt_utils.unique_combination_of_columns: - combination_of_columns: - - ano - - mes - - id_estabelecimento_cnes - - instrumento_registro - - id_processamento_ambulatorial - - id_cbo_2002 - - not_null_proportion_multiple_columns: - at_least: 0.05 columns: - name: ano description: Ano @@ -239,16 +241,189 @@ models: description: Tipo de erro de Quantidade Produzida - name: flag_erro_corpo_apac description: FLAG de erro de corpo da APAC - - name: br_ms_sia__dicionario - description: Dicionário + - name: br_ms_sia__psicossocial + description: Esta tabela contém o registro de processos ambulatorias de atendimento + psicossial no sistema público de saúde nacional. columns: - - name: id_tabela - description: ID Tabela - - name: nome_coluna - description: Nome da coluna - - name: chave - description: Chave - - name: cobertura_temporal - description: Cobertura temporal - - name: valor - description: Valor + - 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__mes') + field: mes.mes + - name: sigla_uf + description: Sigla da Unidade da Federação + tests: + - relationships: + to: ref('br_bd_diretorios_brasil__uf') + field: sigla + - name: id_municipio + description: ID Município - IBGE 7 Dígitos + tests: + - relationships: + to: ref('br_bd_diretorios_brasil__municipio') + field: id_municipio + - name: id_estabelecimento_cnes + description: ID Estabelecimento - CNES + - name: id_estabelecimento_cnes_familia + description: Código do SCNES do Estabelecimento de Saúde Unidade da Saúde + da Família da região + - name: id_gestao + description: ID do tipo de gestão do estabelecimento + - name: tipo_gestao + description: Tipo de gestão do estabelecimento + - name: tipo_unidade + description: Tipo de estabelecimento + - name: tipo_prestador + description: Tipo de Prestador + - name: tipo_mantenedor_estabelecimento + description: Tipo de manutenção do estabelecimento + - name: cnpj_estabelecimento_executante + description: CNPJ do Estabelecimento executante + - name: cnpj_mantenedora_estabalecimento + description: CNPJ da Mantenedora do Estabelecimento + - name: natureza_juridica_estabelecimento + description: Natureza jurídica do operador do estabelecimento # Não possui teste pois a coluna foi excluida na materialização + - name: id_procedimento_ambulatorial + description: Ação Realizada + - name: id_servico_especializado + description: Código do Serviço Especializado / Classificação CBO (de acordo + com o CNES) + - name: id_classificacao_servico + description: Código da Classificação do Serviço + - name: id_cns_paciente_criptografado + description: Número do CNS (Cartão Nacional de Saúde) do paciente (criptografia) + - name: data_inicio_atendimento + description: Data de Início do Atendimento + tests: + - relationships: + to: ref('br_bd_diretorios_data_tempo__data') + field: data.data + - name: data_termino_atendimento + description: Data de Fim do Atendimento + tests: + - relationships: + to: ref('br_bd_diretorios_data_tempo__data') + field: data.data + - name: permanencia_atendimento + description: Permanência em Atendimento + - name: motivo_saida_permanencia + description: Motivo de Saída/Permanência + - name: data_motivo_saida_permanencia + description: Data da ocorrência no caso de alta, transferência ou óbito + tests: + - relationships: + to: ref('br_bd_diretorios_data_tempo__data') + field: data.data + - name: ano_processamento + description: Ano do processamento + tests: + - relationships: + to: ref('br_bd_diretorios_data_tempo__ano') + field: ano.ano + - name: mes_processamento + description: Mês do processamento + tests: + - relationships: + to: ref('br_bd_diretorios_data_tempo__mes') + field: mes.mes + - name: ano_atendimento + description: Ano do atendimento + tests: + - relationships: + to: ref('br_bd_diretorios_data_tempo__ano') + field: ano.ano + - name: mes_atendimento + description: Mês do atendimento + tests: + - relationships: + to: ref('br_bd_diretorios_data_tempo__mes') + field: mes.mes + - name: data_nascimento_paciente + description: Data de nascimento do paciente + tests: + - relationships: + to: ref('br_bd_diretorios_data_tempo__data') + field: data.data + - name: id_municipio_residencia_paciente + description: ID Município - IBGE 7 Dígitos + tests: + - relationships: + to: ref('br_bd_diretorios_brasil__municipio') + field: id_municipio + - name: origem_paciente + description: Origem do paciente + - name: nacionalidade_paciente + description: Nacionalidade do paciente + - name: tipo_idade + description: Tipo da Idade do paciente em anos, meses ou dias. Calculado a + partir da data de nascimento + - name: idade_paciente + description: Idade do paciente + - name: sexo_paciente + description: Sexo do paciente + - name: raca_cor_paciente + description: Raça/cor do paciente + - name: etnia_paciente + description: Etnia do paciente + - name: carater_atendimento + description: Caráter de atendimento (APAC ou BPA-I) + - name: cid_principal_categoria + description: Identificador da categoria da Classificação Internacional de + Doenças (CID10) principal da Autorização de Procedimento Ambulatorial de + Alta complexidade (APAC) ou do Boletim de Produção Ambulatorial Individualizado + (BPA-I) + tests: + - relationships: + to: ref('br_bd_diretorios_brasil__cid_10') + field: categoria + - name: cid_principal_subcategoria + description: Identificador da subcategoria da Classificação Internacional + de Doenças (CID10) principal da Autorização de Procedimento Ambulatorial + de Alta complexidade (APAC) ou do Boletim de Produção Ambulatorial Individualizado + (BPA-I) + tests: + - relationships: + to: ref('br_bd_diretorios_brasil__cid_10') + field: subcategoria + - name: cid_causas_associadas_categoria + description: Identificador da categoria da Classificação Internacional de + Doenças (CID10) causas associadas a Autorização de Procedimento Ambulatorial + de Alta complexidade (APAC) + tests: + - relationships: + to: ref('br_bd_diretorios_brasil__cid_10') + field: categoria + - name: cid_causas_associadas_subcategoria + description: Identificador da subcategoria da Classificação Internacional + de Doenças (CID10) causas associadas a Autorização de Procedimento Ambulatorial + de Alta complexidade (APAC) + tests: + - relationships: + to: ref('br_bd_diretorios_brasil__cid_10') + field: subcategoria + - name: tipo_droga + description: Tipo de Droga + - name: destino_paciente + description: Destino do paciente + - name: local_realizacao_atendimento + description: Local de Realização + - name: indicador_situacao_rua + description: Situação de Rua + - name: indicador_estrategia_familia + description: Indica se a região de atendimento do paciente tem cobertura de + Estratégia Saúde da Família + - name: quantidade_produzida_procedimento + description: Quantidade produzida (apresentada) do procedimento + - name: quantidade_aprovada_procedimento + description: Quantidade aprovada do procedimento + - name: quantidade_atendimentos + description: Quantidade de Atendimentos + - name: quantidade_pacientes + description: Quantidade de pacientes