Localiza todos os ficheiros PDF com o padrao "EXTRACTO ABSA" numa
pasta, processa cada um e devolve um unico tibble combinado compativel com o
esquema df_razao utilizado no pipeline do easystafe.
Usage
processar_extracto_absa(
source_path,
pattern = "EXTRACTO ABSA",
recursive = FALSE,
y_tolerance = 2,
quiet = TRUE,
usd_to_mt = 63.86,
eur_to_mt = 70,
eur_to_usd = 1.1
)Arguments
- source_path
character(1). Caminho para a pasta que contem os ficheiros PDF dos extractos ABSA. Obrigatorio.- pattern
character(1). Padrao regex usado para identificar os ficheiros ABSA dentro desource_path. Nao faz distincao entre maiusculas e minusculas. Default:"EXTRACTO ABSA".- recursive
logical(1). SeTRUE, pesquisa tambem nas subpastas desource_path. Default:FALSE.- y_tolerance
numeric(1). Tolerancia vertical (em pontos PDF) para agrupar palavras na mesma linha durante a reconstrucao por coordenadas. O valor predefinido de2funciona para os extractos ABSA padrao. Default:2.- quiet
logical(1). SeTRUE(padrao), suprime as mensagens emitidas por ficheiro durante o processamento. SeFALSE, e emitida uma mensagem por ficheiro processado. Independentemente deste parametro, e sempre emitida uma mensagem final com o numero de linhas e ficheiros processados. Default:TRUE.- usd_to_mt
numeric(1). Taxa de cambio USD para MZN. Passado aaplicar_conversao_moeda. Por padrao63.86(valor indicativo; actualizar conforme necessario).- eur_to_mt
numeric(1). Taxa de cambio EUR para MZN. Passado aaplicar_conversao_moeda. Por padrao70.00(valor indicativo; actualizar conforme necessario).- eur_to_usd
numeric(1). Taxa de cambio EUR para USD. Passado aaplicar_conversao_moeda. Por padrao1.10(valor indicativo; actualizar conforme necessario).
Value
Um tibble com 18 colunas: as 12 colunas base do esquema
df_razao mais as 6 colunas de conversao de moeda produzidas por
aplicar_conversao_moeda:
- source_file
character. Nome do ficheiro PDF de origem.- unidade_gestao
character. SempreNA– a preencher downstream.- data
Date. Data do movimento. A data ficticia de abertura (01/01/1900) e remapeada para o primeiro dia do periodo do extracto.- ano
integer. Ano extraido dedata.- mes
character. Nome completo do mes em portugues (ex:"Fevereiro").- tipo
character. Um de"SALDO_INICIAL","MOVIMENTO"ou"SALDO_FINAL".- codigo_documento
character. Numero de referencia do movimento, quando presente.NAcaso contrario.- valor_lancamento
double. Valor assinado do movimento: positivo para creditos, negativo para debitos.NAnas linhas de saldo.- valor_lancamento_mt
double. Valor do lancamento em MZN.- valor_lancamento_usd
double. Valor do lancamento em USD.- valor_lancamento_eur
double. Valor do lancamento em EUR.- dc1
character. Indicador debito/credito do movimento:"C","D"ouNA.- saldo_atual
double. Saldo corrente apos o movimento.- dc2
character. Indicador debito/credito do saldo. Sempre"D"para este tipo de conta.- saldo_inicial_fim
double. Saldo de abertura emSALDO_INICIAL; saldo calculado emSALDO_FINAL;NAnos movimentos.- saldo_inicial_fim_mt
double. Saldo inicial ou final em MZN.- saldo_inicial_fim_usd
double. Saldo inicial ou final em USD.- saldo_inicial_fim_eur
double. Saldo inicial ou final em EUR.
Details
O layout dos PDFs ABSA apresenta dois problemas conhecidos que esta funcao resolve:
Truncagem de pagina:
pdftools::pdf_text()trunca silenciosamente a primeira pagina. A funcao usapdftools::pdf_data()em alternativa, reconstruindo as linhas a partir das coordenadas x/y de cada palavra.Linhas de continuacao: Descricoes longas e numeros de referencia podem continuar numa segunda linha sem data inicial. Essas linhas sao detectadas e concatenadas a linha de transaccao anterior.
A linha de fecho (SALDO_FINAL) e acrescentada programaticamente e
nao extraida do rodape do PDF. O seu saldo_inicial_fim e calculado
como saldo_abertura + sum(creditos) - sum(debitos).
Apos extrair e combinar todos os PDFs, chama internamente
aplicar_conversao_moeda com as taxas fornecidas. Para
re-aplicar conversoes com taxas diferentes sem re-processar os PDFs,
use aplicar_conversao_moeda directamente sobre o tibble
ja processado.
O helper interno parse_single_absa() e definido dentro desta funcao
e nao e exportado.
Examples
if (FALSE) { # \dontrun{
# Processar todos os extractos ABSA numa pasta
df_absa <- processar_extracto_absa(
source_path = "Data/razao_cont/2026_02/outro/",
usd_to_mt = 63.86,
eur_to_mt = 70.00,
eur_to_usd = 1.10
)
# Combinar com outros extractos do razao
df_razao <- dplyr::bind_rows(df_razao, df_absa)
# Pesquisar em subpastas com padrao alternativo
df_absa <- processar_extracto_absa(
source_path = "Data/razao_cont/",
pattern = "ABSA",
recursive = TRUE,
usd_to_mt = 63.86,
eur_to_mt = 70.00,
eur_to_usd = 1.10
)
# Re-aplicar conversoes com taxas actualizadas sem re-processar PDFs
df_absa_revalorizado <- df_absa |>
dplyr::select(-valor_lancamento_mt, -valor_lancamento_usd,
-valor_lancamento_eur, -saldo_inicial_fim_mt,
-saldo_inicial_fim_usd, -saldo_inicial_fim_eur) |>
aplicar_conversao_moeda(usd_to_mt = 64.10, eur_to_mt = 71.20,
eur_to_usd = 1.11)
} # }
