Przejdź do głównej zawartości

Tasks / Reminders Module

W Vista “Reminders” to tak naprawdę Tasks - używają tej samej tabeli tasks i serwisu tasksService. ~10 plików, ~2k LOC.

  • Tasks from Vista (system): source = ‘system’, ‘Vista’, ‘workflow’, ‘assistant’, ‘ai’, ‘auto’
  • Tasks from User: source = ‘user’, ‘manual’ lub created_by === assigned_to
graph TB
subgraph Sources["Task Sources"]
AI[AI Task Suggestions]
User[User Manual Creation]
Visit[Visit Context]
end
subgraph TasksTable["tasks table SQLite"]
Task[(task_id, title, description<br/>status, priority, task_type<br/>source, patient_id, visit_id<br/>assigned_to, created_by<br/>tags, due_at, snooze_until)]
end
subgraph Classification["Task Classification (taskFilters.ts)"]
SystemTasks["System Tasks<br/>source in: system, Vista, workflow, ai, auto"]
UserTasks["User Tasks<br/>source: user, manual<br/>or created_by === assigned_to"]
end
subgraph UI["Workspace UI"]
WorkspaceReminders[WorkspaceReminders.tsx]
useRemindersPanel[useWorkspaceRemindersPanel]
TaskItem[WorkspaceTaskItem]
end
AI -->|accept suggestion| TasksTable
User -->|create task| TasksTable
Visit -->|visit_id FK| TasksTable
TasksTable --> Classification
Classification --> UI
useRemindersPanel -->|filters: mine, vista, all, completed| WorkspaceReminders
WorkspaceReminders --> TaskItem
stateDiagram-v2
[*] --> active: create_task
active --> completed: complete_task
active --> snoozed: snooze
active --> cancelled: cancel
snoozed --> active: wake (snooze_until passed)
completed --> [*]
cancelled --> [*]
Filter IDLogicDescription
mineclassifyTaskOwnership() === 'user' OR created_by === userIdTasks created by current user
vistaclassifyTaskOwnership() === 'system'AI/system generated tasks
allisTaskOpen(task)All open tasks
completedstatus === 'completed'Finished tasks
FE MethodRust CommandAction
createTask(input)create_taskCreate new task
updateTask(input)update_taskUpdate task fields
completeTask(taskId)complete_taskMark as completed
listTasks(filter)list_tasksGet filtered tasks
deleteTask(taskId)delete_taskRemove task
bulkCreateTasks(tasks)bulk_create_tasksCreate multiple

sequenceDiagram
participant Visit as VisitEditor
participant Hook as useAiTaskSuggestions
participant Service as aiTaskSuggestionsService
participant BE as Backend
participant UI as WorkspaceReminders
Note over Visit: Visit finalized
Visit->>Hook: visitId changed
Hook->>Service: generateSuggestions(visitId)
Service->>BE: unified_ai_generate_tasks
BE->>BE: Load visit + patient data
BE->>BE: Generate suggestions via LLM
BE-->>Service: TaskSuggestion[]
Service-->>Hook: suggestions
Hook-->>UI: Display in Reminders tab
UI->>Hook: User clicks Accept
Hook->>Service: acceptSuggestion(id)
Service->>BE: unified_ai_accept_task_suggestions
BE->>BE: Convert to real Task
BE-->>Service: Task created
Service-->>Hook: Refresh tasks

TypeSourceExample
followupAI/system”Wizyta kontrolna za 5 dni”
lab_testAI”Morfologia krwi za 7 dni”
prescriptionAI”Wystawić receptę na Metacam”
callbackAI/user”Telefon do właściciela”
reminderuser”Sprawdzić wyniki”
vaccinationAI”Szczepienie za 6 miesięcy”

MetricValue
Files~10
LOC~2,000
Tauri Commands9
Key HookuseTasks (123 LOC)

IDSeverityDescription
P2-016MEDIUMAI suggestions mogą tworzyć duplikaty gdy visit edytowany wielokrotnie
P2-017LOWBrak bulk dismiss dla AI suggestions