Pular para conteúdo

Diagrama da Arquitetura - LegisKids v2

Link do Figma: https://www.figma.com/board/5qqctfNDqw7eqWz6PsKYfS/arquitetura_diagrama_v2?node-id=0-1&t=tOb76BxZKqqiHhOT-1

Este diagrama será construído com base na estrutura do projeto, para facilitar o entendimento e desenvolvimento. Com o decorrer das Sprints, vamos atualizando o diagrama de acordo com as necessidades identificadas.

O sistema tem como objetivo principal consumir dados públicos da Câmara dos Deputados do Brasil, tratá-los e disponibilizá-los de forma eficiente ao usuário, permitindo também personalização via favoritos, histórico e notificações.

O objetivo é estabelecer um fluxo simples, performático e escalável o suficiente, garantindo boa experiência para o usuário e facilidade de manutenção.


Tecnologias definidas

Frontend

  • HTML
  • CSS
  • JavaScript
  • Fetch API

Backend

  • Python
  • Flask

Autenticação

  • OAuth 2.0 (Google)

IA

  • spaCy / transformers (ainda em estudo para definição final)

Banco de Dados

  • PostgreSQL (em validação final)
  • SQLAlchemy
  • psycopg

Arquitetura do sistema

A arquitetura será baseada em camadas, com separação clara de responsabilidades.

1. Frontend (Interface)

Responsável por:

  • dashboards
  • filtros
  • visualização

2. Backend (Aplicação)

Responsável por:

  • rotas
  • controllers
  • controle do fluxo

3. Negócio (Services)

Responsável por:

  • regras de negócio
  • processamento dos dados
  • integração com IA

4. Dados (Repositories)

Responsável por:

  • acesso ao banco de dados
  • consumo da API externa

5. Infraestrutura

Responsável por:

  • banco de dados
  • configurações
  • autenticação

Fluxo principal do sistema

O fluxo padrão de requisição será:

Usuário
Frontend (HTML/CSS/JS)
Fetch API
Backend (Flask)
Routes
Controllers
Services
Repositories
Banco de Dados
Resposta JSON
Frontend

O frontend nunca acessa a API externa diretamente.


Fluxos do usuário

Login

O login será feito via Google utilizando OAuth 2.0:

Usuário
Frontend
Login com Google
Backend recebe token
Valida token
Busca ou cria usuário
Cria sessão
Usuário autenticado

Usuário acessa dashboard
Frontend envia requisição
Backend processa
Banco retorna dados já tratados
Frontend renderiza

Favoritos

Usuário favorita proposição
Backend registra em favoritos (user_id, proposicao_id)

Histórico

Usuário interage
Backend registra evento no historico

Notificações

Proposição é atualizada
Sistema identifica usuários que favoritaram
Cria notificações
Usuário visualiza no sistema

Fluxo de dados (ETL)

A atualização dos dados é feita de forma assíncrona:

Scheduler
Backend
Consulta API da Câmara dos Deputados
Busca proposições com movimentação recente
Para cada proposição:
    Busca dados completos
    Processa e normaliza
    Classifica com IA
    Atualiza banco

A estratégia adotada é buscar o que mudou recentemente via tramitações.

Observação importante

A API não fornece atualização global. Portanto:

  • usamos tramitação como proxy de mudança
  • aceitamos pequenas inconsistências pontuais

Isso é suficiente para dashboards e análise.


Integração dos fluxos

O sistema possui dois fluxos principais:

Assíncrono (dados): API → processamento → banco

Síncrono (usuário): login → navegação → interação

Ambos convergem no banco de dados estruturado.


Estrutura do projeto

project/
├── frontend/
├── backend/
│   ├── auth/
│   ├── routes/
│   ├── controllers/
│   ├── services/
│   ├── repositories/
│   ├── ai/
│   ├── models/
│   └── config/
└── database/

Estrutura de dados

  • proposicoes — dados tratados das proposições
  • users — usuários
  • favoritos — relação usuário e proposição
  • historico — interações
  • notificacoes — eventos

Todas as relações são feitas via user_id e proposicao_id.


Síntese

O sistema não consome dados em tempo real para o usuário. Os dados são preparados previamente e entregues prontos, resultando em:

  • alta performance
  • boa experiência
  • arquitetura simples e sólida