Pular para conteúdo

Modelos de Dados

Todos os modelos usam UUID como PK e clinic_id para multi-tenancy.

Entidades principais

Clinic

Tenant principal. Cada clinica e isolada.

Campo Tipo Descricao
id UUID PK
name String Nome da clinica
slug String URL-friendly, unique
cnpj String CNPJ (opcional)
plan Enum starter, pro, enterprise
is_active Boolean Ativo

User

Usuarios vinculados a uma clinica.

Campo Tipo Descricao
id UUID PK
clinic_id UUID FK → Clinic
name String Nome completo
email String Email (unique)
role Enum admin, doctor, receptionist, nurse
crm / crm_state String Registro profissional
specialty String Especialidade medica

Patient

Pacientes da clinica.

Campo Tipo Descricao
id UUID PK
clinic_id UUID FK → Clinic
name String Nome
cpf String CPF (opcional)
phone String Telefone (usado na integracao)
gender Enum male, female, other
blood_type String Tipo sanguineo
allergies String Alergias
health_plan String Convenio

Appointment

Consultas agendadas.

Campo Tipo Descricao
id UUID PK
patient_id UUID FK → Patient
doctor_id UUID FK → User
scheduled_at DateTime Data/hora
duration Integer Duracao em minutos
status Enum scheduled, confirmed, in_progress, done, cancelled, no_show
type Enum presential, telemedicine

MedicalRecord

Prontuario (SOAP).

Campo Tipo Descricao
id UUID PK
appointment_id UUID FK → Appointment
patient_id UUID FK → Patient
doctor_id UUID FK → User
chief_complaint Text Queixa principal (S)
history Text Historia (S)
physical_exam Text Exame fisico (O)
diagnosis Text Diagnostico (A)
conduct Text Conduta (P)
cid10_codes JSON Codigos CID-10

Integration

Conexoes com produtos externos (ChatDigi, Agenda).

Campo Tipo Descricao
id UUID PK
clinic_id UUID FK → Clinic
product Enum chatdigi, agenda
api_key_local String Key gerada pelo ByClinic
api_key_remote String Key do produto remoto
webhook_secret String HMAC secret
features JSON Features descobertas
status Enum active, inactive, error

IntegrationWebhookLog

Audit log de webhooks enviados/recebidos.

Campo Tipo Descricao
id UUID PK
integration_id UUID FK → Integration
direction Enum inbound, outbound
event_type String ex: patient.created
payload JSON Body completo
delivered Boolean Entregue com sucesso
retries Integer Tentativas

Diagrama ER simplificado

Clinic 1──N User
Clinic 1──N Patient
Clinic 1──N Integration

Patient 1──N Appointment
User (doctor) 1──N Appointment
Appointment 1──1 MedicalRecord

Integration 1──N IntegrationWebhookLog