Visits Module
Visit jest centralnym hubem łączącym wszystkie moduły w Vista. ~50 plików, ~13k LOC.
Visit jako Centrum
Dział zatytułowany „Visit jako Centrum”graph TB subgraph VisitCore["VISIT (Central Hub)"] Visit[(visits table)] VisitAPI[visitApi.ts<br/>21 methods] end
subgraph Workspace["WORKSPACE"] WS_Data[useWorkspaceData] WS_Drafts[WorkspaceDrafts] WS_Actions[useWorkspaceDraftActions] end
subgraph Patients["PATIENTS"] PatientHistory[usePatientMedicalHistory] PatientProfile[PatientProfileSummary] end
subgraph Dashboard["DASHBOARD"] DashboardView[Dashboard.tsx] MyDay[MyDayPanel] end
subgraph AISuite["AI SUITE"] NotesAgent[useNotesAgent] SOAPGen[useSOAPGeneration] Specialist[AISpecialistHost] end
subgraph Audio["AUDIO"] AudioRec[useAudioRecording] AudioTrans[useAudioTranscription] Recordings[(recordings)] Transcripts[(transcripts)] end
%% Workspace -> Visit WS_Data -->|getWithDetailsPaginated| VisitAPI WS_Data -->|update, merge/dismiss| VisitAPI WS_Actions -->|create, update, delete| VisitAPI
%% Patients -> Visit PatientHistory -->|getByPatient| VisitAPI
%% Dashboard -> Workspace -> Visit DashboardView -->|uses| WS_Data
%% AI -> Visit SOAPGen -->|visitId| NotesAgent NotesAgent -->|generates SOAP| Visit Specialist -->|visit context| Visit
%% Audio -> Visit AudioRec -->|visitId| Recordings AudioTrans -->|linkToVisit| Recordings Recordings -->|visit_id FK| Visit Transcripts -->|visit_id FK| VisitVisit Lifecycle
Dział zatytułowany „Visit Lifecycle”stateDiagram-v2 [*] --> draft: create_visit draft --> finalized: finalize finalized --> sent: send
state draft { [*] --> idle idle --> processing_audio: start recording processing_audio --> processing_stt: audio complete processing_stt --> processing_llm: transcript ready processing_llm --> completed: SOAP generated processing_llm --> awaiting_user_merge: needs review processing_llm --> error: failed completed --> idle: edit awaiting_user_merge --> idle: merge/dismiss }Visit Processing Pipeline
Dział zatytułowany „Visit Processing Pipeline”sequenceDiagram participant User participant UI as VisitEditor participant Audio as useAudioRecording participant STT as useAudioTranscription participant AI as useSOAPGeneration participant DB as visitApi
User->>UI: Start recording UI->>Audio: startRecording(visitId) Audio->>Audio: Capture audio
User->>UI: Stop recording Audio->>DB: saveRecording(blob, visitId) DB-->>Audio: recording_id
Audio->>STT: transcribe(blob, visitId) STT->>STT: WhisperX processing STT->>DB: update visit.pending_transcript DB-->>UI: Notify: pending transcript
User->>UI: Accept transcript UI->>DB: mergePendingTranscript(visitId) DB-->>UI: transcript merged
User->>UI: Generate SOAP UI->>AI: generateSOAP(patient, visit, visitId) AI->>AI: LLM processing AI->>DB: update visit.soap_* DB-->>UI: SOAP fields populated
User->>UI: Finalize visit UI->>DB: updateCas({visit_status: 'finalized'})Szczegółowe API Calls
Dział zatytułowany „Szczegółowe API Calls”Workspace -> visitApi
Dział zatytułowany „Workspace -> visitApi”| Hook/Component | visitApi method | Trigger |
|---|---|---|
| useWorkspaceData | getWithDetailsPaginated() | Load drafts list |
| useWorkspaceData | update() | Save draft changes |
| useWorkspaceData | mergePendingTranscript() | Accept AI transcript |
| useWorkspaceData | dismissPendingTranscript() | Reject AI transcript |
| useWorkspaceDraftActions | create() | New draft from template |
| useWorkspaceDraftActions | update() | Save after create |
| useWorkspaceDraftActions | delete() | Delete draft |
Patients -> visitApi
Dział zatytułowany „Patients -> visitApi”| Hook/Component | visitApi method | Trigger |
|---|---|---|
| usePatientMedicalHistory | getByPatient() | Open patient profile |
AI -> Visit
Dział zatytułowany „AI -> Visit”| Hook/Component | Action | Result |
|---|---|---|
| useSOAPGeneration | formatNotes({visitId}) | SOAP fields updated |
| AISpecialistHost | context with visitId | AI knows visit context |
| useNotesAgent | generates SOAP | Updates visit.soap_* fields |
Audio -> Visit
Dział zatytułowany „Audio -> Visit”| Hook/Component | Action | Result |
|---|---|---|
| useAudioRecording | saveRecording(blob, visitId) | Recording linked to visit |
| useAudioTranscription | linkRecordingToVisit() | FK set |
| useAudioTranscription | transcribe result | Updates visit.transcript |
Data Flow Summary
Dział zatytułowany „Data Flow Summary” VISIT LIFECYCLE
CREATE RECORD TRANSCRIBE SOAP DRAFT AUDIO GENERATE
VISIT RECORD (SQLite) - visit_id, patient_id, user_id - visit_status: draft -> finalized -> sent - processing_status: idle -> audio -> stt -> llm -> done - transcript, raw_transcript, pending_transcript - soap_subjective, soap_objective, soap_assessment, plan - recording_id (FK to recordings) - version (optimistic locking)
Workspace Audio Patients AI Drafts Pipeline History Suite