## Table des Matières - [Installation](#installation) - [security](#security) - [backend](#backend) - [silaccess](#silaccess) - [frontend](#frontend) - [scripts](#scripts) - [simulator](#simulator) ## Installation ### Étape 1: Installation de MariaDB Commencez par mettre à jour la liste des paquets et les paquets eux-mêmes. Installez MariaDB en exécutant la commande suivante: ```bash sudo apt update && sudo apt upgrade sudo apt-get install mariadb-server ``` ### Étape 2: Sécurisation de MariaDB Après l'installation, sécurisez votre installation MariaDB: ```bash sudo mysql_secure_installation ``` ### Étape 3: Création d'un Utilisateur et Attribution des Privilèges Connectez-vous au shell de MariaDB: ```bash sudo mysql -u root -p ``` Créez un nouvel utilisateur et attribuez-lui des privilèges. Remplacez `your_new_user` par le nom d'utilisateur souhaité et `password` par le mot de passe choisi. ```sql CREATE USER 'your_new_user'@'localhost' IDENTIFIED BY 'password'; GRANT ALL PRIVILEGES ON *.* TO 'your_new_user'@'localhost' WITH GRANT OPTION; FLUSH PRIVILEGES; EXIT; ``` ### Étape 4: Accès à MariaDB avec VS Code Assurez-vous d'avoir installé : - [Extension Database Client](https://marketplace.visualstudio.com/items?itemName=cweijan.vscode-database-client2) 1. Après l'installation de l'extension, ouvrez la palette de commandes (`Ctrl+Shift+P`). 2. Tapez `Database Client: Connect Database` et sélectionnez cette option. 3. Dans le menu de sélection de la base de données, choisissez `MariaDB`. 4. Remplissez les détails de connexion requis tels que : - Host : Adresse de l'hôte de votre base de données MariaDB (ex. `localhost` pour une instance locale). - Port : Le port sur lequel votre base de données MariaDB écoute (le port par défaut est `3306`). - User : Votre nom d'utilisateur pour la base de données. - Password : Le mot de passe associé à votre nom d'utilisateur. - Database : (Optionnel) Le nom de la base de données à laquelle vous souhaitez vous connecter directement. 5. Cliquez sur `Connect` pour établir la connexion. ### Étape 5: Accès à MariaDB via phpMyAdmin Pour consulter et gérer vos bases de données MariaDB via phpMyAdmin sur un serveur Ubuntu, suivez les étapes ci-dessous. Ces instructions sont conçues pour une configuration avec Apache et PHP 8.1. ``` sudo apt install phpmyadmin ``` Après l'installation, il est nécessaire de configurer Apache pour reconnaître phpMyAdmin. Utilisez les commandes suivantes pour créer un lien symbolique entre la configuration de phpMyAdmin et les configurations disponibles d'Apache, puis activez cette configuration. ``` sudo ln -s /etc/phpmyadmin/apache.conf /etc/apache2/conf-available/phpmyadmin.conf sudo a2enconf phpmyadmin.conf sudo systemctl restart apache2 ``` Assurez-vous que le module PHP approprié est installé et activé pour Apache. La commande suivante installe le module PHP 8.1 pour Apache. ``` sudo apt install libapache2-mod-php8.1 sudo systemctl restart apache2 ``` Une fois tout configuré, vous pouvez accéder à l'interface web de phpMyAdmin pour commencer à gérer vos bases de données MariaDB. Ouvrez votre navigateur web et allez à l'adresse suivante : ``` http://localhost/phpmyadmin ``` ## Installation de RabbitMQ ### Étape 1: Installation d'Erlang RabbitMQ nécessite Erlang pour fonctionner. Installez Erlang en exécutant: ```bash sudo apt-get install -y erlang ``` ### Étape 2: Ajout du dépôt RabbitMQ Ajoutez le dépôt RabbitMQ à votre liste de sources et la clé du dépôt: ```bash echo 'deb http://www.rabbitmq.com/debian/ testing main' | sudo tee /etc/apt/sources.list.d/rabbitmq.list wget -O- https://www.rabbitmq.com/rabbitmq-release-signing-key.asc | sudo apt-key add - ``` ### Étape 3: Installation et démarrage de RabbitMQ Mettez à jour votre liste de paquets puis installez RabbitMQ: ```bash sudo apt-get update sudo apt-get install rabbitmq-server sudo systemctl enable rabbitmq-server sudo systemctl start rabbitmq-server ``` Une fois RabbitMQ est démarrée, vous pouvez accéder à l'interface UI via http://localhost:15672 (ou le username et le mot passe: guest). ### Étape 4: Intégration de RabbitMQ dans le Projet Backend Notre architecture backend utilise RabbitMQ pour gérer de manière efficace et fiable l'envoi de notifications, notamment les SMS et les emails. Le flux de travail est décrit ci-dessous et illustré par un diagramme de séquence. ### Étape 5: Flux de Travail de Notification 1. **Publication de Message :** Le backend (Client) commence par publier un message (SMS ou Email) sur RabbitMQ. 2. **Transfert de Message :** RabbitMQ transfère ensuite ce message au `SubscriberService`. 3. **Traitement du Message :** Selon le type de message (SMS ou Email), le traitement se fait comme suit : - **SMS Message :** - `SubscriberService` appelle `TwilioTextMessageSenderService` (`TService`) avec les `TextOptions` pour l'envoi de SMS. - `TService` envoie la requête SMS à l'API Twilio. - Twilio renvoie une réponse à `TService`, qui à son tour renvoie le statut d'envoi au `SubscriberService`. - En fonction du statut, `SubscriberService` envoie un accusé de réception (Ack) ou un non-accusé (Nack) à RabbitMQ. - **Email Message :** - `SubscriberService` appelle `EmailService` avec les `EmailOptions` pour l'envoi d'Email. - `EmailService` envoie la requête Email au service d'Email (Azure). - Le service d'Email renvoie une réponse à `EmailService`, qui transmet le statut d'envoi au `SubscriberService`. - `SubscriberService` envoie ensuite un Ack ou Nack à RabbitMQ, selon le statut. ![update-request](https://cutt.ly/zw26rrd4) # Security ## Description Security est une API NestJs qui stocke les informations de connexion des patients dans la base de donnée security. Elle sépare les informations personnelles/l’authentification de la logique backend. ## Prérequis - Installation de MariaDB ## Mise en place de la base de donnée ### Étape 1 : Connexion au shell de MariaDB ```bash sudo mysql -u root -p ``` ### Etape 2 : Injection de la base de donnée Dans le dossier sql. Copier l'intégralité du fichier db_security.sql (`Ctrl+Shift+P`) et coller son contenu dans le shell mariaDB. ## Configuration Avant de lancer l'application, vous devez configurer les variables d'environnement nécessaires. Ces variables permettent de personnaliser l'application selon votre environnement de développement, de test ou de production. ### Création du fichier `.env` À la racine du projet, créez un fichier nommé `.env`. Ce fichier sera utilisé pour stocker les variables d'environnement. Le fichier `.env.security` se trouve dans `monespacebiogroup/config/dev/` (pour l'environnement de dev). Copiez le contenu du fichier `.env.security` fourni. Ce fichier contient un modèle des variables d'environnement requises par l'application. ```plaintext # App config PORT=3333 # Database settings DB_TYPE=mariadb DB_HOST=localhost DB_NAME=security DB_PORT=3306 DB_USER=dbuser DB_PASSWORD=NniNki5nd9KDyf6B HTTP_BASIC_USER=server HTTP_BASIC_PASS=24L7D5$jBcRL ``` ## Lancement de l'application ```bash npm install npm run start:dev ``` Une fois l'application démarrée, vous pouvez accéder à l'API via `http://localhost:3333` (ou le port configuré dans votre fichier `.env`). ## Points de terminaison Une collection Postman est disponible [ici](https://galactic-capsule-271187.postman.co/workspace/Bi_test~3679979d-8d3e-488e-ad98-b67aca4f6d78/collection/33531996-ea9dd2d1-4e86-4fdd-a337-224822901e08?action=share&creator=33532144&active-environment=33531996-50132d58-8867-4d6c-8cc6-7fa66ced8de4). ### Comptes Toutes les routes sont protégées par AuthBasicGuard qui assure que les requêtes sont authentifiées. Pour configurer l'authentification de base, vous devez définir les variables d'environnement suivantes dans votre fichier .env : ``` HTTP_BASIC_USER: Le nom d'utilisateur attendu pour l'authentification. HTTP_BASIC_PASS: Le mot de passe attendu pour l'authentification. ``` #### Trouver des comptes par ID de patients principaux - URL : ``/api/v1`` - Méthode : GET - Paramètres de la requête : - masterPatientId* : Un tableau d'ID de patients principaux, séparés par des virgules. (Array(string)) - Réponse : Un tableau des comptes correspondants. #### Connexion - URL : /api/v1/account/login - Méthode : POST - Corps de la requête : - userId* : L'identifiant de l'utilisateur. (string) - password* : Le mot de passe de l'utilisateur. (string) - Réponse : Les détails du compte. #### Connexion directe - URL : /api/v1/account/directLogin - Méthode : POST - Corps de la requête : - masterPatientId* : L'ID du patient principal. (number) - birthDate**: La date de naissance du patient principal au format YYYY-MM-DD. (string) - Réponse : Les détails du compte. #### Création de compte - URL : /api/v1/account/create - Méthode : POST - Corps de la requête : Un tableau de - masterPatientId* : L'ID du patient principal. (number) - firstName* : Le prénom de l'utilisateur. (string) - lastName* : Le nom de famille de l'utilisateur. (string) - dateOfBirth* : Date - La date de naissance de l'utilisateur. - phoneNumber* : Le numéro de téléphone de l'utilisateur. (string) - emailAddress* : L'adresse e-mail de l'utilisateur. (string) - sex* : Le sexe de l'utilisateur. (string) - Réponse : Confirmation de la création des comptes. #### Mise à jour de compte - URL : /api/v1/account/update - Méthode : PUT - Corps de la requête : Un tableau de - id* : L'identifiant unique du compte à mettre à jour. (number) - masterPatientId : L'ID du patient principal. (number) - firstName : Le prénom de l'utilisateur. (string) - lastName : Le nom de famille de l'utilisateur. (string) - dateOfBirth : Date - La date de naissance de l'utilisateur. - phoneNumber : Le numéro de téléphone de l'utilisateur. (string) - emailAddress : L'adresse e-mail de l'utilisateur. (string) - sex : Le sexe de l'utilisateur. (string) - Réponse : Confirmation de la mise à jour des comptes. #### Lister les comptes liés - URL : /api/v1/account/linkedAccount/:masterPatientId - Méthode : GET - Paramètres du chemin : - masterPatientId* : L'ID du patient principal. (number) - Réponse : Un tableau des comptes liés. #### Notifier les comptes liés - URL : /api/v1/account/notifyLinkedAccounts/:masterPatientId - Méthode : PUT - Paramètres du chemin : - masterPatientId* : L'ID du patient principal. - Corps de la requête : Un tableau d'ID des comptes liés. (Array(number)) - Réponse : Confirmation de la notification des comptes liés. ### Mot de passe Toutes les routes sont protégées par AuthBasicGuard qui assure que les requêtes sont authentifiées. #### Création de mot de passe - URL : /api/v1/password - Méthode : POST - Corps de la requête : - userId* : L'identifiant unique de l'utilisateur. (string) - dateOfBirth* : La date de naissance de l'utilisateur au format YYYY-MM-DD. (string) - password* : Le mot de passe choisi par l'utilisateur. (string) - passwordConfirmation* : Confirmation du mot de passe choisi, doit être identique au password. (string) - Réponse : UserDto avec les détails de l'utilisateur. #### Mise à jour de mot de passe - URL : /api/v1/password - Méthode : PUT - Corps de la requête : - userId* : L'identifiant unique de l'utilisateur. (string) - dateOfBirth* : La date de naissance de l'utilisateur. (string) - currentPassword* : Le mot de passe actuel de l'utilisateur. (string) - password* : Le nouveau mot de passe choisi par l'utilisateur. (string) - passwordConfirmation* : Confirmation du nouveau mot de passe, doit être identique au password. (string) - Réponse : UserDto mis à jour. #### Réinitialisation de mot de passe - URL : /api/v1/password/reset - Méthode : PUT - Corps de la requête : - userId* : L'identifiant unique de l'utilisateur. (string) - dateOfBirth* : La date de naissance de l'utilisateur au format YYYY-MM-DD. (string) - password* : Le mot de passe choisi par l'utilisateur. (string) - passwordConfirmation* : Confirmation du mot de passe choisi, doit être identique au password. (string) - Réponse : UserDto mis à jour. #### Vérification d'utilisateur pour réinitialisation de mot de passe - URL : /api/v1/password/resetUserCheck - Méthode : GET - Paramètres de la requête : - email* : L'adresse e-mail de l'utilisateur, doit être une adresse e-mail valide. (string) - dateOfBirth* : La date de naissance de l'utilisateur. (string) - Réponse : UserResetPasswordDto avec les détails de l'utilisateur. #### Vérification d'expiration de mot de passe - URL : /api/v1/password/hasExpired - Méthode : GET - Authentification requise : Non - Paramètres de la requête : - userId : ID de l'utilisateur. - passwordExpiryRule : Règle d'expiration du mot de passe. - Réponse : Booléen indiquant si le mot de passe a expiré ou non. # Backend ## Description Le backend est le cœur de métier du projet. Il est en charge de l’organisation, de la récupération, du filtrage, de la consolidation et de l’exposition des données au Web. ## Prérequis - Installation de Security - Lancement de Security ## Mise en place de la base de donnée ### Étape 1 : Connexion au shell de MariaDB ```bash sudo mysql -u root -p ``` ### Etape 2 : Injection de la base de donnée Dans le dossier sql. Copier l'intégralité du fichier db_master.sql (`Ctrl+Shift+P`) et coller son contenu dans le shell mariaDB. ## Configuration Avant de lancer l'application, vous devez configurer les variables d'environnement nécessaires. Ces variables permettent de personnaliser l'application selon votre environnement de développement, de test ou de production. ### Création du fichier `.env` À la racine du projet, créez un fichier nommé `.env`. Ce fichier sera utilisé pour stocker les variables d'environnement. Le fichier `.env.security` se trouve dans `monespacebiogroup/config/dev/` (pour l'environnement de dev). Copiez le contenu du fichier `.env.backend` fourni. Ce fichier contient un modèle des variables d'environnement requises par l'application. ```plaintext # Environment application NODE_ENV=development # App config ERP_CONFIG_PATH=/etc/configs/erp JWT_PRIVATE_KEY=.ssh/id_rsa JWT_PUBLIC_KEY=.ssh/id_rsa_pem.pub JWT_MFA_PRIVATE_KEY=.ssh/id_rsa_mfa JWT_MFA_PUBLIC_KEY=.ssh/id_rsa_mfa_pem.pub JWT_SIGNUP_PRIVATE_KEY=.ssh/id_rsa_signup JWT_SIGNUP_PUBLIC_KEY=.ssh/id_rsa_signup_pem.pub JWT_GUEST_PRIVATE_KEY=.ssh/id_rsa_guest JWT_GUEST_PUBLIC_KEY=.ssh/id_rsa_guest_pem.pub JWT_SIGNUP_EXPIRE='1h' JWT_MFA_EXPIRE='1h' JWT_GUEST_EXPIRE='30d' JWT_EXPIRE='600s' # Database settings DB_TYPE=mariadb DB_HOST=database DB_LOGS_LEVEL=query DB_MASTERKALI_NAME=masterKali DB_DATAKALI_NAME=dataKali DB_PORT=3306 DB_USER=dbuser DB_PASSWORD=NniNki5nd9KDyf6B # Security SECURITY_HOST=security SECURITY_PORT=3333 SECURITY_USER=server SECURITY_PASSWORD=24L7D5$jBcRL # RabbitMQ RMQ_HOST=rabbitmq RMQ_EXCHANGE_NAME=biogroup.messaging RMQ_QUEUE_EMAIL_NAME=email RMQ_QUEUE_TEXT_NAME=text RMQ_PORT=5672 RMQ_USER=rmquser RMQ_PASS=rGzpT2gtAlDG67nm # Email Service AZ_EMAIL_SERVICES_PRIMARY_CONNECTION_STRING=endpoint=https://mon-espace-biogroup-fr-com-srv.communication.azure.com/;accesskey=acwweLPKvJJDDrK/yhi+dFSipa2VDTwUYFDPRSp1W1pFsPi62FJES0IreAvx8vSR+R4eV8sVyeGcvc11wEpgJg== AZ_EMAIL_SERVICES_MAIL_FROM=DoNotReply@biogroup.fr # Links NEW_ACCOUNT_LINK=https://monespace-dev.biogroup.fr/sso/signup GUEST_LINK=https://monespace-dev.biogroup.fr/sso/guest LOGIN_LINK=https://monespace-dev.biogroup.fr/sso/login RESET_PASSWORD_LINK=https://monespace-dev.biogroup.fr/sso/update-password STATIC_EMAIL_ASSET_LINK=https://monespace-dev.biogroup.fr/api/public/img EMAIL_NEGATIVE_REVIEW_LINK=https://forms.biogroup-lcd.fr/index.php/379629?lang=fr FACEBOOK_LINK=https://fr-fr.facebook.com/Biogroup.laboratoires/ TWITTER_LINK=https://twitter.com/biogroup_labo LINKEDIN_LINK=https://www.linkedin.com/company/biogroup-laboratoires/ GDPR_LINK=https://biogroup.fr/politique-protection-donnees-personnelles/ # Text Message Service TWILIO_ACCOUNT_SID=ACb4b3f69354eb97c93d69b96690395e27 TWILIO_AUTH_TOKEN=c9d53090d89b69061a716d1dfff4f3fe TWILIO_VERIFY_SERVICE=VAe06f31465dfdcb5c5f7224de774c0bf4 # Payment SOG_SITE_ID=97781193 SOG_KEY=pEwoxCzeRREkSren SOG_CTX_MODE=TEST SOG_URL_SUCCESS=https://monespace-dev.biogroup.fr/erp/:erpName/requests/:requestId/results SOG_URL_SUCCESS_GUEST=https://monespace-dev.biogroup.fr/guest/result SOG_URL_ERROR=https://monespace-dev.biogroup.fr SOG_URL_CANCEL=https://monespace-dev.biogroup.fr # ReCAPTCHA v2 RECAPTCHA_SECRET_KEY=6LcRWhspAAAAAJTtPK4nEBD743T29aPFQ2NYfmDk # Meritis #RECAPTCHA_SECRET_KEY=6Ld2dqsoAAAAAPhLGSYk5cPKXfHTP4LgIkgb1ZfH ``` ## Lancement de l'application ```bash npm install npm run start:dev ``` Une fois l'application démarrée, vous pouvez accéder à l'API via `http://localhost:3000` (ou le port configuré dans votre fichier `.env`). ## Point de terminaison ### Compte #### Connexion - Endpoint: /api/v1/user/login - Method: POST - Guard: LocalAuthGuard - Request Body: Aucun (l'authentification est gérée par le LocalAuthGuard). - Response: Retourne les informations de l'utilisateur authentifié avec ou sans workflow MFA, selon la configuration. #### Connexion directe - Endpoint: /api/v1/user/directLogin - Method: POST - Request Body: - token* : Le jeton unique d'identification. (string) - birthDate* : La date de naissance de l'utilisateur pour vérification supplémentaire. (string) - Response: L'utilisateur est authentifié directement avec un workflow MFA si activé. #### Récupèrer le profil de l'utilisateur - Endpoint: /api/v1/user/me - Method: GET - Guard: JwtAuthGuard - Request: Aucun corps de requête nécessaire. - Response: Les informations de profil de l'utilisateur authentifié. #### Notifier les comptes liés - Endpoint: /api/v1/user/notifyLinkedAccounts - Method: PUT - Guard: JwtAuthGuard - Request Body: - linkedAccountsIds : Un tableau des ID des comptes liés. (Array(number)) - Response: L'utilisateur est ré-authentifié. #### Vérifier la validité du lien d'authentification - Endpoint: /api/v1/user/authLinkValidity - Method: POST - Request Body: - token : Le jeton d'authentification à vérifier.(string) - Response: Vérifie la validité du jeton d'authentification. #### Vérifier la validité du jeton MFA - Endpoint: /api/v1/user/mfaTokenValidity - Method: POST - Request Body: - token : Le jeton d'authentification à vérifier.(string) - Response: Retourne les derniers chiffres du numéro de téléphone associé au compte, si le jeton est valide. #### Mise à jour de mot de passe - Endpoint: /api/v1/user/updatePassword - Method: PUT - Guard: JwtAuthGuard - Request Body: - token* : Le jeton unique d'identification. (string) - dateOfBirth* : La date de naissance de l'utilisateur. (string) - password* : Le mot de passe choisi par l'utilisateur. (string) - passwordConfirmation* : Confirmation du mot de passe choisi, doit être identique au password. (string) - Response: Confirmation de la mise à jour du mot de passe. #### Réinitialiser un mot de passe - Endpoint: /api/v1/user/resetPassword - Method: PUT - Request Body: - token* : Le jeton de réinitialisation. (string) - dateOfBirth* : La date de naissance pour vérification. (string) - password* : Le nouveau mot de passe choisi par l'utilisateur. (string) - passwordConfirmation* : Confirmation du nouveau mot de passe, doit être identique au password. (string) - Response: Confirmation de la réinitialisation du mot de passe. #### Initialiser un mot de passe - Endpoint: /api/v1/user/init - Method: POST - Request Body: - token* : Le jeton unique d'identification. (string) - dateOfBirth* : La date de naissance de l'utilisateur. (string) - password* : Le mot de passe choisi par l'utilisateur. (string) - passwordConfirmation* : Confirmation du mot de passe choisi, doit être identique au password. (string) - Response: Confirmation de l'initialisation du mot de passe. # Silaccess Silaccess est une API side-car conçue pour sécuriser les interactions avec la base de données de l'ERP Kalisil. Elle agit comme une couche anti-corruption, contrôlant le trafic et les transactions pour empêcher l'accès direct non sécurisé. Avant de démarrer l'application, vous devez configurer les variables d'environnement requises. Créez un fichier `.env` à la racine du projet et ajoutez les informations suivantes : ```env # App config API_KEY=9Qz5Hgf27vtFpxFl # Db config DB_USER=your_user DB_PASSWORD=your_pass DB_TYPE=mariadb DB_HOST=localhost DB_PORT=3306 DB_NAME=kalilab DB_TRACE_NAME=kalilabTrace # Dedalus Config DEDALUS_HOST=10.213.19.1 DEDALUS_PORT=443 DEDALUS_USERNAME=biogroupweb DEDALUS_PASSWORD="h5!Z4g9I=+Pt" PORT=3001 ``` Remplacez `your_user` et `your_pass` par vos identifiants de connexion à la base de données. Pour consommer les routes de l'API silaccess, utilisez l'API_KEY fournie dans le fichier .env comme valeur d'en-tête X-API-KEY pour l'authentification. ``` GET /some-protected-route X-API-KEY: 9Qz5Hgf27vtFpxFl ``` Démarrage de l'application ``` npm install npm run start:dev ``` Une fois l'application démarrée, vous pouvez accéder à l'API via `http://localhost:3001` (ou le port configuré dans votre fichier `.env`). # Simulator À des fins de développement, il est possible de simuler une base de données Kalisil afin d'éviter le traitement de données personnelles et médicales. Cette fonctionnalité est destinée à être utilisée uniquement dans des environnements locaux et de test. ### Lancement du simulateur Pour lancer le simulateur, exécutez les commandes suivantes dans le terminal de MariaDB: 1. Création des bases de données de test: ```bash source simulator/sql/create_db_test.sql; source simulator/sql/create_db_trace.sql; ``` 1. Démarrage du mode développement: ```bash npm install npm run start:dev ``` Ces étapes permettent de configurer et de démarrer le simulateur de base de données pour le développement sans manipuler de données réelles. # Fonctionnement ## Cron JOB Veuillez trouver ci-dessous le diagramme de séquence illustrant le processus d'aggrégation, de mise à jour de patients, et de mise à jour de requêtes. Ce diagramme offre une vue d'ensemble de l'interaction entre les différents composants du système. ### Aggrégation de patients - **Méthode :** `startAggregateJob` - **Fréquence :** Toutes les 60 secondes Cette fonction réalise des opérations complexes incluant la récupération et l'enrichissement des données des patients, le regroupement par un identifiant unique (hash), la création et l'enregistrement de nouvelles entités patients et de leurs associations dans la base de données. Elle prend également en charge la création de comptes utilisateurs pour les nouveaux patients, assurant l'intégration et la synchronisation des données patients entre divers systèmes ERP et le système central. ![aggregate](https://cutt.ly/Pw26rArQ) ### Mise à jour de patients - **Méthode :** `startCheckForPatientUpdate` - **Fréquence :** Toutes les 50 secondes La fonction `updateNewRequests()` est essentielle pour le suivi et la mise à jour des états des demandes dans le système de gestion des données. Elle veille à ce que les relations de tutelle soient gérées correctement suivant les mises à jour, informe les parties concernées des modifications importantes et notifie les patients et leurs gardiens lorsque les résultats sont disponibles pour consultation. ![update-patient](https://cutt.ly/Dw26r2pP) ### Mise à jour de requêtes - **Méthode :** `startUpdateRequestsJob` - **Fréquence :** Toutes les 40 secondes La fonction `collectPatientUpdate()` est conçue pour maintenir les informations des patients à jour et cohérentes dans le système de gestion de santé. Elle synchronise régulièrement les données avec celles des systèmes ERP, crée de nouveaux enregistrements de patients si nécessaire, met à jour les informations existantes, et propage ces mises à jour aux données de sécurité utilisateur, assurant ainsi l'intégrité et la sécurité des données patient dans l'ensemble du système. ![update-request](https://cutt.ly/Dw26tpP8) ## Parcours de l'utilisateur Un diagramme de flux peut montrer le parcours de l'utilisateur depuis la demande d'envoi du code MFA jusqu'à la vérification de ce code ![send-verify](https://cutt.ly/Sw9qfNP7) ## Intégration des Services Azure et Twilio Le Backend utilise les services Azure et Twilio pour l'envoi d'emails et de SMS respectivement. Ci-dessous, vous trouverez un diagramme illustrant les points d'intégration de ces services . ![azure-twillio](https://cutt.ly/mw9qWhaU)