Clinica On-Line

Overview

View only
Clinica On-Line
members
2
scrumban
 
public
 

Objetivo: Criar uma plataforma de consultório médico virtual com funcionalidades de atendimento por videoconferência, chamada de voz e chat.

Requisitos Básicos do Projeto

Segue alguns detalhamentos e ferramentas para a implementação:

1. Estrutura do Backend

Precisará de um servidor robusto para lidar com o gerenciamento de usuários, agendamentos e notificações. Este servidor também irá interagir com o banco de dados para armazenar informações de usuários, médicos, horários de consultas, e registros de saúde, se aplicável.

  • Banco de Dados: PostgreSQL é uma escolha robusta para trabalhar com grandes volumes de dados e necessitar de recursos como transações complexas. Para um primeiro momento acho que o MySQL é uma opção mais simples e eficaz, além de não necessitar de um servidor robusto.

  • API: Uma API RESTful em GoLang oferece uma boa performance e facilidade de manuseio de concorrência. Planejo usar o framework Echo para facilitar o roteamento e a middleware.

2. Autenticação e Gerenciamento de Usuários

Para a autenticação e notificações implementar soluções próprias em GoLang, utilizando bibliotecas como jwt-go para JWTs e gorilla/websocket para comunicações em tempo real. Alternativamente, o Firebase pode ser uma escolha conveniente, pois já vem com muitas funcionalidades prontas e é fácil de integrar.

3. Agendamento e Notificações

  • Agendamento: Implementar um sistema que permita aos usuários visualizar os horários disponíveis dos médicos e agendar uma consulta. O médico pode então confirmar ou cancelar a consulta com base em sua disponibilidade.
  • Notificações: Utilizar serviços como Firebase Cloud Messaging (FCM) para enviar notificações push a usuários e médicos sobre atualizações de agendamento.

4. Videoconferência

  • WebRTC: Para o streaming de vídeo e áudio, o WebRTC pode ser utilizado diretamente. Acho que será necessário configurar um servidor de sinalização para orquestrar as conexões entre os pares e, possivelmente, servidores TURN para lidar com clientes atrás de NATs.

5. Interface do Usuário

  • Frontend: Para a criação das interfaces do usuário será empregado o Flutter, com o desenvolvimento de um código base para as plataformas iOS, Android e Web.

6. Conformidade Legal e de Privacidade

  • LGPD: Certificar o aplicativo para estar em conformidade com as regulamentações locais de proteção de dados.

Orientações para Implementação de Projeto

Para implementar uma arquitetura limpa e eficiente para ambos, backend e frontend do aplicativo, será empregado o padrão Repository. Este padrão ajuda a separar a lógica de negócios da lógica de acesso a dados, facilitando a manutenção e testabilidade do código, além de deixar mais fácil a troca de banco de dados num futuro.

Backend em GoLang com o Padrão Repository

Estrutura do Projeto:

  1. Modelos: Definir as estruturas de dados principais, como User, Doctor, Appointment, etc., que refletem as entidades do seu domínio e suas relações.
  2. Repositórios: Criar as interfaces de repositório que definam os métodos para acessar os dados das entidades. Por exemplo, UserRepository pode ter métodos como FindByID, Save, Update, e Delete.
  3. Implementações de Repositório: Forneça implementações concretas das interfaces do repositório. Aqui, implementará a lógica para acessar o banco de dados PostgreSQL ou MySQL.
  4. Serviços: Estes são responsáveis pela lógica de negócios. Eles utilizam os repositórios para recuperar dados e então aplicar regras de negócios.
  5. Controladores (ou Handlers): Gerenciam as requisições HTTP, chamando os serviços apropriados e retornando as respostas.

Ferramentas e Bibliotecas:

  • GORM ou SQLx para ORM ou acesso direto ao banco de dados, facilitando as implementações dos repositórios.
  • Gin ou Echo para roteamento e middleware, ajudando a definir os controladores.
  • Viper para gerenciamento de configurações ( é uma biblioteca popular em Go para gerenciar configurações de aplicativos de forma robusta e flexível. Ela suporta a leitura de configurações de múltiplas fontes, como arquivos JSON, TOML, YAML, HCL, e até variáveis de ambiente, facilitando a organização e a escalabilidade das configurações conforme o aplicativo cresce).

Frontend em Flutter com o Padrão Repository

Estrutura do Projeto:

  1. Modelos: Classes que representam entidades como User, Doctor, e Appointment.
  2. Repositórios: Interfaces que definem como os dados serão obtidos e manipulados, por exemplo, UserRepository.
  3. Implementações de Repositório: Por exemplo, ApiUserRepository que faz chamadas de rede para interagir com o backend.
  4. Blocos ou Provedores de Estado: Gerenciam o estado do UI baseado na entrada do usuário e na resposta dos repositórios.
  5. Widgets: Componentes UI que utilizam blocos ou provedores de estado para mostrar dados.

Ferramentas e Bibliotecas:

  • http para chamadas de rede.
  • provider ou flutter_bloc para gerenciamento de estado. Prefiro o flutter_bloc.
  • flutter_dotenv para gerenciar variáveis de ambiente. Ainda não usei mas é bem popular nos app flutter.
  • API de Conselho Federal de Medicina / Cadastro https://infosimples.com/consultas/cfm-cadastro/

Benefícios do Padrão Repository

  • Desacoplamento: Separação clara entre a lógica de negócios e a lógica de acesso a dados.
  • Testabilidade: Facilita a escrita de testes unitários e de integração.
  • Manutenibilidade: Facilita a manutenção e atualização do projeto ao longo do tempo.
  • Flexibilidade: Facilita a mudança da fonte de dados sem afetar outras partes do código.