Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Script para cálculo do índice de autonomia da FIRJAN usando o pacote rsiconfi
# install.packages("devtools")
devtools::install_github("tchiluanda/rsiconfi")
library(rsiconfi)
library(dplyr)
library(tidyr)
###########Trabalhando as despesas
#Monta um vetor com todos os códigos de UFs do Brasil
#Vide https://atendimento.tecnospeed.com.br/hc/pt-br/articles/360021494734-Tabela-de-C%C3%B3digo-de-UF-do-IBGE
todos_estados<-11 #para efeito de teste considera-se aqui apenas o estado de Rondônia
#todos_estados<-c(11:17,21:29,31:35,41:43,50:53) #para execução completa tire o comentário dessa linha
#Monta um vetor com as contas que se referem às despesas com a burocracia nos municípios
#para saber as contas disponíveis use a função get_account_dca, como indicado abaixo
# df_conta_dca<- get_account_dca(2018, "I-E", c("2312908") )
contas_depesas_burocaracia<- c("01", #Despesa com legislativo,
"04" #Despesa com administração do estado
)
#chama função que traz dados contábeis anuais de todos os municípios de um conjunto de estados
#Atenção, a execução da linha abaixo pode demorar várias horas para execução.
#Caso queira fazer somente um teste sugerimos substituir o vetor de estados.
#Considere usar apenas o estado 11-Rondônia para testes
df_desp_mun<- get_dca_mun_state(year= 2018, #ano a que se refere os dados. poderia ser um vetor de anos
annex= "I-E", #Anexo de Contas Anuais que se refere a despesa por função
state = todos_estados, #Informa o conjunto de UFs a que se refere os dados recuperados. nesse caso todos as UFs
arg_cod_conta = contas_depesas_burocaracia#Contas associadas a despesa com burocracia
)
#O vetor df_rec_mun apresenta várias linhas para o mesma chave composta de cod_ibge e conta.
#Deve-se escolher a fase da despesa para não haver distorção nos dados.
#Para esse caso vamos filtar as despesas liquidadas, presentes na variável coluna
#Aproveitamos para usar no dataset apenas as variáveis cod_ibge, conta e valor
df_desp_mun<- df_desp_mun %>%
filter(coluna== "Despesas Liquidadas") %>%
select(cod_ibge, conta, valor)
#Transpõe a matriz de despesa para os tipos de despesa virarem coluna
df_desp_mun_tidy <- df_desp_mun %>%
spread(conta,valor)
names(df_desp_mun_tidy)[2:3]<- c("desp_legislativa","desp_administracao")
###########Trabalhando as receitas
#Monta um vetor com as contas que se referem às receitas que são consideradas no cálculo
#para saber as contas disponíveis use a função get_account_dca, como indicado abaixo
# df_conta_dca<- get_account_dca(2018, "I-C", c("2312908") )
contas_receita<- c("1.0.0.0.00.0.0", #Receitas Correntes ,
"1.7.0.0.00.0.0", #Transferências correntes,
"RO1.7.2.8.01.1.0", #Cota-parte do ICMS,
"RO1.7.2.8.01.2.0", #Cota-parte do IPVA,
"RO1.7.1.8.01.5.0", #Cota-parte do ITR,
"1.7.2.8.01.3.0 Cota-Parte do IPI"#Cota-parte do IPI
)
df_rec_mun<- get_dca_mun_state(year= 2018, #ano a que se refere os dados. poderia ser um vetor de anos
annex= "I-C", #Anexo de Contas Anuais que se refere a receita orçamentária
state = todos_estados, #Informa o conjunto de UFs a que se refere os dados recuperados. nesse caso todas as UFs
arg_cod_conta = contas_receita#Contas associadas a receitas econômicas municipais
)
#para todas as receitas devem ser excluídas as deduções relativas a FUNDEB, transferências constitucionais e outras deduções da receita da receita bruta realizada.
#Para tanto, deve-se trabalhar com as informações que estão na variável "coluna"
df_rec_liq<- df_rec_mun %>%
mutate(valor = ifelse(coluna== "Receitas Brutas Realizadas", valor, -valor)) %>% #Se não for Receita Bruta realizada, trata-se de dedução, o valor deve ser multipliado por -1
group_by(cod_ibge, cod_conta) %>%
summarise(
valor_liquido = sum(valor)
) %>%
spread(cod_conta, valor_liquido) %>%
ungroup() %>%
mutate(rec_econ = RO1.0.0.0.00.0.0 - RO1.7.0.0.00.0.0 + rowSums(.[4:7])) %>%
select(1,2,8)
names(df_rec_liq)[2:3]<-c("receitas_correntes_liq", "receita_economica_mun")
####Trabalha em conjunto as informações de receita e despesa e calcula o índice FIRJAN de autonomia
df_resultado<-df_desp_mun_tidy %>%
inner_join(df_rec_liq) %>%
mutate(indicador = (receita_economica_mun-
desp_legislativa-
desp_administracao)/
receitas_correntes_liq,
IFGF_autonomia = case_when(
indicador > 0.25 ~ 1,
indicador < 0.25 & indicador >0 ~ indicador/0.25,
TRUE ~ 0))
@fernandobarbalho
Copy link
Author

fernandobarbalho commented Nov 21, 2019

Conforme matéria do jornal EXTRA , um em cada 3 municípios não gera receita suficiente para manter burocracia municipal,
A matéria indica metodologia da FIRJAN que é desenvolvida acima. O foco do script é principalmente mostrar um caso de uso do pacote rsiconfi.

O pacote rsiconfi utiliza-se de API desenvolvida pelo Tesouro Nacional para o consumo dos dados. A API está disponível nesse endereço:
http://apidatalake.tesouro.gov.br/docs/siconfi/#/

Disclaimer:
O script acima se refere ao cálculo do índice FIRJAN de autonomia de municípios. O procedimento que foi utilizado é uma interpretação dos autores do script sobre a nota metodológica, portanto pode ser que haja divergências, ainda que pequenas, em relação aos valores encontrados pela FIRJAN.

@DATAUNIRIO
Copy link

DATAUNIRIO commented Dec 27, 2020

Parabéns pela biblioteca rsiconfi. Acho esse um ótmo pacote! Utilizo com muita frequência. A minha pergunta é onde posso encontrar a documentação sobre os annex. Por exemplo, qual a diferenca entre 'annex = "I-C"' e 'annex = "I-E"' na função get_dca? quando fico um tempo sem utilizá-lo, quase sempre tenho que estudar novamente a documentação. Tem algum local em que isso seja um pouco mais didático? Pergunto isso também porque gostaria de apresentar esse pacote para os meus alunos de administração pública. grande abraço

@fernandobarbalho
Copy link
Author

fernandobarbalho commented Jan 2, 2021

Parabéns pela biblioteca rsiconfi. Acho esse um ótmo pacote! Utilizo com muita frequência. A minha pergunta é onde posso encontrar a documentação sobre os annex. Por exemplo, qual a diferenca entre 'annex = "I-C"' e 'annex = "I-E"' na função get_dca? quando fico um tempo sem utilizá-lo, quase sempre tenho que estudar novamente a documentação. Tem algum local em que isso seja um pouco mais didático? Pergunto isso também porque gostaria de apresentar esse pacote para os meus alunos de administração pública. grande abraço

Obrigado pelo interesse em nossa biblioteca. O portal do SICONFI possui algumas documentações interessantes que ajudam a esclarecer esses pontos. Recomendo particularmente a cartilha do Finbra que pode ser acessada por esse link: https://siconfi.tesouro.gov.br/siconfi/pages/public/arquivo/conteudo/Cartilha_FINBRA_2020.pdf

Ademais, considero que uma outra opção interessante de consumo de dados do SICONFI seja o Meu Siconfi. É um aplicativo que busca justamente diminuir as barreiras para o consumo dos dados tirando a complexidade de entendimento do que seja cada um dos anexos.
Aqui o endereço do Meu SICONFI:
https://meusiconfi.tesouro.gov.br/Interface_rsiconfi.rmd

@Framelli
Copy link

Framelli commented Apr 19, 2021

Fernando, ano passado esse pacote foi muito útil nas minhas pesquisas. Porém, essa semana tentei coletar alguns dados, mas essa mensagem de erro tem aparecido ao executar o script: Error in open.connection(con, "rb") : HTTP error 503.

O fato estranho é que só aparece quando incluo algum vetor para selecionar mais de um ano ou ente, como nesse exemplo:

get_rreo(year=2016,
period=6,
report_tp=1,
annex = "03",
entity=c("2507507","2408102","2111300"))

Quando executo dessa forma, com apenas um ano e um ente dá certo:

get_rreo(year=2017,
period=6,
report_tp=1,
annex="02",
entity="2304400")

Tem alguma ideia de como posso resolver?

Muito obrigado, seu trabalho é de grande valia!

@m-alvarenga
Copy link

m-alvarenga commented May 13, 2021

Fernando, esse pacote é incrível e o seu trabalho é de extrema contribuição!

Gostaria de saber se existe a possibilidade de baixar dados de municípios específicos ao inves de todos os municípios do estado.

Quando preciso extrair dados de despesas em educação Osasco, por exemplo, preciso baixar todos os dados de SP:
get_dca_mun_state(year= 2018,
annex= "I-E",
state = 35
arg_cod_conta = 12
)
Para então filtrar os dados de Osasco (código 3534401).

O que eu gostaria de fazer era extrair somente os dados do município de Osasco, existe essa possiblidade no pacote?

Desde já agradeço a atenção e o ótimo trabalho!

@DATAUNIRIO
Copy link

DATAUNIRIO commented May 13, 2021

@m-alvarenga,
não poderia ser algo assim?

library(rsiconfi)
library(dplyr)
dados<-get_dca_mun_state(year= 2018,
annex= "I-E",
state = 35,
arg_cod_conta = 12)
dados_osasco <- dados %>% filter(cod_ibge==3534401)
remove(dados)

# usar o purrr /lapply para os outros anos
# http://apidatalake.tesouro.gov.br/ords/siconfi/tt/dca?an_exercicio=2018&no_anexo=DCA-Anexo%20I-E&id_ente=3534401
# também acho esse pacote do Fernando incrível :)

@fernandobarbalho
Copy link
Author

fernandobarbalho commented May 14, 2021

get_rreo(year=2016,
period=6,
report_tp=1,
annex = "03",
entity=c("2507507","2408102","2111300"))

Olá, bom dia.

Antes de mais nada, peço desculpa pela demora a responder. Por algum motivo não fui alertado de sua mensagem.

Tentei executar o código que você indicou e funcionou corretamente por aqui, como pode ser visto abaixo. Há cerca de um mês estávamos com alguns problemas de infra-estrutura que o nosso pessoal da TI estava enfrentando. O problema já foi resolvido e acho que isso era o que causava o erro que você enfrentou. Convido-o a tentar novamente.

df_rreo<-

  • get_rreo(year=2016,
  •      period=6,
    
  •      report_tp=1,
    
  •      annex = "03",
    
  •      entity=c("2507507","2408102","2111300"))
    

[1] 1
Joining, by = "esfera"
[1] "http://apidatalake.tesouro.gov.br/ords/siconfi/tt/rreo?an_exercicio=2016&nr_periodo=6&co_tipo_demonstrativo=RREO&no_anexo=RREO-Anexo%2003&id_ente=2507507"
[1] 336
[1] "http://apidatalake.tesouro.gov.br/ords/siconfi/tt/rreo?an_exercicio=2016&nr_periodo=6&co_tipo_demonstrativo=RREO&no_anexo=RREO-Anexo%2003&id_ente=2408102"
[1] 328
[1] "http://apidatalake.tesouro.gov.br/ords/siconfi/tt/rreo?an_exercicio=2016&nr_periodo=6&co_tipo_demonstrativo=RREO&no_anexo=RREO-Anexo%2003&id_ente=2111300"
[1] 335

head(df_rreo)
exercicio demonstrativo periodo periodicidade instituicao cod_ibge uf
1 2016 RREO 6 B Prefeitura Municipal de João Pessoa - PB 2507507 PB
2 2016 RREO 6 B Prefeitura Municipal de João Pessoa - PB 2507507 PB
3 2016 RREO 6 B Prefeitura Municipal de João Pessoa - PB 2507507 PB
4 2016 RREO 6 B Prefeitura Municipal de João Pessoa - PB 2507507 PB
5 2016 RREO 6 B Prefeitura Municipal de João Pessoa - PB 2507507 PB
6 2016 RREO 6 B Prefeitura Municipal de João Pessoa - PB 2507507 PB
populacao anexo esfera rotulo coluna cod_conta

@fernandobarbalho
Copy link
Author

fernandobarbalho commented May 14, 2021

@m-alvarenga,
não poderia ser algo assim?

library(rsiconfi)
library(dplyr)
dados<-get_dca_mun_state(year= 2018,
annex= "I-E",
state = 35,
arg_cod_conta = 12)
dados_osasco <- dados %>% filter(cod_ibge==3534401)
remove(dados)

usar o purrr /lapply para os outros anos

http://apidatalake.tesouro.gov.br/ords/siconfi/tt/dca?an_exercicio=2018&no_anexo=DCA-Anexo%20I-E&id_ente=3534401

também acho esse pacote do Fernando incrível :)

Obrigado Steven. :)

Uma opção é usar a função get_dca e especificar apenas as entidades que se quer buscar, como no caso abaixo

rreo_osasco<-

  • get_dca(year= 2018,
  •               annex= "I-E",
    
  •               arg_cod_conta = 12,
    
  •               entity= 3534401)
    

Joining, by = "esfera"
[1] "http://apidatalake.tesouro.gov.br/ords/siconfi/tt/dca?an_exercicio=2018&no_anexo=DCA-Anexo%20I-E&id_ente=3534401"
[1] 361

head(rreo_osasco)
exercicio instituicao cod_ibge uf anexo rotulo
1 2018 Prefeitura Municipal de Osasco - SP 3534401 SP DCA-Anexo I-E Total Geral da Despesa por Função
2 2018 Prefeitura Municipal de Osasco - SP 3534401 SP DCA-Anexo I-E Total Geral da Despesa por Função
3 2018 Prefeitura Municipal de Osasco - SP 3534401 SP DCA-Anexo I-E Total Geral da Despesa por Função
4 2018 Prefeitura Municipal de Osasco - SP 3534401 SP DCA-Anexo I-E Total Geral da Despesa por Função
5 2018 Prefeitura Municipal de Osasco - SP 3534401 SP DCA-Anexo I-E Total Geral da Despesa por Função
coluna cod_conta conta valor populacao cod_interno
1 Despesas Empenhadas TotalDespesas 12 - Educação 632103601 696382 12
2 Despesas Liquidadas TotalDespesas 12 - Educação 615395512 696382 12
3 Despesas Pagas TotalDespesas 12 - Educação 565286850 696382 12
4 Inscrição de Restos a Pagar Não Processados TotalDespesas 12 - Educação 16708089 696382 12
5 Inscrição de Restos a Pagar Processados TotalDespesas 12 - Educação 50108662 696382 12

@fernandobarbalho
Copy link
Author

fernandobarbalho commented May 14, 2021

Fernando, esse pacote é incrível e o seu trabalho é de extrema contribuição!

Gostaria de saber se existe a possibilidade de baixar dados de municípios específicos ao inves de todos os municípios do estado.

Quando preciso extrair dados de despesas em educação Osasco, por exemplo, preciso baixar todos os dados de SP:
get_dca_mun_state(year= 2018,
annex= "I-E",
state = 35
arg_cod_conta = 12
)
Para então filtrar os dados de Osasco (código 3534401).

O que eu gostaria de fazer era extrair somente os dados do município de Osasco, existe essa possiblidade no pacote?

Desde já agradeço a atenção e o ótimo trabalho!

Obrigado Alvarenga,

Você pode usar a função get_dca e especificar as entidades que quer trabalhar. Veja o exemplo abaixo:

rreo_osasco<-

  • get_dca(year= 2018,
  •               annex= "I-E",
    
  •               arg_cod_conta = 12,
    
  •               entity= 3534401)
    

Joining, by = "esfera"
[1] "http://apidatalake.tesouro.gov.br/ords/siconfi/tt/dca?an_exercicio=2018&no_anexo=DCA-Anexo%20I-E&id_ente=3534401"
[1] 361

head(rreo_osasco)
exercicio instituicao cod_ibge uf anexo rotulo
1 2018 Prefeitura Municipal de Osasco - SP 3534401 SP DCA-Anexo I-E Total Geral da Despesa por Função
2 2018 Prefeitura Municipal de Osasco - SP 3534401 SP DCA-Anexo I-E Total Geral da Despesa por Função
3 2018 Prefeitura Municipal de Osasco - SP 3534401 SP DCA-Anexo I-E Total Geral da Despesa por Função
4 2018 Prefeitura Municipal de Osasco - SP 3534401 SP DCA-Anexo I-E Total Geral da Despesa por Função
5 2018 Prefeitura Municipal de Osasco - SP 3534401 SP DCA-Anexo I-E Total Geral da Despesa por Função
coluna cod_conta conta valor populacao cod_interno
1 Despesas Empenhadas TotalDespesas 12 - Educação 632103601 696382 12
2 Despesas Liquidadas TotalDespesas 12 - Educação 615395512 696382 12
3 Despesas Pagas TotalDespesas 12 - Educação 565286850 696382 12
4 Inscrição de Restos a Pagar Não Processados TotalDespesas 12 - Educação 16708089 696382 12
5 Inscrição de Restos a Pagar Processados TotalDespesas 12 - Educação 50108662 696382 12

@m-alvarenga
Copy link

m-alvarenga commented May 25, 2021

Fernando, perdão a demora para responder, outras demandas me ocuparam no estágio e na graduação e não tive tempo de testar código até hoje pela manhã.

Muito obrigado pela resposta, funcionou perfeitamente aqui! Agora a execução do código fica muito mais rápida quando eu estiver analisando dados de poucos municípios do estado.

Att, Alvarenga.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment