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 |