Um sistema abrangente de registro e monitoramento de problemas de saúde, construído com Django (backend) e React (frontend). O sistema suporta registro e monitoramento de diversos tipos de problemas de saúde com construtor de formulários dinâmicos (esquemas JSONB), gerenciamento de pacientes, controle de acesso baseado em funções e requisitos de campos condicionais.
Este sistema foi desenvolvido para facilitar o registro, monitoramento e acompanhamento de diversos problemas de saúde em ambiente clínico. Oferece funcionalidades avançadas como:
- Registro dinâmico de problemas de saúde: Suporta vários tipos de problemas com características únicas
- Construtor de formulários dinâmicos: Administradores podem criar formulários personalizados para cada tipo de problema de saúde
- Gerenciamento de pacientes: Dados pessoais completos, endereços e histórico de saúde
- Controle de acesso baseado em funções: Usuários podem registrar apenas os problemas de saúde para os quais têm permissão
- Campos condicionais: Suporte para campos que se tornam obrigatórios com base em valores de outros campos
- Design de nível empresarial: Interface clínica e profissional seguindo padrões healthcare
A aplicação é dividida em três camadas principais:
┌─────────────────────────────────────────────────────┐
│ Frontend (React + Vite) │
│ Porta: 5000 │
│ (Componentes shadcn/ui + TailwindCSS + wouter) │
└──────────────┬──────────────────────────────────────┘
│
┌─────────┴──────────┐
│ Express Server │
│ (Proxy + Assets) │
└─────────┬──────────┘
│
┌──────────────▼──────────────────────────────────────┐
│ Backend (Django REST Framework) │
│ Porta: 8000 │
│ (Autenticação via sessão + PostgreSQL) │
└─────────────────────────────────────────────────────┘
Tecnologias:
- Django REST Framework para endpoints de API
- PostgreSQL com abordagem híbrida relacional + JSONB
- Autenticação baseada em sessão (não JWT)
- Comando de seed para dados iniciais
Aplicações Django:
-
accounts - Gerenciamento de usuários e autorização
User- Modelo de usuário personalizado com email como usernameRole- Funções/papéis de usuário- Relação many-to-many com tipos de problemas de saúde (permissões)
-
patients - Gerenciamento de pacientes
Patient- Dados demográficos e informações de contato completasPatientAddress- Endereços dos pacientes
-
health_problems - Tipos de problemas de saúde e formulários dinâmicos
HealthProblemType- Define tipos de problemas (ex: Diabetes, Hipertensão) com esquemas JSONBPatientHealthProblem- Links entre pacientes e tipos de problemasFormQuestion- Questões de formulário individuaisFormResponse- Respostas do paciente aos formulários dinâmicosAuditLog- Registro de auditoria de todas as ações
-
core - Utilitários centrais
- Comandos de gerenciamento (seed data)
Tecnologias:
- Vite para desenvolvimento e build
- TanStack Query (React Query) para fetching de dados
- shadcn/ui para componentes reutilizáveis
- TailwindCSS para styling
- wouter para roteamento client-side
- React Hook Form com validação Zod
- Lucide React para ícones
Estrutura de pastas:
client/src/
├── components/ # Componentes reutilizáveis
├── pages/ # Páginas da aplicação
│ ├── dashboard/ # Dashboard principal
│ ├── patients/ # Gerenciamento de pacientes
│ ├── health-problems/ # Registro de problemas
│ └── form-builder/ # Construtor de formulários
├── context/ # Contexto da aplicação
├── hooks/ # Hooks customizados
├── lib/ # Utilitários e configurações
├── types/ # Tipos TypeScript
└── App.tsx # Componente raiz
- Funciona como proxy para encaminhar requisições
/apipara Django - Serve os arquivos estáticos do frontend Vite
- Gerencia a integração entre frontend e backend
- id: Integer (PK)
- email: String (unique)
- first_name: String
- last_name: String
- is_active: Boolean
- is_staff: Boolean
- created_at: DateTime
- updated_at: DateTime
- roles: ManyToMany
- health_problem_permissions: ManyToMany
- id: Integer (PK)
- full_name: String
- date_of_birth: Date
- gender: String
- email: String
- phone: String
- medical_record_id: String (unique)
- created_at: DateTime
- updated_at: DateTime
- addresses: OneToMany (PatientAddress)
- id: Integer (PK)
- name: String
- code: String (unique)
- description: String
- color: String (hex color)
- icon: String
- is_active: Boolean
- question_schema: JSONB (contém perguntas dinâmicas)
- schema_version: Integer
- created_by: ForeignKey (User)
- created_at: DateTime
- updated_at: DateTime
- id: Integer (PK)
- patient: ForeignKey
- health_problem_type: ForeignKey
- status: String (active/resolved/monitoring)
- severity: String (mild/moderate/severe)
- diagnosis_date: Date
- resolution_date: Date (nullable)
- registered_by: ForeignKey (User)
- created_at: DateTime
- updated_at: DateTime
- id: Integer (PK)
- patient_health_problem: ForeignKey
- answers: JSONB (respostas do formulário)
- schema_version: Integer
- submitted_by: ForeignKey (User)
- created_at: DateTime
- updated_at: DateTime
POST /api/auth/login/- Login do usuárioPOST /api/auth/logout/- Logout do usuárioGET /api/auth/profile/- Obter dados do usuário atual
GET /api/auth/users/- Listar usuáriosPOST /api/auth/users/{id}/toggle_active/- Ativar/desativar usuárioPOST /api/auth/users/{id}/assign_health_problems/- Atribuir permissões
GET /api/patients/patients/- Listar pacientesPOST /api/patients/patients/- Criar novo pacienteGET /api/patients/patients/{id}/- Obter detalhes do pacientePUT /api/patients/patients/{id}/- Atualizar paciente
GET /api/health-problems/types/- Listar tiposPOST /api/health-problems/types/- Criar novo tipoGET /api/health-problems/types/{id}/- Obter detalhes do tipoPUT /api/health-problems/types/{id}/- Atualizar tipoGET /api/health-problems/types/permitted/- Obter tipos permitidos para o usuárioPOST /api/health-problems/types/{id}/toggle_active/- Ativar/desativar tipo
GET /api/health-problems/patient-problems/- ListarPOST /api/health-problems/patient-problems/- Criar novoGET /api/health-problems/patient-problems/{id}/- Obter detalhesPOST /api/health-problems/patient-problems/{id}/update_status/- Atualizar statusPOST /api/health-problems/patient-problems/{id}/add_response/- Adicionar resposta de formulário
GET /api/health-problems/form-responses/- Listar respostasPOST /api/health-problems/form-responses/- Criar nova resposta
- Node.js (v18+)
- Python (v3.9+)
- PostgreSQL (incluído no Replit)
-
Clonar e instalar dependências
npm install pip install -r requirements.txt
-
Configurar banco de dados
python manage.py migrate python manage.py seed_data
-
Iniciar a aplicação
npm run dev
Isto irá:
- Iniciar o servidor Django na porta 8000
- Iniciar o servidor Express/Vite na porta 5000
- Disponibilizar a aplicação em http://localhost:5000
- Email: admin@health.com
- Senha: admin123
- Função: Administrador do Sistema
- Fonte: Inter
- Tema: Suporte para modo claro e escuro
- Componentes: shadcn/ui com TailwindCSS
- Design: Limpo e clínico, seguindo padrões healthcare de nível empresarial
- Autenticação baseada em sessão
- Proteção CSRF habilitada
- Validação de dados via Zod
- Controle de acesso baseado em funções
- Registro de auditoria de todas as ações
/
├── manage.py # Django management
├── requirements.txt # Dependências Python
├── package.json # Dependências Node
├── vite.config.ts # Configuração Vite
├── tailwind.config.ts # Configuração TailwindCSS
├── health_system/ # Configurações Django
│ ├── settings.py
│ ├── urls.py
│ ├── wsgi.py
│ └── asgi.py
├── accounts/ # App de autenticação/usuários
├── patients/ # App de gerenciamento de pacientes
├── health_problems/ # App de problemas de saúde
├── core/ # App com utilitários
├── client/ # Aplicação React
│ ├── src/
│ │ ├── components/
│ │ ├── pages/
│ │ ├── hooks/
│ │ ├── lib/
│ │ ├── types/
│ │ ├── App.tsx
│ │ └── main.tsx
│ └── index.html
└── server/ # Servidor Express
├── index.ts
├── routes.ts
└── vite.ts
- Usuário interage com o frontend → Componente React
- Frontend faz requisição → TanStack Query
- Express proxy encaminha → Django API
- Django processa → Valida, autentica, executa lógica
- Django retorna dados → JSON response
- Frontend atualiza estado → Re-render componentes
- UI atualizada → Usuário vê resultado
| Camada | Tecnologia |
|---|---|
| Frontend | React 18, Vite, TypeScript |
| UI | shadcn/ui, TailwindCSS, Lucide Icons |
| Data Fetching | TanStack Query v5 |
| Forms | React Hook Form + Zod |
| Routing | wouter |
| Backend | Django REST Framework |
| Database | PostgreSQL |
| Server | Express, Vite |
| Autenticação | Session-based |
Projeto desenvolvido para fins educacionais e de saúde.
Desenvolvido com ❤️ para a gestão eficiente de problemas de saúde