Pular para conteúdo

Modelos de Dados

Diagrama ER

erDiagram
    Clinic {
        int id PK
        string name
        string cnpj
        string phone
        string address
        boolean is_active
    }

    User {
        int id PK
        string email
        string name
        string role
        int clinic_id FK
    }

    Patient {
        int id PK
        string name
        string cpf
        date birth_date
        string phone
        string email
        int clinic_id FK
    }

    Service {
        int id PK
        string name
        decimal price
        int duration_minutes
        int clinic_id FK
    }

    Appointment {
        int id PK
        datetime start_at
        string status
        datetime arrived_at
        int patient_id FK
        int professional_id FK
        int service_id FK
        int clinic_id FK
    }

    Encounter {
        int id PK
        string status
        text subjective
        text objective
        text assessment
        text plan
        datetime started_at
        datetime finished_at
        int appointment_id FK
        int clinic_id FK
    }

    Diagnosis {
        int id PK
        string icd_code
        string description
        boolean is_primary
        int encounter_id FK
    }

    Prescription {
        int id PK
        string medication
        string dosage
        string frequency
        string duration
        text notes
        int encounter_id FK
    }

    Clinic ||--o{ User : employs
    Clinic ||--o{ Patient : has
    Clinic ||--o{ Service : offers
    Clinic ||--o{ Appointment : manages
    Clinic ||--o{ Encounter : records

    Patient ||--o{ Appointment : books
    User ||--o{ Appointment : attends
    Service ||--o{ Appointment : type

    Appointment ||--o| Encounter : generates
    Encounter ||--o{ Diagnosis : contains
    Encounter ||--o{ Prescription : contains

Detalhamento

Clinic (Clínica)

Campo Tipo Descrição
id Integer Identificador único
name String Nome da clínica
cnpj String CNPJ (único)
phone String Telefone
address Text Endereço completo
is_active Boolean Clínica ativa

User (Usuário)

Campo Tipo Descrição
id Integer Identificador único
email String Email (único)
name String Nome completo
role String Papel: admin, professional, receptionist
clinic FK Clínica principal
additional_clinics M2M Clínicas adicionais

Papéis:

  • admin - Acesso total à clínica
  • professional - Médico/profissional de saúde
  • receptionist - Recepcionista (agendamentos)

Patient (Paciente)

Campo Tipo Descrição
id Integer Identificador único
name String Nome completo
cpf String CPF
birth_date Date Data de nascimento
phone String Telefone
email String Email
address Text Endereço
notes Text Observações
clinic FK Clínica

Service (Serviço)

Campo Tipo Descrição
id Integer Identificador único
name String Nome do serviço
price Decimal Preço
duration_minutes Integer Duração em minutos
is_active Boolean Serviço ativo
clinic FK Clínica

Appointment (Agendamento)

Campo Tipo Descrição
id Integer Identificador único
start_at DateTime Data/hora início
status String Status atual
arrived_at DateTime Hora do check-in
notes Text Observações
patient FK Paciente
professional FK Profissional
service FK Serviço
clinic FK Clínica

Status possíveis:

STATUS_CHOICES = [
    ('scheduled', 'Agendado'),
    ('confirmed', 'Confirmado'),
    ('arrived', 'Aguardando'),
    ('completed', 'Concluído'),
    ('cancelled', 'Cancelado'),
    ('no_show', 'Não Compareceu'),
]

Encounter (Atendimento)

Campo Tipo Descrição
id Integer Identificador único
status String in_progress ou completed
subjective Text S - Queixa do paciente
objective Text O - Exame físico
assessment Text A - Avaliação/diagnóstico
plan Text P - Plano de tratamento
started_at DateTime Início do atendimento
finished_at DateTime Fim do atendimento
appointment FK Agendamento relacionado
clinic FK Clínica

Diagnosis (Diagnóstico)

Campo Tipo Descrição
id Integer Identificador único
icd_code String Código CID-10
description String Descrição
is_primary Boolean Diagnóstico principal
encounter FK Atendimento

Prescription (Prescrição)

Campo Tipo Descrição
id Integer Identificador único
medication String Nome do medicamento
dosage String Dosagem
frequency String Frequência
duration String Duração
notes Text Instruções adicionais
encounter FK Atendimento