🔧 Résumé Technique
Caredeal - Resume Technique De L'Application
1. Presentation Generale
CareDeal est une application mobile Flutter de mise en relation entre :
- Des PATIENTS (personnes ayant besoin de soins infirmiers a domicile)
- Des INFIRMIERS/INFIRMIERES (professionnels de sante)
- Des ORGANISATIONS (entreprises de soins)
L'application permet aux patients de creer des demandes de soins et aux
professionnels de sante de consulter et repondre a ces demandes.
Marche cible : Belgique (code pays par defaut +32)
2. TYPES D'UTILISATEURS (UserType)
Fichier source : lib/core/domain/entities/user_type.dart
Trois types d'utilisateurs :
a) PATIENT
- Utilisateur recherchant des soins a domicile
- Peut creer des demandes de soins
- Flux d'inscription simplifie (telephone uniquement)
b) CAREGIVER (Infirmier/Infirmiere)
- Professionnel de sante individuel
- Doit fournir un numero INAMI (identifiant belge)
- Doit telecharger une piece d'identite (recto/verso)
- Peut consulter et repondre aux demandes de soins
c) ORGANIZATION (Entreprise/Organisation)
- Structure de soins avec plusieurs professionnels
- Meme processus d'inscription que les caregivers
- Alias "company" pour retrocompatibilite
3. Flux D'Inscription
A) Patient (onboarding module)
Fichiers principaux :
- lib/modules/onboarding/presentation/controllers/user_goal_controller.dart
- lib/modules/onboarding/presentation/controllers/registration_form_controller.dart
Etapes :
1. Selection du role (Patient ou Caregiver)
2. Saisie du numero de telephone
3. Verification par SMS (code OTP 6 chiffres)
4. Creation du compte dans Firebase Auth
5. Creation de l'entite User en base de donnees
B) Caregiver/Organization (caregiver module)
Fichiers principaux :
- lib/modules/caregiver/presentation/controllers/registration_form_controller.dart
- lib/modules/caregiver/presentation/controllers/registration_step.dart
Etapes :
1. Selection du type (Caregiver individuel ou Organization)
2. Saisie du numero INAMI (11 chiffres)
3. Creation du profil (nom, prenom, email, langues acceptees)
4. Definition de la zone d'activite (geolocalisation)
5. Upload des documents d'identite (recto + verso)
6. Verification du numero de telephone par SMS
7. Confirmation du code SMS
8. Validation et creation du compte
4. DEMANDES DE SOINS (CareRequest)
Fichier source : lib/modules/carerequest/domain/entities/carerequest_entity.dart
Champs principaux d'une demande :
- uuid : identifiant unique
- userUuid : UUID du createur de la demande
- phoneNumber : numero de contact (OBLIGATOIRE)
- patientPhoneNumber : numero du patient (si different du contact)
- contactPersonType : type de personne de contact (patient, family, friend, professional)
- firstNamePatient, lastNamePatient, birthDatePatient : infos patient
- addressString, address (Geolocation) : lieu de l'intervention
- careServiceTypes : types de soins demandes
- dailyFrequency : frequence quotidienne
- languagePatientISO : langues parlees par le patient
- active : demande active ou non
- arrangedForPatient : demande organisee pour le patient (bool?)
- arrangedForCareGiver : Map
- arrangements par caregiver
5. TYPES DE CONTACT (ContactPersonType)
Fichier source : lib/core/domain/entities/contact_person_type.dart
Enum definissant qui fait la demande :
- patient : le patient lui-meme
- family : un membre de la famille
- friend : un ami
- professional : un professionnel (ex: assistante sociale)
IMPORTANT : Il n'existe PAS de role "assistante sociale" dans l'application.
Les assistantes sociales utilisent le type "professional" lors de la creation
d'une demande de soins pour un patient.
6. Gestion Des Numeros De Telephone
A) Pour les Patients :
- phoneNumber : numero principal du compte (saisi a l'inscription)
- Utilise comme numero de contact par defaut dans les demandes
B) Pour les Caregivers :
- number : champ dans CaregiverEntity (lib/modules/caregiver/domain/entities/caregiver_entity.dart)
- Saisi lors de l'inscription et verifie par SMS
C) Dans les demandes de soins :
- phoneNumber : numero de la personne de contact (OBLIGATOIRE)
- patientPhoneNumber : numero du patient si different du contact (optionnel)
Logique (lib/modules/carerequest/presentation/controllers/carerequest_form_controller.dart, ligne 238):
- Si patientPhoneNumber est fourni -> utilise patientPhoneNumber
- Sinon -> utilise phoneNumber (numero du compte)
7. Statuts Des Demandes De Soins
Fichier source : lib/core/presentation/controllers/request_card_controller.dart
Il n'y a PAS d'enum "status" explicite. Le statut est determine par combinaison de champs :
A) arrangedForPatient (bool?) :
- null ou false : demande en cours (pas encore organisee)
- true : demande organisee/planifiee pour le patient
B) arrangedForCareGiver (Map
- Map vide : aucun caregiver n'a arrange
- Contient des entrees : certains caregivers ont "arrange" (contacte/planifie)
C) active (bool) :
- true : demande active
- false : demande terminee ou annulee
Etats calcules (request_card_controller.dart) :
- isArranged : arrangedForPatient == true && active
- isOngoing : arrangedForPatient != true && active && < 24h
- isCancelled : !active && arrangedForPatient != true
- isCompleted : !active && arrangedForPatient == true
8. Actions Sur Les Demandes
Fichier source : lib/modules/home/presentation/controllers/request_detail_screen_controller.dart
A) Marquer comme organisee (markAsArranged) :
- Patient : met arrangedForPatient = true
- Caregiver : ajoute son UUID dans arrangedForCareGiver
B) Annuler une demande :
- Patient (cancelRequestPatient) : desactive la demande (active = false)
- Caregiver (cancelRequestCaregiver) : retire son arrangement
C) Appeler un patient (initiateCall) :
- Necessite un plan actif
- Utilise le numero de telephone de la demande
9. Architecture Technique
- Framework : Flutter
- Backend : Firebase (Auth, Firestore, Functions, Cloud Messaging)
- State Management : Riverpod avec code generation
- Architecture : Clean Architecture (data/domain/presentation)
- Navigation : GoRouter avec NavigationService centralise
- Modeles : Freezed pour l'immutabilite
- Pays cible : Belgique (code pays +32 par defaut)
10. Questions/Points D'Attention
a) Le terme "assistante sociale" n'existe pas dans le code
-> Utilise ContactPersonType.professional
b) Les termes "organisee" et "planifiee" sont utilises de maniere interchangeable
-> Correspondent tous deux a arrangedForPatient = true
c) Verification des caregivers :
-> Statut initial = pendingVerification
-> Un admin doit les valider pour passer a "active"