diff --git a/models/br_tse_eleicoes/schema.yml b/models/br_tse_eleicoes/schema.yml index 4d6c48e5..451849c8 100644 --- a/models/br_tse_eleicoes/schema.yml +++ b/models/br_tse_eleicoes/schema.yml @@ -4,7 +4,7 @@ models: - name: br_tse_eleicoes__bens_candidato description: Declaração de bens de candidatos em eleições brasileiras. tests: - - custom_not_null_proportion_multiple_columns: + - not_null_proportion_multiple_columns: at_least: 0.70 ignore_values: [tipo_item, data_eleicao, id_eleicao] columns: @@ -43,8 +43,8 @@ models: - name: br_tse_eleicoes__candidatos description: Dados de candidatos em eleições brasileiras. tests: - - custom_not_null_proportion_multiple_columns: - at_least: 0.80 + - not_null_proportion_multiple_columns: + at_least: 0.05 ignore_values: [email, raca] - dbt_utils.unique_combination_of_columns: combination_of_columns: @@ -158,7 +158,7 @@ models: - name: br_tse_eleicoes__despesas_candidato description: Dados de despesas em campanhas eleitorais a nível de despesa. tests: - - custom_not_null_proportion_multiple_columns: + - not_null_proportion_multiple_columns: at_least: 0.05 ignore_values: - esfera_partidaria_fornecedor @@ -778,7 +778,7 @@ models: - name: br_tse_eleicoes__receitas_candidato description: Dados de financiamento de campanha de receita para candidatos. tests: - - custom_not_null_proportion_multiple_columns: + - not_null_proportion_multiple_columns: at_least: 0.05 ignore_values: - descricao_cnae_2_doador_orig diff --git a/tests/generic/not_null_proportion_multiple_columns.sql b/tests/generic/not_null_proportion_multiple_columns.sql index 80a6202a..57d4c149 100644 --- a/tests/generic/not_null_proportion_multiple_columns.sql +++ b/tests/generic/not_null_proportion_multiple_columns.sql @@ -1,4 +1,4 @@ -{% test not_null_proportion_multiple_columns(model, at_least=0.05) %} +{% test not_null_proportion_multiple_columns(model, ignore_values="", at_least=0.05) %} {%- set columns = adapter.get_columns_in_relation(model) -%} {% set suffix = "_nulls" %} @@ -28,8 +28,7 @@ * from pivot_columns where - quantity / total_records > (1 - {{ at_least }}) - + quantity / total_records > (1 - {{ at_least }}) and column_name not in ('{{ ignore_values | join("', '") }}') ) select * from faulty_columns @@ -41,16 +40,30 @@ ) -%} {% if errors["column_name"] != () %} {% for e in errors["column_name"] | unique %} + + {% set proc_err = ( + errors["quantity"][loop.index0] + / errors["total_records"][loop.index0] + ) * 100 %} + {{ log( - "LOG: Coluna com preenchimento menor que " - ~ at_least * 100 - ~ "% ---> " + "Coluna: " ~ e - ~ " [FAIL]", + ~ " - Quantidade: " + ~ errors["quantity"][loop.index0] + ~ " - Total: " + ~ errors["total_records"][loop.index0] + ~ " - Preenchimento: " + ~ "%0.2f" + | format(proc_err | float) + ~ " - Preenchimento ideal: " + ~ at_least * 100 + ~ " - Resultado: FAIL", info=True, ) }} + select '{{e}}' as column {% if not loop.last %} union all