Settings Commands
Przegląd
Dział zatytułowany „Przegląd”Settings API obejmuje:
- User Preferences - preferencje użytkownika (drafting, workflow, assistant)
- Clinic Settings - dane kliniki, godziny pracy
- Security - weryfikacja hasła do sekcji admin
- MCP Diagnostics - Vista Connect status, AI config
- Privacy & GDPR - polityki retencji danych
User Preferences
Dział zatytułowany „User Preferences”Commands
Dział zatytułowany „Commands”// get_user_preferences_session// Pobiera preferencje powiązane z aktualną sesjąconst prefs = await safeInvoke<SettingsUserPreferences | null>( 'get_user_preferences_session', withSessionPayload());
// update_user_preferences_session// Aktualizuje preferencje dla bieżącej sesjiawait safeInvoke( 'update_user_preferences_session', withSessionPayload({ prefs: preferences }));Preference Sections
Dział zatytułowany „Preference Sections”Drafting
Dział zatytułowany „Drafting”| Field | Type | Options |
|---|---|---|
note_style | enum | 'soap' | 'narrative' |
ai_precision_level | enum | 'minimal' | 'balanced' | 'complete' |
history_depth | enum | 'brief' | 'standard' | 'full' |
tone_of_voice | enum | 'clinical' | 'professional' | 'friendly' | 'neutral' |
content_format | enum | 'paragraph' | 'bullets' |
Workflow
Dział zatytułowany „Workflow”| Field | Type | Options |
|---|---|---|
practice_mode | enum | 'solo' | 'team' |
workday_style | enum | 'planned' | 'dynamic' | 'balanced' |
docs_style | enum | 'detailed' | 'quick' | 'keypoints' |
tech_profile | enum | 'innovator' | 'practical' | 'conservative' |
Assistant
Dział zatytułowany „Assistant”| Field | Type | Description |
|---|---|---|
tts_enabled | boolean | Text-to-speech |
tasks_panel_mode | enum | 'manual' | 'auto' | 'off' |
auto_generate_tasks | boolean | Auto-generacja zadań |
Load & Save Flow
Dział zatytułowany „Load & Save Flow”sequenceDiagram participant UI as PreferencesSettings participant API as safeInvoke participant BE as Backend
Note over UI: Mount UI->>API: get_user_preferences_session API->>BE: withSessionPayload() BE-->>API: prefs | null alt prefs is null UI->>UI: createNormalizedPreferences() UI->>UI: recordRoamEvent('load:defaults') else prefs exists UI->>UI: createNormalizedPreferences(prefs) UI->>UI: recordRoamEvent('load:success') end
Note over UI: User edits UI->>UI: Calculate changedKeys UI->>API: update_user_preferences_session API->>BE: { prefs } BE-->>UI: success UI->>UI: recordRoamEvent('save:success')Service: userPreferences.ts
Dział zatytułowany „Service: userPreferences.ts”// Walidacja i konwersjavalidatePartialUserPreferences(prefs) // Zod validationtoSnakeCaseDeep(payload) // camelCase → snake_case
// Batch updatesbatchUpdateUserPreferences(prefs)batchUpdateUserPreferencesSession(prefs)
// Onboarding helperscompleteOnboarding(prefs)skipOnboarding()Clinic Settings
Dział zatytułowany „Clinic Settings”Commands
Dział zatytułowany „Commands”| Command | Description | Type |
|---|---|---|
get_clinic_info | Pełne dane kliniki (w tym operating_hours) | query |
update_clinic_info | Zapisuje pełne dane kliniki | write |
get_clinic_settings | Mapa klucz-wartość ustawień | query |
update_clinic_settings | Aktualizuje wiele ustawień naraz | write |
get_clinic_setting | Pojedyncze ustawienie po kluczu | query |
Service: clinicSettings.ts
Dział zatytułowany „Service: clinicSettings.ts”// Pełne dane klinikiClinicSettingsService.getClinicInfo(sessionId?)ClinicSettingsService.updateClinicInfo(clinicInfo, updatedBy, sessionId?)
// Mapa ustawieńClinicSettingsService.getSettings(sessionId?)ClinicSettingsService.updateSettings(settings, updatedBy, sessionId?)
// Pojedyncze ustawienieClinicSettingsService.getSetting(settingKey, sessionId?)ClinicSettingsService.updateSetting(settingKey, value, updatedBy, sessionId?)
// Operating hours (FE helpers)ClinicSettingsService.getOperatingHours()ClinicSettingsService.updateOperatingHours(hours)ClinicInfo Model
Dział zatytułowany „ClinicInfo Model”interface ClinicInfo { name: string; address: string; phone?: string; email?: string; operating_hours: Record<DayOfWeek, { isOpen: boolean; open: string; // "09:00" close: string; // "17:00" }>;}Validation
Dział zatytułowany „Validation”// validateClinicInfo checks:- name: required, non-empty- address: required, isValidAddress()- phone: if present → normalizePhoneNumber() + validateE164()Security
Dział zatytułowany „Security”verify_user_password
Dział zatytułowany „verify_user_password”Weryfikacja hasła przed dostępem do sekcji admin (Database Management).
const isValid = await safeInvoke<boolean>('verify_user_password', { email: user.email, password,});
if (isValid) { setIsAuthenticated(true); setIsOpen(true); // Otwórz sekcję DB} else { setPasswordError(t('invalidPassword'));}MCP / Vista Connect Diagnostics
Dział zatytułowany „MCP / Vista Connect Diagnostics”Commands
Dział zatytułowany „Commands”| Command | Description |
|---|---|
diagnostics_ai_config | Konfiguracja flowów AI |
get_vista_connect_status | Status Vista Connect runtime |
diagnostics_ai_curl | Generuje curl template do testów |
diagnostics_ai_config
Dział zatytułowany „diagnostics_ai_config”// Wykrywa konfigurację AI flowsconst res = await safeInvoke<any>('diagnostics_ai_config');const flows = Array.isArray(res?.flows) ? res.flows : [];const chat = flows.find((f) => f?.flow === 'AI_CHAT');setIsResponsesPrimary(!!chat?.primary_is_responses);get_vista_connect_status
Dział zatytułowany „get_vista_connect_status”interface VistaConnectStatus { version: string; localTools: number; clients: string[]; externalServers: MCPServer[];}
const status = await safeInvoke<VistaConnectStatus>( 'get_vista_connect_status', withSessionPayload({}));
// Derived statevistaStatusSummary // "v1.2.3 | 5 tools | 2 clients"connectedExternal // liczba zewnętrznych MCP serwerówdiagnostics_ai_curl
Dział zatytułowany „diagnostics_ai_curl”// Kopiuje curl template do clipboardconst cmd = await safeInvoke<string>('diagnostics_ai_curl', { kind: 'responses_web_search',});await navigator.clipboard.writeText(cmd);Privacy & GDPR
Dział zatytułowany „Privacy & GDPR”Service: dataRetentionService.ts
Dział zatytułowany „Service: dataRetentionService.ts”interface DataRetentionPolicy { audioRecordings: number; // dni clinicalNotes: number; // dni}
// Aktualizacja polityki retencjiDataRetentionService.updateRetentionPolicy(policy: Partial<DataRetentionPolicy>)// → safeInvoke('update_retention_policy', { policy })
// Wykonanie polityki (cleanup)DataRetentionService.applyRetentionPolicy()// → safeInvoke<RetentionReport>('apply_retention_policy', { policy })
// Anonimizacja pacjenta (zamiast hard delete)DataRetentionService.anonymizePatientData(patientId)// → safeInvoke('anonymize_patient_data', { patientId })
// Status retencji użytkownikaDataRetentionService.getUserDataRetentionStatus(userId)Privacy Settings UI
Dział zatytułowany „Privacy Settings UI”const saveChanges = async () => { await DataRetentionService.updateRetentionPolicy({ audioRecordings: audioDays, clinicalNotes: transcriptDays, });};GDPR Commands
Dział zatytułowany „GDPR Commands”| Command | Description |
|---|---|
update_retention_policy | Aktualizuje politykę retencji |
apply_retention_policy | Wykonuje cleanup starych danych |
anonymize_patient_data | Anonimizuje dane pacjenta |
Settings Tabs Overview
Dział zatytułowany „Settings Tabs Overview”SettingsTabsView├── PreferencesSettings # User preferences├── ClinicSettings # Clinic info & hours├── StaffWorkingHours # Staff schedules├── DatabaseManagement # Admin (requires password)├── MCPSettings # Vista Connect└── PrivacySettings # GDPR, retentionPowiązane dokumenty
Dział zatytułowany „Powiązane dokumenty”- Auth Commands - Session management
- Features: Settings - Onboarding, labels, Zod
- Security Overview - Authentication