
Encadear dois arquivos de despesas do Portal da Transparência
Source:R/encadeia_despesas_ptransp.R
encadeia_despesas_ptransp.RdJunta um arquivo de despesas que traz o total por registro com o arquivo que
traz o detalhamento desse mesmo registro. No caso mais usado, o total por
ordem bancária (pagamento) e os beneficiários daquela ordem
(pagamento_favorecidos_finais).
Usage
encadeia_despesas_ptransp(
total,
detalhe,
chave = "codigo_pagamento",
somente_detalhados = FALSE
)Arguments
- total
Um
data.framecom uma linha de total por registro. É o resultado dedownload_despesas_ptransp()para o tipo agregador (por exemplo"pagamento").- detalhe
Um
data.framecom zero ou mais linhas de detalhe por registro. É o resultado dedownload_despesas_ptransp()para o tipo detalhado (por exemplo"pagamento_favorecidos_finais").- chave
Texto com o nome da coluna que identifica o registro nos dois data frames. O padrão
"codigo_pagamento"serve ao parpagamento×pagamento_favorecidos_finais; use"id_empenho"no parempenho×item_empenho.- somente_detalhados
Lógico. Com
FALSE(o padrão) toda linha detotalaparece no resultado, e as colunas de detalhe ficamNAonde não há detalhamento. ComTRUE, só as linhas detotalque têm ao menos uma linha emdetalhesão devolvidas.
Value
Um data.frame com as colunas de total seguidas das
colunas exclusivas de detalhe, na ordem em que aparecem nas
entradas. A coluna detalhado (lógica), inserida logo depois da
coluna chave, indica quais linhas encontraram detalhamento.
Colunas homônimas nos dois data frames recebem os sufixos
.total e .detalhe. A ordem das linhas de total é
preservada, e quando um registro tem mais de um detalhe as linhas ficam
adjacentes. Um detalhe com zero linhas não é erro: o
resultado sai com as colunas de detalhe em NA e
detalhado = FALSE.
Details
A junção é 1:N na coluna chave, como em merge(..., all.x =
!somente_detalhados, sort = FALSE). Ela foi medida em 2024-01-15:
pagamento tinha 14.949 ordens bancárias e
pagamento_favorecidos_finais detalhava 162 delas, com 99 dessas 162
trazendo mais de um beneficiário. A soma dos detalhes fecha com
valor_do_pagamento_convertido_pra_r (maior diferença encontrada:
3,6e-12, tolerância 0,01).
O detalhamento é parcial: no dia medido, apenas cerca de 1% das
ordens bancárias tinham linha correspondente no arquivo de
beneficiários. Por isso o padrão é devolver todas as linhas de
total, e não tratar um dia sem detalhamento como erro.
Os pares total/detalhe do ZIP diário e as chaves correspondentes são:
liquidacao com liquidacao_empenhos_impactados,
pagamento com pagamento_empenhos_impactados e pagamento
com pagamento_favorecidos_finais (todos por codigo_pagamento ou
pela coluna de mesmo nome nos dois lados) e empenho com
item_empenho (por id_empenho).
Os nomes das colunas de valor não coincidem entre os lados: o total por
ordem bancária usa valor_do_pagamento_convertido_pra_r e o
detalhamento usa valor_do_pagamento_em_r. A função não
compara valores; ela entrega as duas colunas lado a lado.
Examples
total <- data.frame(
codigo_pagamento = c("A", "B", "C"),
valor_do_pagamento_convertido_pra_r = c(100, 50, 25)
)
detalhe <- data.frame(
codigo_pagamento = c("A", "A", "B"),
codigo_favorecido = c("F1", "F2", "F3"),
valor_do_pagamento_em_r = c(60, 40, 50)
)
encadeia_despesas_ptransp(total, detalhe)
#> codigo_pagamento detalhado valor_do_pagamento_convertido_pra_r
#> 1 A TRUE 100
#> 2 A TRUE 100
#> 3 B TRUE 50
#> 4 C FALSE 25
#> codigo_favorecido valor_do_pagamento_em_r
#> 1 F1 60
#> 2 F2 40
#> 3 F3 50
#> 4 <NA> NA
encadeia_despesas_ptransp(total, detalhe, somente_detalhados = TRUE)
#> codigo_pagamento detalhado valor_do_pagamento_convertido_pra_r
#> 1 A TRUE 100
#> 2 A TRUE 100
#> 3 B TRUE 50
#> codigo_favorecido valor_do_pagamento_em_r
#> 1 F1 60
#> 2 F2 40
#> 3 F3 50