Skip to content

rmftelier/comoVotou

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

55 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

React Chakra UI Vercel Node.js TypeScript Express MongoDB GCP

🤔 Como Votou?

Como Votou? é uma plataforma web desenvolvida para facilitar a fiscalização dos representantes políticos no Congresso Nacional.

A aplicação é dividida em duas partes:

  • Front-end: desenvolvido em React com Chakra UI, hospedado na Vercel;
  • Back-end (API): construído em Node.js, com Express, TypeScript e MongoDB, hospedado no Google Cloud Platform (GCP).

O sistema consome a API Dados Abertos da Câmara dos Deputados para reunir informações sobre proposições, votações e o voto de cada deputado, além de oferecer um glossário de termos legislativos — tornando o acompanhamento político mais acessível e promovendo a participação social no processo democrático.

📑 Sumário


Instalação e Execução

API - Back-end

  1. Clone o repositório:

     git clone https://github.com/rmftelier/comoVotou
  2. Acesse a pasta do projeto:

     cd comoVotou/backend
  3. Instale as dependências:

     npm install
  4. No arquivo .env.example na raiz do projeto, adicione a variável necessária e renomeie-o para .env:

     MONGO_URL=mongodb+srv://<username>:<password>@<cluster-url>/<dbname>?retryWrites=true&w=majority&appName=<appname>
     PORT=8080
  5. Execute em modo desenvolvimento:

     npm run dev

Tip

A API é hospedada no Google Cloud Platform. Para testar localmente, utilize ferramentas como ThunderClient/Postman e para enviar requisições aos endpoints.

Front-end

  1. Acesse a pasta do front-end:

      cd ../frontend
  2. Instale as dependências:

      npm install
  3. Crie um arquivo .env com a URL da API:

      VITE_API_URL=https://<sua-api-no-gcp>.app
  4. Inicie o projeto em modo desenvolvimento:

      npm run dev

Documentação da API

A API possui os seguintes endpoints:

1. Proposições

GET /proposicoes

Retorna todas as proposições cadastradas.

  • Método: GET
  • Query Params (Opcionais): pagina, itens
  • Resposta de Sucesso (200 OK):
     {
       "dados": [
          {
              "id": 104402,
              "siglaTipo": "PRC",
              "numero": 4,
              "ano": 2003,
              "ementa": "Cria o Grupo Parlamentar do Turismo."
          },
          {
              "id": 104404,
              "siglaTipo": "PL",
              "numero": 35,
              "ano": 2003,
              "ementa": "Adiciona parágrafo ao art. 6º da Lei nº 9.870, de 23 de novembro de 1999."
          }
       ],
        "links": [
             {
                 "rel": "self",
                 "href": "https://dadosabertos.camara.leg.br/api/v2/proposicoes?pagina=1&itens=15"
             },
             {
                 "rel": "next",
                 "href": "https://dadosabertos.camara.leg.br/api/v2/proposicoes?pagina=2&itens=15"
             },
             {
                 "rel": "first",
                 "href": "https://dadosabertos.camara.leg.br/api/v2/proposicoes?pagina=1&itens=15"
             },
             {
                 "rel": "last",
                 "href": "https://dadosabertos.camara.leg.br/api/v2/proposicoes?pagina=3110&itens=15"
             }
         ]
     }

GET /proposicoes/:id

Retorna uma proposição específica pelo seu id.

  • Método: GET
  • Parâmetros da Rota: id: string
  • Resposta de Sucesso (200 OK):
     {
         "dados": {
             "id": 2500080,
             "siglaTipo": "PEC",
             "numero": 18,
             "ano": 2025,
             "ementa": "Altera os art. 21, art. 22, art. 23, art. 24 e art. 144 da Constituição, para dispor sobre competências da União, dos Estados, do Distrito Federal e dos Municípios relativas à segurança pública.",
             "dataApresentacao": "2025-04-24T08:51",
             "descricaoTipo": "Proposta de Emenda à Constituição",
             "statusProposicao": {
                 "dataHora": "2025-10-16T15:09",
                 "regime": "Especial (Art. 202 c/c 191, I, RICD)",
                 "descricaoTramitacao": "Apresentação de Requerimento",
                 "descricaoSituacao": "Aguardando Parecer",
                 "despacho": "Apresentação do REQ n. 82/2025 (Requerimento de Audiência Pública), pelo Deputado Jorge Solla (PT/BA -Fdr PT-PCdoB-PV), que \"Requer seja convidado o Secretário Nacional de Justiça, Jean Keiji Uema, para apresentar e debater com os membros desta Comissão Especial os objetivos da PEC 18/2025\".",
                 "ambito": "Regimental",
                 "apreciacao": "Proposição Sujeita à Apreciação do Plenário"
             },
             "ementaDetalhada": "",
             "texto": null,
             "justificativa": null
         }
     }
    

GET /proposicoes/:id/votacoes

Retorna as votações vinculadas à proposição cujo ID é passado como parâmetro.

  • Método: GET
  • Parâmetros da Rota: id: string
  • Resposta de Sucesso (200 OK):
     {
         "dados": [
             {
                 "id": "2500080-166",
                 "data": "2025-09-23",
                 "descricao": "Aprovado o requerimento nº 48/2025,da Sra. Alice Portugal que requer a participação de representação nacional dos policiais rodoviários federais e dos policiais ferroviários federais no Seminário Regional de Salvador (BA) destinado a debater a PEC nº 18/2025.",
                 "aprovacao": 1
             },
             {
                 "id": "2500080-137",
                 "data": "2025-09-16",
                 "descricao": "Aprovado o requerimento nº 21/2025,do Sr. Alberto Fraga que apresenta nomes de entidades políticas nacionais para serem ouvidas em audiência pública: Conselho Nacional de Secretários de Segurança Pública (CONSESP); Frente Nacional de Prefeitas e Prefeitos (FNP);  Confederação Nacional de Municípios (CNM);  União Nacional dos Legisladores e Legislativos Estaduais (Unale); e União dos Vereadores do Brasil (UVB).",
                 "aprovacao": 1
             }
         ]
     }

2. Votações

GET /votacoes/:id/votos

Retorna as votações vinculadas à proposição cujo ID foi passado como parâmetro.

  • Método: GET
  • Parâmetros da Rota: id: string
  • Resposta de Sucesso (200 OK):
     {
         "dados": [
             {
                 "tipoVoto": "Não",
                 "dataRegistroVoto": "2025-07-09T12:55:24",
                 "deputado_": {
                     "id": 73486,
                     "nome": "Pompeo de Mattos",
                     "siglaPartido": "PDT",
                     "siglaUf": "RS",
                     "urlFoto": "https://www.camara.leg.br/internet/deputado/bandep/73486.jpg"
                 }
             },
         ]
     }

3. Glossário

GET /glossario

Retorna todos os termos legislativos cadastrados no banco de dados.

  • Método: GET
  • Resposta de Sucesso (200 OK):
     [
       {
          "id": "68e6d1d67b3eaf3ce667a23c",
          "sigla": "PRC",
          "termo": "Projeto de Resolução da Câmara dos Deputados",
          "descricao": "Proposição destinada a elaboração de Resolução da Câmara dos Deputados.",
          "url": "https://www.congressonacional.leg.br/legislacao-e-publicacoes/glossario-legislativo/-/legislativo/termo/projeto_de_resolucao_da_camara_dos_deputados_prc"
       }
     ]

Tecnologias Utilizadas

  • Linguagem e ambiente: Node.js, TypeScript
  • Framework: Express
  • Banco de dados: MongoDB
  • Integrações: Axios / Mongoose
  • Front-end: React / Chakra UI
  • Deploy: API no Google Cloud Platform (GCP) e Front-end na Vercel

💌 Desenvolvido por Roberta Meyrelles

About

Plataforma web para acompanhar proposições e votações no Congresso Nacional, com detalhamento dos votos dos deputados e glossário de termos legislativos.

Topics

Resources

Stars

Watchers

Forks

Contributors