CamaraDosDeputados / dados-abertos

Repositório do serviço de Dados Abertos da Câmara. Consulte as "Issues" para atendimento a dúvidas e sugestões.
http://dadosabertos.camara.leg.br
197 stars 13 forks source link

Consulta de pautas na API nova #148

Open henriquecoutobsb opened 6 years ago

henriquecoutobsb commented 6 years ago

Problema

Atualmente consultamos as pautas na versão original dos Dados Abertos e precisamos realizar a mesma consulta utilizando API nova, mas não identificamos como fazer isto.

Exemplo

As pautas da CCJC entre 01/03/2017 e 31/05/2017 podem ser obtidas aqui.

Nova API

Eventos

Se utilizo o serviço de eventos há resultados, porém nenhum evento do tipo Reunião Deliberativa Ordinária está presente. Também não há um elemento proposicoes no XML, mas esta informação está disponível na versão original dos Dados Abertos.

Orgãos

Se utilizo o serviço de órgãos buscando por Reunião Deliberativa e Sessão Deliberativa o elemento dados do resultado está vazio.

Referências

Não localizamos nos tipos de evento Reunião Deliberativa Ordinária.

EquipeDadosAbertosCD commented 6 years ago

Olá, Henrique!

Tem havido nos últimos meses uma demanda crescente sobre as informações de pauta das reuniões dos órgãos da Câmara. O endpoint /eventos/{id}/pauta era o que estava sendo desenvolvido quando nos foi tirado o programador da API...

O retorno previsto pela especificação (aberto a sugestões) é o seguinte:

{
  "dados": [
    {
      "regime": "string",
      "ordem": 0,
      "proposicao_": {
        "id": 0,
        "uri": "string",
        "siglaTipo": "string",
        "idTipo": 0,
        "numero": 0,
        "ano": 0,
        "ementa": "string"
      },
      "relator": {
        "id": 0,
        "uri": "string",
        "nome": "string",
        "siglaPartido": "string",
        "uriPartido": "string",
        "siglaUf": "string",
        "idLegislatura": 0,
        "urlFoto": "string"
      },
      "uriParecer": "string",
      "parecerSintese": "string",
      "resultado": "string",
      "uriVotacao": "string"
    }
  ],
  "links": [
    {
      "rel": "string",
      "href": "string"
    }
  ]
}

O tipo de evento, conforme a base de dados e a aplicação que a alimenta, é só "Reunião Deliberativa" mesmo. No retorno de /eventos há sim alguns itens que trazem como título "reunião deliberativa ordinária". Mas acredito que, havendo interesse, podemos incluir facilmente na estrutura retornada algum campo que determine se o evento é ordinário ou extraordinário (além das reuniões de comissões, também podem ter essa classificação as sessões do Plenário, audiências públicas, sessões e reuniões não-deliberativas, comissões gerais, reuniões de instalação e de eleição das comissões, etc).

O endpoint /orgaos/{id}/eventos está fora da especificação, e apesar de o que diz a página Swagger que documenta o endpoint, ele ainda não foi implementado com parâmetros para alteração do intervalo de dados buscados. Os parâmetros de data que você experimentou são redondamente ignorados, e a lista só não retorna vazia se se houver na base eventos cadastrados de alguns dias antes e/ou alguns dias depois do dia da requisição. Os textos da especificação foram copiados para o código, o código foi mudado, e não houve atualização da documentação... Obrigado pelo aviso!

Abraço!

Fabricio Rocha Equipe Dados Abertos - Câmara

henriquecoutobsb commented 6 years ago

Caro Fabrício, muito obrigado pela resposta. Vamos começar a desenvolver utilizando a especificação prevista para /eventos. No retorno: "dados" é um array de proposições do evento (pauta). Correto?

Hoje o retorno é XML:

  <dados>
    <evento_>
      <id>50734</id>
      <uri>https://dadosabertos.camara.leg.br/api/v2/eventos/50734</uri>
      <dataHoraInicio>2018-03-13T17:30</dataHoraInicio>
      <dataHoraFim/>
      <descricaoSituacao>Convocada</descricaoSituacao>
      <descricaoTipo>Audiência Pública</descricaoTipo>
      <titulo>Audiência Pública Ordinária</titulo>
      <localExterno/>
      <localCamara>
        <nome>Anexo II, Plenário 12</nome>
        <predio/>
        <sala/>
        <andar/>
      </localCamara>
      <orgaos>
        <orgao_>
          <id>537963</id>
          <uri>https://dadosabertos.camara.leg.br/api/v2/orgaos/537963</uri>
          <sigla>CEXAGENT</sigla>
          <nome>Comissão Externa destinada a avaliar o crescente número de agentes de Segurança Pública mortos em serviço</nome>
          <apelido>AGENTES DE SEGURANÇA PÚBLICA MORTOS EM SERVIÇO</apelido>
          <idTipoOrgao>5</idTipoOrgao>
          <tipoOrgao>Comissão Externa</tipoOrgao>
        </orgao_>
      </orgaos>
    </evento_>
  </dados>

Será alterado para JSON? Não ficou claro para mim qual será o serviço que pesquisará as pautas por órgão e data e se será necessário utilizar outro serviço para recuperar os detalhes de uma determinada pauta.

EquipeDadosAbertosCD commented 6 years ago

Olá, Henrique!

Sim, o mesmo endpoint poderá retornar XML e JSON.

No retorno previsto para o endpoint /eventos/{id}/pauta, o elemento dados tem como valor um array em que cada item é um item de pauta de um evento. Os itens de pauta podem ser votados (e nesse caso aprovados ou rejeitados), retirados de pauta, não deliberados, etc etc -- uma série de situações.

Observe que, conceitualmente, isto não é a mesma coisa que uma lista de "fases de um evento". Seria isso o que você está buscando?

O exemplo que você mandou é o retorno de /eventos, e nesse caso, cada elemento do array dados é um conjunto reduzido de dados sobre cada evento que corresponda aos parâmetros passados pela query string. Seria uma lista de eventos, não uma lista de itens de pauta dos eventos.

Uma comparação direta entre a API antiga e a nova pode levar a uma grande confusão. No modelo da API nova, cada órgão pode realizar 0 ou mais eventos, e cada evento pode ser realizado por 1 ou mais órgão(s) (como as chamadas reuniões conjuntas, frequentemente feitas por duas ou mais comissões). São entidades bem distintas, portanto. Cada evento tem sua pauta, que neste modelo é uma lista de itens para deliberação. Na API antiga, essa separação das entidades não é tão explícita, o que costuma causar confusões entre coisas como votações e eventos, órgãos e eventos, itens de pauta e proposições, etc...

Abraço!

Fabricio Rocha Equipe Dados Abertos - Câmara

henriquecoutobsb commented 6 years ago

Fabrício,

Agora ficou mais claro pra mim. Consultando o exemplo da versão original dos dados abertos encontrei uma pauta com <codReuniao>28742</codReuniao> que também localizei na nova API. Consegui até mesmo pesquisar apenas os eventos dos tipos desejados. O que ainda falta ser implementado, neste caso, seria a chamada /eventos/28742/pauta que detalharia os itens do evento, cujo o formato de retorno previsto pela especificação foi informado por você anteriormente.

Creio que isto é suficiente para iniciarmos o desenvolvimento. Espero que o problema com a falta de programador seja resolvido em breve e /eventos/{id}/pauta seja implementado.

Não sei se você prefere fechar esta thread ou manter ela aberta até a implementação ser concluída. Na minha opinião, manter aberta tem a vantagem de permitir futuros questionamentos e complementos sobre este serviço de outros usuários sem que o histórico seja perdido. Caso discorde, fique a vontade para fechar.

EquipeDadosAbertosCD commented 6 years ago

Salve!

Pelo menos por ora, nada contra deixarmos em aberto! Sugestões e opiniões são sempre bem vindas!

Fabricio Rocha Equipe Dados Abertos - Câmara

EquipeDadosAbertosCD commented 6 years ago

Salve, Henrique!

O endpoint foi implementado na última versão da API. Dá uma olhada!

Abraço!

Fabricio Rocha Equipe Dados Abertos - Câmara