-
Notifications
You must be signed in to change notification settings - Fork 0
Diagrama de Classes
Lucas Christian edited this page Jun 3, 2026
·
7 revisions
classDiagram
direction TB
%% =========================
%% Base comum das entidades
%% =========================
class BaseEntity {
<<abstract>>
UUID id
String createdBy
Instant createdAt
String lastModifiedBy
Instant lastModifiedAt
Long version
}
%% =========================
%% Organização
%% =========================
class Organizacao {
String nome
String emailContato
String telefoneContato
byte[] logotipoImagem
String logotipoContentType
String corPrimaria
Boolean ativo
}
class Unidade {
UUID organizacaoId
String nome
String telefone
Boolean ativo
}
class Endereco {
<<Embeddable>>
String logradouro
String numero
String bairro
String cidade
String uf
String cep
String complemento
}
class Consultorio {
UUID unidadeId
String nome
String numeroSala
Boolean ativo
}
%% =========================
%% Usuários e perfis
%% =========================
class Usuario {
UUID organizacaoId
String keycloakId
PerfilUsuario perfil
Boolean ativo
}
class Paciente {
UUID usuarioId
LocalDate dataNascimento
String observacoes
}
class Medico {
UUID usuarioId
Boolean ativo
}
class Especialidade {
String nome
String descricao
Boolean ativo
}
class MedicoEspecialidade {
UUID medicoId
UUID especialidadeId
}
%% =========================
%% Agenda
%% =========================
class AlocacaoMedico {
UUID medicoId
UUID consultorioId
LocalDate dataInicio
LocalDate dataFim
Boolean ativo
}
class AgendaMedica {
UUID alocacaoMedicoId
DayOfWeek diaSemana
LocalTime horaInicio
LocalTime horaFim
Integer duracaoConsultaMinutos
Boolean ativo
}
class BloqueioAgenda {
UUID medicoId
UUID consultorioId
LocalDateTime inicio
LocalDateTime fim
String motivo
TipoBloqueioAgenda tipo
}
%% =========================
%% Consulta e atendimento
%% =========================
class Consulta {
UUID pacienteId
UUID medicoId
UUID consultorioId
UUID alocacaoMedicoId
UUID canceladoPorId
LocalDateTime dataHoraInicio
LocalDateTime dataHoraFim
StatusConsulta status
String tipoConsulta
String motivo
String observacaoCancelamento
LocalDateTime canceladoEm
}
class RegistroAtendimento {
UUID consultaId
UUID medicoId
LocalDateTime dataRegistro
String queixaPrincipal
String anamnese
String conduta
String observacoes
}
class AnexoConsulta {
UUID consultaId
String nomeArquivo
String contentType
Long tamanhoBytes
byte[] conteudo
String descricao
}
%% =========================
%% Enums
%% =========================
class PerfilUsuario {
<<Enumeration>>
ADMINISTRADOR
RECEPCIONISTA
MEDICO
PACIENTE
}
class StatusConsulta {
<<Enumeration>>
AGENDADA
CONFIRMADA
EM_ESPERA
EM_ATENDIMENTO
FINALIZADA
CANCELADA
NAO_COMPARECEU
}
class TipoBloqueioAgenda {
<<Enumeration>>
PAUSA
FERIAS
INDISPONIBILIDADE
OUTRO
}
%% =========================
%% Organização
%% =========================
Organizacao "1" *-- "0..*" Unidade : possui
Organizacao "1" --> "0..*" Usuario : usuarios
Unidade "1" *-- "1" Endereco : endereco
Unidade "1" *-- "0..*" Consultorio : consultorios
%% =========================
%% Perfis de usuário
%% =========================
Usuario "1" --> "0..1" Paciente : dadosPaciente
Usuario "1" --> "0..1" Medico : dadosMedico
%% =========================
%% Especialidades médicas
%% =========================
Medico "1" --> "0..*" MedicoEspecialidade : especialidades
Especialidade "1" --> "0..*" MedicoEspecialidade : medicos
%% =========================
%% Alocação e agenda
%% =========================
Medico "1" --> "0..*" AlocacaoMedico : alocacoes
Consultorio "1" --> "0..*" AlocacaoMedico : alocacoes
AlocacaoMedico "1" --> "0..*" AgendaMedica : agendas
Medico "1" --> "0..*" BloqueioAgenda : bloqueios
Consultorio "1" --> "0..*" BloqueioAgenda : bloqueios
%% =========================
%% Consulta
%% =========================
Paciente "1" --> "0..*" Consulta : consultas
Medico "1" --> "0..*" Consulta : consultas
Consultorio "1" --> "0..*" Consulta : consultas
AlocacaoMedico "1" --> "0..*" Consulta : origemAgenda
Usuario "1" --> "0..*" Consulta : canceladoPor
Consulta "1" *-- "0..1" RegistroAtendimento : registro
Medico "1" --> "0..*" RegistroAtendimento : registros
Consulta "1" *-- "0..*" AnexoConsulta : anexos