📋 UC01: Compte Patient
Use Case Uc01 Creation D'Un Compte Pour Un Patient
NOM DU USE CASE : Creation d'un compte Patient
ACTEUR PRINCIPAL : Patient (personne recherchant des soins a domicile)
Objectif Metier
Permettre a une personne ayant besoin de soins infirmiers a domicile de creer
un compte sur l'application CareDeal afin de pouvoir ensuite creer des demandes
de soins.
Preconditions
- L'utilisateur a installe l'application CareDeal sur son smartphone
- L'utilisateur possede un numero de telephone mobile valide (format belge +32 recommande)
- L'utilisateur n'a pas deja un compte avec ce numero de telephone
- L'utilisateur a acces a ses SMS pour recevoir le code de verification
SCENARIO NOMINAL (Happy Path)
- L'utilisateur lance l'application CareDeal
- L'ecran d'accueil/onboarding s'affiche
- L'utilisateur voit deux options : "Patient" et "Caregiver"
- L'utilisateur selectionne "Patient"
- L'ecran de verification du telephone s'affiche
- L'utilisateur voit un champ avec le code pays preselectionne (+32 pour la Belgique)
- L'utilisateur saisit son numero de telephone (sans le 0 initial)
- Le bouton "Suivant" devient actif quand le format est valide
- L'utilisateur appuie sur "Suivant"
- Le systeme verifie que le numero n'est pas deja utilise
- Le systeme envoie un SMS avec un code a 6 chiffres via Firebase Auth
- L'ecran de confirmation du code s'affiche
- L'utilisateur recoit le SMS avec le code
- L'utilisateur saisit le code a 6 chiffres
- L'utilisateur peut demander le renvoi du code si necessaire
- Le systeme verifie le code OTP aupres de Firebase Auth
- Si valide, le compte Firebase Auth est cree
- L'entite User est creee en base de donnees avec :
- uuid : identifiant unique
- phoneNumber : numero verifie
- userRole : "patient"
- languageISO : langue de l'appareil
- hasRated : false
- devices : configuration de l'appareil actuel
- L'ecran de fin d'onboarding s'affiche
- L'utilisateur peut commencer a utiliser l'application
SCENARIOS ALTERNATIFS / ERREURS
A1 : Numero de telephone invalide (Etape 3)
- Le systeme affiche une erreur de format
- Message : "Format de numero de telephone invalide"
- L'utilisateur doit corriger le numero
[Code erreur : LocaleKeys.phone_number_invalid_format]
A2 : Numero de telephone deja utilise (Etape 4)
- Le systeme detecte qu'un compte existe deja avec ce numero
- Message : "Un compte existe deja avec ce numero"
- Un lien "Se connecter" est propose
- L'utilisateur peut se connecter au lieu de creer un compte
A3 : Echec d'envoi du SMS (Etape 4)
- Le systeme n'arrive pas a envoyer le SMS
- Causes possibles :
- Probleme reseau
- Trop de tentatives (rate limiting)
- Numero invalide
- Messages possibles :
- "Erreur reseau. Verifiez votre connexion."
- "Trop de tentatives. Reessayez plus tard."
A4 : Code de verification incorrect (Etape 5)
- Le code saisi ne correspond pas
- Message : "Code incorrect"
- L'utilisateur peut reessayer ou demander un nouveau code
[Code erreur : LocaleKeys.incorrect_code]
A5 : Code de verification expire (Etape 5)
- Le code a expire (delai depasse)
- Message : "Code expire. Demandez un nouveau code."
- L'utilisateur doit demander un renvoi du code
[Code erreur : LocaleKeys.session_expired]
A6 : Quota SMS depasse (Etape 4)
- Firebase limite le nombre de SMS
- Message : "Quota SMS depasse. Reessayez plus tard."
- L'utilisateur doit attendre avant de reessayer
En cas de succes :
- Un compte Firebase Auth est cree avec le numero de telephone
- Une entite User est creee dans Firestore avec :
- uuid : identifiant unique Firebase
- phoneNumber : "+32xxxxxxxxx" (format international)
- email : "" (vide pour les patients)
- userRole : UserType.patient
- languageISO : langue de l'appareil (ex: "fr")
- hasRated : false
- devices : map avec l'appareil actuel et sa config FCM
- L'utilisateur est authentifie et peut acceder a l'application
- L'utilisateur peut creer des demandes de soins
Fichiers principaux :
- lib/modules/onboarding/presentation/screens/user_goal_screen.dart
- lib/modules/onboarding/presentation/screens/phone_number_verification_screen.dart
- lib/modules/onboarding/presentation/screens/confirm_phone_number_verification_screen.dart
- lib/modules/onboarding/presentation/screens/onboarding_end_screen.dart
Controllers :
- lib/modules/onboarding/presentation/controllers/user_goal_controller.dart
- lib/modules/onboarding/presentation/controllers/registration_form_controller.dart
- lib/modules/auth/presentation/controllers/phone_number_auth_controller.dart
- lib/modules/auth/presentation/controllers/verification_code_controller.dart
Use Cases :
- lib/modules/auth/domain/usecases/verify_phone_number_usecase.dart
- lib/modules/auth/domain/usecases/verify_code_usecase.dart
- lib/modules/user/domain/usecases/create_user.dart
Entites :
- lib/modules/user/domain/entities/user_entity.dart
- lib/core/domain/entities/user_type.dart
Repository :
- lib/modules/auth/domain/repositories/auth_repository.dart