-
Notifications
You must be signed in to change notification settings - Fork 0
Diagrama de Classes
Lucas Christian edited this page Mar 23, 2026
·
3 revisions
classDiagram
direction TB
%% Base comum (todas as entidades herdam estes campos)
class BaseEntity {
<<abstract>>
<<MappedSuperclass>>
-UUID id
-Instant createdAt
-Instant updatedAt
-Long version
}
class Utilizador {
<<Entity>>
-UUID id
-Instant createdAt
-Instant updatedAt
-Long version
-String nome
-String email
-String passwordHash
-String telefone
}
class Paciente {
<<Entity>>
-UUID id
-Instant createdAt
-Instant updatedAt
-Long version
-LocalDate dataNascimento
-String nif
-String numeroBeneficiario
}
class Medico {
<<Entity>>
-UUID id
-Instant createdAt
-Instant updatedAt
-Long version
-String especialidade
-String numeroOrdem
}
class Administrador {
<<Entity>>
-UUID id
-Instant createdAt
-Instant updatedAt
-Long version
-String cargo
}
class Organizacao {
<<Entity>>
-UUID id
-Instant createdAt
-Instant updatedAt
-Long version
-String nomeFantasia
-String cnpj
-byte[] logotipoImagem
-Map~String,Object~ configuracoesGlobais
}
class Unidade {
<<Entity>>
-UUID id
-Instant createdAt
-Instant updatedAt
-Long version
-String nome
-BigDecimal latitude
-BigDecimal longitude
}
class Consultorio {
<<Entity>>
-UUID id
-Instant createdAt
-Instant updatedAt
-Long version
-String nomeConsultorio
-String numeroSala
-String telefoneContato
}
class ConsultorioMedico {
<<Entity>>
-UUID id
-Instant createdAt
-Instant updatedAt
-Long version
-LocalDate dataInicio
-LocalDate dataFim
}
class Agenda {
<<Entity>>
-UUID id
-Instant createdAt
-Instant updatedAt
-Long version
-Set~DayOfWeek~ horarioTrabalho
-Set~BloqueioAgenda~ bloqueios
}
class Consulta {
<<Entity>>
-UUID id
-Instant createdAt
-Instant updatedAt
-Long version
-LocalDateTime dataHoraMarcacao
-EstadoConsulta estado
-String tipoConsulta
-String motivoCancelamento
-LocalDateTime canceladoEm
}
class ProcessoClinico {
<<Entity>>
-UUID id
-Instant createdAt
-Instant updatedAt
-Long version
-LocalDate dataCriacao
-TipoSanguineo tipoSangue
-Set~String~ alergias
}
class RegistroAtendimento {
<<Entity>>
-UUID id
-Instant createdAt
-Instant updatedAt
-Long version
-LocalDateTime dataRegistro
-String anamnese
-String sintomas
-String diagnostico
-String notasClinicas
}
class DocumentoMedico {
<<Entity>>
-UUID id
-Instant createdAt
-Instant updatedAt
-Long version
-TipoDocumento tipo
-LocalDate dataEmissao
-String assinaturaDigital
}
class Convenio {
<<Entity>>
-UUID id
-Instant createdAt
-Instant updatedAt
-Long version
-String nomeFantasia
-TipoConvenio tipo
-String registroEntidadeReguladora
-Boolean ativo
}
class ProcedimentoPreco {
<<Entity>>
-UUID id
-Instant createdAt
-Instant updatedAt
-Long version
-String codigoProcedimento
-String descricao
-BigDecimal valorTotal
-BigDecimal valorUtente
-BigDecimal valorSeguradora
}
class Pagamento {
<<Entity>>
-UUID id
-Instant createdAt
-Instant updatedAt
-Long version
-BigDecimal valor
-LocalDate dataVencimento
-EstadoPagamento estado
-String metodoPagamento
}
class Endereco {
<<Embeddable>>
-String logradouro
-String numero
-String bairro
-String cidade
-UF uf
-String cep
-String complemento
}
class BloqueioAgenda {
<<Embeddable>>
-LocalDateTime inicio
-LocalDateTime fim
-EscopoBloqueioAgenda escopo
}
class EstadoConsulta {
<<Enumeration>>
AGENDADA
CONFIRMADA
EM_ESPERA
EM_ATENDIMENTO
FINALIZADA
CANCELADA
}
class TipoConvenio {
<<Enumeration>>
PARTICULAR
SEGURO_SAUDE
ESTATAL
PRO_BONO
}
class TipoDocumento {
<<Enumeration>>
RECEITA
ATESTADO
RELATORIO
ENCAMINHAMENTO
OUTRO
}
class TipoSanguineo {
<<Enumeration>>
O_POSITIVO
O_NEGATIVO
A_POSITIVO
A_NEGATIVO
B_POSITIVO
B_NEGATIVO
AB_POSITIVO
AB_NEGATIVO
}
class EstadoPagamento {
<<Enumeration>>
PENDENTE
PROCESSADO
ATRASADO
CANCELADO
ESTORNADO
}
class EscopoBloqueioAgenda {
<<Enumeration>>
MEDICO
CONSULTORIO
}
class UF {
<<Enumeration>>
AC
AL
AP
AM
BA
CE
DF
ES
GO
MA
MT
MS
MG
PA
PB
PR
PE
PI
RJ
RN
RS
RO
RR
SC
SP
SE
TO
}
%% Heranca da base
BaseEntity <|-- Utilizador
BaseEntity <|-- Paciente
BaseEntity <|-- Medico
BaseEntity <|-- Administrador
BaseEntity <|-- Organizacao
BaseEntity <|-- Unidade
BaseEntity <|-- Consultorio
BaseEntity <|-- ConsultorioMedico
BaseEntity <|-- Agenda
BaseEntity <|-- Consulta
BaseEntity <|-- ProcessoClinico
BaseEntity <|-- RegistroAtendimento
BaseEntity <|-- DocumentoMedico
BaseEntity <|-- Convenio
BaseEntity <|-- ProcedimentoPreco
BaseEntity <|-- Pagamento
%% Identidade e organizacao
Paciente "1" --> "1" Utilizador : utiliza
Medico "1" --> "1" Utilizador : utiliza
Administrador "1" --> "1" Utilizador : utiliza
Organizacao "1" *-- "0..*" Unidade : contem
Organizacao "1" *-- "0..*" Convenio : contem
Organizacao "1" --> "0..*" Administrador : administradores
Unidade "1" *-- "0..*" Consultorio : contem
Unidade "1" *-- "1" Endereco : endereco
%% Agenda e vinculacoes
Consultorio "1" *-- "0..*" ConsultorioMedico : vinculos
Medico "1" --> "0..*" ConsultorioMedico : vinculos
ConsultorioMedico "1" --> "0..1" Agenda : agenda
Agenda "1" o-- "0..*" BloqueioAgenda : bloqueios
%% Atendimento
Paciente "1" --> "0..*" Consulta : consultas
Medico "1" --> "0..*" Consulta : consultas
Consultorio "1" --> "0..*" Consulta : consultas
Convenio "1" --> "0..*" Consulta : consultas
ConsultorioMedico "1" --> "0..*" Consulta : vinculacao
Utilizador "1" --> "0..*" Consulta : canceladoPor
Consulta "1" *-- "0..*" DocumentoMedico : documentos
Consulta "1" --> "0..1" RegistroAtendimento : registro
Consulta "1" --> "0..1" Pagamento : pagamento
ProcessoClinico "1" o-- "0..*" RegistroAtendimento : registros
ProcessoClinico "1" --> "1" Organizacao : organizacao
Paciente "1" --> "0..1" ProcessoClinico : processoClinico
%% Faturamento
Convenio "1" *-- "0..*" ProcedimentoPreco : procedimentos
%% Uso de enums e value objects
Paciente "1" *-- "1" Endereco : endereco
Endereco "1" --> "1" UF : uf
Consulta "1" --> "1" EstadoConsulta : estado
DocumentoMedico "1" --> "1" TipoDocumento : tipo
ProcessoClinico "1" --> "1" TipoSanguineo : tipoSangue
Convenio "1" --> "1" TipoConvenio : tipo
Pagamento "1" --> "1" EstadoPagamento : estado
BloqueioAgenda "1" --> "1" EscopoBloqueioAgenda : escopo