
Processar extractos de exportacao e-SISTAFE
Source:R/processar_extracto.R
processar_extracto_esistafe.RdCarrega, limpa e processa um ou mais ficheiros de exportacao do e-SISTAFE no formato Excel, aplicando uma sequencia de transformacoes que inclui renomeacao de colunas, filtragem de UGBs de educacao, classificacao e subtraccao hierarquica de codigos CED, e restauracao da estrutura original de colunas. Devolve um dataframe final desduplicado e pronto para analise.
Usage
processar_extracto_esistafe(
source_path = "Data/",
df_ugb_lookup,
include_pattern = "DemonstrativoConsolidado",
include_percent = TRUE,
include_file_metadata = TRUE,
include_metrica = TRUE,
correct_negatives = TRUE,
quiet = TRUE
)Arguments
- source_path
A character vector with one or more file paths to e-SISTAFE export files in
.xlsxformat.- df_ugb_lookup
A dataframe with the education UGB reference table. Must contain at least the column
codigo_ugbwith 9-character UGB codes (e.g."50B105761"). Only rows whoseugb_idmatches a value incodigo_ugbare retained during processing.- include_pattern
A character string with a regex pattern used to retain only files whose
file_namematches the pattern. Defaults to"DemonstrativoConsolidado", which retains only consolidated statement files. Set toNULLto skip filtering and process all loaded files regardless of name.- include_percent
Logical. If
TRUE(default), thepercentcolumns are included in the output (filled withNA). IfFALSE, those columns are removed from the final result.- include_file_metadata
Logical. If
TRUE(default), metadata extracted from the file name (report type, year, month, dates) are added to the dataframe immediately after thefile_namecolumn. IfFALSE, metadata are not added and thefile_namecolumn is also removed from the final result.- include_metrica
Logical. If
TRUE(default), rows of type"Metrica"are reincluded in the final output after hierarchical subtraction, useful for comparisons and validation. IfFALSE, only"Valor"rows are retained in the final output. Thedata_tipocolumn is always included in the output regardless of this parameter.- correct_negatives
Logical. If
TRUE(default), negative values in the 11 main numeric columns are detected and corrected: they are set to zero in the original"Valor"rows, audit copies of the affected rows are appended withdata_tipo == "Corregido", and two flag columns are added –valor_corregido(1Lfor any row whoseugb_funcao_prog_frcontained a negative of any magnitude) andvalor_negativo(1Lonly where the absolute value of the negative was \(\geq 1\)). IfFALSE, this entire block is skipped: negative values are left as-is, no"Corregido"rows are added, and the two flag columns are not created.- quiet
Logical. If
TRUE(default), progress messages are suppressed. IfFALSE, a message is emitted for each processing step. Regardless of this parameter, a final message with the number of processed files is always emitted.
Value
Um tibble com uma linha por entrada CED deduplificada, contendo
as colunas originais do extracto e-SISTAFE apos limpeza e subtraccao
hierarquica. A coluna data_tipo esta sempre presente e posicionada
imediatamente antes de ugb. As colunas de percentagem sao sempre
incluidas na estrutura original (preenchidas com NA) salvo se
include_percent = FALSE.
Details
O processamento segue as seguintes etapas principais:
Carregamento e combinacao de todos os ficheiros em
source_path.Adicao opcional de metadados via
extrair_meta_extracto().Limpeza de nomes de colunas com
janitor::clean_names().Remocao de colunas
percent.Conversao de colunas numericas e extraccao do codigo
ugb_id.Filtragem de UGBs validos de educacao a partir de
df_ugb_lookup.Remocao de linhas com CED e campos-chave em branco.
Classificacao de grupos CED (A, B, C, D) e remocao do grupo D.
Criacao de variaveis hierarquicas auxiliares.
Separacao de linhas
"Metrica"e"Valor"antes da subtraccao hierarquica.Subtraccao hierarquica em tres passos para eliminar dupla contagem (aplicada apenas a linhas
"Valor"):Passo 1: Subtrair grupo A do grupo B (dentro de
ced_b4).Passo 2: Subtrair grupo B ajustado do grupo C (dentro de
ced_b3).Passo 3: Subtrair grupo A directamente do grupo C (dentro de
ced_b3).
Reinclusao opcional das linhas
"Metrica"viainclude_metrica.Seleccao das colunas finais a partir de um vector explicito, garantindo que
data_tipoe sempre incluido antes deugb.Deteccao e correccao de valores negativos (apenas quando
correct_negatives = TRUE):Calculo do denominador: soma total das colunas numericas em linhas
"Valor"antes de qualquer correccao.Identificacao dos
ugb_funcao_prog_frdistintos com pelo menos um valor negativo em qualquer coluna numerica.Criacao de uma copia dessas linhas com
data_tiporecodificado para"Corregido", preservando os valores negativos originais como registo de auditoria.Substituicao dos valores negativos por zero nas linhas originais
"Valor"(cirurgicamente, coluna a coluna).Anexacao da copia
"Corregido"ao dataset final.Criacao de
valor_corregido:1Lpara todas as linhas cujougb_funcao_prog_frcontinha pelo menos um valor negativo (qualquer magnitude);0Lcaso contrario.Criacao de
valor_negativo:1Lapenas para linhas onde pelo menos uma coluna numerica tinha valor \(\leq -1\) (valor absoluto \(\geq 1\));0Lcaso contrario.Emissao de mensagem de resumo com o numero de grupos corrigidos, a soma absoluta dos valores corrigidos, e a respectiva percentagem da soma total
"Valor".
Examples
if (FALSE) { # \dontrun{
ugb_lookup <- readxl::read_excel("Data/ugb/Codigos de UGBs.xlsx", sheet = "UGBS")
# Padrao -- com correccao de negativos activa
df <- processar_extracto_esistafe(
source_path = "Data/",
df_ugb_lookup = ugb_lookup
)
# Sem correccao de negativos -- valores negativos preservados, sem flags nem linhas Corregido
df <- processar_extracto_esistafe(
source_path = "Data/",
df_ugb_lookup = ugb_lookup,
correct_negatives = FALSE
)
# Sem metadados, sem colunas percent
df <- processar_extracto_esistafe(
source_path = "Data/",
df_ugb_lookup = ugb_lookup,
include_percent = FALSE,
include_file_metadata = FALSE
)
# Com linhas Metrica incluidas para comparacao
df <- processar_extracto_esistafe(
source_path = "Data/",
df_ugb_lookup = ugb_lookup,
include_metrica = TRUE
)
# Com mensagens de progresso
df <- processar_extracto_esistafe(
source_path = "Data/",
df_ugb_lookup = ugb_lookup,
quiet = FALSE
)
} # }