📋 UC07: Gestion Téléphone
Use Case Uc07 Gestion Des Numeros De Telephone Dans Les Demandes
Ce document explique d'ou proviennent les numeros de telephone utilises lors
des demandes de soins et comment ils sont geres selon le type d'utilisateur.
1. Pour Les Patients
Source Du Numero
- Le numero provient du profil utilisateur (UserEntity.phoneNumber)
- Ce numero a ete verifie par SMS lors de l'inscription
- Il est stocke au format international (+32xxxxxxxxx)
Lors D'Une Demande De Soins
- Le numero du compte est automatiquement pre-rempli
- Si le patient fait la demande pour lui-meme :
- phoneNumber = numero du compte
- patientPhoneNumber = null (pas necessaire)
- Si un proche fait la demande (famille, ami) :
- phoneNumber = numero du proche (compte)
- patientPhoneNumber = numero du patient (optionnel)
Fichiers Sources
- lib/modules/user/domain/entities/user_entity.dart (phoneNumber)
- lib/modules/carerequest/presentation/controllers/carerequest_form_controller.dart
2. Pour Les Assistantes Sociales
NOTE : Les assistantes sociales utilisent un compte de type "patient".
Source Du Numero
- Numero de l'assistante sociale (son compte)
- Verifie par SMS lors de l'inscription
Lors D'Une Demande De Soins
- phoneNumber = numero de l'assistante sociale (automatique)
- contactPersonType = "professional" (elle doit le selectionner)
- patientPhoneNumber = numero du patient beneficiaire (optionnel)
Comportement
- Les infirmieres appellent le numero de l'assistante sociale
- L'assistante sociale coordonne ensuite avec le patient
- Si le numero du patient est fourni, il peut etre utilise en complement
3. Pour Les Infirmieres
Source Du Numero
- Le numero provient du profil caregiver (CaregiverEntity.number)
- Ce numero a ete verifie par SMS lors de l'inscription
- Stocke au format international
LORS D'UNE DEMANDE DE SOINS (si l'infirmiere en cree une) :
- phoneNumber = numero de l'infirmiere (ou celui du patient selon le contexte)
- Le comportement exact depend de l'interface utilisee
Fichiers Sources
- lib/modules/caregiver/domain/entities/caregiver_entity.dart (number)
4. Logique De Selection Du Numero
Code Source
lib/modules/carerequest/presentation/controllers/carerequest_form_controller.dart
Lignes 233-259
ALGORITHME (methode buildCareRequestEntity) :
```dart
// Normalize empty string to null for patientPhoneNumber
final patientPhone = state.patientPhoneNumber?.isEmpty ?? false
? null
: state.patientPhoneNumber;
// Use patient phone if provided, otherwise use account phone
final phoneToStore = patientPhone ?? state.phoneNumber!;
return CareRequestEntity(
// ...
phoneNumber: phoneToStore, // Numero principal stocke
patientPhoneNumber: patientPhone, // Numero patient (si different)
// ...
REGLES :
1. Si patientPhoneNumber est fourni et non vide :
-> phoneToStore = patientPhoneNumber
-> Le numero du patient devient le contact principal
2. Si patientPhoneNumber est vide ou null :
-> phoneToStore = phoneNumber (numero du compte)
-> Le numero du compte devient le contact principal
3. Dans tous les cas :
-> patientPhoneNumber stocke le numero du patient (si fourni)
5. Cas Ou Le Numero Est Manquant Ou Invalide
A. Numero Manquant A L'Inscription
- Impossible : le numero est OBLIGATOIRE pour creer un compte
- La verification SMS garantit qu'un numero valide est fourni
- Fichier : lib/modules/auth/presentation/controllers/phone_number_auth_controller.dart
B. Numero Invalide Format
- Validation lors de la saisie
- Regex : r'^\+[0-9]{1,4}[0-9]{4,15}$'
- Message d'erreur : "Format de numero de telephone invalide"
- Le bouton "Suivant" reste desactive
C. Numero Deja Utilise
- Le systeme verifie si le numero existe deja en base
- Message : "Un compte existe deja avec ce numero"
- Proposition de se connecter
- Fichier : lib/modules/user/domain/usecases/check_user_exists_by_phone.dart
D. Numero Non Joignable
- L'application ne verifie pas si le numero est joignable
- Seule la verification SMS initiale garantit la reception
E. Dans Une Demande De Soins
- phoneNumber est OBLIGATOIRE (champ required dans l'entite)
- Si non fourni, l'application refuse de creer la demande
- Validation : lib/modules/carerequest/presentation/controllers/form_validation_controller.dart
6. Format Des Numeros
Format Attendu
- Format international avec prefixe +
- Exemple Belgique : +32478123456
- Le 0 initial national est supprime
Widget De Saisie
- lib/core/presentation/widgets/phone_number_field.dart
- Selecteur de pays avec code automatique
- Pays par defaut : Belgique (+32)
- Validation via package phone_numbers_parser
Types Acceptes
- Numeros mobiles
- Numeros fixes
- Numeros VoIP
7. Tableau Recapitulatif
8. References Techniques
Entites :
- lib/modules/user/domain/entities/user_entity.dart
- lib/modules/caregiver/domain/entities/caregiver_entity.dart
- lib/modules/carerequest/domain/entities/carerequest_entity.dart
Validation :
- lib/core/utils/phone_number_utils.dart
- lib/modules/carerequest/presentation/controllers/form_validation_controller.dart
Widgets :
- lib/core/presentation/widgets/phone_number_field.dart
Controllers :
- lib/modules/carerequest/presentation/controllers/carerequest_form_controller.dart
- lib/modules/auth/presentation/controllers/phone_number_auth_controller.dart