erDiagram
Psicologo ||--o{ Coordenacao : "(1,1)"
Coordenacao ||--|| Psicologo : "(1,1)"
Psicologo ||--o{ Sessao : "(1,1)"
Coordenacao ||--|| Sessao : "(1,1)"
Sessao ||--|| Coordenacao : "(0,n)"
Sessao ||--|| Psicologo : "(0,n)"
Sessao ||--|| Paciente : "(1,1)"
Coordenacao ||--|| Paciente : "(1,1)"
Usuario ||--o{ Paciente : "(1,1)"
Usuario ||--o{ Psicologo : "(1,1)"
Usuario ||--o{ Coordenacao : "(1,1)"
Psicologo {
string id_psicologo PK
string id_Coordenacao FK
string Nome
string Matricula
bool Ativo
}
Coordenacao {
string id_coordenacao PK
string Nome
string Matricula
string Cargo
bool Ativo
}
Sessao {
string id_sessao PK
string id_Coordenacao FK
string id_Psicologo FK
string id_Usuario FK
bool Horario_Confirmado
bool Ativo
}
Paciente {
string id_usuario PK
string id_Coordenacao FK
string id_Usuario FK
string Nome
string Telefone
date Disponibilidade_Data
time Disponibilidade_Horario
datetime Data_Registro
}
Usuario {
string id_usuario PK
string Login
string Senha
string Permissao
}
Projeto de aplicação web voltado para os alunos de Psicologia da faculdade que estagiam dentro do campus e que ainda utilizam métodos lentos e arcaicos de controle de consulta.
- Ao invés de utilizarem PDFs com extensas listas com informações perdíveis e apagadas, criaremos um sistema de cadastro e disponibilidade.
- O sistema visa permitir que os estagiários selecionem os pacientes com mais eficiência.
- O(A) Coordenador(a) poderá manter um controle mais fácil e acessível dos futuros profissionais e seus pacientes, gerando relatórios mais rápidos.
| Camada | Tecnologia |
|---|---|
| Frontend | React + JavaScript + Tailwind + Vite |
| Backend | Java + SpringBoot |
| Banco de Dados | MySQL |
| Autenticação | Spring Security (a ser implementado) |
- Agilizar e aprimorar os processos de agendamento entre pacientes e psicólogos.
- Criar uma ferramenta prática para o dia-a-dia dos estagiários.
- Facilitar a visualização e criação de relatórios para os gestores.
O sistema deve incluir as seguintes funcionalidades:
- Listagem de Pacientes: Visualização da lista de pacientes em formato de cartelas (cards).
- Disponibilidade: Visualização da disponibilidade de horários também em cartelas.
- Retorno de Pacientes Cadastrados: Funcionalidade para buscar pacientes já registrados.
- Métricas: Exibição da quantidade de pessoas atendidas.
- Relatórios: Controle e facilitação na geração de relatórios para a coordenação.
- A falta de comunicação entre os sistemas utilizado por eles.
Frontend:
/src: Código frontend/components: Componentes React/components:/calendar: Calendar components (MonthlyCalendar.jsx, PotentialPatientsGrid.jsx)/components:/common: Common components (Icons.jsx, PatientDetailSidebar.jsx)/components:/layouts: Sidebar component (Sidebar.jsx)/data: Dados mock (mockData.ts)/utils: Definições (dataUtil.js)/view: Dashboard overview (DashbooardView.jsx) Backend:
/src: codigo fonte/controller: controllers de serviço/domain:/dtos: todos os Dtos do sistema, dividido em request e response/domain:/dtos:/request: esquemas de dtos de ponto de pedido http (entrada de dados)/domain:/dtos:/response: esquemas de dtos de ponto de pedido http (saida de dados)/domain:/entity: todos os esquemas de entidades/infra: infraestrutura do sistema/infra:/cofig: configurações e segurança/infra:/mapper: logica de encapsulamento e transformação de dto(request) para entidade e entidade para dto (response)/infra:/repository: repositorios das entidades e ponto de acesso ao banco/infra:/service: camada de interface e implementação das interfaces para encapsular os metodos dos controllers/infra:/validate: camada de validação para o fluxo de informação
- Não há autenticação de usuário
| Entidade | Chaves/Atributos | Tipo de Dado | Descrição |
|---|---|---|---|
| Psicologo | id_psicologo (PK), id_Coordenacao (FK), Nome, Matricula, Ativo |
string, string, string, string, bool |
Profissional responsável pelo atendimento. |
| Coordenacao | id_coordenacao (PK), Nome, Matricula, Cargo, Ativo |
string, string, string, string, bool |
Responsável pela gestão/administração. |
| Sessao | id_sessao (PK), id_Coordenacao (FK), id_Psicologo (FK), id_Usuario (FK), Horario_Confirmado, Ativo |
string, string, string, string, bool, bool |
Registro de um agendamento/consulta. |
| Paciente | id_usuario (PK), id_Coordenacao (FK), id_Usuario (FK), Nome, Telefone, Disponibilidade_Data, Disponibilidade_Horario, Data_Registro |
string, string, string, string, string, date, time, datetime |
Dados do paciente. |
| Usuario | id_usuario (PK), Login, Senha, Permissao |
string, string, string, string |
Dados de acesso e autenticação do sistema. |
/dtoRequests: entrada de dados json-
/coordenacao:{"nome": "String", "email": "String", "matricula": "String"} -
/paciente:{ "nome": "String", "telefone": "String", "idCoordenacao": 0, -->requer valido "disponibilidadeData": "SEGUNDA", -->tipo enum "disponibilidadeHorario": "H0800" -->ex h 08:00 } -
/psicologo:{ "nome": "string", "matricula": "string", "idCoordenacao": 0 --> requer valido } -
/sessao:{ "idPsicologo": 0, --> requer valido "idPaciente":0, --> requer valido "idCoordenacao": 0, --> requer valido "dataHoraAgendada": "2025-12-02T07:02:21.376Z" --> hora de entrada de informação } -
/dtoResponses: web view -/coordenacao:{ "id": 0, "nome": "string", "matricula": "string", "email": "string" } -
/paciente:{ "id": 0, "idCoordenacao": 0, "nome": "string", "telefone": "string" } -
/psicologo:{ "id": 0, "idCoordenacao": 0, "nome": "string", "matricula": "string" } -
/sessao:{ "id": 0, "idPaciente": 0, "idPsicologo": 0, "idCoordenacao": 0, "dataHora": "2025-12-02T07:05:20.772Z", "status": "PENDENTE_APROVACAO", "dataAprovacao": "2025-12-02T07:05:20.772Z" }
-
- Integrar com backend
- Adicionar sistema de autenticação para múltiplos psicólogos
- Exportar relatórios de sessões em PDF
- Sistema de lembretes por email/SMS
- Histórico de sessões com anotações
Este documento define o sistema de design, tokens, padrões visuais e componentes utilizados no projeto.
- Guia de Estilo
- Configuração Tailwind
- Variáveis CSS
- Padrões de Componentes
- Ícones
- Layout e Responsividade
#3A0CA3- Roxo escuro (títulos e textos principais)#6A22FF- Roxo vibrante (botões ativos, ícones, hover states)#7645FF- Roxo médio#8B6CFF- Tom complementar
- Fundo principal:
linear-gradient(180deg, #6A22FF 0%, #3A0CA3 100%) - Avatares:
linear-gradient(90deg, #6A22FF 0%, #3A0CA3 100%)
#FFFFFF- Fundo branco (cards e containers)#F7F7F8- Fundo do painel (hover states)#6B7280- Texto secundário#E6E7EA- Bordas sutis
- Principal:
rgba(18,18,18,0.06) - Sutil:
rgba(18,18,18,0.04)
Fonte: Inter (fallback: system-ui, -apple-system, "Segoe UI", Roboto)
Weights:
- 400 (regular)
- 500 (medium)
- 600 (semibold)
Tamanhos:
| Token | Tamanho | Classe Tailwind | Uso |
|---|---|---|---|
| xs | 12px | text-xs |
Labels pequenos |
| sm | 14px | text-sm |
Textos secundários |
| base | 16px | text-base |
Texto padrão |
| lg | 18px | text-lg |
Subtítulos |
| xl | 20px | text-xl |
Títulos |
| 2xl | 24px | text-2xl |
Títulos principais |
| 3xl | 30px | text-3xl |
Números grandes (estatísticas) |
Padrões:
- Títulos principais:
text-xl lg:text-2xl,font-semibold, cor#3A0CA3 - Textos secundários:
text-sm, cor#6B7280
| Token | Valor | Uso |
|---|---|---|
| spacing-1 | 4px | Espaçamento mínimo |
| spacing-2 | 8px | Espaçamento pequeno |
| spacing-3 | 12px | Espaçamento médio |
| spacing-4 | 16px | Espaçamento base |
| spacing-5 | 20px | Espaçamento grande |
| spacing-6 | 24px | Espaçamento extra |
Border Radius:
- Base:
12px(rounded-xl)
Gaps e Padding:
- Gap sidebar/conteúdo:
16pxmobile (gap-4),24pxdesktop (gap-6) - Padding container:
16pxmobile (p-4),24pxdesktop (p-6)
| Nome | Valor | Uso |
|---|---|---|
| card | 0 6px 18px rgba(18,18,18,0.06) |
Cards principais e containers |
| subtle | 0 2px 6px rgba(18,18,18,0.04) |
Cards secundários e elementos menores |
Adicione ao seu tailwind.config.js:
module.exports = {
content: ["./src/**/*.{js,jsx,ts,tsx,html}"],
theme: {
extend: {
colors: {
purple900: "#3A0CA3",
purple700: "#6A22FF",
purple600: "#7645FF",
purple500: "#8B6CFF",
panel: "#F7F7F8",
},
borderRadius: {
xl: "12px",
},
boxShadow: {
soft: "0 6px 18px rgba(18,18,18,0.06)",
thin: "0 2px 6px rgba(18,18,18,0.04)",
},
},
},
plugins: [],
};Adicione ao seu index.css:
:root {
--purple-900: #3a0ca3;
--purple-700: #6a22ff;
--purple-600: #7645ff;
--panel: #f7f7f8;
--bg: #ffffff;
--muted: #6b7280;
--border: #e6e7ea;
}
.btn-primary {
background: var(--purple-700);
color: white;
padding: 0.6rem 1rem;
border-radius: 9999px;
}- Fundo: Gradiente vertical roxo (
linear-gradient(180deg, #6A22FF 0%, #3A0CA3 100%)) - Sistema de colunas: Sidebar 25% (3/12), Conteúdo 75% (9/12)
- Fundo: Branco
- Border radius:
rounded-xl - Sombra: Suave
- Padding:
16px
- Borda:
1px solid #E6E7EA - Sombra:
0 2px 6px rgba(18,18,18,0.04) - Padding:
12px - Avatar: Gradiente horizontal roxo
- Ícones:
w-6 h-6,strokeWidth 2.5 - Hover: Fundo cinza claro
- Item ativo: Fundo roxo sólido (
#6A22FF), texto branco,rounded-full
- Fundo: Branco
- Border radius:
rounded-xl - Sombra: Suave
- Padding: Responsivo (
p-4 lg:p-6)
- Fundo: Branco
- Borda:
#E6E7EA - Sombra:
0 6px 18px rgba(18,18,18,0.06) - Padding: Responsivo
- Ícones: Fundo roxo sólido (
#6A22FF)
- Borda: Tracejada
- Hover: Borda roxo, fundo
#F7F7F8
| Contexto | Tamanho | Stroke Width |
|---|---|---|
| Sidebar menu | w-6 h-6 (24px) |
2.5 |
| Cards de estatística | w-5 h-5 lg:w-6 lg:h-6 |
2 |
| Botões de ação | w-5 h-5 (20px) |
2 |
| Ícones pequenos | w-4 h-4 (16px) |
2 |
- Cards: Fundo roxo sólido (
#6A22FF), ícone branco - Sidebar ativos: Branco sobre fundo roxo
- Sidebar inativos: Cinza (
#6B7280)
- Container principal:
min-h-screencom paddingp-4 lg:p-6 - Fundo: Gradiente vertical roxo
- Grid: Flexbox com
gap-4 lg:gap-6 - Sidebar:
w-3/12(25%) em desktop, drawer em mobile - Conteúdo:
w-9/12(75%) em desktop, full width em mobile
- Mobile:
< 1024px- Sidebar como drawer, padding reduzido - Desktop:
>= 1024px(lg:) - Layout lado a lado, padding ampliado
- Mobile:
h-[calc(100vh-2rem)] - Desktop:
h-[calc(100vh-3rem)]
- Layout totalmente responsivo com breakpoints do Tailwind (
sm/md/lg/xl) - Mantenha tokens de cor em
tailwind.configou variáveis CSS para fácil manutenção - Use SVG inline com
strokeWidthadequado para consistência - Item ativo no menu:
bg-[#6A22FF]comtext-white - Cards sempre têm borda (
#E6E7EA) e sombra apropriada - Espaçamentos responsivos:
p-4 lg:p-6para padding adaptativo - Ícones NÃO devem usar gradientes, apenas cores sólidas
Padrão standardizado para botão de voltar:
<div
className="hidden lg:block absolute left-6 bottom-6 px-4 py-2 rounded-full bg-[#6A22FF] text-white border border-[#6A22FF] hover:bg-[#3A0CA3] font-medium shadow-thin transition"
style={{ zIndex: 20 }}
>
<BackButton
label="Voltar"
to="/caminho/destino"
className="flex items-center gap-2 text-white hover:text-white/80"
/>
</div>Versão: 1.0
Última atualização: Dezembro 2025