diff --git a/README.md b/README.md
index 5b8cb57a6840453609f6a819b5d5cfab9120c9cd..de5d0b43b3d06871d838d569f61be735af9be3b4 100644
--- a/README.md
+++ b/README.md
@@ -62,10 +62,10 @@ La démo est accessible avec l'url https://sdk-go.127.0.0.1.nip.io
 - `./data` contient les bases de données locales sqlite, users.db pour les utilisateurs et test.db pour le modèle de donnée
 - `./dev-certificates` contient les fichiers nécessaires pour servir l'application en HTTPS durant le développement.
 - `./internal` contient les paquets nécessaires au développement de l'application
-    - `./auth` contient la gestion des utilisateurs et des droits sur l'application
-    - `./mocks` permet de mocker l'API d'authentification pour passer les tests
-    - `./models` permet de définri le modèle de données et les API qui seront servies par le back-end
-    - `./rootmux` contient le fichier `rootmux.go` qui permet de servir les APIs, de gérer l'authentification, de servir le site web et la gestion des cookies utilisateurs. Le répertoire contient également tous les tests d'intégration sur les APIs.
+  - `./auth` contient la gestion des utilisateurs et des droits sur l'application
+  - `./mocks` permet de mocker l'API d'authentification pour passer les tests
+  - `./models` permet de définri le modèle de données et les API qui seront servies par le back-end
+  - `./rootmux` contient le fichier `rootmux.go` qui permet de servir les APIs, de gérer l'authentification, de servir le site web et la gestion des cookies utilisateurs. Le répertoire contient également tous les tests d'intégration sur les APIs.
 - `./miscellaneous/keycloack` contient un environnement Keycloack qui peut être utilisé pour déployer un environnement OAuth2
 - `./pkg` contient les diffférents package génériques qui permettent de gérer les logs applicatifs, de créer les fonctiones de tests, la gestion des tokens...
 - `./web` est le répertoire où est stockée l'application front-end et publié par le serveur back-end.
@@ -150,12 +150,60 @@ Dans le fichier `web/assets/brand/manifest.js`, remplacer :
 
 C'est dans le fichier `models.go` que doit être définit le modèle de donnée de l'application.
 
+> Ce qui suit sont des recommandations :
+
+Créer un fichier par objet du modèle en suivant la structure des fichiers `bankers.go` ou `client.go`
+
+Dans le répertoire `./rootmux` écrire les tests métiers (ex : mettre à jour le montant sur le compte bancaire d'un client lorsqu'il effectue une opération) dans le fichier `rootmux_test.go`.  
+Les tests concernant les droits et les réponses attendues par utilisateur (ex : un banquier n'a accès qu'aux client qui lui sont rattachés et pas aux autres) peuvent être écrit dans des fichiers différent par type de droits différent (ex : `banker_test.go` pour tester les droits des banquiers)
+
+### Création de rôles
+
+> ATTENTION : le rôle "ADMIN" est obligatoire dans l'application car permet de gérer les utilisateurs et leurs droits. Sans celui-ci est sans utilisateurs ayant ce rôle dans la base, il est impossible de créer de nouveaux utilisateurs !
+
+En mode InMemory (utilisateurs dans la bases locales) L'API de gestion des utilisateurs suit ce format :
+
+```json
+{ "login": "UserTest", "password": "password", "role": "CLIENT" }
+```
+
+Il suffit donc de remplacer "CLIENT" par n'importe quelle valeur pour créer un nouveau rôle
+
+> Si vous utilisez l'interface web du SDK pour la gestion des utilisateurs, pour définir les rôles possibles il faut modifier les options dans le menu `select` du fichier `./web/components/users/handleUser.js`
+>
+> ```html
+> <select name="role" id="users-modal-role">
+>   <option value="CLIENT">Client</option>
+>   <option value="BANKER">Banquier</option>
+>   <option value="ADMIN">Administrateur</option>
+> </select>
+> ```
+
+**Rôles à partir d'OAuth2**
+Pour définir des rôles automatiquement à partir d'une connexion OAuth2 et un groupe applicatif donné il faut dans la fonction `addUserInMemory` du fichier `./internal/auth/oauth2.go` rajouter la condition qui permet d'identifier le groupe applicatif de l'utilisateur et de lui donner le rôle qui correspond
+
+```go
+if userRole != "" && (userRole == os.Getenv("ADMIN_GROUP")) {
+    user.Role = "ADMIN"
+    user.IsAdmin = true
+    break
+} else if userRole != "" && (userRole == os.Getenv("CLIENT_GROUP")) {
+    user.Role = "CLIENT"
+    user.IsAdmin = false
+    break
+} else {
+    return user, errors.New("user not in an app group")
+}
+```
+
+Un utilisateur qui n'est pas dans un groupe applicatif autorisé ne pourra pas accèder à l'applicaion
+
 ## Contribution
 
 Un bug découvert ? Une demande d'amélioration ? Une contribution à la dcoumentation ?
 
 Utilisé le système d'issue pour expliquer votre découverte ou votre poposition.
 
-Vous voulez contribuez directement au code ? 
+Vous voulez contribuez directement au code ?
 
-Créer une issue pour expliquer votre contribution, créer une branche à partir de cette issue, développer votre fonctionnalité sur la branche et faite une merge request.
\ No newline at end of file
+Créer une issue pour expliquer votre contribution, créer une branche à partir de cette issue, développer votre fonctionnalité sur la branche et faite une merge request.