📋 UC04: Demande Patient
Use Case Uc04 Demande De Soins Introduite Par Un Patient
NOM DU USE CASE : Creation d'une demande de soins par un Patient
ACTEUR PRINCIPAL : Patient (utilisateur avec un compte de type "patient")
Objectif Metier
Permettre a une personne ayant besoin de soins infirmiers a domicile de creer
une demande qui sera visible par les infirmieres de sa zone geographique.
Preconditions
- L'utilisateur a un compte CareDeal de type "patient"
- L'utilisateur est connecte a l'application
- L'utilisateur connait les informations du beneficiaire des soins
SCENARIO NOMINAL (Happy Path)
- L'utilisateur clique sur le bouton "Nouvelle demande" ou "+"
- Le formulaire de creation de demande s'affiche
- L'ecran affiche la liste des types de soins disponibles
- L'utilisateur selectionne un ou plusieurs types de soins parmi :
- Aide a la toilette (toiletHelp)
- Soins de plaies (woundCare)
- Injections (injection)
- Pansements (bandages)
- Therapie insulinique (insulinTherapy)
- Therapie par perfusion (infusionTherapy)
- L'utilisateur clique sur "Suivant"
- L'ecran demande la frequence quotidienne des soins
- L'utilisateur indique combien de fois par jour les soins sont necessaires
- L'utilisateur clique sur "Suivant"
- L'ecran demande l'adresse ou les soins seront dispenses
- L'utilisateur saisit l'adresse complete
- Le systeme geolocalise l'adresse
- L'utilisateur confirme la localisation sur la carte
- L'utilisateur clique sur "Suivant"
- L'ecran demande les informations du beneficiaire :
- Prenom (obligatoire)
- Nom (obligatoire)
- Date de naissance (obligatoire)
- Email (optionnel)
- Langues parlees (au moins une)
- L'utilisateur clique sur "Suivant"
- L'ecran demande qui est la personne de contact pour cette demande
- L'utilisateur selectionne parmi :
- Patient (le patient lui-meme)
- Famille (un membre de la famille)
- Ami (un ami du patient)
- Professionnel (assistante sociale, aide-soignant, etc.)
- L'utilisateur clique sur "Suivant"
CAS A : Patient existant avec compte
- Le numero de telephone du compte est automatiquement utilise
- Si le type de contact n'est PAS "patient", l'utilisateur peut ajouter
le numero du patient dans un champ separe
CAS B : Patient nouveau (premiere demande sans compte)
- L'ecran de verification du telephone s'affiche
- L'utilisateur saisit son numero
- Verification par SMS
- L'ecran affiche un resume complet de la demande
- L'utilisateur verifie toutes les informations
- L'utilisateur clique sur "Confirmer" ou "Soumettre"
- Le systeme cree l'entite CareRequestEntity avec :
- uuid : identifiant unique genere
- userUuid : UUID de l'utilisateur connecte
- phoneNumber : numero de contact
- patientPhoneNumber : numero du patient (si different)
- contactPersonType : type de contact selectionne
- careServiceTypes : liste des soins selectionnes
- address : geolocalisation
- addressString : adresse textuelle
- dailyFrequency : frequence quotidienne
- firstNamePatient, lastNamePatient, birthDatePatient : infos patient
- languagePatientISO : langues du patient
- createdAt : date/heure actuelle
- active : true
- arrangedForPatient : null (pas encore organise)
- arrangedForCareGiver : {} (map vide)
- Le systeme envoie la demande au backend
- L'ecran de succes s'affiche
- Le nombre d'infirmieres disponibles dans la zone est affiche
- L'utilisateur peut retourner a l'accueil ou voir sa demande
SCENARIOS ALTERNATIFS / ERREURS
A1 : Aucun type de soin selectionne (Etape 2)
- Le bouton "Suivant" reste desactive
- L'utilisateur doit selectionner au moins un type de soin
A2 : Adresse non trouvee (Etape 4)
- Message : "Adresse introuvable"
- L'utilisateur doit corriger l'adresse ou la saisir manuellement
A3 : Informations patient incompletes (Etape 5)
- Les champs obligatoires sont indiques
- Le bouton "Suivant" reste desactive tant que les champs ne sont pas remplis
A4 : Date de naissance invalide (Etape 5)
- Le systeme verifie que la date est dans le passe
- Message : "Date de naissance invalide"
A5 : Aucune langue selectionnee (Etape 5)
- Message : "Veuillez selectionner au moins une langue"
- L'utilisateur doit selectionner une langue
A6 : Numero de telephone invalide (Etape 7)
- Message : "Format de numero invalide"
- L'utilisateur doit corriger le numero
A7 : Compte deja existant avec ce numero (Etape 7 - nouveau patient)
- Message : "Un compte existe deja avec ce numero"
- Proposition de se connecter
A8 : Erreur reseau lors de la soumission (Etape 9)
- Message : "Erreur de connexion. Veuillez reessayer."
- L'utilisateur peut reessayer
En cas de succes :
- Une entite CareRequestEntity est creee dans Firestore
- La demande apparait dans l'onglet "En cours" de l'utilisateur
- La demande est visible par les infirmieres dont la zone d'activite couvre
l'adresse de la demande
- Le backend peut notifier les infirmieres concernees (si notifications actives)
Suivi de la demande :
- La demande a le statut "en cours" (active=true, arrangedForPatient=null)
- L'utilisateur peut voir sa demande dans l'application
- L'utilisateur peut annuler sa demande si necessaire
- L'utilisateur peut marquer la demande comme "organisee" quand un soignant
a ete trouve
Logique dans carerequest_form_controller.dart (ligne 238) :
1. Si patientPhoneNumber est fourni et non vide :
-> phoneToStore = patientPhoneNumber
2. Sinon :
-> phoneToStore = phoneNumber (numero du compte)
Cas d'usage :
- Patient qui fait sa propre demande :
- contactPersonType = "patient"
- phoneNumber = numero du compte (utilise)
- patientPhoneNumber = null (non necessaire)
- Famille/Ami/Pro qui fait une demande pour le patient :
- contactPersonType = "family" ou "friend" ou "professional"
- phoneNumber = numero du compte (personne de contact)
- patientPhoneNumber = numero du patient (optionnel)
Ecrans du formulaire :
- lib/modules/carerequest/presentation/screens/what_screen.dart
- lib/modules/carerequest/presentation/screens/when_screen.dart
- lib/modules/carerequest/presentation/screens/where_screen.dart
- lib/modules/carerequest/presentation/screens/who_screen.dart
- lib/modules/carerequest/presentation/screens/contact_person_screen.dart
- lib/modules/carerequest/presentation/screens/phone_number_verification_screen.dart
- lib/modules/carerequest/presentation/screens/request_summary_screen.dart
- lib/modules/carerequest/presentation/screens/success_screen.dart
Controllers :
- lib/modules/carerequest/presentation/controllers/carerequest_form_controller.dart
- lib/modules/carerequest/presentation/controllers/carerequest_form_navigation_state.dart
- lib/modules/carerequest/presentation/controllers/care_request_submission_controller.dart
- lib/modules/carerequest/presentation/controllers/form_validation_controller.dart
Entites :
- lib/modules/carerequest/domain/entities/carerequest_entity.dart
- lib/core/domain/entities/contact_person_type.dart
- lib/core/domain/entities/care_service_type.dart
Use Cases :
- lib/modules/carerequest/domain/usecases/create_carerequest_use_case.dart
Repository :
- lib/modules/carerequest/domain/repositories/carerequest_repository.dart