library(rcongresso)
library(dplyr)
library(tidyr)
library(purrr)
library(ggplot2)

Introdução

Na versão 0.2 do rcongresso, a função fetch_proposicao() agora dá suporte à consultas mais complexas utilizando o endpoint /proposicoes. Para mais detalhes sobre os parâmetros, visite a página dos Dados Abertos.

Conhecendo os parâmetros

A query da consulta possui os seguintes parâmetros:

  • id: Numeração única utilizada para identificar as proposições.
  • siglaUfAutor: Sigla do estado do autor da proposição.
  • siglaTipo: Sigla do tipo da proposição, por exemplo PEC, REQ, PL, PLP, entre outros. Veja mais detalhes.
  • siglaPartidoAutor: Sigla do partido do autor da proposição, por exemplo DEM, PMDB, PT, entre outros.
  • numero: Número da proposição. Por exemplo, a busca pela proposição PEC 182/2007 tem 182 como parâmetro número.
  • ano: Ano em que a proposição foi apresentada.
  • dataApresentacaoInicio: Data do início do intervalo de tempo em que tenham sido apresentadas as proposições a serem listadas, no formato AAAA-MM-DD. Por exemplo, ao buscar as proposições que foram apresentadas a partir do dia 21/10/2005, o parâmetro dataApresentacaoInicio dessa busca seria 2005-10-21.
  • dataApresentacaoFim: Data do fim do intervalo de tempo em que tenham sido apresentadas as proposições a serem listadas. Por exemplo, ao buscar as proposições que foram apresentadas até o dia 10/12/2010, o parâmetro dataApresentacaoFim dessa busca seria 2010-12-10 (formato AAAA-MM-DD).
  • dataInicio: Data do início do intervalo de tempo em que tenha havido tramitação das proposições a serem listadas, no formato AAAA-MM-DD. Se omitido, é assumido como a data de 30 dias anteriores à proposição.
  • dataFim: Data do fim do intervalo de tempo em que tenha havido tramitação das proposições a serem listadas. Se omitido, é considerado ser o dia em que é feita a requisição.
  • idAutor: ID do deputado que é autor da proposição.
  • autor: Nome eleitoral do autor da proposição em forma de string.
  • idSituacao: Número que representa a situação de uma proposição, como um enum.
  • codPartido: Número que representa o partido do deputado autor da proposição, também funcionando como um enum.
  • itens: Número máximo de itens na resposta.

Tipos de busca

Para melhor compreensão de quais parâmetros agrupados retornam as melhores respostas serão divididos dois tipos de busca: A busca direta e a busca indireta. A busca direta é definida como a busca em que se sabe quais proposições serão retornadas ou já se sabe previamente quais proposições pesquisar. Por exemplo, deseja-se buscar mais informações ou recuperar da base de dados a PEC 241/2016. Na busca indireta, não se sabe quais proposições serão retornadas, estas serão definidas por algum parâmetro tal qual tempo, autor ou partido. Por exemplo, deseja-se saber todas as proposições sugeridas por determinado deputado.

Busca direta

Na busca direta, existem duas situações: o ID da proposição é conhecido ou não. Vejamos como proceder em ambos os casos.

O ID da proposição não é conhecido

Caso o ID da proposição não seja conhecido, utilizar a função fetch_id_proposicao() pode ser útil. Utilizar as funções pmap e map_df da biblioteca purrr facilita a recuperação de muitas proposições da base de dados.

frame_data(
  ~tipo, ~numero, ~ano,
  "PEC", 241, 2016) %>% # PEC dos gastos públicos
  pmap(fetch_id_proposicao) %>%
  map_df(fetch_proposicao) %>%
  glimpse()
## Observations: 1
## Variables: 34
## $ ano                                  <dbl> 2016
## $ dataApresentacao                     <chr> "2016-06-15T18:47"
## $ descricaoTipo                        <chr> "Proposta de Emenda à Con...
## $ ementa                               <chr> "Altera o Ato das Disposi...
## $ ementaDetalhada                      <chr> NA
## $ id                                   <int> 2088351
## $ idTipo                               <int> 136
## $ idTipoAutor                          <dbl> NA
## $ justificativa                        <chr> NA
## $ keywords                             <chr> "Constituição Federal (19...
## $ numero                               <dbl> 241
## $ siglaTipo                            <chr> "PEC"
## $ statusProposicao.dataHora            <chr> "2017-02-03T00:00"
## $ statusProposicao.descricaoSituacao   <chr> "Transformado em Norma Ju...
## $ statusProposicao.descricaoTramitacao <chr> "Recebimento"
## $ statusProposicao.despacho            <chr> "Recebimento do Ofício nº...
## $ statusProposicao.idSituacao          <int> 1140
## $ statusProposicao.idTipoTramitacao    <int> 500
## $ statusProposicao.regime              <chr> "Especial"
## $ statusProposicao.sequencia           <dbl> 344
## $ statusProposicao.siglaOrgao          <chr> "MESA"
## $ statusProposicao.uriOrgao            <chr> "https://dadosabertos.cam...
## $ statusProposicao.url                 <chr> "http://www.camara.gov.br...
## $ texto                                <chr> NA
## $ tipoAutor                            <chr> NA
## $ uri                                  <chr> "https://dadosabertos.cam...
## $ uriAutores                           <chr> "https://dadosabertos.cam...
## $ uriOrgaoNumerador                    <chr> NA
## $ uriPropAnterior                      <chr> NA
## $ uriPropPosterior                     <chr> "http://legis.senado.leg....
## $ uriPropPrincipal                     <chr> NA
## $ uriUltimoRelator                     <chr> NA
## $ urlInteiroTeor                       <chr> "http://www.camara.gov.br...
## $ urnFinal                             <chr> NA

Recuperando várias proposições da base de dados, temos:

frame_data(
  ~tipo, ~numero, ~ano,
  "PEC", 241, 2016, # PEC dos gastos públicos
  "PL", 4474, 2016, # PL dos correios
  "PL", 3722, 2012, # PL do estatuto do desarmamento
  "PL", 158, 2015) %>% # PL da proibição do porte e consumo de drogas
  pmap(fetch_id_proposicao) %>%
  map_df(fetch_proposicao) %>%
  glimpse()
## Observations: 4
## Variables: 34
## $ ano                                  <dbl> 2016, 2016, 2012, 2015
## $ dataApresentacao                     <chr> "2016-06-15T18:47", "2016...
## $ descricaoTipo                        <chr> "Proposta de Emenda à Con...
## $ ementa                               <chr> "Altera o Ato das Disposi...
## $ ementaDetalhada                      <chr> NA, NA, NA, NA
## $ id                                   <int> 2088351, 2077582, 541857,...
## $ idTipo                               <int> 136, 139, 139, 139
## $ idTipoAutor                          <dbl> NA, NA, NA, NA
## $ justificativa                        <chr> NA, NA, NA, NA
## $ keywords                             <chr> "Constituição Federal (19...
## $ numero                               <dbl> 241, 4474, 3722, 158
## $ siglaTipo                            <chr> "PEC", "PL", "PL", "PL"
## $ statusProposicao.dataHora            <chr> "2017-02-03T00:00", "2016...
## $ statusProposicao.descricaoSituacao   <chr> "Transformado em Norma Ju...
## $ statusProposicao.descricaoTramitacao <chr> "Recebimento", "Arquivame...
## $ statusProposicao.despacho            <chr> "Recebimento do Ofício nº...
## $ statusProposicao.idSituacao          <int> 1140, 923, 924, 925
## $ statusProposicao.idTipoTramitacao    <int> 500, 502, 504, 1005
## $ statusProposicao.regime              <chr> "Especial", "Urgência (Ar...
## $ statusProposicao.sequencia           <dbl> 344, 15, 289, 25
## $ statusProposicao.siglaOrgao          <chr> "MESA", "PLEN", "MESA", "...
## $ statusProposicao.uriOrgao            <chr> "https://dadosabertos.cam...
## $ statusProposicao.url                 <chr> "http://www.camara.gov.br...
## $ texto                                <chr> NA, NA, NA, NA
## $ tipoAutor                            <chr> NA, NA, NA, NA
## $ uri                                  <chr> "https://dadosabertos.cam...
## $ uriAutores                           <chr> "https://dadosabertos.cam...
## $ uriOrgaoNumerador                    <chr> NA, NA, NA, NA
## $ uriPropAnterior                      <chr> NA, NA, NA, NA
## $ uriPropPosterior                     <chr> "http://legis.senado.leg....
## $ uriPropPrincipal                     <chr> NA, "https://dadosabertos...
## $ uriUltimoRelator                     <chr> NA, NA, NA, NA
## $ urlInteiroTeor                       <chr> "http://www.camara.gov.br...
## $ urnFinal                             <chr> NA, NA, NA, NA

O ID da proposição é conhecido

Nesse caso fazemos uma chamada ao método utilizando o parêmetro id. Por exemplo, a PEC 241/2016 tem o id = 2088351, então fazemos:

fetch_proposicao(id = 2088351) %>%
  glimpse()
## Observations: 1
## Variables: 34
## $ ano                                  <dbl> 2016
## $ dataApresentacao                     <chr> "2016-06-15T18:47"
## $ descricaoTipo                        <chr> "Proposta de Emenda à Con...
## $ ementa                               <chr> "Altera o Ato das Disposi...
## $ ementaDetalhada                      <chr> NA
## $ id                                   <int> 2088351
## $ idTipo                               <int> 136
## $ idTipoAutor                          <dbl> NA
## $ justificativa                        <chr> NA
## $ keywords                             <chr> "Constituição Federal (19...
## $ numero                               <dbl> 241
## $ siglaTipo                            <chr> "PEC"
## $ statusProposicao.dataHora            <chr> "2017-02-03T00:00"
## $ statusProposicao.descricaoSituacao   <chr> "Transformado em Norma Ju...
## $ statusProposicao.descricaoTramitacao <chr> "Recebimento"
## $ statusProposicao.despacho            <chr> "Recebimento do Ofício nº...
## $ statusProposicao.idSituacao          <int> 1140
## $ statusProposicao.idTipoTramitacao    <int> 500
## $ statusProposicao.regime              <chr> "Especial"
## $ statusProposicao.sequencia           <dbl> 344
## $ statusProposicao.siglaOrgao          <chr> "MESA"
## $ statusProposicao.uriOrgao            <chr> "https://dadosabertos.cam...
## $ statusProposicao.url                 <chr> "http://www.camara.gov.br...
## $ texto                                <chr> NA
## $ tipoAutor                            <chr> NA
## $ uri                                  <chr> "https://dadosabertos.cam...
## $ uriAutores                           <chr> "https://dadosabertos.cam...
## $ uriOrgaoNumerador                    <chr> NA
## $ uriPropAnterior                      <chr> NA
## $ uriPropPosterior                     <chr> "http://legis.senado.leg....
## $ uriPropPrincipal                     <chr> NA
## $ uriUltimoRelator                     <chr> NA
## $ urlInteiroTeor                       <chr> "http://www.camara.gov.br...
## $ urnFinal                             <chr> NA

Podemos utilizar também uma lista de IDs:

ids <- c(611966, 291906, 333205, 458609, 517924, 1999440, 2090343)

fetch_proposicao(ids) %>%
  glimpse()
## Observations: 7
## Variables: 34
## $ ano                                  <dbl> 2014, 2005, 2006, 2009, 2...
## $ dataApresentacao                     <chr> "2014-04-09T14:42", "2005...
## $ descricaoTipo                        <chr> "Proposta de Emenda à Con...
## $ ementa                               <chr> "Altera a redação do inci...
## $ ementaDetalhada                      <chr> NA, NA, NA, NA, NA, NA, NA
## $ id                                   <int> 611966, 291906, 333205, 4...
## $ idTipo                               <int> 136, 139, 139, 139, 139, ...
## $ idTipoAutor                          <dbl> NA, NA, NA, NA, NA, NA, NA
## $ justificativa                        <chr> NA, NA, NA, NA, NA, NA, NA
## $ keywords                             <chr> "Gratuidade, ensino públi...
## $ numero                               <dbl> 395, 5507, 7476, 6361, 21...
## $ siglaTipo                            <chr> "PEC", "PL", "PL", "PL", ...
## $ statusProposicao.dataHora            <chr> "2017-03-29T00:00", "2017...
## $ statusProposicao.descricaoSituacao   <chr> "Arquivada", "Arquivada",...
## $ statusProposicao.descricaoTramitacao <chr> "Encaminhamento", "Arquiv...
## $ statusProposicao.despacho            <chr> "A matéria vai ao arquivo...
## $ statusProposicao.idSituacao          <int> 923, 923, 915, 901, 915, ...
## $ statusProposicao.idTipoTramitacao    <int> 180, 502, 504, 504, 320, ...
## $ statusProposicao.regime              <chr> "Especial (Art. 202 c/c 1...
## $ statusProposicao.sequencia           <dbl> 195, 108, 107, 74, 111, 6...
## $ statusProposicao.siglaOrgao          <chr> "PLEN", "MESA", "MESA", "...
## $ statusProposicao.uriOrgao            <chr> "https://dadosabertos.cam...
## $ statusProposicao.url                 <chr> "http://www.camara.gov.br...
## $ texto                                <chr> NA, NA, NA, NA, NA, NA, NA
## $ tipoAutor                            <chr> NA, NA, NA, NA, NA, NA, NA
## $ uri                                  <chr> "https://dadosabertos.cam...
## $ uriAutores                           <chr> "https://dadosabertos.cam...
## $ uriOrgaoNumerador                    <chr> NA, NA, NA, NA, NA, NA, NA
## $ uriPropAnterior                      <chr> NA, NA, NA, NA, NA, NA, NA
## $ uriPropPosterior                     <chr> NA, NA, NA, NA, NA, NA, NA
## $ uriPropPrincipal                     <chr> NA, NA, NA, NA, NA, NA, NA
## $ uriUltimoRelator                     <chr> NA, NA, NA, NA, NA, NA, NA
## $ urlInteiroTeor                       <chr> "http://www.camara.gov.br...
## $ urnFinal                             <chr> NA, NA, NA, NA, NA, NA, NA

Busca indireta

Essa busca dá mais liberdade ao usuário permitindo o cruzamento entre parâmetros para o retorno de um conjunto de proposições que se queira analisar. São inúmeras combinações possíveis para os parâmetros, portanto nessa vignette serão abordadas apenas exemplos de buscas mais comuns deixando as demais a critério do usuário.

Ao fazer esse tipo de busca, em geral, o usuário não tem ideia de quantos itens serão retornados. Dessa forma é indicado utilizar o parâmetro itens para definir o máximo de itens retornados. Caso o parâmetro não seja especificado serão retornados 15 itens (valor default definido na API). Os 15 itens retornados são os que sofreram as modificações mais recentemente.

Os intervalos de tempo, seja de tramitação ou de apresentação, também são indicados nas buscas a fim de refinar os resultados.

Intervalo de tempo de apresentação

Os parâmetros utilizados nessa busca são dataApresentacaoInicio e dataApresentacaoFim, ambos se referem às datas em que as proposições foram apresentadas na câmara.

Vejamos quais proposições foram apresentadas no mês de Janeiro de 2017:

fetch_proposicao(dataApresentacaoInicio = "2017-01-01", dataApresentacaoFim = "2017-01-31") %>%
  glimpse()
## Observations: 15
## Variables: 7
## $ ano       <int> 0, 0, 2017, 2017, 2016, 2016, 2017, 2017, 2017, 2017...
## $ ementa    <chr> "Parecer do Relator, Dep. Mauro Pereira (PMDB-RS), p...
## $ id        <int> 2122122, 2122123, 2122124, 2122125, 2122126, 2122127...
## $ idTipo    <int> 190, 255, 139, 140, 134, 134, 291, 291, 403, 148, 19...
## $ numero    <int> 2, 1, 6788, 337, 715, 719, 766, 767, 7, 2501, 1, 1, ...
## $ siglaTipo <chr> "PRL", "SBT", "PL", "PLP", "MSC", "MSC", "MPV", "MPV...
## $ uri       <chr> "https://dadosabertos.camara.leg.br/api/v2/proposico...

Intervalo de tempo de tramitação

Essa busca é feita quando se deseja recuperar proposições que sofreram mudança de status em algum intervalo de tempo. Os parâmetros utilizados são dataInicio e dataFim.

Vamos ver quais proposições sofreram mudanças no mês de novembro:

fetch_proposicao(dataInicio = "2017-11-01", dataFim = "2017-11-30") %>%
  glimpse()
## Observations: 15
## Variables: 7
## $ ano       <int> 1999, 1999, 1999, 1999, 1991, 1988, 1999, 1995, 1996...
## $ ementa    <chr> "Altera a redação do art. 44 do Decreto-Lei nº 2.848...
## $ id        <int> 14944, 15650, 15743, 16066, 16164, 16205, 16249, 162...
## $ idTipo    <int> 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 13...
## $ numero    <int> 20, 610, 688, 948, 1029, 1060, 1096, 1115, 1741, 177...
## $ siglaTipo <chr> "PL", "PL", "PL", "PL", "PL", "PL", "PL", "PL", "PL"...
## $ uri       <chr> "https://dadosabertos.camara.leg.br/api/v2/proposico...

Por partido

Essa busca utiliza o parâmetro siglaPartidoAutor e retorna todas as proposições sugeridas por deputados de determinado partido.

fetch_proposicao(siglaPartidoAutor = "PSC", itens = 100) %>%
  glimpse()
## Observations: 80
## Variables: 7
## $ ano       <int> 2008, 2008, 2010, 2010, 2010, 2010, 2011, 2011, 2011...
## $ ementa    <chr> "Cria a obrigação de instalação de gerador de energi...
## $ id        <int> 383430, 386221, 480184, 481894, 483694, 484399, 4910...
## $ idTipo    <int> 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 13...
## $ numero    <int> 2810, 2984, 7452, 7538, 7653, 7718, 117, 309, 457, 6...
## $ siglaTipo <chr> "PL", "PL", "PL", "PL", "PL", "PL", "PL", "PL", "PL"...
## $ uri       <chr> "https://dadosabertos.camara.leg.br/api/v2/proposico...

Por estado

Essa busca utiliza o parâmetro siglaUfAutor e retorna todas as proposições cujos autores são de determinado estado. Por exemplo, deseja-se ver quais as últimas proposições apresentadas pelos deputados da região nordeste. A busca pode ser feita da seguinte maneira:

estados_nordeste <- c("RN", "PB", "CE", "PE", "SE", "AL", "BA", "PI", "MA")

fetch_proposicao(siglaUfAutor = estados_nordeste, itens = 100) %>%
  glimpse()
## Observations: 758
## Variables: 7
## $ ano       <int> 2009, 2009, 2009, 2009, 2010, 2011, 2011, 2011, 2011...
## $ ementa    <chr> "Concede isenção do Imposto de Importação e do Impos...
## $ id        <int> 436645, 458615, 460518, 465295, 465986, 510823, 5210...
## $ idTipo    <int> 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 13...
## $ numero    <int> 5320, 6363, 6445, 6707, 6785, 1735, 2395, 2699, 2816...
## $ siglaTipo <chr> "PL", "PL", "PL", "PL", "PL", "PL", "PL", "PL", "PL"...
## $ uri       <chr> "https://dadosabertos.camara.leg.br/api/v2/proposico...

Por autor e ID autor

Essa busca utiliza os parâmetros autor e idAutor. São retornadas as proposições que sofreram mudanças nos últimos 15 dias cujos autores se encontram na lista de busca.

autores <- c("Luiza Erundina", "Pedro Fernandes", "Haroldo Lima", "Jandira")

tryCatch(
  fetch_proposicao(autor = autores) %>%
    glimpse(), error = function(e){}
)
## Observations: 60
## Variables: 7
## $ ano       <int> 1999, 1999, 1999, 1999, 2000, 2000, 1999, 1999, 1999...
## $ ementa    <chr> "Dá nova redação ao § 2º do art. 61 da Constituição ...
## $ id        <int> 14244, 14266, 14444, 14465, 14569, 14644, 15878, 169...
## $ idTipo    <int> 136, 136, 136, 136, 136, 136, 139, 139, 139, 139, 13...
## $ numero    <int> 2, 19, 139, 151, 221, 275, 797, 1604, 1693, 1694, 20...
## $ siglaTipo <chr> "PEC", "PEC", "PEC", "PEC", "PEC", "PEC", "PL", "PL"...
## $ uri       <chr> "https://dadosabertos.camara.leg.br/api/v2/proposico...