diff --git a/.user.yml b/.user.yml new file mode 100644 index 00000000..416339dd --- /dev/null +++ b/.user.yml @@ -0,0 +1,2 @@ +--- +id: cc3f54e0-fd01-4495-bd12-aa41f3b24444 diff --git a/dbt_project.yml b/dbt_project.yml index 9433d440..65f01e8e 100644 --- a/dbt_project.yml +++ b/dbt_project.yml @@ -231,12 +231,18 @@ models: +post-hook: - REVOKE `roles/bigquery.dataViewer` ON TABLE {{ this }} FROM "specialGroup:allUsers" - GRANT `roles/bigquery.dataViewer` ON TABLE {{ this }} TO "group:bd-pro@basedosdados.org" + br_mme_consumo_energia_eletrica: + +materialized: table + +schema: br_mme_consumo_energia_eletrica br_mp_pep: +materialized: table +schema: br_mp_pep br_ms_cnes: +materialized: table +schema: br_ms_cnes + br_ms_sia: + +materialized: table + +schema: br_ms_sia br_ms_sim: +materialized: table +schema: br_ms_sim diff --git a/models/br_camara_dados_abertos/br_camara_dados_abertos__orgao_deputado.sql b/models/br_camara_dados_abertos/br_camara_dados_abertos__orgao_deputado.sql index f5f82eda..a1770fe0 100644 --- a/models/br_camara_dados_abertos/br_camara_dados_abertos__orgao_deputado.sql +++ b/models/br_camara_dados_abertos/br_camara_dados_abertos__orgao_deputado.sql @@ -1,12 +1,25 @@ {{ config(alias="orgao_deputado", schema="br_camara_dados_abertos") }} -select distinct - regexp_extract(uriorgao, r'/orgaos/(\d+)') as id_orgao, - safe_cast(nomeorgao as string) nome, - safe_cast(siglaorgao as string) sigla, - safe_cast(nomedeputado as string) nome_deputado, - safe_cast(cargo as string) cargo, - safe_cast(siglauf as string) sigla_uf, - safe_cast(datainicio as date) data_inicio, - safe_cast(datafim as date) data_final, - safe_cast(siglapartido as string) sigla_partido, -from `basedosdados-staging.br_camara_dados_abertos_staging.orgao_deputado` as t +with + orgao_deputado as ( + select distinct + regexp_extract(uriorgao, r'/orgaos/(\d+)') as id_orgao, + safe_cast(nomeorgao as string) nome, + safe_cast(siglaorgao as string) sigla, + safe_cast(nomedeputado as string) nome_deputado, + safe_cast(cargo as string) cargo, + safe_cast(siglauf as string) sigla_uf, + safe_cast(datainicio as date) data_inicio, + safe_cast(datafim as date) data_final, + safe_cast(siglapartido as string) sigla_partido, + from `basedosdados-staging.br_camara_dados_abertos_staging.orgao_deputado` + ) +select * +from orgao_deputado +where + not ( + nome_deputado = 'Hélio Leite' + and cargo = 'Titular' + and sigla_uf is null + and data_inicio = '2022-05-03' + and data_final = '2023-02-01' + ) diff --git a/models/br_camara_dados_abertos/br_camara_dados_abertos__proposicao_autor.sql b/models/br_camara_dados_abertos/br_camara_dados_abertos__proposicao_autor.sql index c6214862..71387eca 100644 --- a/models/br_camara_dados_abertos/br_camara_dados_abertos__proposicao_autor.sql +++ b/models/br_camara_dados_abertos/br_camara_dados_abertos__proposicao_autor.sql @@ -1,6 +1,6 @@ {{ config(alias="proposicao_autor", schema="br_camara_dados_abertos") }} -select +select distinct safe_cast(idproposicao as string) id_proposicao, replace(safe_cast(iddeputadoautor as string), ".0", "") id_deputado, initcap(safe_cast(tipoautor as string)) tipo_autor, diff --git a/models/br_camara_dados_abertos/br_camara_dados_abertos__proposicao_microdados.sql b/models/br_camara_dados_abertos/br_camara_dados_abertos__proposicao_microdados.sql index f99989ff..44f0c262 100644 --- a/models/br_camara_dados_abertos/br_camara_dados_abertos__proposicao_microdados.sql +++ b/models/br_camara_dados_abertos/br_camara_dados_abertos__proposicao_microdados.sql @@ -6,43 +6,88 @@ partition_by={ "field": "ano", "data_type": "INT64", - "range": {"start": 1935, "end": 2023, "interval": 1}, + "range": {"start": 1935, "end": 2024, "interval": 1}, }, ) }} -select - safe_cast(ano as int64) ano, - safe_cast( - split( - format_timestamp('%Y-%m-%dT%H:%M:%E*S', timestamp(dataapresentacao)), 'T' - )[offset(0)] as date - ) data, - safe_cast( - split( - format_timestamp('%Y-%m-%dT%H:%M:%E*S', timestamp(dataapresentacao)), 'T' - )[offset(1)] as time - ) horario, - safe_cast(id as string) id_proposicao, - safe_cast(uri as string) url, - safe_cast(numero as string) numero, - safe_cast(siglatipo as string) sigla, - safe_cast(descricaotipo as string) tipo, - safe_cast(ementa as string) ementa, - safe_cast(ementadetalhada as string) ementa_detalhada, - safe_cast(keywords as string) palavra_chave, - safe_cast(uriorgaonumerador as string) url_orgao_numerador, - safe_cast(uripropprincipal as string) url_principal, - safe_cast(uripropposterior as string) url_posterior, - safe_cast(urlinteiroteor as string) url_teor_proposicao, - safe_cast(ultimostatus_datahora as string) data_hora_ultimo_status, - safe_cast(ultimostatus_urirelator as string) url_relator_ultimo_status, - safe_cast(ultimostatus_siglaorgao as string) sigla_orgao_ultimo_status, - safe_cast(ultimostatus_regime as string) regime_ultimo_status, - safe_cast(ultimostatus_descricaotramitacao as string) tramitacao_ultimo_status, - safe_cast(ultimostatus_descricaosituacao as string) situacao_ultimo_status, - safe_cast(ultimostatus_despacho as string) despacho_ultimo_status, - safe_cast(ultimostatus_apreciacao as string) apreciacao_ultimo_status, - safe_cast(ultimostatus_sequencia as string) sequencia_ultimo_status, - safe_cast(ultimostatus_url as string) url_ultimo_status, -from `basedosdados-staging.br_camara_dados_abertos_staging.proposicao_microdados` as t +with + table as ( + select + safe_cast(ano as int64) ano, + safe_cast( + split( + format_timestamp( + '%Y-%m-%dT%H:%M:%E*S', timestamp(dataapresentacao) + ), + 'T' + )[offset (0)] as date + ) data, + safe_cast( + split( + format_timestamp( + '%Y-%m-%dT%H:%M:%E*S', timestamp(dataapresentacao) + ), + 'T' + )[offset (1)] as time + ) horario, + safe_cast(id as string) id_proposicao, + safe_cast(uri as string) url, + safe_cast(numero as string) numero, + safe_cast(siglatipo as string) sigla, + safe_cast(descricaotipo as string) tipo, + safe_cast(ementa as string) ementa, + safe_cast(ementadetalhada as string) ementa_detalhada, + safe_cast(keywords as string) palavra_chave, + safe_cast(uriorgaonumerador as string) url_orgao_numerador, + safe_cast(uripropprincipal as string) url_principal, + safe_cast(uripropposterior as string) url_posterior, + safe_cast(urlinteiroteor as string) url_teor_proposicao, + safe_cast(ultimostatus_datahora as string) data_hora_ultimo_status, + safe_cast(ultimostatus_urirelator as string) url_relator_ultimo_status, + safe_cast(ultimostatus_siglaorgao as string) sigla_orgao_ultimo_status, + safe_cast(ultimostatus_regime as string) regime_ultimo_status, + safe_cast( + ultimostatus_descricaotramitacao as string + ) tramitacao_ultimo_status, + safe_cast(ultimostatus_descricaosituacao as string) situacao_ultimo_status, + safe_cast(ultimostatus_despacho as string) despacho_ultimo_status, + safe_cast(ultimostatus_apreciacao as string) apreciacao_ultimo_status, + safe_cast(ultimostatus_sequencia as string) sequencia_ultimo_status, + safe_cast(ultimostatus_url as string) url_ultimo_status, + from + `basedosdados-staging.br_camara_dados_abertos_staging.proposicao_microdados` + as t + ), + query_total as ( + select + ano, + case when data >= current_date() then null else data end as data, + horario, + id_proposicao, + url, + numero, + sigla, + tipo, + ementa, + ementa_detalhada, + palavra_chave, + url_orgao_numerador, + url_principal, + url_posterior, + url_teor_proposicao, + data_hora_ultimo_status, + url_relator_ultimo_status, + sigla_orgao_ultimo_status, + regime_ultimo_status, + tramitacao_ultimo_status, + situacao_ultimo_status, + despacho_ultimo_status, + apreciacao_ultimo_status, + sequencia_ultimo_status, + url_ultimo_status, + from table + ) +select distinct * +from query_total +where not (ano = 2011 and id_proposicao = '510035') diff --git a/models/br_camara_dados_abertos/br_camara_dados_abertos__proposicao_tema.sql b/models/br_camara_dados_abertos/br_camara_dados_abertos__proposicao_tema.sql index 10d0cc64..63bb9148 100644 --- a/models/br_camara_dados_abertos/br_camara_dados_abertos__proposicao_tema.sql +++ b/models/br_camara_dados_abertos/br_camara_dados_abertos__proposicao_tema.sql @@ -11,11 +11,17 @@ ) }} -select - safe_cast(replace(ano, ".0", "") as int64) ano, - regexp_extract(uriproposicao, r'/proposicoes/(\d+)') as id_proposicao, - safe_cast(siglatipo as string) tipo_proposicao, - safe_cast(numero as string) numero, - safe_cast(codtema as string) tema, - safe_cast(relevancia as int64) relevancia, -from `basedosdados-staging.br_camara_dados_abertos_staging.proposicao_tema` as t +with + tables as ( + select + safe_cast(replace(ano, ".0", "") as int64) as ano, + regexp_extract(uriproposicao, r'/proposicoes/(\d+)') as id_proposicao, + safe_cast(siglatipo as string) as tipo_proposicao, + safe_cast(numero as string) as numero, + safe_cast(tema as string) as tema, + safe_cast(relevancia as int64) as relevancia + from `basedosdados-staging.br_camara_dados_abertos_staging.proposicao_tema` + ) +select * +from tables +where not (ano = 2011 and id_proposicao = '510035') diff --git a/models/br_ibge_censo_2022/br_ibge_censo_2022__populacao_residente_municipio.sql b/models/br_ibge_censo_2022/br_ibge_censo_2022__populacao_residente_municipio.sql index f9d473a7..386f6a00 100644 --- a/models/br_ibge_censo_2022/br_ibge_censo_2022__populacao_residente_municipio.sql +++ b/models/br_ibge_censo_2022/br_ibge_censo_2022__populacao_residente_municipio.sql @@ -12,12 +12,77 @@ with safe_cast(forma_de_declaracao_da_idade as string) forma_declaracao_idade, safe_cast(sexo as string) sexo, safe_cast(idade as string) idade, + case + when idade = 'Menos de 1 mês' + then 0 + when regexp_contains(idade, r'[0-9]+ mês') + then safe_cast(regexp_extract(idade, r'[0-9]+ mês') as int64) / 12 + when regexp_contains(idade, r'[0-9]+ meses') + then safe_cast(regexp_extract(idade, r'([0-9])+ meses') as int64) / 12 + when regexp_contains(idade, r'[0-9]+ anos') + then cast(regexp_extract(idade, r'([0-9]+) anos') as int64) + when regexp_contains(idade, r'[0-9]+ ano') + then cast(regexp_extract(idade, r'([0-9]+) ano') as int64) + end as idade_num, safe_cast(populacao_residente_pessoas_ as int64) populacao_residente, from `basedosdados-staging.br_ibge_censo_2022_staging.populacao_residente_municipio` t ) -select t2.cod as id_municipio, ibge.* except (municipio, nome_municipio, sigla_uf) +select + t2.cod as id_municipio, + ibge.* except (municipio, nome_municipio, sigla_uf, idade_num, populacao_residente), + idade_num as idade_anos, + case + when idade_num between 0 and 4 + then '0 a 4 anos' + when idade_num between 5 and 9 + then '5 a 9 anos' + when idade_num between 10 and 14 + then '10 a 14 anos' + when idade_num between 15 and 19 + then '15 a 19 anos' + when idade_num between 20 and 24 + then '20 a 24 anos' + when idade_num between 25 and 29 + then '25 a 29 anos' + when idade_num between 30 and 34 + then '30 a 34 anos' + when idade_num between 35 and 39 + then '35 a 39 anos' + when idade_num between 40 and 44 + then '40 a 44 anos' + when idade_num between 45 and 49 + then '45 a 49 anos' + when idade_num between 50 and 54 + then '50 a 54 anos' + when idade_num between 55 and 59 + then '55 a 59 anos' + when idade_num between 60 and 64 + then '60 a 64 anos' + when idade_num between 65 and 69 + then '65 a 69 anos' + when idade_num between 70 and 74 + then '70 a 74 anos' + when idade_num between 75 and 79 + then '75 a 79 anos' + when idade_num between 80 and 84 + then '80 a 84 anos' + when idade_num between 85 and 89 + then '85 a 89 anos' + when idade_num between 90 and 94 + then '90 a 94 anos' + when idade_num between 95 and 99 + then '95 a 99 anos' + else '100 anos ou mais' + end as grupo_idade, + populacao_residente from ibge left join `basedosdados-dev.br_ibge_censo_2022_staging.auxiliary_table` t2 on ibge.municipio = t2.municipio +where + not ( + idade like '% a %' + or idade like '100 anos ou mais' + or idade like 'Menos de 1 ano' + ) diff --git a/models/br_mme_consumo_energia_eletrica/br_mme_consumo_energia_eletrica__uf.sql b/models/br_mme_consumo_energia_eletrica/br_mme_consumo_energia_eletrica__uf.sql new file mode 100644 index 00000000..620f7a43 --- /dev/null +++ b/models/br_mme_consumo_energia_eletrica/br_mme_consumo_energia_eletrica__uf.sql @@ -0,0 +1,19 @@ +{{ + config( + alias="uf", + schema="br_mme_consumo_energia_eletrica", + materialized="table", + ) +}} +select + 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(tipo_consumo as string) as tipo_consumo, + case + when numero_consumidores = '0' + then null + else safe_cast(numero_consumidores as int64) + end as numero_consumidores, + safe_cast(consumo as int64) as consumo +from `basedosdados-staging.br_mme_consumo_energia_eletrica_staging.uf` as t diff --git a/models/br_mme_consumo_energia_eletrica/code/energia_eletrica.ipynb b/models/br_mme_consumo_energia_eletrica/code/energia_eletrica.ipynb new file mode 100755 index 00000000..0aff9a8c --- /dev/null +++ b/models/br_mme_consumo_energia_eletrica/code/energia_eletrica.ipynb @@ -0,0 +1,372 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import warnings\n", + "warnings.filterwarnings('ignore')\n", + "import numpy as np" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "def tratamento_consumo(sheet_name):\n", + " meses = {\n", + " \"JAN\": 1,\n", + " \"FEV\": 2,\n", + " \"MAR\": 3,\n", + " \"ABR\": 4,\n", + " \"MAI\": 5,\n", + " \"JUN\": 6,\n", + " \"JUL\": 7,\n", + " \"AGO\": 8,\n", + " \"SET\": 9,\n", + " \"OUT\": 10,\n", + " \"NOV\": 11,\n", + " \"DEZ\": 12\n", + " }\n", + " ufs = {'Acre':'AC', 'Alagoas':'AL', 'Amazonas':'AM', 'Amapá':'AP', 'Bahia':'BA', 'Ceará':'CE', 'Distrito Federal':'DF', 'Espírito Santo':'ES', 'Goiás':'GO', \n", + " 'Maranhão':'MA', 'Minas Gerais':'MG', 'Mato Grosso do Sul':'MS', 'Mato Grosso':'MT', 'Pará':'PA', 'Paraíba':'PB', 'Pernambuco':'PE', 'Piauí':'PI', \n", + " 'Paraná':'PR', 'Rio de Janeiro':'RJ', 'Rio Grande do Norte':'RN', 'Rondônia':'RO', 'Roraima':'RR', 'Rio Grande do Sul':'RS', \n", + " 'Santa Catarina':'SC', 'Sergipe':'SE', 'São Paulo':'SP', 'Tocantins':'TO'}\n", + " \n", + " df = pd.read_excel('/mnt/x/dados/consumo_energia_eletrica/dados.xls', sheet_name, skiprows=4, skipfooter=1, usecols='A:IG')\n", + " df_transposta = df.T\n", + " df_transposta.reset_index(inplace=True)\n", + " df_transposta.drop(df_transposta[['index', 2]], inplace=True, axis=1)\n", + " df_transposta.columns = df_transposta.iloc[0]\n", + " df_transposta = df_transposta[1:]\n", + " df_transposta.columns = ['ano', 'mes', 'Rondônia', 'Acre', 'Amazonas', 'Roraima', 'Pará',\n", + " 'Amapá', 'Tocantins', 'Maranhão', 'Piauí', 'Ceará',\n", + " 'Rio Grande do Norte', 'Paraíba', 'Pernambuco', 'Alagoas', 'Sergipe',\n", + " 'Bahia', 'Minas Gerais', 'Espírito Santo', 'Rio de Janeiro',\n", + " 'São Paulo', 'Paraná', 'Santa Catarina', 'Rio Grande do Sul',\n", + " 'Mato Grosso do Sul', 'Mato Grosso', 'Goiás', 'Distrito Federal']\n", + " df_transposta_melted = pd.melt(df_transposta, id_vars=[\"ano\", 'mes'], var_name=\"Estado\", value_name=\"Valor\")\n", + " df_transposta_melted['ano'].ffill(inplace=True)\n", + " df_transposta_melted['mes'] = df_transposta_melted['mes'].map(meses)\n", + "\n", + " df_transposta_melted.rename(columns={'Estado' : 'sigla_uf', 'Valor':'consumo'}, inplace=True) \n", + " df_transposta_melted['sigla_uf'] = df_transposta_melted['sigla_uf'].map(ufs)\n", + " return df_transposta_melted\n", + "\n", + "tipos_consumo = [\"Total\", \"Cativo\", \"Residencial\", \"Industrial\", \"Comercial\", \"Outros\"]\n", + "dfs_consumo = []\n", + "\n", + "# Realizando o tratamento para cada tipo de consumo\n", + "for i, tipo in enumerate(tipos_consumo):\n", + " if i < 6:\n", + " df = tratamento_consumo(i + 9)\n", + " df['tipo_consumo'] = tipo\n", + " dfs_consumo.append(df)\n", + "\n", + "# Concatenando todos os DataFrames\n", + "df_consumo = pd.concat(dfs_consumo)\n", + "df_consumo = df_consumo[['ano', 'mes', 'sigla_uf','tipo_consumo', 'consumo']]" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(38880, 5)" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_consumo.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "def tratamento_consumidores(sheet_name):\n", + " meses = {\n", + " \"JAN\": 1,\n", + " \"FEV\": 2,\n", + " \"MAR\": 3,\n", + " \"ABR\": 4,\n", + " \"MAI\": 5,\n", + " \"JUN\": 6,\n", + " \"JUL\": 7,\n", + " \"AGO\": 8,\n", + " \"SET\": 9,\n", + " \"OUT\": 10,\n", + " \"NOV\": 11,\n", + " \"DEZ\": 12\n", + " }\n", + " ufs = {'Acre':'AC', 'Alagoas':'AL', 'Amazonas':'AM', 'Amapá':'AP', 'Bahia':'BA', 'Ceará':'CE', 'Distrito Federal':'DF', 'Espírito Santo':'ES', 'Goiás':'GO', \n", + " 'Maranhão':'MA', 'Minas Gerais':'MG', 'Mato Grosso do Sul':'MS', 'Mato Grosso':'MT', 'Pará':'PA', 'Paraíba':'PB', 'Pernambuco':'PE', 'Piauí':'PI', \n", + " 'Paraná':'PR', 'Rio de Janeiro':'RJ', 'Rio Grande do Norte':'RN', 'Rondônia':'RO', 'Roraima':'RR', 'Rio Grande do Sul':'RS', \n", + " 'Santa Catarina':'SC', 'Sergipe':'SE', 'São Paulo':'SP', 'Tocantins':'TO'}\n", + " \n", + " df = pd.read_excel('/mnt/x/dados/consumo_energia_eletrica/dados.xls', sheet_name, skiprows=4, skipfooter=1, usecols='A:IG')\n", + " df_transposta = df.T\n", + " df_transposta.reset_index(inplace=True)\n", + " df_transposta.drop(df_transposta[['index', 2]], inplace=True, axis=1)\n", + " df_transposta.columns = df_transposta.iloc[0]\n", + " df_transposta = df_transposta[1:]\n", + " df_transposta.columns = ['ano', 'mes', 'Rondônia', 'Acre', 'Amazonas', 'Roraima', 'Pará',\n", + " 'Amapá', 'Tocantins', 'Maranhão', 'Piauí', 'Ceará',\n", + " 'Rio Grande do Norte', 'Paraíba', 'Pernambuco', 'Alagoas', 'Sergipe',\n", + " 'Bahia', 'Minas Gerais', 'Espírito Santo', 'Rio de Janeiro',\n", + " 'São Paulo', 'Paraná', 'Santa Catarina', 'Rio Grande do Sul',\n", + " 'Mato Grosso do Sul', 'Mato Grosso', 'Goiás', 'Distrito Federal']\n", + " df_transposta_melted = pd.melt(df_transposta, id_vars=[\"ano\", 'mes'], var_name=\"Estado\", value_name=\"Valor\")\n", + " df_transposta_melted['ano'].ffill(inplace=True)\n", + " df_transposta_melted['mes'] = df_transposta_melted['mes'].map(meses)\n", + "\n", + " df_transposta_melted.rename(columns={'Estado' : 'sigla_uf', 'Valor':'numero_consumidores'}, inplace=True) \n", + " df_transposta_melted['sigla_uf'] = df_transposta_melted['sigla_uf'].map(ufs)\n", + " return df_transposta_melted\n", + "\n", + "tipos_consumidores = ['Residencial', 'Industrial', 'Comercial', 'Outros']\n", + "dfs_consumidores = []\n", + "\n", + "# Realizando o tratamento para cada tipo de consumidores\n", + "for i, tipo in enumerate(tipos_consumidores):\n", + " if i < 6:\n", + " df = tratamento_consumidores(i + 15)\n", + " df['tipo_consumo'] = tipo\n", + " dfs_consumidores.append(df)\n", + "\n", + "# Concatenando todos os DataFrames\n", + "df_consumidores = pd.concat(dfs_consumidores)\n", + "df_consumidores = df_consumidores[['ano', 'mes', 'sigla_uf','tipo_consumo', 'numero_consumidores']]" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "df_total = pd.merge(df_consumo, df_consumidores, how= 'left', on=['ano', 'mes', 'sigla_uf', 'tipo_consumo'])\n", + "df_total = df_total[['ano', 'mes', 'sigla_uf', 'tipo_consumo', 'numero_consumidores', 'consumo']]\n", + "df_total['consumo'] = df_total['consumo'].astype(int)\n", + "df_total['numero_consumidores'] = df_total['numero_consumidores'].fillna(0).astype(int)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
anomessigla_uftipo_consumonumero_consumidoresconsumo
1584020041PEResidencial2001833228466
1584120042PEResidencial2004750217764
1584220043PEResidencial2018407225066
1584320044PEResidencial2026995232170
1584420045PEResidencial1972048210365
1584520046PEResidencial1963599198030
1584620047PEResidencial1954839192699
1584720048PEResidencial1949125189991
1584820049PEResidencial1989788224208
15849200410PEResidencial2022621212547
15850200411PEResidencial2046330226619
15851200412PEResidencial2040413240852
\n", + "
" + ], + "text/plain": [ + " ano mes sigla_uf tipo_consumo numero_consumidores consumo\n", + "15840 2004 1 PE Residencial 2001833 228466\n", + "15841 2004 2 PE Residencial 2004750 217764\n", + "15842 2004 3 PE Residencial 2018407 225066\n", + "15843 2004 4 PE Residencial 2026995 232170\n", + "15844 2004 5 PE Residencial 1972048 210365\n", + "15845 2004 6 PE Residencial 1963599 198030\n", + "15846 2004 7 PE Residencial 1954839 192699\n", + "15847 2004 8 PE Residencial 1949125 189991\n", + "15848 2004 9 PE Residencial 1989788 224208\n", + "15849 2004 10 PE Residencial 2022621 212547\n", + "15850 2004 11 PE Residencial 2046330 226619\n", + "15851 2004 12 PE Residencial 2040413 240852" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_total[(df_total['ano'] == 2004) & (df_total['sigla_uf'] == 'PE') & (df_total['tipo_consumo'] == 'Residencial')]" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": {}, + "outputs": [], + "source": [ + "df_total.to_csv(\"/mnt/x/dados/consumo_energia_eletrica/consumo_energia.csv\", sep=',', index=False, encoding='utf-8')" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.13" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/models/br_mme_consumo_energia_eletrica/schema.yml b/models/br_mme_consumo_energia_eletrica/schema.yml new file mode 100644 index 00000000..c20bb4e3 --- /dev/null +++ b/models/br_mme_consumo_energia_eletrica/schema.yml @@ -0,0 +1,38 @@ +--- +version: 2 +models: + - name: br_mme_consumo_energia_eletrica__uf + description: Consumo de energia elétrica em nível nacional e segmentado pelas + classes residencial, industrial, comercial e outros (rural, serviço público + e iluminação pública). + tests: + - not_null_proportion_multiple_columns: + at_least: 0.05 + - dbt_utils.unique_combination_of_columns: + combination_of_columns: [ano, mes, sigla_uf, tipo_consumo] + 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__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: tipo_consumo + description: Tipo de Consumo + - name: numero_consumidores + description: Número de consumidores de energia elétrica atendidos pela rede + - name: consumo + description: Consumo de energia elétrica na rede (MWh) + tests: [not_null] diff --git a/models/br_ms_sia/br_ms_sia__dicionario.sql b/models/br_ms_sia/br_ms_sia__dicionario.sql new file mode 100644 index 00000000..4e238467 --- /dev/null +++ b/models/br_ms_sia/br_ms_sia__dicionario.sql @@ -0,0 +1,16 @@ +{{ + config( + alias="dicionario", + schema="br_ms_sia", + materialized="table", + ) +}} + + +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(replace(cobertura_temporal, '-1', '(1)') as string) cobertura_temporal, + safe_cast(valor as string) valor +from `basedosdados-staging.br_ms_sia_staging.dicionario` diff --git a/models/br_ms_sia/br_ms_sia__producao_ambulatorial.sql b/models/br_ms_sia/br_ms_sia__producao_ambulatorial.sql new file mode 100644 index 00000000..62433139 --- /dev/null +++ b/models/br_ms_sia/br_ms_sia__producao_ambulatorial.sql @@ -0,0 +1,203 @@ +{{ + config( + alias="producao_ambulatorial", + schema="br_ms_sia", + materialized="incremental", + 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 * + from + `basedosdados-staging.br_ms_sia_staging.producao_ambulatorial` + as producao_ambulatorial + + left join + ( + select id_municipio, id_municipio_6, + from `basedosdados.br_bd_diretorios_brasil.municipio` + ) as mun + on producao_ambulatorial.pa_ufmun = mun.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 as string) id_municipio, + safe_cast(pa_coduni as string) id_estabelecimento_cnes, + -- seguintes colunas foram omitidas pois podem ser obtidas ao cruzar o + -- id_estabelecimento_cnes + -- com a tabela estabelecimento do conjunto br_ms_cnes + -- safe_cast(pa_nat_jur as string) natureza_juridica_estabelecimento, + -- safe_cast(pa_tpups as string) tipo_unidade, + -- safe_cast(pa_tippre as string) tipo_prestador, + -- safe_cast(pa_cnpjcpf as string) cnpj_estabelecimento_executante, + -- safe_cast( + -- regexp_replace(pa_cnpjmnt, '0{14}', '') as string + -- ) cnpj_mantenedora_estabalecimento, + -- safe_cast(regexp_replace(pa_cnpj_cc, '0{14}', '') as string) cnpj_orgao, + -- safe_cast(pa_mn_ind as string) tipo_mantenedor_estabelecimento, + -- safe_cast(pa_gestao as string) id_gestao, + -- safe_cast(pa_condic as string) tipo_gestao, + safe_cast(pa_regct as string) tipo_regra_contratual, + safe_cast(pa_ine as string) id_equipe, + safe_cast(pa_srv_c as string) id_servico_especializado, + safe_cast(pa_proc_id as string) id_processamento_ambulatorial, + safe_cast(regexp_replace(pa_cnsmed, '0{15}', '') as string) id_cns_executante, + safe_cast(replace(pa_cbocod, '', null) as string) id_cbo_2002, + safe_cast( + regexp_replace(pa_autoriz, '0{13}', '') as string + ) codigo_autorizacao_apac, + safe_cast(pa_codoco as string) codigo_ocorrencia, + case + when pa_tpfin = '00' then '0' else cast(ltrim(pa_tpfin, '0') as string) + end as tipo_financiamento_producao, + case + when pa_subfin = '0000' then '0' else cast(ltrim(pa_subfin, '0') as string) + end as subtipo_financiamento_producao, + -- - parse e criar ano mes data é yyyy-mm + safe_cast(substr(pa_mvm, 1, 4) as int64) as ano_processamento_procedimento, + safe_cast(substr(pa_mvm, 5, 2) as int64) as mes_processamento_procedimento, + safe_cast(substr(pa_cmp, 1, 4) as int64) as ano_realizacao_procedimento, + safe_cast(substr(pa_cmp, 5, 2) as int64) as mes_realizacao_procedimento, + safe_cast( + trim( + case when length(trim(pa_cidpri)) = 3 then pa_cidpri else null end + ) as string + ) as cid_principal_categoria, + safe_cast( + trim( + case + when length(trim(pa_cidpri)) = 4 and pa_cidpri != '0000' + then pa_cidpri + when + length(trim(pa_cidpri)) = 3 + and pa_cidpri in ( + select subcategoria + from `basedosdados.br_bd_diretorios_brasil.cid_10` + where length(subcategoria) = 3 + ) + then pa_cidpri + else null + end + ) as string + ) as cid_principal_subcategoria, + safe_cast( + trim( + case when length(trim(pa_cidsec)) = 3 then pa_cidsec else null end + ) as string + ) as cid_secundario_categoria, + safe_cast( + trim( + case + when length(trim(pa_cidsec)) = 4 and pa_cidsec != '0000' + then pa_cidsec + when + length(trim(pa_cidsec)) = 3 + and pa_cidsec in ( + select subcategoria + from `basedosdados.br_bd_diretorios_brasil.cid_10` + where length(subcategoria) = 3 + ) + then pa_cidsec + else null + end + ) as string + ) as cid_secundario_subcategoria, + safe_cast( + trim( + case when length(trim(pa_cidcas)) = 3 then pa_cidcas else null end + ) as string + ) as cid_causas_associadas_categoria, + safe_cast( + trim( + case + when length(trim(pa_cidcas)) = 4 and pa_cidcas != '0000' + then pa_cidcas + when + length(trim(pa_cidcas)) = 3 + and pa_cidcas in ( + select subcategoria + from `basedosdados.br_bd_diretorios_brasil.cid_10` + where length(subcategoria) = 3 + ) + then pa_cidcas + else null + end + ) as string + ) as cid_causas_associadas_subcategoria, + case + when pa_catend = '00' then '0' else cast(ltrim(pa_catend, '0') as string) + end as carater_atendimento, + safe_cast(regexp_replace(pa_munpcn, '9{6}', '') as string) id_paciente_proto, + safe_cast(replace(pa_sexo, '0', '') as string) sexo_paciente, + safe_cast(regexp_replace(pa_idade, '9{3}', '') as int64) idade_paciente, + case + when pa_racacor = '00' then '0' else cast(ltrim(pa_racacor, '0') as string) + end as raca_cor_paciente, + safe_cast(pa_etnia as string) etnia_paciente, + safe_cast(idademin as int64) idade_minima_paciente, + safe_cast(idademax as int64) idade_maxima_paciente, + case + when pa_flidade = '00' then '0' else cast(ltrim(pa_flidade, '0') as string) + end as compatibilidade_idade_procedimento, + case + when pa_nivcpl = '00' then '0' else cast(ltrim(pa_nivcpl, '0') as string) + end as complexidade_procedimento, + case + when pa_docorig = '00' then '0' else cast(ltrim(pa_docorig, '0') as string) + end as instrumento_registro, + safe_cast(pa_valapr as float64) valor_aprovado_procedimento, + safe_cast(pa_qtdapr as int64) quantidade_aprovada_procedimento, + safe_cast(pa_valpro as float64) valor_produzido_procedimento, + safe_cast(pa_qtdpro as int64) quantidade_produzida_procedimento, + safe_cast(nu_vpa_tot as float64) valor_unitario_procedimento_vpa, + safe_cast(nu_pa_tot as float64) valor_unitario_procedimento_sigtap, + safe_cast(pa_dif_val as float64) diferenca_valor_unitario, + safe_cast(pa_vl_cf as float64) valor_complemento_federal, + safe_cast(pa_vl_cl as float64) valor_complemento_local, + safe_cast(pa_vl_inc as float64) valor_incremento, + case + when pa_motsai = '00' then '0' else cast(ltrim(pa_motsai, '0') as string) + end as motivo_saida_paciente, + -- - em uf e muicipio replace de + safe_cast( + regexp_replace(pa_ufdif, '9{1}', '') as int64 + ) indicador_uf_residencia_paciente, + safe_cast( + regexp_replace(pa_mndif, '9{1}', '') as int64 + ) indicador_municipio_residencia_paciente, + -- + safe_cast( + case + when pa_incout = '0000' then '0' else regexp_replace(pa_incout, '[^0]', '1') + end as int64 + ) as indicador_incrementos_outros, + safe_cast( + case + when pa_incurg = '0000' then '0' else regexp_replace(pa_incurg, '[^0]', '1') + end as int64 + ) as indicador_incrementos_urgencia, + safe_cast(pa_obito as int64) indicador_obito, + safe_cast(pa_encerr as int64) indicador_encerramento, + safe_cast(pa_perman as int64) indicador_permanencia, + safe_cast(pa_alta as int64) indicador_alta, + safe_cast(pa_transf as int64) indicador_transferencia, + safe_cast(pa_indica as string) tipo_situacao_produzida, + safe_cast(pa_flqt as string) tipo_erro_quantidade_produzida, + 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 }}) +{% endif %} diff --git a/models/br_ms_sia/schema.yml b/models/br_ms_sia/schema.yml new file mode 100644 index 00000000..668c3598 --- /dev/null +++ b/models/br_ms_sia/schema.yml @@ -0,0 +1,254 @@ +--- +version: 2 +models: + - 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 + tests: + - relationships: + to: ref('br_bd_diretorios_data_tempo__ano') + field: ano.ano + - name: mes + description: Mês + - 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: natureza_juridica_estabelecimento + description: Natureza jurídica do operador do estabelecimento + tests: + - relationships: + to: ref('br_bd_diretorios_brasil__natureza_juridica') + field: natureza_juridica.id_natureza_juridica + - name: tipo_unidade + description: Tipo de estabelecimento + - name: tipo_prestador + description: Tipo de Prestador + - name: cnpj_estabelecimento_executante + description: CNPJ do Estabelecimento executante + - name: cnpj_mantenedora_estabalecimento + description: CNPJ da Mantenedora do Estabelecimento + - name: cnpj_orgao + description: CNPJ do órgão que recebeu pela produção por cessão de crédito + - name: tipo_mantenedor_estabelecimento + description: Tipo de manutenção do estabelecimento + - name: id_gestao + description: ID do tipo de gestão do estabelecimento + - name: tipo_gestao + description: Tipo de gestão do estabelecimento + - name: tipo_regra_contratual + description: Código do tipo da regra contratual do estabalecimento + - name: id_equipe + description: Código de Identificação Nacional de Equipes10, para registrar + a atuação das equipes na execução de ações de saúde + - name: id_servico_especializado + description: Código do Serviço Especializado / Classificação CBO (de acordo + com o CNES) + - name: id_processamento_ambulatorial + description: Código de Procedimento Ambulatorial + - name: id_cns_executante + description: Identificador Cartão Nacional de Saúde (CNS) do profissional + de saúde executante + - name: id_cbo_2002 + description: Identificador da classificação de Ocupação Brasileira do Profissional + (OCB) + tests: + - relationships: + to: ref('br_bd_diretorios_brasil__cbo_2002') + field: cbo_2002.cbo_2002 + - name: codigo_autorizacao_apac + description: Código da Autorização de Procedimento Ambulatorial de Alta complexidade + (APAC) e/ou custo ou número de autorização do Boletim de Produção Ambulatorial + Individualizado (BPA-I), conforme o caso. No BPA-I não é obrigatório, portanto, + não é criticado + - name: codigo_ocorrencia + description: Código de ocorrência + - name: tipo_financiamento_producao + description: Tipo de Financiamento da produção + - name: subtipo_financiamento_producao + description: Subtipo de Financiamento da produção + - name: ano_processamento_procedimento + description: Ano de processamento/movimento + tests: + - relationships: + to: ref('br_bd_diretorios_data_tempo__ano') + field: ano.ano + - name: mes_processamento_procedimento + description: Mês de processamento/movimento + - name: ano_realizacao_procedimento + description: Ano da realização do procedimento/competência + tests: + - relationships: + to: ref('br_bd_diretorios_data_tempo__ano') + field: ano.ano + - name: mes_realizacao_procedimento + description: Mês da realização do procedimento/competência + - 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_secundario_categoria + description: Identificador da categoria da Classificação Internacional de + Doenças (CID10) secundário da Autorização de Procedimento Ambulatorial de + Alta complexidade (APAC) + tests: + - relationships: + to: ref('br_bd_diretorios_brasil__cid_10') + field: categoria + - name: cid_secundario_subcategoria + description: Identificador da subcategoria da Classificação Internacional + de Doenças (CID10) secundário da Autorização de Procedimento Ambulatorial + de Alta complexidade (APAC) + 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: carater_atendimento + description: Caráter de atendimento (APAC ou BPA-I) + - name: id_paciente_proto + description: Em casos como procedimento BPA em que não se tem identificação + do paciente a variável é uma concatenação da Unidade da Federação, do município + de residência do paciente ou do estabelecimento de saúde + - name: sexo_paciente + description: Sexo do paciente + - name: idade_paciente + description: Idade do paciente + - name: raca_cor_paciente + description: Raça/cor do paciente + - name: etnia_paciente + description: Etnia do paciente + - name: idade_minima_paciente + description: Idade mínima do paciente para realização do procedimento + - name: idade_maxima_paciente + description: Idade máxima do paciente para realização do procedimento + - name: compatibilidade_idade_procedimento + description: Compatibilidade entre a idade do paciênte e faixa de idade necessária + para realização do procedimento. As definições tem origem no SIGTAP - Sistema + de Gerenciamento da Tabela de Procedimentos, Medicamentos e OPM do SUS. + - name: complexidade_procedimento + description: Complexidade do Procedimento + - name: instrumento_registro + description: Tipo de Instrumento de registro + - name: valor_aprovado_procedimento + description: Valor aprovado do procedimento + - name: quantidade_aprovada_procedimento + description: Quantidade aprovada do procedimento + - name: valor_produzido_procedimento + description: Valor produzido (apresentado) do procedimento + - name: quantidade_produzida_procedimento + description: Quantidade produzida (apresentada) do procedimento + - name: valor_unitario_procedimento_vpa + description: Valor Unitário do Procedimento da Tabela VPA + - name: valor_unitario_procedimento_sigtap + description: Valor unitário do procedimento na tabela SIGTAP - Sistema de + Gerenciamento da Tabela de Procedimentos, Medicamentos e OPM do SUS. + - name: diferenca_valor_unitario + description: Diferença do Valor Unitário do procedimento praticado na Tabela + Unificada com Valor Unitário praticado pelo Gestor da Produção multiplicado + pela Quantidade Aprovada + - name: valor_complemento_federal + description: Valor do complemento federal + - name: valor_complemento_local + description: Valor do complemento local + - name: valor_incremento + description: Valor do Incremento + - name: motivo_saida_paciente + description: Motivo de saída do paciente + - name: indicador_uf_residencia_paciente + description: Indica se a UF de residência do paciente é diferente da UF de + localização do estabelecimento + - name: indicador_municipio_residencia_paciente + description: Indica se o município de residência do paciente é diferente do + município de localização do estabelecimento + - name: indicador_incrementos_outros + description: Indica a ocorrência de outros incrementos + - name: indicador_incrementos_urgencia + description: Indica a ocorrência de incrementos de urgência + - name: indicador_obito + description: Indicador de óbito relativo ao Procedimento Ambulatorial de Alta + complexidade e/ou custo (APAC) + - name: indicador_encerramento + description: Indicador de encerramento relativo ao Procedimento Ambulatorial + de Alta complexidade e/ou custo (APAC) + - name: indicador_permanencia + description: Indicador de permanência relativo ao Procedimento Ambulatorial + de Alta complexidade e/ou custo (APAC) + - name: indicador_alta + description: Indicador de alta relativo ao Procedimento Ambulatorial de Alta + complexidade e/ou custo (APAC) + - name: indicador_transferencia + description: Indicador de transferência relativo ao Procedimento Ambulatorial + de Alta complexidade e/ou custo (APAC) + - name: tipo_situacao_produzida + description: Indicativo de situação da produção produzida + - name: tipo_erro_quantidade_produzida + 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 + 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