From 58deeff9ccaa005af4151e383955260f8aa74f50 Mon Sep 17 00:00:00 2001 From: folhesgabriel Date: Mon, 13 May 2024 12:10:44 -0300 Subject: [PATCH] add new models, macros and tests --- models/br_ibge_censo_2022/schema.yml | 148 +++--- .../br_ms_cnes__dados_complementares.sql | 5 - models/br_ms_cnes/br_ms_cnes__dicionario.sql | 2 +- models/br_ms_cnes/br_ms_cnes__equipamento.sql | 7 +- models/br_ms_cnes/br_ms_cnes__equipe.sql | 37 +- .../br_ms_cnes__estabelecimento.sql | 73 ++- .../br_ms_cnes__estabelecimento_ensino.sql | 7 +- ..._ms_cnes__estabelecimento_filantropico.sql | 10 +- .../br_ms_cnes/br_ms_cnes__gestao_metas.sql | 7 +- models/br_ms_cnes/br_ms_cnes__habilitacao.sql | 9 +- models/br_ms_cnes/br_ms_cnes__incentivos.sql | 7 +- models/br_ms_cnes/br_ms_cnes__leito.sql | 9 +- .../br_ms_cnes/br_ms_cnes__profissional.sql | 29 +- .../br_ms_cnes__regra_contratual.sql | 38 +- .../br_ms_cnes__servico_especializado.sql | 39 +- models/br_ms_cnes/schema.yml | 429 +++++++++++++++--- ...ies.sql => custom_dictionary_coverage.sql} | 9 +- tests/generic/custom_relationships.sql | 4 +- 18 files changed, 621 insertions(+), 248 deletions(-) rename tests/generic/{custom_dictionaries.sql => custom_dictionary_coverage.sql} (87%) diff --git a/models/br_ibge_censo_2022/schema.yml b/models/br_ibge_censo_2022/schema.yml index 4f67b2ab..58c530d0 100644 --- a/models/br_ibge_censo_2022/schema.yml +++ b/models/br_ibge_censo_2022/schema.yml @@ -920,10 +920,11 @@ models: - name: valor description: Valor - name: br_ibge_censo_2022__quilombolas_localizacao_domicilio_grupo_idade_municipio - description: Tabela 8176 - População quilombola, por localização do domicílio, grupos de idade e sexo + description: Tabela 8176 - População quilombola, por localização do domicílio, + grupos de idade e sexo tests: - not_null_proportion_multiple_columns: - at_least: 0.05 + at_least: 0.05 columns: - name: ano description: Ano @@ -931,8 +932,8 @@ models: description: ID Município IBGE 7 dígitos tests: - relationships: - to: ref('br_bd_diretorios_brasil__municipio') - field: id_municipio + to: ref('br_bd_diretorios_brasil__municipio') + field: id_municipio - name: localizacao_domicilio description: Localização do Domicílio - name: idade_anos @@ -941,7 +942,7 @@ models: - dbt_utils.accepted_range: min_value: 0 max_value: 120 - where: 'idade_anos is not null' + where: idade_anos is not null - name: grupo_idade description: Grupo de Idade - name: sexo @@ -949,15 +950,13 @@ models: - name: pessoas description: Pessoas Quilombolas - name: br_ibge_censo_2022__quilombolas_indice_envelhecimento_localizacao_domicilio_municipio - description: Tabela 8178 - Índice de envelhecimento, idade mediana e razão de sexo da população quilombola por localização do domicílio. + description: Tabela 8178 - Índice de envelhecimento, idade mediana e razão de + sexo da população quilombola por localização do domicílio. tests: - dbt_utils.unique_combination_of_columns: - combination_of_columns: - - ano - - id_municipio - - localizacao_domicilio + combination_of_columns: [ano, id_municipio, localizacao_domicilio] - not_null_proportion_multiple_columns: - at_least: 0.05 + at_least: 0.05 columns: - name: ano description: Ano @@ -965,8 +964,8 @@ models: description: ID Município IBGE 7 dígitos tests: - relationships: - to: ref('br_bd_diretorios_brasil__municipio') - field: id_municipio + to: ref('br_bd_diretorios_brasil__municipio') + field: id_municipio - name: localizacao_domicilio description: Localização do Domicílio - name: indice_envelhecimento @@ -977,18 +976,19 @@ models: - dbt_utils.accepted_range: min_value: 0 max_value: 120 - where: 'idade_mediana is not null' + where: idade_mediana is not null - name: razao_sexo description: Razão de sexo da população quilombola tests: - dbt_utils.expression_is_true: expression: '>= 1' - where: 'razao_sexo is not null' + where: razao_sexo is not null - name: br_ibge_censo_2022__quilombolas_populacao_residente_grupo_idade_territorio_quilombola - description: Tabela 9765 - População residente em territórios quilombolas, total e quilombola, por grupos de idade e sexo, segundo os Territórios Quilombolas + description: Tabela 9765 - População residente em territórios quilombolas, total + e quilombola, por grupos de idade e sexo, segundo os Territórios Quilombolas tests: - not_null_proportion_multiple_columns: - at_least: 0.05 + at_least: 0.05 columns: - name: ano description: Ano @@ -998,8 +998,8 @@ models: description: Sigla da Unidade da Federação tests: - relationships: - to: ref('br_bd_diretorios_brasil__uf') - field: sigla + to: ref('br_bd_diretorios_brasil__uf') + field: sigla - name: sexo description: Sexo - name: idade_anos @@ -1008,7 +1008,7 @@ models: - dbt_utils.accepted_range: min_value: 0 max_value: 120 - where: 'idade_anos is not null' + where: idade_anos is not null - name: grupo_idade description: Grupo de Idade - name: pessoas_quilombolas @@ -1016,14 +1016,14 @@ models: - name: populacao_residente description: Pessoas residentes em territórios quilombolas - name: br_ibge_censo_2022__quilombolas_indice_envelhecimento_territorio_quilombola - description: Tabela 9767 - Índice de envelhecimento, idade mediana e razão de sexo da população residente em territórios quilombolas, total e quilombola, segundo os Territórios Quilombolas + description: Tabela 9767 - Índice de envelhecimento, idade mediana e razão de + sexo da população residente em territórios quilombolas, total e quilombola, + segundo os Territórios Quilombolas tests: - dbt_utils.unique_combination_of_columns: - combination_of_columns: - - ano - - id_territorio_quilombola + combination_of_columns: [ano, id_territorio_quilombola] - not_null_proportion_multiple_columns: - at_least: 0.05 + at_least: 0.05 columns: - name: ano description: Ano @@ -1035,38 +1035,39 @@ models: description: Sigla da Unidade da Federação tests: - relationships: - to: ref('br_bd_diretorios_brasil__uf') - field: sigla + to: ref('br_bd_diretorios_brasil__uf') + field: sigla - name: indice_envelhecimento description: Índice de envelhecimento da população residente em territórios - quilombolas + quilombolas - name: idade_mediana description: Idade mediana da população residente em territórios quilombolas tests: - dbt_utils.accepted_range: min_value: 0 max_value: 120 - where: 'idade_mediana is not null' + where: idade_mediana is not null - name: razao_sexo description: Razão de sexo da população residente em territórios quilombolas tests: - dbt_utils.expression_is_true: expression: '>= 1' - where: 'razao_sexo is not null' + where: razao_sexo is not null - name: indice_envelhecimento_populacao_quilombola description: Índice de envelhecimento da população quilombola residente em - territórios quilombolas + territórios quilombolas - name: idade_mediana_populacao_quilombola description: Idade mediana da população quilombola residente em territórios - quilombolas + quilombolas - name: razao_sexo_quilombola description: Razão de sexo da população quilombola residente em territórios - quilombolas + quilombolas - name: br_ibge_censo_2022__indigenas_localizacao_docimicilio_grupo_idade_municipio - description: Tabela 8175 - População indígena, por localização do domicílio, grupos de idade e sexo + description: Tabela 8175 - População indígena, por localização do domicílio, grupos + de idade e sexo tests: - not_null_proportion_multiple_columns: - at_least: 0.05 + at_least: 0.05 columns: - name: ano description: Ano @@ -1074,8 +1075,8 @@ models: description: ID Município IBGE 7 dígitos tests: - relationships: - to: ref('br_bd_diretorios_brasil__municipio') - field: id + to: ref('br_bd_diretorios_brasil__municipio') + field: id - name: localizacao_domicilio description: Localização do Domicílio - name: idade_anos @@ -1087,16 +1088,17 @@ models: - name: pessoas description: Pessoas Indígenas - name: br_ibge_censo_2022__indigenas_indice_envelhecimento_localizacao_domicilio_municipio - description: Tabela 8177 - Índice de envelhecimento, idade mediana e razão de sexo da população indígena, segundo localização do domicílio e quesito de declaração + description: Tabela 8177 - Índice de envelhecimento, idade mediana e razão de + sexo da população indígena, segundo localização do domicílio e quesito de declaração tests: - dbt_utils.unique_combination_of_columns: - combination_of_columns: - - ano - - id_municipio - - localizacao_domicilio - - quesito_declaracao_indigena + combination_of_columns: + - ano + - id_municipio + - localizacao_domicilio + - quesito_declaracao_indigena - not_null_proportion_multiple_columns: - at_least: 0.05 + at_least: 0.05 columns: - name: ano description: Ano @@ -1104,8 +1106,8 @@ models: description: ID Município IBGE 7 dígitos tests: - relationships: - to: ref('br_bd_diretorios_brasil__municipio') - field: id_municipio + to: ref('br_bd_diretorios_brasil__municipio') + field: id_municipio - name: localizacao_domicilio description: Localização do Domicílio - name: quesito_declaracao_indigena @@ -1118,25 +1120,27 @@ models: - dbt_utils.accepted_range: min_value: 0 max_value: 120 - where: 'idade_mediana is not null' + where: idade_mediana is not null - name: razao_sexo description: Razão de sexo da população indígena tests: - dbt_utils.expression_is_true: expression: '>= 1' - where: 'razao_sexo is not null' + where: razao_sexo is not null - name: br_ibge_censo_2022__indigenas_populacao_residente_grupo_idade_terras_indigenas - description: Tabela 9764 - População residente em terras indígenas, total e indígenas, por grupos de idade, sexo e quesito de declaração indígena, segundo as Terras Indígenas + description: Tabela 9764 - População residente em terras indígenas, total e indígenas, + por grupos de idade, sexo e quesito de declaração indígena, segundo as Terras + Indígenas tests: - dbt_utils.unique_combination_of_columns: - combination_of_columns: - - id_terra_indigena - - quesito_declaracao_indigena - - sexo - - idade_anos - - ano + combination_of_columns: + - id_terra_indigena + - quesito_declaracao_indigena + - sexo + - idade_anos + - ano - not_null_proportion_multiple_columns: - at_least: 0.05 + at_least: 0.05 columns: - name: id_terra_indigena description: ID da Terra Indígena @@ -1146,8 +1150,8 @@ models: description: Sigla da Unidade da Federação tests: - relationships: - to: ref('br_bd_diretorios_brasil__uf') - field: sigla + to: ref('br_bd_diretorios_brasil__uf') + field: sigla - name: quesito_declaracao_indigena description: Quesito declaração indígena - name: sexo @@ -1161,17 +1165,19 @@ models: - name: populacao_residente description: Pessoas residentes em terras indígenas - name: br_ibge_censo_2022__indigenas_indice_envelhecimento_terras_indigenas - description: Tabela 9766 - Índice de envelhecimento, idade mediana e razão de sexo da população residente em terras indígenas, total e indígenas, segundo quesito de declaração e as Terras Indígenas + description: Tabela 9766 - Índice de envelhecimento, idade mediana e razão de + sexo da população residente em terras indígenas, total e indígenas, segundo + quesito de declaração e as Terras Indígenas tests: - dbt_utils.unique_combination_of_columns: - combination_of_columns: - - ano - - id_terra_indigena - - terra_indigena - - sigla_uf - - quesito_declaracao_indigena + combination_of_columns: + - ano + - id_terra_indigena + - terra_indigena + - sigla_uf + - quesito_declaracao_indigena - not_null_proportion_multiple_columns: - at_least: 0.05 + at_least: 0.05 columns: - name: ano description: Ano @@ -1183,8 +1189,8 @@ models: description: Sigla da Unidade da Federação tests: - relationships: - to: ref('br_bd_diretorios_brasil__uf') - field: sigla + to: ref('br_bd_diretorios_brasil__uf') + field: sigla - name: quesito_declaracao_indigena description: Quesito declaração indígena - name: indice_envelhecimento @@ -1195,16 +1201,16 @@ models: - dbt_utils.accepted_range: min_value: 0 max_value: 120 - where: 'idade_mediana is not null' + where: idade_mediana is not null - name: razao_sexo description: Razão de sexo da população residente em terras indígenas tests: - dbt_utils.expression_is_true: expression: '>= 1' - where: 'razao_sexo is not null' + where: razao_sexo is not null - name: indice_envelhecimento_populacao_indigena description: Índice de envelhecimento da população indígena residente em terras - indígenas + indígenas - name: idade_mediana_populacao_indigena description: Idade mediana da população indígena residente em terras indígenas - name: razao_sexo_populacao_indigena diff --git a/models/br_ms_cnes/br_ms_cnes__dados_complementares.sql b/models/br_ms_cnes/br_ms_cnes__dados_complementares.sql index bcb78eb8..fe515868 100644 --- a/models/br_ms_cnes/br_ms_cnes__dados_complementares.sql +++ b/models/br_ms_cnes/br_ms_cnes__dados_complementares.sql @@ -8,11 +8,6 @@ "data_type": "int64", "range": {"start": 2005, "end": 2024, "interval": 1}, }, - pre_hook="DROP ALL ROW ACCESS POLICIES ON {{ this }}", - post_hook=[ - 'CREATE OR REPLACE ROW ACCESS POLICY allusers_filter ON {{this}} GRANT TO ("allUsers") FILTER USING (DATE_DIFF(CURRENT_DATE(),DATE(CAST(ano AS INT64),CAST(mes AS INT64),1), MONTH) > 6)', - 'CREATE OR REPLACE ROW ACCESS POLICY bdpro_filter ON {{this}} GRANT TO ("group:bd-pro@basedosdados.org", "group:sudo@basedosdados.org") FILTER USING (True)', - ], ) }} with diff --git a/models/br_ms_cnes/br_ms_cnes__dicionario.sql b/models/br_ms_cnes/br_ms_cnes__dicionario.sql index f4c6da39..5942b9eb 100644 --- a/models/br_ms_cnes/br_ms_cnes__dicionario.sql +++ b/models/br_ms_cnes/br_ms_cnes__dicionario.sql @@ -3,6 +3,6 @@ select safe_cast(id_tabela as string) id_tabela, safe_cast(nome_coluna as string) nome_coluna, safe_cast(chave as string) chave, - safe_cast(cobertura_temporal as string) cobertura_temporal, + safe_cast(replace(cobertura_temporal, '-1', '(1)') as string) cobertura_temporal, safe_cast(valor as string) valor, from `basedosdados-staging.br_ms_cnes_staging.dicionario` as t diff --git a/models/br_ms_cnes/br_ms_cnes__equipamento.sql b/models/br_ms_cnes/br_ms_cnes__equipamento.sql index 53659d97..6c0ccf88 100644 --- a/models/br_ms_cnes/br_ms_cnes__equipamento.sql +++ b/models/br_ms_cnes/br_ms_cnes__equipamento.sql @@ -8,11 +8,6 @@ "data_type": "int64", "range": {"start": 2005, "end": 2024, "interval": 1}, }, - pre_hook="DROP ALL ROW ACCESS POLICIES ON {{ this }}", - post_hook=[ - 'CREATE OR REPLACE ROW ACCESS POLICY allusers_filter ON {{this}} GRANT TO ("allUsers") FILTER USING (DATE_DIFF(CURRENT_DATE(),DATE(CAST(ano AS INT64),CAST(mes AS INT64),1), MONTH) > 6)', - 'CREATE OR REPLACE ROW ACCESS POLICY bdpro_filter ON {{this}} GRANT TO ("group:bd-pro@basedosdados.org", "group:sudo@basedosdados.org") FILTER USING (True)', - ], ) }} @@ -45,7 +40,7 @@ select safe_cast(sigla_uf as string) as sigla_uf, safe_cast(id_municipio as string) as id_municipio, safe_cast(cnes as string) as id_estabelecimento_cnes, - safe_cast(codequip as string) as id_equipamento, + ltrim(safe_cast(codequip as string), '0') as id_equipamento, safe_cast(tipequip as string) as tipo_equipamento, safe_cast(qt_exist as string) as quantidade_equipamentos, safe_cast(qt_uso as string) as quantidade_equipamentos_ativos, diff --git a/models/br_ms_cnes/br_ms_cnes__equipe.sql b/models/br_ms_cnes/br_ms_cnes__equipe.sql index 58e95f13..bcb743bf 100644 --- a/models/br_ms_cnes/br_ms_cnes__equipe.sql +++ b/models/br_ms_cnes/br_ms_cnes__equipe.sql @@ -8,11 +8,6 @@ "data_type": "int64", "range": {"start": 2005, "end": 2024, "interval": 1}, }, - pre_hook="DROP ALL ROW ACCESS POLICIES ON {{ this }}", - post_hook=[ - 'CREATE OR REPLACE ROW ACCESS POLICY allusers_filter ON {{this}} GRANT TO ("allUsers") FILTER USING (DATE_DIFF(CURRENT_DATE(),DATE(CAST(ano AS INT64),CAST(mes AS INT64),1), MONTH) > 6)', - 'CREATE OR REPLACE ROW ACCESS POLICY bdpro_filter ON {{this}} GRANT TO ("group:bd-pro@basedosdados.org", "group:sudo@basedosdados.org") FILTER USING (True)', - ], ) }} @@ -46,17 +41,41 @@ select safe_cast(id_municipio as string) as id_municipio, safe_cast(cnes as string) as id_estabelecimento_cnes, safe_cast(id_equipe as string) as id_equipe, - safe_cast(tipo_eqp as string) as tipo_equipe, + safe_cast( + case + when regexp_replace(tipo_eqp, '^0+', '') = '' + then '0' + else regexp_replace(tipo_eqp, '^0+', '') + end as string + ) as tipo_equipe, safe_cast(nome_eqp as string) as equipe, safe_cast(nomearea as string) as area, safe_cast(id_segm as string) as id_segmento, - safe_cast(tiposegm as string) as tipo_segmento, + safe_cast( + case + when regexp_replace(tiposegm, '^0+', '') = '' + then '0' + else regexp_replace(tiposegm, '^0+', '') + end as string + ) as tipo_segmento, safe_cast(descsegm as string) as descricao_segmento, -- - inserir subsrt para criar ano e mes safe_cast(substr(dt_ativa, 1, 4) as int64) as ano_ativacao_equipe, safe_cast(substr(dt_ativa, 5, 6) as int64) as mes_ativacao_equipe, - safe_cast(motdesat as string) as motivo_desativacao_equipe, - safe_cast(tp_desat as string) as tipo_desativacao_equipe, + safe_cast( + case + when regexp_replace(motdesat, '^0+', '') = '' + then '0' + else regexp_replace(motdesat, '^0+', '') + end as string + ) as motivo_desativacao_equipe, + safe_cast( + case + when regexp_replace(tp_desat, '^0+', '') = '' + then '0' + else regexp_replace(tp_desat, '^0+', '') + end as string + ) as tipo_desativacao_equipe, safe_cast(substr(dt_desat, 1, 4) as int64) as ano_desativacao_equipe, safe_cast(substr(dt_desat, 5, 6) as int64) as mes_desativacao_equipe, safe_cast(quilombo as int64) as indicador_atende_populacao_assistida_quilombolas, diff --git a/models/br_ms_cnes/br_ms_cnes__estabelecimento.sql b/models/br_ms_cnes/br_ms_cnes__estabelecimento.sql index 42551708..8e0327ec 100644 --- a/models/br_ms_cnes/br_ms_cnes__estabelecimento.sql +++ b/models/br_ms_cnes/br_ms_cnes__estabelecimento.sql @@ -8,11 +8,6 @@ "data_type": "int64", "range": {"start": 2005, "end": 2024, "interval": 1}, }, - pre_hook="DROP ALL ROW ACCESS POLICIES ON {{ this }}", - post_hook=[ - 'CREATE OR REPLACE ROW ACCESS POLICY allusers_filter ON {{this}} GRANT TO ("allUsers") FILTER USING (DATE_DIFF(CURRENT_DATE(),DATE(CAST(ano AS INT64),CAST(mes AS INT64),1), MONTH) > 6)', - 'CREATE OR REPLACE ROW ACCESS POLICY bdpro_filter ON {{this}} GRANT TO ("group:bd-pro@basedosdados.org", "group:sudo@basedosdados.org") FILTER USING (True)', - ], ) }} with @@ -61,17 +56,51 @@ select -- fazer replace em valores de linha com 14 zeros para null. 14 zeros é o tamanho -- de um cpf/cnpj nulo safe_cast(regexp_replace(cnpj_man, '0{14}', '') as string) cnpj_mantenedora, - safe_cast({{ clean_cols("COD_IR") }} as string) tipo_retencao_tributos_mantenedora, + replace( + safe_cast({{ clean_cols("COD_IR") }} as string), 'nan', null + ) tipo_retencao_tributos_mantenedora, safe_cast(vinc_sus as int64) indicador_vinculo_sus, safe_cast(tpgestao as string) tipo_gestao, - safe_cast({{ clean_cols("ESFERA_A") }} as string) tipo_esfera_administrativa, - safe_cast(retencao as string) tipo_retencao_tributos, + replace( + safe_cast({{ clean_cols("ESFERA_A") }} as string), 'nan', null + ) tipo_esfera_administrativa, + replace( + safe_cast( + case + when regexp_replace(safe_cast(retencao as string), '^0+', '') = '' + then '0' + else regexp_replace(safe_cast(retencao as string), '^0+', '') + end as string + ), + 'nan', + null + ) as tipo_retencao_tributos, safe_cast({{ clean_cols("ATIVIDAD") }} as string) tipo_atividade_ensino_pesquisa, - safe_cast(natureza as string) tipo_natureza_administrativa, - safe_cast(nat_jur as string) id_natureza_juridica, - safe_cast(clientel as string) tipo_fluxo_atendimento, + replace( + safe_cast( + case + when regexp_replace(safe_cast(natureza as string), '^0+', '') = '' + then '0' + else regexp_replace(safe_cast(natureza as string), '^0+', '') + end as string + ), + 'nan', + null + ) as tipo_natureza_administrativa, + nullif(safe_cast(nat_jur as string), '') id_natureza_juridica, + replace( + safe_cast( + case + when regexp_replace(safe_cast(clientel as string), '^0+', '') = '' + then '0' + else regexp_replace(safe_cast(clientel as string), '^0+', '') + end as string + ), + 'nan', + null + ) as tipo_fluxo_atendimento, safe_cast({{ clean_cols("TP_UNID") }} as string) tipo_unidade, - safe_cast({{ clean_cols("TURNO_AT") }} as string) tipo_turno, + replace(safe_cast({{ clean_cols("TURNO_AT") }} as string), 'nan', null) tipo_turno, safe_cast({{ clean_cols("NIV_HIER") }} as string) tipo_nivel_hierarquia, safe_cast({{ clean_cols("TP_PREST") }} as string) tipo_prestador, safe_cast(co_banco as string) banco, @@ -89,11 +118,23 @@ select safe_cast( safe.parse_date('%Y%m%d', cast(dt_exped as string)) as date ) data_expedicao_alvara, - safe_cast({{ clean_cols("ORGEXPED") }} as string) tipo_orgao_expedidor, - safe_cast( - {{ clean_cols("AV_ACRED") }} as string + replace( + safe_cast({{ clean_cols("ORGEXPED") }} as string), 'nan', null + ) tipo_orgao_expedidor, + replace( + safe_cast({{ clean_cols("AV_ACRED") }} as string), 'nan', null ) tipo_avaliacao_acreditacao_hospitalar, - safe_cast(clasaval as string) tipo_classificacao_acreditacao_hospitalar, + replace( + safe_cast( + case + when regexp_replace(safe_cast(clasaval as string), '^0+', '') = '' + then '0' + else regexp_replace(safe_cast(clasaval as string), '^0+', '') + end as string + ), + 'nan', + null + ) as tipo_classificacao_acreditacao_hospitalar, safe_cast(substr(cast(dt_acred as string), 1, 4) as int64) as ano_acreditacao, safe_cast(substr(cast(dt_acred as string), 5, 2) as int64) as mes_acreditacao, safe_cast( diff --git a/models/br_ms_cnes/br_ms_cnes__estabelecimento_ensino.sql b/models/br_ms_cnes/br_ms_cnes__estabelecimento_ensino.sql index 818ec4c1..2f4b3dc4 100644 --- a/models/br_ms_cnes/br_ms_cnes__estabelecimento_ensino.sql +++ b/models/br_ms_cnes/br_ms_cnes__estabelecimento_ensino.sql @@ -8,11 +8,6 @@ "data_type": "int64", "range": {"start": 2005, "end": 2024, "interval": 1}, }, - pre_hook="DROP ALL ROW ACCESS POLICIES ON {{ this }}", - post_hook=[ - 'CREATE OR REPLACE ROW ACCESS POLICY allusers_filter ON {{this}} GRANT TO ("allUsers") FILTER USING (DATE_DIFF(CURRENT_DATE(),DATE(CAST(ano AS INT64),CAST(mes AS INT64),1), MONTH) > 6)', - 'CREATE OR REPLACE ROW ACCESS POLICY bdpro_filter ON {{this}} GRANT TO ("group:bd-pro@basedosdados.org", "group:sudo@basedosdados.org") FILTER USING (True)', - ], ) }} with @@ -48,7 +43,7 @@ select cast(substr(cmpt_ini, 5, 2) as int64) as mes_competencia_inicial, cast(substr(cmpt_fim, 1, 4) as int64) as ano_competencia_final, cast(substr(cmpt_fim, 5, 2) as int64) as mes_competencia_final, - safe_cast(sgruphab as string) tipo_habilitacao, + ltrim(safe_cast(sgruphab as string), '0') as tipo_habilitacao, safe_cast(portaria as string) portaria, cast( concat( diff --git a/models/br_ms_cnes/br_ms_cnes__estabelecimento_filantropico.sql b/models/br_ms_cnes/br_ms_cnes__estabelecimento_filantropico.sql index 6755b719..de2afec7 100644 --- a/models/br_ms_cnes/br_ms_cnes__estabelecimento_filantropico.sql +++ b/models/br_ms_cnes/br_ms_cnes__estabelecimento_filantropico.sql @@ -8,11 +8,6 @@ "data_type": "int64", "range": {"start": 2005, "end": 2024, "interval": 1}, }, - pre_hook="DROP ALL ROW ACCESS POLICIES ON {{ this }}", - post_hook=[ - 'CREATE OR REPLACE ROW ACCESS POLICY allusers_filter ON {{this}} GRANT TO ("allUsers") FILTER USING (DATE_DIFF(CURRENT_DATE(),DATE(CAST(ano AS INT64),CAST(mes AS INT64),1), MONTH) > 6)', - 'CREATE OR REPLACE ROW ACCESS POLICY bdpro_filter ON {{this}} GRANT TO ("group:bd-pro@basedosdados.org", "group:sudo@basedosdados.org") FILTER USING (True)', - ], ) }} with @@ -49,7 +44,7 @@ select cast(substr(cmpt_ini, 5, 2) as int64) as mes_competencia_inicial, cast(substr(cmpt_fim, 1, 4) as int64) as ano_competencia_final, cast(substr(cmpt_fim, 5, 2) as int64) as mes_competencia_final, - safe_cast(sgruphab as string) tipo_habilitacao, + ltrim(safe_cast(sgruphab as string), '0') as tipo_habilitacao, safe_cast(portaria as string) portaria, cast( concat( @@ -61,8 +56,9 @@ select ) as date ) data_portaria, cast(substr(maportar, 1, 4) as int64) as ano_portaria, - cast(substr(maportar, 5, 2) as int64) as mes_portaria, + cast(substr(maportar, 5, 2) as int64) as mes_portaria from cnes_add_muni + {% if is_incremental() %} where diff --git a/models/br_ms_cnes/br_ms_cnes__gestao_metas.sql b/models/br_ms_cnes/br_ms_cnes__gestao_metas.sql index 0428fe61..da4ebe60 100644 --- a/models/br_ms_cnes/br_ms_cnes__gestao_metas.sql +++ b/models/br_ms_cnes/br_ms_cnes__gestao_metas.sql @@ -8,11 +8,6 @@ "data_type": "int64", "range": {"start": 2005, "end": 2024, "interval": 1}, }, - pre_hook="DROP ALL ROW ACCESS POLICIES ON {{ this }}", - post_hook=[ - 'CREATE OR REPLACE ROW ACCESS POLICY allusers_filter ON {{this}} GRANT TO ("allUsers") FILTER USING (DATE_DIFF(CURRENT_DATE(),DATE(CAST(ano AS INT64),CAST(mes AS INT64),1), MONTH) > 6)', - 'CREATE OR REPLACE ROW ACCESS POLICY bdpro_filter ON {{this}} GRANT TO ("group:bd-pro@basedosdados.org", "group:sudo@basedosdados.org") FILTER USING (True)', - ], ) }} with @@ -48,7 +43,7 @@ select cast(substr(cmpt_ini, 5, 2) as int64) as mes_competencia_inicial, cast(substr(cmpt_fim, 1, 4) as int64) as ano_competencia_final, cast(substr(cmpt_fim, 5, 2) as int64) as mes_competencia_final, - safe_cast(sgruphab as string) tipo_habilitacao, + ltrim(safe_cast(sgruphab as string), '0') tipo_habilitacao, case when safe_cast(sgruphab as string) in ("7003", "7004", "7005", "7006") then '1' diff --git a/models/br_ms_cnes/br_ms_cnes__habilitacao.sql b/models/br_ms_cnes/br_ms_cnes__habilitacao.sql index dbada63f..8ae30eb4 100644 --- a/models/br_ms_cnes/br_ms_cnes__habilitacao.sql +++ b/models/br_ms_cnes/br_ms_cnes__habilitacao.sql @@ -8,11 +8,6 @@ "data_type": "int64", "range": {"start": 2005, "end": 2024, "interval": 1}, }, - pre_hook="DROP ALL ROW ACCESS POLICIES ON {{ this }}", - post_hook=[ - 'CREATE OR REPLACE ROW ACCESS POLICY allusers_filter ON {{this}} GRANT TO ("allUsers") FILTER USING (DATE_DIFF(CURRENT_DATE(),DATE(CAST(ano AS INT64),CAST(mes AS INT64),1), MONTH) > 6)', - 'CREATE OR REPLACE ROW ACCESS POLICY bdpro_filter ON {{this}} GRANT TO ("group:bd-pro@basedosdados.org", "group:sudo@basedosdados.org") FILTER USING (True)', - ], ) }} with @@ -33,7 +28,7 @@ with left join ( select id_municipio, id_municipio_6, - from `basedosdados-dev.br_bd_diretorios_brasil.municipio` + from `basedosdados.br_bd_diretorios_brasil.municipio` ) as mun on raw_cnes_habilitacao_without_duplicates.codufmun = mun.id_municipio_6 ) @@ -49,7 +44,7 @@ select safe_cast(substr(cmpt_ini, 5, 2) as int64) as mes_competencia_inicial, safe_cast(substr(cmpt_fim, 1, 4) as int64) as ano_competencia_final, safe_cast(substr(cmpt_fim, 5, 2) as int64) as mes_competencia_final, - safe_cast(sgruphab as string) tipo_habilitacao, + ltrim(safe_cast(sgruphab as string), '0') as tipo_habilitacao, case when safe_cast(sgruphab as string) in ( diff --git a/models/br_ms_cnes/br_ms_cnes__incentivos.sql b/models/br_ms_cnes/br_ms_cnes__incentivos.sql index 78b5f007..5ef1e14d 100644 --- a/models/br_ms_cnes/br_ms_cnes__incentivos.sql +++ b/models/br_ms_cnes/br_ms_cnes__incentivos.sql @@ -8,11 +8,6 @@ "data_type": "int64", "range": {"start": 2005, "end": 2024, "interval": 1}, }, - pre_hook="DROP ALL ROW ACCESS POLICIES ON {{ this }}", - post_hook=[ - 'CREATE OR REPLACE ROW ACCESS POLICY allusers_filter ON {{this}} GRANT TO ("allUsers") FILTER USING (DATE_DIFF(CURRENT_DATE(),DATE(CAST(ano AS INT64),CAST(mes AS INT64),1), MONTH) > 6)', - 'CREATE OR REPLACE ROW ACCESS POLICY bdpro_filter ON {{this}} GRANT TO ("group:bd-pro@basedosdados.org", "group:sudo@basedosdados.org") FILTER USING (True)', - ], ) }} with @@ -48,7 +43,7 @@ select cast(substr(cmpt_ini, 5, 2) as int64) as mes_competencia_inicial, cast(substr(cmpt_fim, 1, 4) as int64) as ano_competencia_final, cast(substr(cmpt_fim, 5, 2) as int64) as mes_competencia_final, - safe_cast(sgruphab as string) tipo_habilitacao, + ltrim(safe_cast(sgruphab as string), '0') as tipo_habilitacao, case when safe_cast(sgruphab as string) in ("8105", "8106", "8107") then '2' else '1' end as tipo_incentivo, diff --git a/models/br_ms_cnes/br_ms_cnes__leito.sql b/models/br_ms_cnes/br_ms_cnes__leito.sql index 2d86ab0c..87677429 100644 --- a/models/br_ms_cnes/br_ms_cnes__leito.sql +++ b/models/br_ms_cnes/br_ms_cnes__leito.sql @@ -8,11 +8,6 @@ "data_type": "int64", "range": {"start": 2007, "end": 2024, "interval": 1}, }, - pre_hook="DROP ALL ROW ACCESS POLICIES ON {{ this }}", - post_hook=[ - 'CREATE OR REPLACE ROW ACCESS POLICY allusers_filter ON {{this}} GRANT TO ("allUsers") FILTER USING (DATE_DIFF(CURRENT_DATE(),DATE(CAST(ano AS INT64),CAST(mes AS INT64),1), MONTH) > 6)', - 'CREATE OR REPLACE ROW ACCESS POLICY bdpro_filter ON {{this}} GRANT TO ("group:bd-pro@basedosdados.org", "group:sudo@basedosdados.org") FILTER USING (True)', - ], ) }} @@ -52,8 +47,8 @@ select safe_cast(sigla_uf as string) as sigla_uf, safe_cast(id_municipio as string) as id_municipio, safe_cast(cnes as string) as id_estabelecimento_cnes, - safe_cast(codleito as string) as tipo_especialidade_leito, - safe_cast(tp_leito as string) as tipo_leito, + ltrim(safe_cast(codleito as string), '0') as tipo_especialidade_leito, + ltrim(safe_cast(tp_leito as string), '0') as tipo_leito, safe_cast(qt_exist as int64) as quantidade_total, safe_cast(qt_contr as int64) as quantidade_contratado, safe_cast(qt_sus as int64) as quantidade_sus diff --git a/models/br_ms_cnes/br_ms_cnes__profissional.sql b/models/br_ms_cnes/br_ms_cnes__profissional.sql index 88ca48e1..48f90986 100644 --- a/models/br_ms_cnes/br_ms_cnes__profissional.sql +++ b/models/br_ms_cnes/br_ms_cnes__profissional.sql @@ -8,11 +8,6 @@ "data_type": "int64", "range": {"start": 2005, "end": 2024, "interval": 1}, }, - pre_hook="DROP ALL ROW ACCESS POLICIES ON {{ this }}", - post_hook=[ - 'CREATE OR REPLACE ROW ACCESS POLICY allusers_filter ON {{this}} GRANT TO ("allUsers") FILTER USING (DATE_DIFF(CURRENT_DATE(),DATE(CAST(ano AS INT64),CAST(mes AS INT64),1), MONTH) > 6)', - 'CREATE OR REPLACE ROW ACCESS POLICY bdpro_filter ON {{this}} GRANT TO ("group:bd-pro@basedosdados.org", "group:sudo@basedosdados.org") FILTER USING (True)', - ], ) }} with @@ -48,13 +43,27 @@ select -- UFMUNRES que indica null safe_cast(regexp_replace(ufmunres, '0{6}', '') as string) id_municipio_6_residencia, safe_cast(nomeprof as string) nome, - safe_cast(vinculac as string) id_vinculo, - safe_cast(registro as string) id_registro_conselho, - safe_cast(conselho as string) id_conselho, + safe_cast(replace(vinculac, 'nan', null) as string) tipo_vinculo, + safe_cast(replace(registro, 'nan', null) as string) id_registro_conselho, + safe_cast(replace(conselho, 'nan', null) as string) tipo_conselho, -- replace de valores de linha com 15 zeros para null. 15 zeros é valor do campo -- CNS_PROF que indica null - safe_cast(regexp_replace(cns_prof, '0{15}', '') as string) cartao_nacional_saude, - safe_cast(cbo as string) cbo_2002, + safe_cast(regexp_replace(cns_prof, '0{15}', null) as string) cartao_nacional_saude, + safe_cast(cbo as string) cbo_2002_original, + safe_cast( + case + when length(cbo) = 6 and regexp_contains(cbo, r'^[0-9]{6}$') + then cbo + else null + end as string + ) cbo_2002, + safe_cast( + case + when length(cbo) = 5 and regexp_contains(cbo, r'^[0-9]{5}$') + then cbo + else null + end as string + ) cbo_1994, safe_cast(terceiro as int64) indicador_estabelecimento_terceiro, safe_cast(vincul_c as int64) indicador_vinculo_contratado_sus, safe_cast(vincul_a as int64) indicador_vinculo_autonomo_sus, diff --git a/models/br_ms_cnes/br_ms_cnes__regra_contratual.sql b/models/br_ms_cnes/br_ms_cnes__regra_contratual.sql index 81adf026..e96282f7 100644 --- a/models/br_ms_cnes/br_ms_cnes__regra_contratual.sql +++ b/models/br_ms_cnes/br_ms_cnes__regra_contratual.sql @@ -8,11 +8,6 @@ "data_type": "int64", "range": {"start": 2005, "end": 2024, "interval": 1}, }, - pre_hook="DROP ALL ROW ACCESS POLICIES ON {{ this }}", - post_hook=[ - 'CREATE OR REPLACE ROW ACCESS POLICY allusers_filter ON {{this}} GRANT TO ("allUsers") FILTER USING (DATE_DIFF(CURRENT_DATE(),DATE(CAST(ano AS INT64),CAST(mes AS INT64),1), MONTH) > 6)', - 'CREATE OR REPLACE ROW ACCESS POLICY bdpro_filter ON {{this}} GRANT TO ("group:bd-pro@basedosdados.org", "group:sudo@basedosdados.org") FILTER USING (True)', - ], ) }} with @@ -49,14 +44,31 @@ select cast(substr(cmpt_ini, 5, 2) as int64) as mes_competencia_inicial, cast(substr(cmpt_fim, 1, 4) as int64) as ano_competencia_final, cast(substr(cmpt_fim, 5, 2) as int64) as mes_competencia_final, - safe_cast(sgruphab as string) tipo_habilitacao, - case - when - safe_cast(sgruphab as string) - in ("7109", "7110", "7112", "7113", "7114", "7115", "7116", "7117", "7118") - then '1' - else '2' - end as tipo_regra_contratual, + safe_cast( + case + when regexp_replace(sgruphab, '^0+', '') = '' + then '0' + else regexp_replace(sgruphab, '^0+', '') + end as string + ) as tipo_habilitacao, + safe_cast( + case + when + safe_cast(sgruphab as string) in ( + "7109", + "7110", + "7112", + "7113", + "7114", + "7115", + "7116", + "7117", + "7118" + ) + then '1' + else '2' + end as string + ) as tipo_regra_contratual, safe_cast(portaria as string) portaria, cast( concat( diff --git a/models/br_ms_cnes/br_ms_cnes__servico_especializado.sql b/models/br_ms_cnes/br_ms_cnes__servico_especializado.sql index 4c469ebd..0aaecd4a 100644 --- a/models/br_ms_cnes/br_ms_cnes__servico_especializado.sql +++ b/models/br_ms_cnes/br_ms_cnes__servico_especializado.sql @@ -8,11 +8,6 @@ "data_type": "int64", "range": {"start": 2005, "end": 2024, "interval": 1}, }, - pre_hook="DROP ALL ROW ACCESS POLICIES ON {{ this }}", - post_hook=[ - 'CREATE OR REPLACE ROW ACCESS POLICY allusers_filter ON {{this}} GRANT TO ("allUsers") FILTER USING (DATE_DIFF(CURRENT_DATE(),DATE(CAST(ano AS INT64),CAST(mes AS INT64),1), MONTH) > 6)', - 'CREATE OR REPLACE ROW ACCESS POLICY bdpro_filter ON {{this}} GRANT TO ("group:bd-pro@basedosdados.org", "group:sudo@basedosdados.org") FILTER USING (True)', - ], ) }} with @@ -40,23 +35,25 @@ with ) 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 as string) id_municipio, - safe_cast(cnes as string) id_estabelecimento_cnes, - safe_cast(serv_esp as string) tipo_servico_especializado, - safe_cast(class_sr as string) tipo_classificacao, - safe_cast(concat(serv_esp, class_sr) as string) tipo_classificacao_bd, - safe_cast(srvunico as string) tipo_servico_especializado_unico, - safe_cast(caracter as string) tipo_caracterizacao, - safe_cast(amb_nsus as int64) indicador_servico_ambulatorial_sus, - safe_cast(amb_sus as int64) indicador_servico_nao_sus, - safe_cast(hosp_nsus as int64) indicador_servico_hospitalar_nao_sus, - safe_cast(hosp_sus as int64) indicador_servico_hospitalar_sus, - safe_cast(contsrvu as int64) indicador_servico_especializado_unico, - safe_cast(cnesterc as int64) quantidade_nacional_estabelecimento_saude_terceiro + safe_cast(ano as int64) as ano, + safe_cast(mes as int64) as mes, + safe_cast(sigla_uf as string) as sigla_uf, + safe_cast(id_municipio as string) as id_municipio, + safe_cast(cnes as string) as id_estabelecimento_cnes, + ltrim(safe_cast(serv_esp as string), '0') as tipo_servico_especializado, + concat( + ltrim(safe_cast(serv_esp as string), '0'), class_sr + ) as subtipo_servico_especializado, + ltrim(safe_cast(srvunico as string), '0') as tipo_servico_especializado_unico, + safe_cast(caracter as string) as tipo_caracterizacao, + safe_cast(amb_nsus as int64) as indicador_servico_ambulatorial_sus, + safe_cast(amb_sus as int64) as indicador_servico_nao_sus, + safe_cast(hosp_nsus as int64) as indicador_servico_hospitalar_nao_sus, + safe_cast(hosp_sus as int64) as indicador_servico_hospitalar_sus, + safe_cast(contsrvu as int64) as indicador_servico_especializado_unico, + safe_cast(cnesterc as int64) as quantidade_nacional_estabelecimento_saude_terceiro from cnes_add_muni as t + {% if is_incremental() %} where diff --git a/models/br_ms_cnes/schema.yml b/models/br_ms_cnes/schema.yml index 2c3e2ff9..fcc2de34 100644 --- a/models/br_ms_cnes/schema.yml +++ b/models/br_ms_cnes/schema.yml @@ -1,7 +1,7 @@ --- version: 2 models: - - name: equipamento + - name: br_ms_cnes__equipamento description: Esta tabela contém o catálogo de equipamentos em atividade ou não nos estabelecimentos de saúde tests: @@ -12,26 +12,53 @@ models: - id_estabelecimento_cnes - id_equipamento - tipo_equipamento - - not_null_proportion_multiple_columns: - at_least: 0.05 + - quantidade_equipamentos + - quantidade_equipamentos_ativos + - indicador_equipamento_disponivel_sus + - indicador_equipamento_indisponivel_sus + config: + where: __most_recent_year_month__ + - custom_dictionary_coverage: + columns_covered_by_dictionary: [id_equipamento, tipo_equipamento] + dictionary_model: ref('br_ms_cnes__dicionario') + config: + where: __most_recent_year_month__ columns: - name: ano description: Ano tests: [not_null] + config: + where: __most_recent_year_month__ - name: mes description: Mes tests: [not_null] + config: + where: __most_recent_year_month__ - name: sigla_uf description: Sigla da Unidade da Federação + tests: + - relationships: + to: ref('br_bd_diretorios_brasil__uf') + field: sigla + config: + where: __most_recent_year_month__ - name: id_municipio description: ID Município IBGE - 7 Dígitos tests: - relationships: to: ref('br_bd_diretorios_brasil__municipio') field: id_municipio + config: + where: __most_recent_year_month__ + - dbt_utils.not_null_proportion: + at_least: 0.95 + config: + where: __most_recent_year_month__ - name: id_estabelecimento_cnes description: ID Estabelecimento - CNES tests: [not_null] + config: + where: __most_recent_year_month__ - name: id_equipamento description: Identificador do equipamento - name: tipo_equipamento @@ -44,7 +71,7 @@ models: description: Indicador de equipamento disponível para o SUS - name: indicador_equipamento_indisponivel_sus description: Indicador de equipamento não disponível para o SUS - - name: equipe + - name: br_ms_cnes__equipe description: Esta tabela contém o cadastro de equipes em atividade ou não nos estabelecimentos de saúde. tests: @@ -56,26 +83,53 @@ models: - id_estabelecimento_cnes - id_equipe - tipo_equipe - - not_null_proportion_multiple_columns: - at_least: 0.05 + config: + where: __most_recent_year_month__ + - custom_dictionary_coverage: + columns_covered_by_dictionary: + - motivo_desativacao_equipe + - tipo_desativacao_equipe + - tipo_segmento + - tipo_equipe + dictionary_model: ref('br_ms_cnes__dicionario') + config: + where: __most_recent_year_month__ columns: - name: ano description: Ano tests: [not_null] + config: + where: __most_recent_year_month__ - name: mes description: Mês tests: [not_null] + config: + where: __most_recent_year_month__ - name: sigla_uf description: Sigla da Unidade da Federação + tests: + - relationships: + to: ref('br_bd_diretorios_brasil__uf') + field: sigla + config: + where: __most_recent_year_month__ - name: id_municipio description: ID Município IBGE - 7 Dígitos tests: - relationships: to: ref('br_bd_diretorios_brasil__municipio') field: id_municipio + config: + where: __most_recent_year_month__ + - dbt_utils.not_null_proportion: + at_least: 0.95 + config: + where: __most_recent_year_month__ - name: id_estabelecimento_cnes description: ID Estabelecimento - CNES tests: [not_null] + config: + where: __most_recent_year_month__ - name: id_equipe description: ID da equipe dado pelo código do Município, area e sequencial da equipe @@ -115,7 +169,7 @@ models: description: Indicador de atendimento a população Indígena - name: indicador_atende_populacao_assistida_pronasci description: Indicador de atendimento a população Pronasci - - name: profissional + - name: br_ms_cnes__profissional description: A tabela fornece o cadastro dos profissionais de saúde nos estabelecimentos. tests: - dbt_utils.unique_combination_of_columns: @@ -126,42 +180,82 @@ models: - cartao_nacional_saude - nome - cbo_2002 - - id_vinculo + - tipo_vinculo - indicador_atende_sus - - not_null_proportion_multiple_columns: - at_least: 0.05 + config: + where: __most_recent_year_month__ + - custom_dictionary_coverage: + columns_covered_by_dictionary: [tipo_vinculo, tipo_conselho] + dictionary_model: ref('br_ms_cnes__dicionario') + config: + where: __most_recent_year_month__ columns: - name: ano description: Ano tests: [not_null] + config: + where: __most_recent_year_month__ - name: mes description: Mês tests: [not_null] + config: + where: __most_recent_year_month__ - name: sigla_uf description: Sigla da Unidade da Federação + tests: + - relationships: + to: ref('br_bd_diretorios_brasil__uf') + field: sigla + config: + where: __most_recent_year_month__ - name: id_municipio description: ID Município IBGE - 7 Dígitos tests: - relationships: to: ref('br_bd_diretorios_brasil__municipio') field: id_municipio + config: + where: __most_recent_year_month__ + - dbt_utils.not_null_proportion: + at_least: 0.95 + config: + where: __most_recent_year_month__ - name: id_estabelecimento_cnes description: ID Estabelecimento - CNES tests: [not_null] + config: + where: __most_recent_year_month__ - name: id_municipio_6_residencia description: ID Município IBGE - 6 Dígitos do local de residência do profissional - name: nome description: Nome do profissional - - name: id_vinculo + - name: tipo_vinculo description: Código do vínculo empregatício com o estabelecimento - name: id_registro_conselho description: Número do registro no conselho de classe - - name: id_conselho + - name: tipo_conselho description: Código do conselho de classe - name: cartao_nacional_saude description: CNS - Cartão Nacional de Saúde + - name: cbo_2002_original + description: Código da Classificação Brasileira de Ocupações (CB0) 2002 sem + tratamento aplicado - name: cbo_2002 - description: Código da especialidade + description: Código da Classificação Brasileira de Ocupações (CB0) 2002 + tests: + - relationships: + to: ref('br_bd_diretorios_brasil__cbo_2002') + field: cbo_2002.cbo_2002 + config: + where: __most_recent_year_month__ + - name: cbo_1994 + description: Código da Classificação Brasileira de Ocupações (CB0) 1994 + tests: + - relationships: + to: ref('br_bd_diretorios_brasil__cbo_1994') + field: cbo_1994.cbo_1994 + config: + where: __most_recent_year_month__ - name: indicador_estabelecimento_terceiro description: Indica se o estabelecimento é de terceiros ou não - name: indicador_vinculo_contratado_sus @@ -181,33 +275,71 @@ models: description: Carga horária hospitalar - name: carga_horaria_ambulatorial description: Carga horária Ambulatorial - - name: estabelecimento + - name: br_ms_cnes__estabelecimento description: A tabela fornece informações sobre a gestão e operação dos estabelecimentos de saúde brasileiros. tests: - dbt_utils.unique_combination_of_columns: combination_of_columns: [ano, mes, id_estabelecimento_cnes] - - not_null_proportion_multiple_columns: - at_least: 0.05 + config: + where: __most_recent_year_month__ + # NOTE: colunas: tipo_orgao_expedidor | tipo_unidade | tipo_classificacao_acreditacao_hospitalar | tipo_grau_dependencia + - custom_dictionary_coverage: + columns_covered_by_dictionary: + - tipo_pessoa + - tipo_retencao_tributos_mantenedora + - tipo_gestao + - tipo_esfera_administrativa + - tipo_retencao_tributos + - tipo_atividade_ensino_pesquisa + - tipo_natureza_administrativa + - tipo_fluxo_atendimento + - tipo_turno + - tipo_prestador + - tipo_avaliacao_acreditacao_hospitalar + dictionary_model: ref('br_ms_cnes__dicionario') + config: + where: __most_recent_year_month__ columns: - name: ano description: Ano tests: [not_null] + config: + where: __most_recent_year_month__ - name: mes description: Mês tests: [not_null] + config: + where: __most_recent_year_month__ - name: sigla_uf description: Sigla da Unidade da Federação + tests: + - relationships: + to: ref('br_bd_diretorios_brasil__uf') + field: sigla + config: + where: __most_recent_year_month__ - name: ano_atualizacao description: Ano de atualização da informação pelo estabelecimento + tests: [not_null] + config: + where: __most_recent_year_month__ - name: mes_atualizacao description: Mês de atualização da informação pelo estabelecimento + config: + where: __most_recent_year_month__ - name: id_municipio description: ID Município - IBGE 7 Dígitos tests: - relationships: to: ref('br_bd_diretorios_brasil__municipio') field: id_municipio + config: + where: __most_recent_year_month__ + - dbt_utils.not_null_proportion: + at_least: 0.95 + config: + where: __most_recent_year_month__ - name: id_municipio_6 description: ID Município - IBGE 6 Dígitos - name: id_regiao_saude @@ -223,6 +355,8 @@ models: - name: id_estabelecimento_cnes description: ID estabelecimento - CNES tests: [not_null] + config: + where: __most_recent_year_month__ - name: tipo_pessoa description: Indicador de pessoa física ou jurídica - name: cpf_cnpj @@ -247,6 +381,14 @@ models: description: Natureza da organização - name: id_natureza_juridica description: Natureza jurídica + tests: + - custom_relationships: + to: ref('br_bd_diretorios_brasil__natureza_juridica') + field: id_natureza_juridica + ignore_values: ['1000', '2000', '3000', '4000', '8885'] + proportion_allowed_failures: 0 + config: + where: __most_recent_year_month__ - name: tipo_fluxo_atendimento description: Fluxo da clientela - name: tipo_unidade @@ -677,7 +819,7 @@ models: - name: indicador_atendimento_regulacao_plano_saude_privado description: Indica a existência de atendimento prestado regulação/convênio plano de saúde privado - - name: leito + - name: br_ms_cnes__leito description: leitos disponíveis nos estabelecimentos de saúde tests: - dbt_utils.unique_combination_of_columns: @@ -687,8 +829,14 @@ models: - id_estabelecimento_cnes - tipo_especialidade_leito - tipo_leito - - not_null_proportion_multiple_columns: - at_least: 0.05 + config: + where: __most_recent_year_month__ + # NOTE: aguardando pedido lai + # - custom_dictionary_coverage: + # columns_covered_by_dictionary: [tipo_especialidade_leito, tipo_leito] + # dictionary_model: ref('br_ms_cnes__dicionario') + # config: + # where: __most_recent_year_month__ columns: - name: ano description: Ano @@ -696,15 +844,29 @@ models: description: Mês - name: sigla_uf description: Sigla da Unidade da Federação + tests: + - relationships: + to: ref('br_bd_diretorios_brasil__uf') + field: sigla + config: + where: __most_recent_year_month__ - name: id_municipio description: ID Município IBGE - 7 Dígitos tests: - relationships: to: ref('br_bd_diretorios_brasil__municipio') field: id_municipio + config: + where: __most_recent_year_month__ + - dbt_utils.not_null_proportion: + at_least: 0.95 + config: + where: __most_recent_year_month__ - name: id_estabelecimento_cnes description: ID Estabelecimento - CNES tests: [not_null] + config: + where: __most_recent_year_month__ - name: tipo_especialidade_leito description: Especialidade do leito - name: tipo_leito @@ -715,13 +877,13 @@ models: description: Quantidade de leitos contratados - name: quantidade_sus description: Quantidade de leitos para o SUS - - name: dados_complementares + - name: br_ms_cnes__dados_complementares description: Dados complementares dos estabelecimentos de saúde tests: - dbt_utils.unique_combination_of_columns: combination_of_columns: [ano, mes, id_estabelecimento_cnes] - - not_null_proportion_multiple_columns: - at_least: 0.05 + config: + where: __most_recent_year_month__ columns: - name: ano description: Ano @@ -729,15 +891,29 @@ models: description: Mes - name: sigla_uf description: Sigla da Unidade da Federação + tests: + - relationships: + to: ref('br_bd_diretorios_brasil__uf') + field: sigla + config: + where: __most_recent_year_month__ - name: id_municipio description: ID Município IBGE - 7 Dígitos tests: - relationships: to: ref('br_bd_diretorios_brasil__municipio') field: id_municipio + config: + where: __most_recent_year_month__ + - dbt_utils.not_null_proportion: + at_least: 0.95 + config: + where: __most_recent_year_month__ - name: id_estabelecimento_cnes description: ID Estabelecimento - CNES tests: [not_null] + config: + where: __most_recent_year_month__ - name: cns_medico_responsavel_administrador_responsavel_tecnico description: CNS do médico responsável - Administrador ou Responsável Técnico - name: cns_medico_responsavel_oncologista_pediatrico @@ -918,13 +1094,18 @@ models: - name: indicador_existencia_requisito_quimio_radio description: Indica a existência de algum requisito de quimio/rádio para este CNES - - name: estabelecimento_filantropico + - name: br_ms_cnes__estabelecimento_filantropico description: Esta tabela apresenta um cadastro de estabelecimentos de saúde filantrópicos. tests: - dbt_utils.unique_combination_of_columns: combination_of_columns: [ano, mes, id_estabelecimento_cnes] - - not_null_proportion_multiple_columns: - at_least: 0.05 + config: + where: __most_recent_year_month__ + - custom_dictionary_coverage: + columns_covered_by_dictionary: [tipo_habilitacao] + dictionary_model: ref('br_ms_cnes__dicionario') + config: + where: __most_recent_year_month__ columns: - name: ano description: Ano @@ -932,15 +1113,29 @@ models: description: Mês - name: sigla_uf description: Sigla da Unidade da Federação + tests: + - relationships: + to: ref('br_bd_diretorios_brasil__uf') + field: sigla + config: + where: __most_recent_year_month__ - name: id_municipio description: ID Município IBGE - 7 Dígitos tests: - relationships: to: ref('br_bd_diretorios_brasil__municipio') field: id_municipio + config: + where: __most_recent_year_month__ + - dbt_utils.not_null_proportion: + at_least: 0.05 + config: + where: __most_recent_year_month__ - name: id_estabelecimento_cnes description: ID Estabelecimento - CNES tests: [not_null] + config: + where: __most_recent_year_month__ - name: ano_competencia_inicial description: Ano Competência inicial - name: mes_competencia_inicial @@ -951,8 +1146,6 @@ models: description: Mês Competência final - name: tipo_habilitacao description: Código do tipo de habilitação do estabelecimento - - name: tipo_regra_contratual - description: Código do tipo da regra contratual do estabalecimento - name: portaria description: Portaria relacionada a regra contratual - name: data_portaria @@ -961,14 +1154,19 @@ models: description: Ano da portaria - name: mes_portaria description: Mês da portaria - - name: estabelecimento_ensino + - name: br_ms_cnes__estabelecimento_ensino description: Esta tabela apresenta informações sobre os estabelecimentos habilitados para atividades de ensino. tests: - dbt_utils.unique_combination_of_columns: combination_of_columns: [ano, mes, id_estabelecimento_cnes] - - not_null_proportion_multiple_columns: - at_least: 0.05 + config: + where: __most_recent_year_month__ + - custom_dictionary_coverage: + columns_covered_by_dictionary: [tipo_habilitacao] + dictionary_model: ref('br_ms_cnes__dicionario') + config: + where: __most_recent_year_month__ columns: - name: ano description: Ano @@ -976,15 +1174,29 @@ models: description: Mês - name: sigla_uf description: Sigla da Unidade da Federação + tests: + - relationships: + to: ref('br_bd_diretorios_brasil__uf') + field: sigla + config: + where: __most_recent_year_month__ - name: id_municipio description: ID Município IBGE - 7 Dígitos tests: - relationships: to: ref('br_bd_diretorios_brasil__municipio') field: id_municipio + config: + where: __most_recent_year_month__ + - dbt_utils.not_null_proportion: + at_least: 0.95 + config: + where: __most_recent_year_month__ - name: id_estabelecimento_cnes description: ID Estabelecimento - CNES tests: [not_null] + config: + where: __most_recent_year_month__ - name: ano_competencia_inicial description: Ano Competência inicial - name: mes_competencia_inicial @@ -1003,7 +1215,7 @@ models: description: Ano da portaria - name: mes_portaria description: Mês da portaria - - name: gestao_metas + - name: br_ms_cnes__gestao_metas description: Esta tabela apresenta informações sobre os contratos de gestão de metas dos estabelecimentos de sáude. tests: @@ -1015,26 +1227,45 @@ models: - tipo_habilitacao - portaria - data_portaria - - not_null_proportion_multiple_columns: - at_least: 0.05 + - custom_dictionary_coverage: + columns_covered_by_dictionary: [tipo_habilitacao, tipo_gestao_metas] + dictionary_model: ref('br_ms_cnes__dicionario') columns: - name: ano description: Ano tests: [not_null] + config: + where: __most_recent_year_month__ - name: mes description: Mês tests: [not_null] + config: + where: __most_recent_year_month__ - name: sigla_uf description: Sigla da Unidade da Federação + tests: + - relationships: + to: ref('br_bd_diretorios_data_tempo__uf') + field: sigla + config: + where: __most_recent_year_month__ - name: id_municipio description: ID Município IBGE - 7 Dígitos tests: - relationships: to: ref('br_bd_diretorios_brasil__municipio') field: id_municipio + config: + where: __most_recent_year_month__ + - dbt_utils.not_null_proportion: + at_least: 0.95 + config: + where: __most_recent_year_month__ - name: id_estabelecimento_cnes description: ID Estabelecimento - CNES tests: [not_null] + config: + where: __most_recent_year_month__ - name: ano_competencia_inicial description: Ano Competência inicial - name: mes_competencia_inicial @@ -1055,7 +1286,7 @@ models: description: Ano da portaria - name: mes_portaria description: Mês da portaria - - name: incentivos + - name: br_ms_cnes__incentivos description: A tabela fornece informações sobre os incentivos do estabelecimento. tests: - dbt_utils.unique_combination_of_columns: @@ -1066,15 +1297,25 @@ models: - tipo_habilitacao - portaria - data_portaria - - not_null_proportion_multiple_columns: - at_least: 0.05 + config: + where: __most_recent_year_month__ + # NOTE: aguardando pedido LAI para reativar; + # - custom_dictionary_coverage: + # columns_covered_by_dictionary: [tipo_habilitacao, tipo_incentivo] + # dictionary_model: ref('br_ms_cnes__dicionario') + # config: + # where: __most_recent_year_month__ columns: - name: ano description: Ano tests: [not_null] + config: + where: __most_recent_year_month__ - name: mes description: Mês tests: [not_null] + config: + where: __most_recent_year_month__ - name: sigla_uf description: Sigla da Unidade da Federação - name: id_municipio @@ -1083,9 +1324,17 @@ models: - relationships: to: ref('br_bd_diretorios_brasil__municipio') field: id_municipio + config: + where: __most_recent_year_month__ + - dbt_utils.not_null_proportion: + at_least: 0.95 + config: + where: __most_recent_year_month__ - name: id_estabelecimento_cnes description: ID Estabelecimento - CNES tests: [not_null] + config: + where: __most_recent_year_month__ - name: ano_competencia_inicial description: Ano Competência inicial - name: mes_competencia_inicial @@ -1106,7 +1355,7 @@ models: description: Ano da portaria - name: mes_portaria description: Mês da portaria - - name: habilitacao + - name: br_ms_cnes__habilitacao description: A tabela fornece informações sobre as habilitações do estabelecimento. tests: - dbt_utils.unique_combination_of_columns: @@ -1120,26 +1369,50 @@ models: - mes_competencia_inicial - data_portaria - portaria - - not_null_proportion_multiple_columns: - at_least: 0.05 + config: + where: __most_recent_year_month__ + # NOTE: aguardando pedido LAI para reativar; + # - custom_dictionary_coverage: + # columns_covered_by_dictionary: [tipo_habilitacao, nivel_habilitacao] + # dictionary_model: ref('br_ms_cnes__dicionario') + # config: + # where: __most_recent_year_month__ columns: - name: ano description: Ano tests: [not_null] + config: + where: __most_recent_year_month__ - name: mes description: Mês tests: [not_null] + config: + where: __most_recent_year_month__ - name: sigla_uf description: Sigla da Unidade da Federação + tests: + - relationships: + to: ref('br_bd_diretorios_data_tempo__uf') + field: sigla + config: + where: __most_recent_year_month__ - name: id_municipio description: ID Município IBGE - 7 Dígitos tests: - relationships: to: ref('br_bd_diretorios_brasil__municipio') field: id_municipio + config: + where: __most_recent_year_month__ + - dbt_utils.not_null_proportion: + at_least: 0.95 + config: + where: __most_recent_year_month__ - name: id_estabelecimento_cnes description: ID Estabelecimento - CNES tests: [not_null] + config: + where: __most_recent_year_month__ - name: quantidade_leitos description: Quantidade de leitos - name: ano_competencia_inicial @@ -1162,7 +1435,7 @@ models: description: Ano da portaria - name: mes_portaria description: Mês da portaria - - name: regra_contratual + - name: br_ms_cnes__regra_contratual description: A tabela fornece informações sobre os contratos dos estabelecimentos. tests: - dbt_utils.unique_combination_of_columns: @@ -1172,26 +1445,49 @@ models: - id_estabelecimento_cnes - tipo_habilitacao - data_portaria - - not_null_proportion_multiple_columns: - at_least: 0.05 + config: + where: __most_recent_year_month__ + - custom_dictionary_coverage: + columns_covered_by_dictionary: [tipo_habilitacao, tipo_regra_contratual] + dictionary_model: ref('br_ms_cnes__dicionario') + config: + where: __most_recent_year_month__ columns: - name: ano description: Ano tests: [not_null] + config: + where: __most_recent_year_month__ - name: mes description: Mês tests: [not_null] + config: + where: __most_recent_year_month__ - name: sigla_uf description: Sigla da Unidade da Federação + tests: + - relationships: + to: ref('br_bd_diretorios_data_tempo__uf') + field: sigla + config: + where: __most_recent_year_month__ - name: id_municipio description: ID Município IBGE - 7 Dígitos tests: - relationships: to: ref('br_bd_diretorios_brasil__municipio') field: id_municipio + config: + where: __most_recent_year_month__ + - dbt_utils.not_null_proportion: + at_least: 0.95 + config: + where: __most_recent_year_month__ - name: id_estabelecimento_cnes description: ID Estabelecimento - CNES tests: [not_null] + config: + where: __most_recent_year_month__ - name: ano_competencia_inicial description: Ano Competência inicial - name: mes_competencia_inicial @@ -1200,8 +1496,10 @@ models: description: Ano Competência final - name: mes_competencia_final description: Mês Competência final - - name: habilitacao + - name: tipo_habilitacao description: Código da habilitação + - name: tipo_regra_contratual + description: Tipo da regra contratual - name: portaria description: Portaria - name: data_portaria @@ -1210,7 +1508,7 @@ models: description: Ano da portaria - name: mes_portaria description: Mês da portaria - - name: servico_especializado + - name: br_ms_cnes__servico_especializado description: A tabela fornece informações sobre serviços especializados ofertados pelo estabelecimento. tests: @@ -1219,38 +1517,65 @@ models: - ano - mes - id_estabelecimento_cnes - - tipo_classificacao_bd + - tipo_servico_especializado + - subtipo_servico_especializado - tipo_servico_especializado_unico + - tipo_caracterizacao - indicador_servico_ambulatorial_sus - indicador_servico_nao_sus - indicador_servico_hospitalar_nao_sus - indicador_servico_hospitalar_sus - - not_null_proportion_multiple_columns: - at_least: 0.05 + config: + where: __most_recent_year_month__ + # NOTE: aguardando pedido LAI para reativar; + # - custom_dictionary_coverage: + # columns_covered_by_dictionary: + # - tipo_servico_especializado + # - subtipo_servico_especializado + # - tipo_servico_especializado_unico + # dictionary_model: ref('br_ms_cnes__dicionario') + # config: + # where: __most_recent_year_month__ columns: - name: ano description: Ano tests: [not_null] + config: + where: __most_recent_year_month__ - name: mes description: Mês tests: [not_null] + config: + where: __most_recent_year_month__ - name: sigla_uf description: Sigla da Unidade da Federação + tests: + - relationships: + to: ref('br_bd_diretorios_brasil__uf') + field: sigla + config: + where: __most_recent_year_month__ - name: id_municipio description: ID Município IBGE - 7 Dígitos tests: - relationships: to: ref('br_bd_diretorios_brasil__municipio') field: id_municipio + config: + where: __most_recent_year_month__ + - dbt_utils.not_null_proportion: + at_least: 0.95 + config: + where: __most_recent_year_month__ - name: id_estabelecimento_cnes description: ID Estabelecimento - CNES tests: [not_null] + config: + where: __most_recent_year_month__ - name: tipo_servico_especializado - description: Código do serviço especializado - - name: tipo_classificacao - description: Código da classificação do serviço - - name: tipo_classificacao_bd - description: Código da classificação do serviço criado pela equipe da BD + description: Código do tipo do serviço especializado + - name: subtipo_servico_especializado + description: Código do subtipo do serviço especializado - name: tipo_servico_especializado_unico description: Código do serviço especializado único - name: tipo_caracterizacao diff --git a/tests/generic/custom_dictionaries.sql b/tests/generic/custom_dictionary_coverage.sql similarity index 87% rename from tests/generic/custom_dictionaries.sql rename to tests/generic/custom_dictionary_coverage.sql index b60b1a10..9bace9a8 100644 --- a/tests/generic/custom_dictionaries.sql +++ b/tests/generic/custom_dictionary_coverage.sql @@ -1,16 +1,17 @@ -- https://github.com/basedosdados/pipelines/wiki/Incluindo-testes-no-seu-modelo#dicionários -{% test custom_dictionaries( - model, dictionary_model_name, table_id, columns_covered_by_dictionary +{% test custom_dictionary_coverage( + model, dictionary_model, columns_covered_by_dictionary ) %} {{ config(severity="error") }} {%- set combined_query_parts = [] -%} {%- set union_parts = [] -%} + {% set table_id = model.identifier %} {%- for column_name in columns_covered_by_dictionary %} {% set subquery_name = "exceptions_" ~ loop.index %} {% set left_table_name = "data_table_" ~ loop.index %} - {% set right_table_name = "dictionary_table_" ~ loop.index %} + {% set right_table_name = "dict_table_" ~ loop.index %} {% set subquery %} {{ left_table_name }} as ( @@ -20,7 +21,7 @@ ), {{ right_table_name }} as ( select chave - from {{ dictionary_model_name }} + from {{ dictionary_model}} where valor is not null and id_tabela = '{{ table_id }}' and nome_coluna = '{{ column_name }}' diff --git a/tests/generic/custom_relationships.sql b/tests/generic/custom_relationships.sql index 65af9f4e..2de5dd2b 100644 --- a/tests/generic/custom_relationships.sql +++ b/tests/generic/custom_relationships.sql @@ -14,7 +14,9 @@ select {{ column_name }} as child_value from {{ model }} {% if ignore_values %} - where {{ column_name }} not in ('{{ ignore_values | join("', '") }}') + where + {{ column_name }} not in ('{{ ignore_values | join("', '") }}') + and {{ column_name }} is not null {% endif %} ), parent as (select {{ field }} as parent_value from {{ to }}),