# Gestion des Formations Manager Itinova - TODO

[... contenu existant conservé ...]

## Questionnaires de satisfaction et évaluation des acquis

- [x] Créer le schéma de base de données (tables questionnaires, questions, réponses)
- [x] Développer les procédures backend tRPC pour la gestion des questionnaires
- [x] Créer l'interface d'administration des questionnaires
- [x] Créer l'interface publique de réponse aux questionnaires
- [x] Implémenter l'envoi automatique post-formation
- [x] Créer les tableaux de bord d'analyse avec graphiques (satisfaction par formation/formateur)
- [ ] Implémenter les exports Excel/PDF des feedbacks
- [ ] Tester le système complet (création, envoi, réponse, analyse)
- [ ] Déployer sur le serveur VPS

## Amélioration : Prévisualisation des questionnaires

- [x] Ajouter un bouton "Prévisualiser" dans la page d'édition de questionnaire
- [x] Créer un modal de prévisualisation avec le rendu exact du questionnaire

## Exports et notifications pour les questionnaires

- [x] Créer les fonctions backend d'export Excel des résultats
- [x] Créer les fonctions backend d'export PDF des résultats
- [x] Ajouter les boutons d'export dans la page d'analyse
- [x] Implémenter le système de notifications pour les administrateurs
- [x] Envoyer une notification lors de chaque nouvelle réponse à un questionnaire

## Tableau de bord de suivi des questionnaires

- [x] Créer les fonctions backend pour les statistiques par formation
- [x] Créer les fonctions backend pour l'évolution temporelle
- [x] Créer les fonctions backend pour la comparaison par formateur
- [x] Créer les procédures tRPC pour le tableau de bord
- [x] Créer la page AdminQuestionnaireSuivi avec graphiques
- [x] Ajouter le lien dans le menu de navigation
- [x] Tester toutes les fonctionnalités

## Correction des erreurs SQL du tableau de bord de suivi

- [x] Corriger la requête getEvolutionTemporelle (DATE_FORMAT)
- [x] Corriger la requête getStatsByFormateur (sous-requête AVG)
- [x] Simplifier les requêtes pour compatibilité MySQL
- [x] Tester toutes les requêtes corrigées

## Espace Formateur

### Schéma de base de données
- [x] Créer la table supportsFormation pour stocker les documents
- [x] Ajouter les relations avec sequences
- [x] Migrer le schéma avec pnpm db:push

### Backend
- [x] Créer formateurDb.ts avec les fonctions de requête
- [x] Ajouter les procédures tRPC pour le calendrier du formateur
- [x] Ajouter les procédures tRPC pour la liste des apprenants
- [x] Ajouter les procédures tRPC pour l'upload de supports
- [x] Ajouter les procédures tRPC pour la validation des présences
- [x] Ajouter les procédures tRPC pour l'historique

### Frontend
- [x] Créer la page FormateurDashboard (calendrier)
- [x] Créer la page FormateurSequence (détail séquence avec apprenants)
- [x] Créer la page FormateurSupports (gestion des supports)
- [x] Créer la page FormateurPresences (validation présences)
- [x] Créer la page FormateurHistorique (historique formations)
- [x] Ajouter les routes dans App.tsx
- [x] Ajouter le menu de navigation formateur

### Tests
- [x] Tester toutes les fonctionnalités de l'espace formateur

## Correction bug rappels multiples

- [x] Analyser le code du scheduler de rappels
- [x] Identifier pourquoi plusieurs emails sont envoyés
- [x] Corriger la logique pour envoyer un seul email par séquence
- [x] Tester avec la formation JetSki du 15/12/2025

## Améliorations système de rappels

### Historique des rappels
- [x] Créer la table logsRappels dans le schéma
- [x] Migrer le schéma avec pnpm db:push
- [x] Créer les fonctions de log dans rappelDb.ts
- [x] Intégrer le logging dans rappelScheduler.ts
- [x] Ajouter la vérification des doublons avant envoi

### Test manuel des rappels
- [x] Créer la procédure tRPC pour tester un rappel
- [ ] Ajouter le bouton de test dans AdminRappels.tsx (optionnel)
- [ ] Implémenter la logique de test sans modifier les logs (optionnel)

### Notifications d'échec
- [x] Créer la fonction de notification admin
- [x] Intégrer les notifications dans le catch des erreurs d'envoi
- [x] Ajouter un résumé des échecs dans les logs
