Skip to content
 
 

Repository files navigation

SIGPS — Backend

API REST do SIGPS (Sistema Inteligente de Gestão e Priorização na Saúde), desenvolvida em Python/Flask. Responsável por autenticação JWT, regras de negócio clínicas, persistência via SQLAlchemy e integração com o microserviço de Machine Learning para priorização da fila.

Deploy em container: DOCKER.md


Índice

  1. Visão geral
  2. Stack tecnológica
  3. Arquitetura do backend
  4. Modelo de domínio
  5. Módulos da API (telas/consumidores)
  6. Fluxogramas
  7. Como executar
  8. Estrutura do projeto

Visão geral

O backend expõe endpoints versionados em /api/v1/*, documentados no Swagger (/docs). Cada blueprint agrupa um domínio funcional consumido pelo frontend Angular.

flowchart LR
    FE[SIGPS-Frontend] -->|REST + JWT| BE[SIGPS-Backend :5000]
    BE --> DB[(MySQL / SQLite)]
    BE -->|POST /predict| ML[SIGPS-ML :8000]
    BE --> SMTP[E-mail SMTP]
Loading

Stack tecnológica

Tecnologia Uso
Python 3.8+ Linguagem base
Flask 3 Framework web e blueprints
Flask-SQLAlchemy ORM
Flask-JWT-Extended Autenticação stateless
Flask-CORS Política de origens
Flask-Limiter Rate limiting
PyMySQL Driver MySQL em produção
Werkzeug Hash de senhas
Requests Cliente HTTP para API de ML
Gunicorn Servidor WSGI (produção)
python-dotenv Variáveis de ambiente

Arquitetura do backend

Padrão Application Factory com separação de rotas (controladores), modelos e utilitários.

flowchart TB
    subgraph Entrada["Camada de entrada"]
        RT[Blueprints / Rotas]
        JWT[JWT + Rate Limit]
        CORS[CORS]
    end

    subgraph Negocio["Camada de negócio"]
        UTIL[utils: fila, e-mail, perfil, CNPJ...]
    end

    subgraph Persistencia["Persistência"]
        MD[models.py]
        DB[(SQLAlchemy)]
    end

    subgraph Externos["Serviços externos"]
        ML[ML API FastAPI]
        MAIL[SMTP]
    end

    RT --> JWT
    RT --> UTIL
    UTIL --> MD
    MD --> DB
    UTIL --> ML
    UTIL --> MAIL
Loading

Diagrama de classes — camada de serviço (simplificado)

classDiagram
    class FlaskApp {
        +create_app()
        +register_blueprints()
    }
    class AuthBlueprint {
        +login()
        +register()
        +refresh()
    }
    class FilaBlueprint {
        +check_in()
        +listar()
        +atualizar_status()
    }
    class FilaHelpers {
        +calcular_prioridade_paciente()
        +reordenar_fila()
    }
    class User
    class Paciente
    class FilaAtendimento

    FlaskApp --> AuthBlueprint
    FlaskApp --> FilaBlueprint
    FilaBlueprint --> FilaHelpers
    FilaHelpers --> Paciente
    FilaBlueprint --> FilaAtendimento
    AuthBlueprint --> User
Loading

Modelo de domínio

Entidades principais em app/models.py:

erDiagram
    users ||--o| pacientes : "1:1"
    users ||--o| especialistas : "1:1"
    users ||--o{ organizations : "owner"
    organizations ||--o{ organization_users : "membros"
    organizations ||--o{ patient_organizations : "pacientes vinculados"
    pacientes ||--o{ fila_atendimento : "check-in"
    organizations ||--o{ fila_atendimento : "contexto"
    especialistas ||--o{ agendas : "disponibilidade"
    agendas ||--o{ consultas : "slots"
    pacientes ||--o{ exames : "anexos"
    pacientes ||--o{ prontuarios : "histórico"
    users ||--o{ chat_messages : "conversas"
    users ||--o{ notifications : "alertas"
Loading
Entidade Tabela Descrição
User users Credenciais, perfil (RBAC), foto
Paciente pacientes CPF, comorbidades, dados clínicos
Especialista especialistas CRM/conselho, especialidade, verificação
Organization organizations Clínica, consultório ou autônomo
FilaAtendimento fila_atendimento Prioridade 1–3, status, organização
Agenda / Consulta agendas, consultas Agendamentos
Prontuario prontuarios Anotações e receitas
Exame exames Upload binário no banco
ChatMessage chat_messages Mensagens entre usuários

Módulos da API (telas/consumidores)

Correspondência entre endpoints e telas do frontend:

Blueprint Prefixo Telas que consomem
auth /api/v1/auth Login, Cadastro, Esqueci/Redefinir senha
pacientes /api/v1/patients Pacientes, Portal (ficha)
organizations /api/v1/organizations Explorar clínicas, Minha clínica
fila /api/v1/queue Fila de espera, Gestão IA
agendas /api/v1/schedules Agendamentos (todos os perfis)
exames /api/v1/exams Exames
chat /api/v1/chat Chat
perfil /api/v1/perfil Meu perfil, verificação
specialists /api/v1/specialists Especialistas, Busca profissionais
dashboards /api/v1/dashboards Dashboard
relatorios /api/v1/relatorios Relatórios
prontuarios /api/v1/medical-records Prontuário (atendimento)
admin /api/v1/admin Configurações / administração
notifications /api/v1/notifications Sininho do painel

Representação visual — camadas da requisição

block-beta
    columns 1
    block:client:1
        fe["Angular Service"]
    end
    block:http:1
        req["HTTP + Authorization: Bearer JWT"]
    end
    block:route:1
        bp["Blueprint → validação JWT/perfil"]
    end
    block:logic:1
        util["Utils / regra de negócio"]
    end
    block:data:1
        orm["SQLAlchemy → MySQL"]
    end
Loading

Fluxogramas

Fluxo de login e emissão de token

sequenceDiagram
    participant C as Cliente
    participant A as auth.py
    participant DB as Banco

    C->>A: POST /login {email, senha}
    A->>DB: Busca User
    A->>A: check_password()
    alt OK
        A->>A: create_access_token()
        A-->>C: 200 + JWT
    else Falha
        A-->>C: 401
    end
Loading

Fluxo de check-in na fila com IA

flowchart TD
    A[POST /queue/check-in] --> B[Carrega Paciente + Organization]
    B --> C[fila_helpers.calcular_prioridade_paciente]
    C --> D{ML API disponível?}
    D -->|Sim| E[POST ML /predict]
    E --> F[prioridade 1, 2 ou 3]
    D -->|Não| G[Fallback por regras locais]
    G --> F
    F --> H[Insere FilaAtendimento]
    H --> I[Reordena fila da organização]
    I --> J[Resposta JSON ao frontend]
Loading

Fluxo de cadastro de paciente (autocadastro)

flowchart LR
    A[POST /auth/register] --> B[Cria User perfil=Paciente]
    B --> C[flush → user_id]
    C --> D[Cria Paciente vinculado]
    D --> E[commit transação]
    E --> F[JWT + boas-vindas opcional]
Loading

Fluxo de autorização (RBAC)

flowchart TD
    R[Requisição] --> J{@jwt_required?}
    J -->|Token inválido| E401[401]
    J -->|OK| P{Perfil permitido?}
    P -->|Não| E403[403]
    P -->|Sim| OK[Executa endpoint]
Loading

Funcionalidades implementadas

  • Autenticação: registro, login, refresh, recuperação de senha, /me
  • Pacientes: listagem, detalhes, completar perfil clínico, exclusão
  • Organizações: CRUD, convites, membros, exploração pública
  • Fila: check-in, listagem ordenada por prioridade, status, análise IA (/ai-analysis)
  • Agendas e consultas: slots, agendamento, cancelamento, status
  • Exames: upload, listagem, download, exclusão
  • Chat: conversas, mensagens, leitura, limpeza
  • Prontuários: CRUD por organização
  • Admin: usuários, perfis, verificações pendentes
  • Notificações: listagem e marcar como lidas
  • Integração ML: ML_API_URL → priorização automática na fila

Como executar

Pré-requisitos

  • Python 3.8+
  • MySQL (produção) ou SQLite (desenvolvimento)

Ambiente local

python -m venv .venv
# Windows
.venv\Scripts\activate
# Linux/Mac
source .venv/bin/activate

pip install -r requirements.txt
cp .env.example .env
# Edite SECRET_KEY, JWT_SECRET_KEY, DATABASE_URL ou DB_*

python run.py
  • API: http://localhost:5000
  • Health: GET /health
  • Swagger: http://localhost:5000/docs

Variáveis importantes (.env)

Variável Descrição
DATABASE_URL String SQLAlchemy (SQLite/MySQL)
JWT_SECRET_KEY Chave de assinatura do token
ML_API_URL Ex.: http://127.0.0.1:8000/predict
CORS_ORIGINS Origens permitidas do frontend
SMTP_* Envio de e-mails (recuperação de senha)

Docker

docker compose up -d --build
# Produção
docker compose -f docker-compose.prod.yml up -d --build

Estrutura do projeto

app/
├── __init__.py          # Application Factory
├── config.py            # Configurações por ambiente
├── extensions.py        # db, jwt, cors, limiter
├── models.py            # Entidades SQLAlchemy
├── routes/              # Blueprints (API v1)
│   ├── auth.py
│   ├── pacientes.py
│   ├── fila.py
│   ├── agendas.py
│   ├── organizations.py
│   └── ...
├── utils/               # Regras auxiliares (fila, e-mail...)
└── security/            # Rate limit
run.py                   # Ponto de entrada
requirements.txt

Módulos relacionados

Repositório Função
SIGPS-Frontend Interface Angular
SIGPS-Machine-Learning API de inferência /predict

Equipe

Projeto desenvolvido como Trabalho de Conclusão de Curso (TCC) pela Faculdade Metropolitana de Manaus, pelos integrantes:

  • Josias Azevedo da Silva
  • Matheus Akabane Brazão
  • Kaio Oliveira Pantoja
  • Alan Nicolas Santos Maragua
  • Olliver de Aquino Freitas

Orientação

Professora orientadora: Luana Magalhães Leal


SIGPS — Trabalho de Conclusão de Curso · API REST · Gestão e priorização na saúde

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages