Przejdź do głównej zawartości

Full Database Schema

Vista to aplikacja LOCAL-FIRST - wszystkie dane pacjentów i wizyt przechowywane są lokalnie na urządzeniu użytkownika.

┌─────────────────────────────────────────────────────────────────────────┐
│ TOPOLOGIA DANYCH VISTA │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────┐ │
│ │ DESKTOP APP │ ◄── Wszystkie dane żyją LOKALNIE │
│ │ (Tauri/Rust) │ │
│ └────────┬────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────┐ │
│ │ SQLite DB │ ◄── ~/Library/Application Support/Vista/ │
│ │ (WAL mode) │ vista.db (macOS) │
│ └────────┬────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────┐ │
│ │ Local Files │ ◄── Audio recordings, attachments │
│ │ (recordings/) │ Stored on user's disk │
│ └─────────────────┘ │
│ │
│ ═══════════════════════════════════════════════════════════════════ │
│ CLOUD SERVICES (OPCJONALNE) │
│ ═══════════════════════════════════════════════════════════════════ │
│ │
│ ┌─────────────────┐ ┌─────────────────┐ │
│ │ LibraxisAI │ │ OpenAI API │ ◄── AI Processing │
│ │ (STT/LLM/TTS) │ │ (Fallback) │ (dane NIE są │
│ └─────────────────┘ └─────────────────┘ przechowywane) │
│ │
└─────────────────────────────────────────────────────────────────────────┘

erDiagram
USERS ||--o{ VISITS : creates
USERS ||--o{ USER_SESSIONS : "has sessions"
USERS ||--|| USER_PREFERENCES : "has preferences"
PATIENTS ||--o{ VISITS : has
PATIENTS ||--o{ RECORDINGS : "has recordings"
VISITS ||--o{ RECORDINGS : "has recordings"
VISITS ||--o{ SPEAKER_SEGMENTS : "has segments"
RECORDINGS ||--|| TRANSCRIPTS : "has transcript"
USERS {
string user_id PK
string name
string email UK
string password_hash
string license_no UK
string roles "JSON array"
bool active
bool onboarding_completed
bool biometric_enabled
}
PATIENTS {
string patient_id PK
string name
string species
string breed
string owner_name
string owner_phone
string chip_number UK
string identity_key
}
VISITS {
string visit_id PK
string patient_id FK
string user_id FK
datetime date_time
string visit_type
string visit_status
string soap_subjective
string soap_objective
string soap_assessment
string soap_plan
int version "optimistic lock"
}
USER_SESSIONS {
string session_id PK
string user_id FK
string token
datetime expires_at
}
RECORDINGS {
string id PK
string visit_id FK
string patient_id FK
string path
int duration_ms
string status
string sha256 UK
}
TRANSCRIPTS {
string id PK
string recording_id FK UK
string engine
string text
string segments_json
}

erDiagram
USERS ||--o{ TASKS : "assigned to"
USERS ||--o{ REMINDERS : "assigned to"
PATIENTS ||--o{ TASKS : "related to"
VISITS ||--o{ TASKS : "from visit"
VISITS ||--o{ AI_TASK_SUGGESTIONS : generates
TASKS {
string task_id PK
string title
string status "active|completed"
string priority "low|medium|high"
string source "manual|ai"
string patient_id FK
string visit_id FK
string assigned_to FK
real confidence
}
REMINDERS {
string reminder_id PK
string title
string category
string status "pending|completed|snoozed|dismissed"
string due_at
string assigned_to FK
string context_patient_id FK
}
AI_TASK_SUGGESTIONS {
string suggestion_id PK
string visit_id FK
string patient_id FK
string text
string task_type
string priority
real confidence
string status "pending|accepted|dismissed"
}

erDiagram
USERS ||--o{ CHAT_SESSIONS : "has chats"
VISITS ||--o{ CHAT_SESSIONS : "context"
CHAT_SESSIONS ||--o{ CHAT_MESSAGES : contains
CHAT_SESSIONS ||--o{ CHAT_ATTACHMENTS : "has files"
CHAT_SESSIONS {
string id PK
string user_id FK
string visit_id FK
int started_at
int ended_at
int message_count
string title
string preview
}
CHAT_MESSAGES {
string id PK
string session_id FK
int idx
string role "user|assistant|system"
string content
int timestamp
}
CHAT_ATTACHMENTS {
string attachment_id PK
string session_id FK
string uploaded_by FK
string file_name
string file_path
string mime_type
int size_bytes
}

erDiagram
USERS ||--o{ APPOINTMENTS : schedules
USERS ||--o{ USER_WORKING_HOURS : "availability"
USERS ||--o{ TIME_BLOCKS : "blocked time"
PATIENTS ||--o{ APPOINTMENTS : "scheduled for"
APPOINTMENTS ||--o| VISITS : "converts to"
APPOINTMENTS {
string appointment_id PK
string patient_id FK
string veterinarian_id FK
string scheduled_date
string scheduled_time
int duration_minutes
string appointment_type
string status
string visit_id FK
bool is_recurring
}
USER_WORKING_HOURS {
string id PK
string user_id FK
int day_of_week "0-6"
string start_time "HH:MM"
string end_time "HH:MM"
bool is_working
string break_start_time
string break_end_time
}
TIME_BLOCKS {
string id PK
string created_by FK
string title
string start_date
string end_date
string block_type "busy|available|break|meeting"
bool is_recurring
}

#TabelaOpis
1usersLekarze i personel kliniki
2patientsZwierzęcy pacjenci
3visitsWizyty medyczne + SOAP
4appointmentsHarmonogram wizyt
#TabelaOpis
5recordingsMetadane nagrań audio
6transcriptsWyniki STT (1:1 z recordings)
7speaker_segmentsDiaryzacja mówców
#TabelaOpis
8tasksZadania kliniczne/administracyjne
9ai_task_suggestionsSugestie AI z analizy wizyt
10remindersPrzypomnienia użytkownika
#TabelaOpis
11chat_sessionsSesje rozmów AI
12chat_messagesWiadomości w sesjach
13chat_attachmentsPliki załączone do chatów
14ai_conversation_snapshotsSnapshoty kontekstu AI
15ai_context_embeddingsEmbeddingi wektorowe
16vista_memoryPamięć agenta Vista
#TabelaOpis
17user_sessionsSesje uwierzytelniania
18user_preferencesPreferencje onboardingu
19password_reset_tokensTokeny resetu hasła
20user_invitation_tokensZaproszenia do zespołu
21pin_lockoutBlokada PIN/biometria
#TabelaOpis
22clinical_notesDodatkowe notatki kliniczne
23media_filesZałączniki (zdjęcia, dokumenty)
24custom_dictionaryTerminologia medyczna użytkownika
#TabelaOpis
25user_working_hoursDostępność weterynarzy
26time_blocksBlokowane przedziały czasowe
#TabelaOpis
27visit_sharesWspółdzielenie wizyt
28personal_notesPrywatne notatki użytkownika
#TabelaOpis
29clinic_settingsUstawienia kliniki (key-value)
30license_stateStatus licencji aplikacji
31dashboard_stateStan UI dashboardu
32audit_trailLogi aktywności (GDPR)
33jobsKolejka zadań background

MetrykaWartość
Liczba tabel33
Liczba indeksów106
Liczba triggerów6
Tabele z soft-delete1 (tylko users)
Tabele z version field1 (tylko visits)