# SONUM - Todo ## Base de données & Backend - [x] Schéma DB : tables établissements, solutions, éditeurs, blocs fonctionnels, logiciels_etablissements - [x] Schéma DB : tables demandes_contact, consultations (traçabilité), cgu_acceptances - [x] Données de référence : régions, types d'activité, blocs fonctionnels, états déploiement, modes hébergement - [x] Procédures tRPC : CRUD solutions et éditeurs - [x] Procédures tRPC : CRUD établissements et rattachement logiciels - [x] Procédures tRPC : moteur de recherche multicritères - [x] Procédures tRPC : fiche logiciels + compteur consultation - [x] Procédures tRPC : prise de contact (email + notification) - [x] Procédures tRPC : demandes de contact (liste, réponse) - [x] Procédures tRPC : CGU (vérification + acceptation) - [x] Procédures tRPC : gestion des rôles (admin/user) ## Interface & Design - [x] Design system : couleurs FEHAP, typographie, tokens CSS - [x] Layout principal avec navigation (sidebar + header) - [x] Page de connexion / landing - [x] Modale Charte CGU (1ère connexion) - [x] Page d'accueil : moteur de recherche multicritères - [x] Page résultats de recherche (tableau triable) - [x] Page "Mes Établissements" (accordéons) - [x] Formulaire de saisie guidé en étapes (rattacher une solution) - [x] Mode édition complète inline des tableaux - [x] Page fiche logiciels d'un établissement - [x] Modale prise de contact - [x] Page "Mes Demandes de Contact" - [x] Interface gestionnaire SONUM (accès admin) - [x] Lien retour espace adhérent FEHAP ## Tests - [x] Tests unitaires procédures tRPC (14 tests passés) ## Évolution v2 — Profil Adhérent FEHAP & Auth locale ### Base de données - [x] Étendre enum sonumRole : ajouter "adherent" - [x] Table local_users : id, userId (FK), passwordHash, createdAt - [x] Vérifier que la table users supporte les comptes créés manuellement (sans openId OAuth) ### Backend tRPC - [x] Procédure admin.createUser : créer un utilisateur manuellement (nom, email, rôle, mot de passe) - [x] Procédure admin.listUsers : liste complète des utilisateurs avec rôle et établissements - [x] Procédure admin.updateUser : modifier nom, email, rôle d'un utilisateur - [x] Procédure admin.deleteUser : supprimer un utilisateur - [x] Procédure admin.setAffectations : affecter un ou plusieurs établissements à un adhérent - [x] Procédure admin.removeEtablissement : retirer un établissement d'un adhérent (inclus dans setAffectations) - [x] Procédure auth.loginLocal : authentification par email + mot de passe (JWT session) - [x] Middleware : les adhérents FEHAP voient uniquement leurs établissements affectés ### Interface - [x] Page de choix de connexion : OAuth FEHAP vs Connexion locale - [x] Formulaire de connexion locale (email + mot de passe) - [x] Page admin : onglet "Gestion des utilisateurs" avec tableau et actions CRUD - [x] Page admin : affectations établissements inline dans le tableau utilisateurs - [x] Badge "Adhérent FEHAP" dans le header et la sidebar - [x] Vue "Mes Établissements" filtrée pour les adhérents (uniquement les établissements affectés) ## Évolution v3 — Gestion des établissements par utilisateur - [x] Étendre admin.setAffectations pour accepter tous les rôles (référent + adhérent) - [x] Interface Admin : panneau dédié "Établissements" par utilisateur avec liste complète, barre de recherche et cases à cocher - [x] Afficher le nombre d'établissements affectés dans le tableau utilisateurs ## Évolution v4 - [x] CGU : afficher à chaque connexion (réinitialiser à chaque login, pas seulement à la fermeture du navigateur) - [x] Moteur de recherche : corriger les filtres multicritères qui ne fonctionnent pas - [x] Page "Mes Solutions Numériques" : liste de toutes mes solutions avec les établissements les utilisant (accordéon) - [x] Page "Solutions Logicielles" : liste globale des solutions avec établissements équipés (accordéon), accessible depuis la sidebar - [x] Admin : onglet import établissements (CSV/Excel) - [x] Admin : onglet import contacts (CSV/Excel) ## Évolution v5 - [x] Solutions Logicielles : toggle vue accordéon / vue liste à plat (solutions + établissements visibles sans clic) ## Évolution v6 - [x] Admin : onglet "Éditeurs" — CRUD éditeurs (ajouter, modifier, supprimer) - [x] Admin : onglet "Blocs fonctionnels" — CRUD blocs fonctionnels (ajouter, modifier, supprimer) - [x] Backend : procédures tRPC CRUD éditeurs (createEditeur, updateEditeur, deleteEditeur) - [x] Backend : procédures tRPC CRUD blocs fonctionnels (createBlocFonctionnel, updateBlocFonctionnel, deleteBlocFonctionnel) - [x] Backend : procédure statistiques (stats par bloc fonctionnel, par région, taux de remplissage) - [x] Page "Tableau de bord" : graphiques recharts (barres, camembert, indicateurs clés) - [x] Lien "Tableau de bord" dans la sidebar (visible uniquement gestionnaires) ## Évolution v7 - [x] Vue liste Solutions Logicielles : alternance de couleurs de fond (blanc / bleu clair) à chaque changement de solution pour améliorer la lisibilité ## Évolution v8 — Skill itinova-user-management - [x] Schéma DB : ajout champs firstName, lastName, login, isActive dans table users - [x] Schéma DB : migration enum role (admin/standard/readonly) - [x] db.ts : createLocalUser étendu (firstName, lastName, login, role, isActive) - [x] db.ts : authenticateLocalUser accepte login ou email - [x] db.ts : updateUser étendu avec nouveaux champs - [x] routers.ts : loginLocal accepte login ou email (pas seulement email) - [x] routers.ts : middleware writeProcedure pour bloquer mutations readonly - [x] routers.ts : updateUser étendu avec firstName, lastName, login, role, isActive - [x] Admin.tsx : formulaire création/édition avec firstName, lastName, login, role, isActive - [x] Login.tsx : page de choix avec logo FEHAP - [x] LoginLocal.tsx : formulaire connexion locale avec logo FEHAP (haut) et Santinova (bas) - [x] Seed admin : compte admin@sonum.fr / Admin2024! créé ## Correction v8b — Seed admin conforme au skill - [x] seed-admin.mjs : créer le compte adminItinova / Itinova69! (login=adminItinova, email=adminItinova@santinova-soft.org, rôle=admin) - [x] Nettoyage de l'ancien compte mal créé (id=180019) - [x] Redéploiement Gitea avec seed corrigé