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 |
| 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 |