diff --git a/feed-al/scripts/create/create_empenho.sql b/feed-al/scripts/create/create_empenho.sql index e669270..61fe5b7 100644 --- a/feed-al/scripts/create/create_empenho.sql +++ b/feed-al/scripts/create/create_empenho.sql @@ -15,11 +15,11 @@ CREATE TABLE IF NOT EXISTS "empenho" ( "cd_cat_economica" VARCHAR(1), "cd_nat_despesa" VARCHAR(1), "cd_modalidade" VARCHAR(2), - "cd_elemento" VARCHAR(2), + "cd_elemento" VARCHAR(20), "cd_sub_elemento" VARCHAR(3), "tp_licitacao" SMALLINT, - "nu_licitacao" VARCHAR(10), - "nu_empenho" VARCHAR(7), + "nu_licitacao" VARCHAR(50), + "nu_empenho" VARCHAR(50), "tp_empenho" SMALLINT, "dt_empenho" DATE, "vl_empenho" DECIMAL, @@ -38,7 +38,6 @@ CREATE TABLE IF NOT EXISTS "empenho" ( "cd_sub_elemento_2" VARCHAR(3), "cd_ibge" VARCHAR(7), PRIMARY KEY("id_empenho"), - CONSTRAINT empenho_key UNIQUE (nu_empenho, cd_unid_orcamentaria, dt_ano, cd_u_gestora), FOREIGN KEY("cd_ibge") REFERENCES localidade_ibge("cd_ibge") ON DELETE CASCADE ON UPDATE CASCADE, FOREIGN KEY("id_licitacao") REFERENCES licitacao("id_licitacao") ON DELETE CASCADE ON UPDATE CASCADE diff --git a/feed-al/scripts/create/create_pagamento.sql b/feed-al/scripts/create/create_pagamento.sql index ac5bddf..617b794 100644 --- a/feed-al/scripts/create/create_pagamento.sql +++ b/feed-al/scripts/create/create_pagamento.sql @@ -8,8 +8,8 @@ CREATE TABLE IF NOT EXISTS "pagamento" ( "cd_u_gestora" INTEGER, "dt_ano" SMALLINT, "cd_unid_orcamentaria" VARCHAR(5), - "nu_empenho" VARCHAR(7), - "nu_parcela" VARCHAR(7), + "nu_empenho" VARCHAR(50), + "nu_parcela" VARCHAR(50), "tp_lancamento" VARCHAR(3), "vl_pagamento" DECIMAL, "dt_pagamento" DATE, diff --git a/feed-al/scripts/import/import_data_tce_rs.sql b/feed-al/scripts/import/import_data_tce_rs.sql index 22ce22e..09a40a0 100644 --- a/feed-al/scripts/import/import_data_tce_rs.sql +++ b/feed-al/scripts/import/import_data_tce_rs.sql @@ -1,3 +1,6 @@ \copy licitacao FROM PROGRAM 'awk FNR-1 /data/rs/licitacoes/*.csv | cat' WITH NULL AS 'NA' DELIMITER ',' CSV; \copy contrato FROM PROGRAM 'awk FNR-1 /data/rs/contratos/*.csv | cat' WITH NULL AS 'NA' DELIMITER ',' CSV; +\copy empenho FROM PROGRAM 'awk FNR-1 /data/rs/empenhos/*.csv | cat' WITH NULL AS 'NA' DELIMITER ',' CSV; +\copy pagamento FROM PROGRAM 'awk FNR-1 /data/rs/pagamentos/*.csv | cat' WITH NULL AS 'NA' DELIMITER ',' CSV; + diff --git a/fetcher/scripts/fetch_tce_rs_opendata.R b/fetcher/scripts/fetch_tce_rs_opendata.R index f33c9fb..9ae22d5 100644 --- a/fetcher/scripts/fetch_tce_rs_opendata.R +++ b/fetcher/scripts/fetch_tce_rs_opendata.R @@ -108,8 +108,15 @@ for(ano_exec in anos_exec){ decompress_file(path_empenhos, empenhos_zip) unlink(empenhos_zip) + message(sprintf(" Separando empenhos do ano %s em arquivos menores.",ano_exec)) + csv_empenhos_full <- sprintf("data/rs/empenhos/%s/%s.csv", ano_exec, ano_exec) + cmd_split <- paste("awk -v l=500000 '(NR==1){header=$0;next} (NR%l==2) { close(file); file=sprintf(\"%s.%0.5d.csv\",FILENAME,++c); sub(/csv[.]/,\"\",file); print header > file; } {print > file}'", csv_empenhos_full) + system(cmd_split) + system(paste("rm", csv_empenhos_full)) } + + # realiza o fetch dos arquivos que não são anuais # fetch órgãos message(" Realizando fetch dos órgãos...") diff --git a/transformador/R/tce_rs_opendata.R b/transformador/R/tce_rs_opendata.R index 99204ff..9039f5e 100644 --- a/transformador/R/tce_rs_opendata.R +++ b/transformador/R/tce_rs_opendata.R @@ -74,7 +74,67 @@ format_contrato_tce_rs <- function(contratos_transformados_rs_df) { dplyr::select(colunas_contratos) } +#' @title Processa dataframe dos empenhos +#' @description Manipula a tabela para se adequar aos outros estados +#' @param empenhos_pagamentos_transformados_rs_df Dataframe contendo informações de empenhos e pagamentos do RS +#' @return Dataframe contendo informações dos empenhos +format_empenhos_tce_rs <- function(empenhos_pagamentos_transformados_rs_df) { + colunas_empenhos <- c( "id_empenho", "id_licitacao", "id_contrato","cd_u_gestora","dt_ano","cd_unid_orcamentaria","cd_funcao","cd_subfuncao", + "cd_programa","cd_acao","cd_classificacao", "cd_cat_economica", "cd_nat_despesa", "cd_modalidade","cd_elemento", + "cd_sub_elemento","tp_licitacao","nu_licitacao", "nu_empenho", "tp_empenho","dt_empenho","vl_empenho","cd_credor", + "no_credor","tp_credor","de_historico1","de_historico2","de_historico","tp_meta","nu_obra", "dt_mes_ano", + "dt_mes_ano_referencia","tp_fonte_recursos","nu_cpf", "cd_sub_elemento_2","cd_ibge") + + empenhos_rs_formatados <-fncols(empenhos_pagamentos_transformados_rs_df, colunas_empenhos) %>% + dplyr::select(colunas_empenhos) %>% + dplyr::distinct(id_empenho, .keep_all = TRUE) +} + +#' @title Processa dataframe de pagamentos +#' @description Manipula a tabela para se adequar aos outros estados +#' @param empenhos_pagamentos_transformados_rs_df Dataframe contendo informações de empenhos e pagamentos do RS +#' @return Dataframe contendo informações dos pagamentos +format_pagamentos_tce_rs <- function(empenhos_pagamentos_transformados_rs_df) { + colunas_pagamentos <- c("id_pagamento","id_empenho","id_licitacao","id_contrato", + "cd_u_gestora","dt_ano","cd_unid_orcamentaria","nu_empenho", + "nu_parcela","tp_lancamento","vl_pagamento","dt_pagamento", + "cd_conta","nu_cheque_pag","nu_deb_aut","cd_banco_rec", + "cd_agencia_rec","nu_conta_rec","tp_fonte_recursos","dt_mes_ano", + "cd_banco","cd_agencia","tp_conta_bancaria") + + pagamentos_rs_formatados <-fncols(empenhos_pagamentos_transformados_rs_df, colunas_pagamentos) %>% + dplyr::select(colunas_pagamentos) %>% + dplyr::filter(!is.na(vl_pagamento)) + +} + +#' @title Processa dataframe de empenhos e pagamentos do RS +#' @description Manipula a tabela para a adição de identificadores e para adequação +#' de colunas. +#' @param empenhos_pagamento_ce_rs Dataframe contendo informações de empenhos e pagamentos do RS +#' @return Dataframe contendo informações dos empenhos e pagamentos +process_empenhos_pagamento_tce_rs <- function(empenhos_pagamento_tce_rs, file_empenho) { + empenhos_pagamento_tce_rs %<>% generate_empenhos_pagamento_tce_rs_id(file_empenho) +} +#' @title Gera um identificador único para empenhos e licitações do RS +#' @param empenhos_pagamento_tce_rs Dataframe contendo informações sobre empenhos e licitações +#' @return Dataframe contendo informações sobre empenhos e licitações do RS e seus ids +#' @rdname generate_empenhos_pagamento_tce_rs_id +#' @examples +#' empenhos_pagamento_tce_rs <- generate_empenhos_pagamento_tce_rs_id(empenhos_pagamento_tce_rs) +generate_empenhos_pagamento_tce_rs_id <- function(empenhos_pagamento_tce_rs, file_empenho) { + empenhos_pagamento_tce_rs$index <- seq.int(nrow(empenhos_pagamento_tce_rs)) + empenhos_pagamento_tce_rs$file <- file_empenho + + chave_empenhos <- c("ano_recebimento", "mes_recebimento", "cd_u_gestora", "cd_orgao_orcamentario", "nome_orgao_orcamentario", + "cd_unidade_orcamentaria", "nome_unidade_orcamentaria", "tp_unidade", + "dt_empenho", "ano_empenho", "ano_operacao", "nu_empenho", "cd_credor", "nu_cpfcnpj", + "ano_licitacao", "nu_licitacao", "cd_tipo_modalidade", "file") + + empenhos_pagamento_tce_rs %<>% .generate_hash_id(chave_empenhos, "id_empenho") + empenhos_pagamento_tce_rs %<>% .generate_hash_id(c("index", "file"), "id_pagamento") +} diff --git a/transformador/R/tradutor/interface.R b/transformador/R/tradutor/interface.R index 46c6b36..f26e111 100644 --- a/transformador/R/tradutor/interface.R +++ b/transformador/R/tradutor/interface.R @@ -270,10 +270,20 @@ get_licitacoes_tce_rs <- function(ano){ #' @return Dataframe contendo informações sobre os fornecedores #' @rdname get_pessoas_tce_rs #' @examples -#' essoas_tce_rs_dt <- get_pessoas_tce_rs() +#' pessoas_tce_rs_dt <- get_pessoas_tce_rs() get_pessoas_tce_rs <- function(ano){ pessoas_tce_rs_dt <- read_pessoas_tce_rs(ano) %>% translate_pessoas_tce_rs() } +#' @title Obtem dados os dados de empenhos, liquidações e pagamentos do TCE-RS +#' @return Dataframe contendo informações sobre empenhos, liquidações e pagamentos +#' @rdname get_empenho_tce_rs +#' @examples +#' get_empenho_tce_rs <- get_empenho_tce_rs(2020, 2020.00001.csv) +get_empenho_tce_rs <- function(ano, file_empenho){ + get_empenho_tce_rs <- read_empenho_tce_rs(ano, file_empenho) %>% + translate_empenho_tce_rs() +} + diff --git a/transformador/R/tradutor/read_utils_tce_rs.R b/transformador/R/tradutor/read_utils_tce_rs.R index fc0b6aa..b9712de 100644 --- a/transformador/R/tradutor/read_utils_tce_rs.R +++ b/transformador/R/tradutor/read_utils_tce_rs.R @@ -87,6 +87,18 @@ read_pessoas_tce_rs <- function(ano) { )) } +#' @title Lê dataframe contendo informações de empenhos, liquidações e pagamentos da base de dados do TCE-RS +#' @return Dataframe contendo informações sobre empenhos, liquidações e pagamentos +#' @rdname read_empenho_tce_rs +#' @examples +#' read_empenho_tce_rs_dt <- read_empenho_tce_rs(ano, file) +read_empenho_tce_rs<- function(ano, file_empenho){ + empenho_tce_rs_df <- readr::read_csv(here::here(sprintf("../fetcher/data/rs/empenhos/%s/%s", ano, file_empenho)), + col_types = list( + .default = readr::col_character() + )) + +} diff --git a/transformador/R/tradutor/tce_rs_opendata.R b/transformador/R/tradutor/tce_rs_opendata.R index cc0f224..378a720 100644 --- a/transformador/R/tradutor/tce_rs_opendata.R +++ b/transformador/R/tradutor/tce_rs_opendata.R @@ -38,7 +38,7 @@ translate_licitacoes_tce_rs <- function(licitacoes_tce_rs_raw){ licitacoes_tce_rs_raw %<>% janitor::clean_names() %>% dplyr::rename(cd_u_gestora = cd_orgao) %>% dplyr::rename(dt_ano = ano_licitacao) %>% - dplyr::rename(nu_licitacao = nr_licitacao) %>% #tp_licitacao, dt_homologacao,vl_licitacao ok + dplyr::rename(nu_licitacao = nr_licitacao) %>% dplyr::rename(de_obs = ds_objeto) %>% dplyr::rename(de_ugestora = nm_orgao) } @@ -55,6 +55,27 @@ translate_pessoas_tce_rs <- function(pessoas_tce_rs_raw){ dplyr::rename(no_fornecedor = nm_pessoa) } +#' @param empenho_licitacao_tce_rs_raw Dados brutos de empenhos, liquidações e pagamentos +#' @return Dataframe contendo informações sobre empenhos, liquidações e pagamentos da base do TCE-RS +#' @rdname translate_empenho_tce_rs +#' @examples +#' empenho_tce_rs_dt <- translate_empenho_tce_rs(empenho_licitacao_tce_rs_raw) +translate_empenho_tce_rs <- function(empenho_licitacao_tce_rs_raw){ + empenho_licitacao_tce_rs_raw %<>% janitor::clean_names() %>% + dplyr::rename(cd_u_gestora = cd_orgao) %>% + dplyr::rename(nu_cpfcnpj = cnpj_cpf) %>% + dplyr::rename(no_fornecedor = nm_credor) %>% + dplyr::rename(dt_ano = ano_contrato) %>% + dplyr::rename(de_historico = historico) %>% + dplyr::rename(nu_empenho = nr_empenho) %>% + dplyr::rename(nu_parcela = nr_pagamento) %>% + dplyr::rename(dt_pagamento = dt_operacao) %>% + dplyr::rename(nu_licitacao = nr_licitacao) %>% + dplyr::rename(nu_contrato = nr_contrato) %>% + dplyr::rename(cd_tipo_modalidade = mod_licitacao) %>% + dplyr::rename(tp_instrumento = tp_instrumento_contratual) + +} diff --git a/transformador/man/format_empenhos_tce_rs.Rd b/transformador/man/format_empenhos_tce_rs.Rd new file mode 100644 index 0000000..c7569ff --- /dev/null +++ b/transformador/man/format_empenhos_tce_rs.Rd @@ -0,0 +1,17 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/tce_rs_opendata.R +\name{format_empenhos_tce_rs} +\alias{format_empenhos_tce_rs} +\title{Processa dataframe dos empenhos} +\usage{ +format_empenhos_tce_rs(empenhos_pagamentos_transformados_rs_df) +} +\arguments{ +\item{empenhos_pagamentos_transformados_rs_df}{Dataframe contendo informações de empenhos e pagamentos do RS} +} +\value{ +Dataframe contendo informações dos empenhos +} +\description{ +Manipula a tabela para se adequar aos outros estados +} diff --git a/transformador/man/format_pagamentos_tce_rs.Rd b/transformador/man/format_pagamentos_tce_rs.Rd new file mode 100644 index 0000000..df40ea9 --- /dev/null +++ b/transformador/man/format_pagamentos_tce_rs.Rd @@ -0,0 +1,17 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/tce_rs_opendata.R +\name{format_pagamentos_tce_rs} +\alias{format_pagamentos_tce_rs} +\title{Processa dataframe de pagamentos} +\usage{ +format_pagamentos_tce_rs(empenhos_pagamentos_transformados_rs_df) +} +\arguments{ +\item{empenhos_pagamentos_transformados_rs_df}{Dataframe contendo informações de empenhos e pagamentos do RS} +} +\value{ +Dataframe contendo informações dos pagamentos +} +\description{ +Manipula a tabela para se adequar aos outros estados +} diff --git a/transformador/man/generate_empenhos_pagamento_tce_rs_id.Rd b/transformador/man/generate_empenhos_pagamento_tce_rs_id.Rd new file mode 100644 index 0000000..a468778 --- /dev/null +++ b/transformador/man/generate_empenhos_pagamento_tce_rs_id.Rd @@ -0,0 +1,20 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/tce_rs_opendata.R +\name{generate_empenhos_pagamento_tce_rs_id} +\alias{generate_empenhos_pagamento_tce_rs_id} +\title{Gera um identificador único para empenhos e licitações do RS} +\usage{ +generate_empenhos_pagamento_tce_rs_id(empenhos_pagamento_tce_rs, file_empenho) +} +\arguments{ +\item{empenhos_pagamento_tce_rs}{Dataframe contendo informações sobre empenhos e licitações} +} +\value{ +Dataframe contendo informações sobre empenhos e licitações do RS e seus ids +} +\description{ +Gera um identificador único para empenhos e licitações do RS +} +\examples{ +empenhos_pagamento_tce_rs <- generate_empenhos_pagamento_tce_rs_id(empenhos_pagamento_tce_rs) +} diff --git a/transformador/man/process_empenhos_pagamento_tce_rs.Rd b/transformador/man/process_empenhos_pagamento_tce_rs.Rd new file mode 100644 index 0000000..d67d251 --- /dev/null +++ b/transformador/man/process_empenhos_pagamento_tce_rs.Rd @@ -0,0 +1,18 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/tce_rs_opendata.R +\name{process_empenhos_pagamento_tce_rs} +\alias{process_empenhos_pagamento_tce_rs} +\title{Processa dataframe de empenhos e pagamentos do RS} +\usage{ +process_empenhos_pagamento_tce_rs(empenhos_pagamento_tce_rs, file_empenho) +} +\arguments{ +\item{empenhos_pagamento_ce_rs}{Dataframe contendo informações de empenhos e pagamentos do RS} +} +\value{ +Dataframe contendo informações dos empenhos e pagamentos +} +\description{ +Manipula a tabela para a adição de identificadores e para adequação + de colunas. +} diff --git a/transformador/scripts/transform_mc_data_tce_rs.R b/transformador/scripts/transform_mc_data_tce_rs.R index 06cef1d..aad307b 100644 --- a/transformador/scripts/transform_mc_data_tce_rs.R +++ b/transformador/scripts/transform_mc_data_tce_rs.R @@ -4,12 +4,13 @@ message(" INICIANDO SCRIPT - TRANSFORMAÇÃO DOS DADOS ") message(" ------------------------------------------") message("") + library(magrittr) source(here::here("R/tradutor/interface.R")) source(here::here("utils/join_utils.R")) -.HELP <- "Rscript transform_mc_data.R" +.HELP <- "Rscript transform_mc_data_tce_rs.R" #Instala pacote mcTransformador devtools::document() @@ -41,7 +42,7 @@ message("") #------------------------- TCE-RS --------------------------# #-----------------------------------------------------------------------------# -ANOS_DISPONIVEIS <- c(2016, 2017, 2018, 2019, 2020) +ANOS_DISPONIVEIS <- c(2018, 2019, 2020) anos_fetch <- list.dirs(path = "./../fetcher/data/rs/contratos", full.names = FALSE, recursive = TRUE) message(" CARREGANDO DADOS DO TCE-RS...") @@ -104,11 +105,52 @@ for(ano in anos_fetch){ dir.create(output_dir_contratos_rs) dir.create('data/rs/licitacoes') dir.create('data/rs/contratos') + dir.create('data/rs/empenhos') + dir.create('data/rs/pagamentos') } readr::write_csv(contratos_rs_formatados, here::here(sprintf("./data/rs/contratos/contratos_%s.csv", ano))) readr::write_csv(licitacoes_rs_formatadas, here::here(sprintf("./data/rs/licitacoes/licitacoes_%s.csv", ano))) + + # + # --- Carregando e transformando EMPENHOS e PAGAMENTOS + # + message(sprintf(" - Carregando e processando empenhos e pagamentos do ano %s...", ano)) + + #seta o caminho dos arquivos de empenhos/pagamentos + path_files_empenhos <- sprintf("../fetcher/data/rs/empenhos/%s", ano) + files_empenhos <-list.files(path_files_empenhos) + + for(file_empenho in files_empenhos){ + message(sprintf(" - Carregando empenhos/pagamentos do arquivo %s (%s)...", file_empenho, ano)) + empenho_pagamento_rs_df <- get_empenho_tce_rs(ano, file_empenho) + + empenhos_pagamento_rs_transformados <- empenho_pagamento_rs_df %>% + mcTransformador::process_empenhos_pagamento_tce_rs(file_empenho) %>% + join_empenhos_pagamentos_rs_contratos(contratos_rs_transformados) + + message(sprintf(" - Formatando empenhos do arquivo %s (%s)...", file_empenho, ano)) + empenhos_rs_formatados <- empenhos_pagamento_rs_transformados %>% + format_empenhos_tce_rs() + + message(sprintf(" - Formatando pagamentos do arquivo %s (%s)...", file_empenho, ano)) + pagamentos_rs_formatados <- empenhos_pagamento_rs_transformados %>% + format_pagamentos_tce_rs() + + message(sprintf(" - Salvando empenhos/pagamentos do arquivo %s (%s)...", file_empenho, ano)) + readr::write_csv(empenhos_rs_formatados, here::here(sprintf("./data/rs/empenhos/empenhos_%s_%s", ano, file_empenho))) + readr::write_csv(pagamentos_rs_formatados, here::here(sprintf("./data/rs/pagamentos/pagamentos_%s_%s", ano, file_empenho))) + + rm(empenho_pagamento_rs_df) + rm(empenhos_pagamento_rs_transformados) + rm(empenhos_rs_formatados) + rm(pagamentos_rs_formatados) + gc() + + } + } + diff --git a/transformador/utils/join_utils.R b/transformador/utils/join_utils.R index 1381366..9c7d5ff 100644 --- a/transformador/utils/join_utils.R +++ b/transformador/utils/join_utils.R @@ -344,4 +344,39 @@ join_pagamentos_empenhos <- function(df_pagamentos, df_empenhos) { dplyr::select(id_pagamento, id_empenho, id_licitacao, id_contrato, dplyr::everything()) } +#' @title Realiza o join dos empenhos e pagamentos do RS com o df de contratos +#' @param df_empenhos_pagamentos_rs dataframe com os empenhos e pagamentos +#' @param df_contratos_rs dataframe com os contratos +#' @return Dataframe contendo informações dos empenhos e pagamentos com o id do contrato +#' @rdname join_empenhos_rs_contratos +#' @examples +#' join_empenhos_pagamentos_rs_contratos_dt <- join_empenhos_pagamentos_rs_contratos(df_empenhos_pagamentos_rs, df_contratos_rs) +#' +join_empenhos_pagamentos_rs_contratos <- function(df_empenhos_pagamentos_rs, df_contratos_rs) { + df_contratos_rs %<>% dplyr::select(cd_tipo_modalidade, tp_instrumento, ano_licitacao, + dt_ano, nu_contrato, nu_licitacao, cd_u_gestora, + id_licitacao, id_contrato) %>% + dplyr::mutate(dt_ano = as.character(dt_ano)) + + df_empenhos_pagamentos_rs %<>% dplyr::left_join(df_contratos_rs , by=c("tp_instrumento", "cd_tipo_modalidade", "ano_licitacao", + "dt_ano", "nu_contrato", "nu_licitacao", "cd_u_gestora")) %>% + dplyr::select(id_empenho,id_licitacao, id_licitacao, id_contrato, dplyr::everything()) %>% + dplyr::filter(!is.na(id_contrato)) +} + + + + # df_empenhos_pagamentos_rs %<>% dplyr::left_join(contratos_df %>% + # dplyr::mutate(nr_licitacao = as.character(nr_licitacao), + # nr_contrato = as.character(nr_contrato)) %>% + # dplyr::select(id_contrato, id_orgao, ano_licitacao, nr_licitacao, cd_tipo_modalidade, + # nr_contrato, ano_contrato, tp_instrumento_contrato), + # by = c("id_orgao", "ano_licitacao", "nr_licitacao", "cd_tipo_modalidade", + # "nr_contrato", "ano_contrato", "tp_instrumento_contrato")) + + + + + +