🎯 Obiettivo
Implementare CalendarView e VisitFormView per supportare:
- FLUSSO 3: Visualizzazione Calendario Appuntamenti (Coordinatore)
- FLUSSO 4: Registrazione Visita (Educatore)
descritti in docs/USER-WORKFLOW.md.
Questa issue è contenitore UI per il modulo Calendario/Visite (logica di dominio in issue dedicate ai servizi/repositories).
🗓️ 1. CalendarView (Coordinatore)
Requisiti Funzionali
Da USER-WORKFLOW:
- Calendario mensile con legenda stato progetto (non tipo appuntamento)
- Lista appuntamenti per giorno selezionato
- Filtri:
- Tipo appuntamento (INTAKE, Verifiche, Dimissioni)
- Educatore
- Stato progetto (Active, Suspended, Completed, Deceased)
- Azioni rapide per ogni appuntamento:
- "Registra Visita"
- "Riprogramma"
- "Segna Mancato"
Layout Proposto (semplificato)
┌────────────────────────────────────────────────────────────┐
│ 📅 Calendario Appuntamenti - [Mese Anno] [◀ Oggi ▶] [+] │
├────────────────────────────────────────────────────────────┤
│ L M M G V S D │
│ 1 2🟢 3 4 5 6 │
│ 7 8 9 10 11 12 13 │
│ 14 15 16 17🟡 18 19 20 │
│ 21 22 23⚫ 24 25 26 27 │
│ 28 29 30 │
│ │
│ Legenda (Stato Progetto): │
│ 🟢 Active 🟡 Suspended ⚪ Completed ⚫ Deceased │
│ │
│ Filtri: │
│ [✓] Prima Apertura [✓] Verifiche [✓] Dimissioni │
│ Educatore: [▼ Tutti ] │
│ Stato Progetto: [▼ Tutti ] │
└────────────────────────────────────────────────────────────┘
┌────────────────────────────────────────────────────────────┐
│ Appuntamenti del [Data Selezionata] │
├────────────────────────────────────────────────────────────┤
│ 🟢 Prima Apertura - ROSSI Mario │
│ Educatori: Bianchi, Verdi │
│ Progetto: PTRP 2025-2027 (Active) │
│ [Registra Visita] [Riprogramma] [Segna Mancato] │
│ │
└────────────────────────────────────────────────────────────┘
Componenti UI
CalendarView.xaml
CalendarViewModel
- Eventuale
DayViewModel per rappresentare i giorni
Binding principali
CurrentMonth (DateTime)
SelectedDate (DateTime)
Days (ObservableCollection)
SelectedDayAppointments (ObservableCollection)
- Filtri (bool + enum + Guid?)
Comandi
GoToTodayCommand
GoToPreviousMonthCommand
GoToNextMonthCommand
SelectDayCommand
RegisterVisitCommand (apre VisitFormView)
RescheduleCommand
MarkAsMissedCommand
✍️ 2. VisitFormView (Educatore)
Requisiti Funzionali
Da USER-WORKFLOW:
- La visita può essere creata SOLO a partire da un appuntamento esistente (relazione 1:1)
- Campi obbligatori:
- Data effettiva (non futura)
- Ora inizio/fine (fine > inizio)
- Almeno un operatore presente selezionato
- Note cliniche
- Presenza paziente (enum)
Layout Proposto (semplificato)
┌────────────────────────────────────────────────────────────┐
│ Registrazione Visita [X] │
├────────────────────────────────────────────────────────────┤
│ Paziente: ROSSI Mario │
│ Tipo Appuntamento: Prima Apertura (INTAKE) │
│ Data Programmata: 02/04/2025 │
│ │
│ Data Effettiva: [📅 02/04/2025] │
│ Ora Inizio: [🕐 10:00] │
│ Ora Fine: [🕐 11:30] │
│ │
│ Operatori Presenti: │
│ [✓] Bianchi (io) │
│ [✓] Verdi │
│ │
│ Note Cliniche (obbligatorio): │
│ [_______________________________________________] │
│ │
│ Esiti e Obiettivi: │
│ [_______________________________________________] │
│ │
│ Presenza Paziente: [Presente e Collaborativo ▼] │
│ │
│ [Annulla] [Salva Visita] │
└────────────────────────────────────────────────────────────┘
Componenti UI
VisitFormView.xaml
VisitFormViewModel
Binding principali
PatientName (string, read-only)
AppointmentTypeDisplay (string, read-only)
ScheduledDate (DateTime, read-only)
ActualDate (DateTime)
StartTime / EndTime (TimeSpan)
Operators (ObservableCollection)
ClinicalNotes (string)
Outcomes (string?)
SelectedPresenceStatus (enum PresenceStatus)
Comandi
SaveCommand → chiama IVisitService.RegisterVisitAsync(...)
CancelCommand
Validazioni (collegate a issue #54)
- Mostrare errori di validazione vicino ai campi
- Snackbar globale con messaggio "Correggi gli errori evidenziati"
📋 Tasks
✅ Acceptance Criteria
🔗 Riferimenti
FASE: 2B - Core Business: Calendario e Visite
PRIORITÀ: 🟡 ALTA
DIPENDENZE: #71, #72, #73
BLOCKING: Utilizzo completo FLUSSI 3-4 lato Coordinatore/Educatore
🎯 Obiettivo
Implementare
CalendarVieweVisitFormViewper supportare:descritti in
docs/USER-WORKFLOW.md.Questa issue è contenitore UI per il modulo Calendario/Visite (logica di dominio in issue dedicate ai servizi/repositories).
🗓️ 1. CalendarView (Coordinatore)
Requisiti Funzionali
Da USER-WORKFLOW:
Layout Proposto (semplificato)
Componenti UI
CalendarView.xamlCalendarViewModelDayViewModelper rappresentare i giorniBinding principali
CurrentMonth(DateTime)SelectedDate(DateTime)Days(ObservableCollection)SelectedDayAppointments(ObservableCollection)Comandi
GoToTodayCommandGoToPreviousMonthCommandGoToNextMonthCommandSelectDayCommandRegisterVisitCommand(apreVisitFormView)RescheduleCommandMarkAsMissedCommand✍️ 2. VisitFormView (Educatore)
Requisiti Funzionali
Da USER-WORKFLOW:
Layout Proposto (semplificato)
Componenti UI
VisitFormView.xamlVisitFormViewModelBinding principali
PatientName(string, read-only)AppointmentTypeDisplay(string, read-only)ScheduledDate(DateTime, read-only)ActualDate(DateTime)StartTime/EndTime(TimeSpan)Operators(ObservableCollection)ClinicalNotes(string)Outcomes(string?)SelectedPresenceStatus(enumPresenceStatus)Comandi
SaveCommand→ chiamaIVisitService.RegisterVisitAsync(...)CancelCommandValidazioni (collegate a issue #54)
📋 Tasks
Views/Calendar/CalendarView.xaml+ code-behindViewModels/Calendar/CalendarViewModel.csViews/Visits/VisitFormView.xaml+ code-behindViewModels/Visits/VisitFormViewModel.csCalendarViewnella navigazione (Sidebar → Calendario)VisitFormViewcon comandoRegisterVisitin calendario e vista educatore "I miei appuntamenti"CalendarViewModela servizi dominio (es.IScheduledVisitService/IPatientService/IEducatorService)VisitFormViewModela servizio dominio visite (issue futuraVisitService)✅ Acceptance Criteria
VisitFormViewprecompilata con dati appuntamentoActualVisitModellegato all'appuntamento e aggiorna lo stato aCompleted🔗 Riferimenti
docs/USER-WORKFLOW.md- FLUSSO 3 e FLUSSO 4FASE: 2B - Core Business: Calendario e Visite
PRIORITÀ: 🟡 ALTA
DIPENDENZE: #71, #72, #73
BLOCKING: Utilizzo completo FLUSSI 3-4 lato Coordinatore/Educatore