📋 UC08: Statut Organisé
USE CASE UC08 : STATUT "ORGANISEE" D'UNE DEMANDE
Ce document explique comment fonctionne le statut "organise" des
demandes de soins et qui peut le modifier.
Les termes "ORGANISEE" et "PLANIFIEE" sont SYNONYMES.
Il n'y a PAS de difference entre ces deux termes.
Dans l'application, un seul statut existe : "arrangee" (arranged en anglais).
1. Comprendre Les Statuts
IMPORTANT : Il n'y a PAS d'enum "status" explicite dans le code.
Le statut est determine par la combinaison de plusieurs champs.
Champs Utilises
A) active (bool) :
- true : demande active
- false : demande terminee ou annulee
B) arrangedForPatient (bool?) :
- null : pas encore organise
- false : pas organise (equivalent a null)
- true : demande ORGANISEE pour le patient
C) arrangedForCareGiver (Map
- Map vide {} : aucun caregiver n'a arrange
- { "uuid-caregiver": DateTime } : ce caregiver a arrange
Terminologie
Les termes "organisee" et "planifiee" sont SYNONYMES - il n'y a aucune difference.
Dans le code : arrangedForPatient = true signifie que les soins sont organises.
2. Etats Possibles D'Une Demande
Fichier : lib/core/presentation/controllers/request_card_controller.dart
1. EN COURS (Ongoing) :
- arrangedForPatient != true (null ou false)
- active = true
- createdAt < 24h
-> La demande vient d'etre creee, en attente de reponse
2. ORGANISEE (Arranged) :
- arrangedForPatient = true
- active = true
-> Un soignant a ete trouve, les soins sont planifies
3. ANNULEE (Cancelled) :
- active = false
- arrangedForPatient != true
-> La demande a ete annulee avant d'etre organisee
4. TERMINEE (Completed) :
- active = false
- arrangedForPatient = true
-> Les soins ont ete dispenses et sont termines
3. Qui Peut Marquer Une Demande Comme "Organisee" ?
A) LE PATIENT (ou la personne ayant cree la demande)
Cas D'Utilisation
- Le patient a trouve un soignant (via l'app ou autrement)
- Il veut indiquer que les soins sont maintenant organises
ACTION :
- Bouton "Marquer comme organise" sur le detail de sa demande
- Met arrangedForPatient = true
Code Source
lib/modules/home/presentation/controllers/request_detail_screen_controller.dart
```dart
Future
required String uuid,
bool? arrangedForPatient,
Map
}) async {
// ...
if (arrangedForCareGiver == null) {
// Patient marking as arranged
await arrangedRepo.call(requestId: uuid, arrangedForPatient: true);
// ...
B) L'INFIRMIERE (Caregiver)
Cas D'Utilisation
- L'infirmiere a contacte le patient
- Elle a accepte de prendre en charge les soins
- Elle veut indiquer qu'elle a "arrange" cette demande
ACTION :
- Bouton "J'ai organise les soins" sur le detail de la demande
- Ajoute son UUID dans arrangedForCareGiver
Code Source
```dart
if (arrangedForCareGiver != null) {
await arrangedRepo.call(
requestId: uuid,
arrangedForCareGiver: arrangedForCareGiver,
// ...
Difference Importante
- Le patient met arrangedForPatient = true (statut global)
- L'infirmiere ajoute son UUID dans arrangedForCareGiver (son arrangement perso)
4. Conditions Pour Marquer Comme "Organisee"
Pour Le Patient
- Doit etre le createur de la demande (userUuid correspond)
- La demande doit etre active (active = true)
- La demande ne doit pas deja etre organisee
Pour L'Infirmiere
- Doit avoir un compte actif (status = active)
- La demande doit etre dans sa zone d'activite
- La demande doit etre active
- L'infirmiere doit avoir contacte le patient (avoir des credits ou plan actif)
5. Changements Visibles Pour Les Utilisateurs
QUAND LE PATIENT MARQUE COMME "ORGANISEE" :
Pour le patient :
- La demande passe de "En cours" a "Organisee"
- L'icone/couleur change dans la liste
- La demande reste visible dans ses demandes
Pour les infirmieres :
- La demande peut ne plus apparaitre dans les demandes disponibles
(selon les regles metier definies)
- Les infirmieres qui avaient deja arrange sont notifiees (potentiellement)
QUAND L'INFIRMIERE MARQUE COMME "ARRANGEE" :
Pour l'infirmiere :
- La demande passe dans ses "Demandes arrangees"
- Elle peut continuer a voir les details
- Elle peut annuler son arrangement si necessaire
Pour le patient :
- Il peut voir qu'une infirmiere a pris en charge
- Il peut confirmer en marquant comme "organise" de son cote
6. Annulation D'Un Arrangement
Le Patient Peut
- Annuler la demande completement (active = false)
- Cela met fin a la demande
- Les infirmieres ne la voient plus
L'Infirmiere Peut
- Annuler son arrangement (retirer son UUID de arrangedForCareGiver)
- La demande redevient disponible pour d'autres infirmieres
- Le patient est notifie (potentiellement)
Code Source
lib/modules/home/presentation/controllers/request_detail_screen_controller.dart
- cancelRequestPatient() : annule la demande du patient
- cancelRequestCaregiver() : retire l'arrangement de l'infirmiere
7. Use Case Complet : Cycle De Vie
1. CREATION (Patient)
- active = true
- arrangedForPatient = null
- arrangedForCareGiver = {}
-> Statut : EN COURS
2. INFIRMIERE ARRANGE (optionnel)
- arrangedForCareGiver = { "uuid-inf": DateTime }
-> L'infirmiere a arrange de son cote
-> Le patient n'a pas encore confirme
3. Patient Confirme
- arrangedForPatient = true
-> Statut : ORGANISEE
4. SOINS TERMINES (eventuellement)
- active = false
- arrangedForPatient = true (reste)
-> Statut : TERMINEE
Ou Annulation
3bis. PATIENT ANNULE
- active = false
- arrangedForPatient reste null/false
-> Statut : ANNULEE
8. References Techniques
Entite :
- lib/modules/carerequest/domain/entities/carerequest_entity.dart
- arrangedForPatient: bool?
- arrangedForCareGiver: Map
- active: bool
Use Case :
- lib/modules/carerequest/domain/usecases/update_carerequest_arranged_use_case.dart
Controllers :
- lib/modules/home/presentation/controllers/request_detail_screen_controller.dart
- lib/core/presentation/controllers/request_card_controller.dart
Repository :
- lib/modules/carerequest/domain/repositories/carerequest_repository.dart
- updateCareRequestAsArranged()
Providers :
- availableCareRequestsForCaregiverProvider (demandes non arrangees)
- arrangedCareRequestsForCaregiverProvider (demandes arrangees par l'infirmiere)