Skip to content

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
Loading

Clone this wiki locally