Przejdź do głównej zawartości

Visits Module

Visit jest centralnym hubem łączącym wszystkie moduły w Vista. ~50 plików, ~13k LOC.

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| Visit
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
}
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'})
Hook/ComponentvisitApi methodTrigger
useWorkspaceDatagetWithDetailsPaginated()Load drafts list
useWorkspaceDataupdate()Save draft changes
useWorkspaceDatamergePendingTranscript()Accept AI transcript
useWorkspaceDatadismissPendingTranscript()Reject AI transcript
useWorkspaceDraftActionscreate()New draft from template
useWorkspaceDraftActionsupdate()Save after create
useWorkspaceDraftActionsdelete()Delete draft
Hook/ComponentvisitApi methodTrigger
usePatientMedicalHistorygetByPatient()Open patient profile
Hook/ComponentActionResult
useSOAPGenerationformatNotes({visitId})SOAP fields updated
AISpecialistHostcontext with visitIdAI knows visit context
useNotesAgentgenerates SOAPUpdates visit.soap_* fields
Hook/ComponentActionResult
useAudioRecordingsaveRecording(blob, visitId)Recording linked to visit
useAudioTranscriptionlinkRecordingToVisit()FK set
useAudioTranscriptiontranscribe resultUpdates visit.transcript
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