Migration v1 (Flask) -> v2 (FastAPI + Vue.js) complétée

 Changements majeurs:
- Suppression complète du code Flask legacy
- Migration backend FastAPI vers racine /backend
- Migration frontend Vue.js vers racine /frontend
- Suppression de notytex-v2/ (code monté à la racine)

 Validations:
- Backend démarre correctement (port 8000)
- API /api/v2/health répond healthy
- 99/99 tests unitaires passent
- Frontend configuré avec proxy Vite

📝 Documentation:
- README.md réécrit pour v2
- Instructions de démarrage mises à jour
- .gitignore adapté pour backend/frontend/

🎯 Architecture finale:
notytex/
├── backend/     # FastAPI + SQLAlchemy + Pydantic
├── frontend/    # Vue 3 + Vite + TailwindCSS
├── docs/        # Documentation
└── school_management.db  # Base de données (inchangée)

Jalon 6 complété: Application v2 prête pour utilisation!
This commit is contained in:
2025-11-25 21:09:47 +01:00
parent 60c60c1605
commit 2b08eb534a
4125 changed files with 303 additions and 453271 deletions

619
README.md
View File

@@ -1,422 +1,349 @@
# 📚 Notytex - Système de Gestion Scolaire
# 📚 Notytex v2 - Système de Gestion Scolaire
**Notytex** est une application web Flask conçue pour la gestion complète des évaluations. Elle permet aux enseignants de créer, organiser et noter les évaluations de leurs élèves.
**Notytex** est une application web moderne pour la gestion complète des évaluations scolaires. Version 2.0 entièrement réécrite avec **FastAPI** (backend) et **Vue.js 3** (frontend).
Cette application a été presque entièrement vibecodé. Il ne faut donc pas s'attendre à des merveilles..! Mais elle est fonctionnelle et je l'utilise pour la gestion de mes notes!
## 🎯 **Objectif Principal**
## 🎯 Objectif Principal
Simplifier et digitaliser le processus d'évaluation scolaire, de la création des contrôles à la saisie des notes, en offrant une interface moderne et réactive.
Simplifier et digitaliser le processus d'évaluation scolaire, de la création des contrôles à la saisie des notes.
---
## ⭐ Fonctionnalités Clés
## 🚀 **Démarrage Rapide**
### 🏫 Gestion Hiérarchique Complète
### **Prérequis**
- **Groupes classes** : Organisation des élèves par classe avec gestion des années scolaires
- **Évaluations par trimestre** : Chaque évaluation doit être assignée à un trimestre (1, 2 ou 3)
- **Structure modulaire** : ClassGroup → Students → Assessment → Exercise → GradingElement → Grade
- **Interface unifiée** : Création d'évaluation + exercices + barème en une seule fois
- **Indicateurs de progression** : Visualisation temps réel de l'état de correction avec code couleur
- **Python 3.11+** avec `uv` ([installation](https://docs.astral.sh/uv/))
- **Node.js 18+** avec `npm`
- **Git**
### 🎯 Système de Notation Dual Unifié
**2 Types de Notation Complémentaires :**
1. **`notes`** : Notation classique en points décimaux (ex: 15.5/20, 2.5/4)
2. **`score`** : Évaluation par compétences sur échelle 0-3 (0=Non acquis, 1=En cours, 2=Acquis, 3=Expert)
**Valeurs Spéciales Configurables :**
- **`.`** = Pas de réponse (traité comme 0 dans les calculs)
- **`d`** = Dispensé (exclu des calculs de moyenne)
- **Autres valeurs** : Configuration flexible via interface d'administration
**Configuration Centralisée :**
- **Interface d'administration** : Personnalisation complète des significations et couleurs
- **Règles de calcul** : Logique unifiée pour tous les types avec gestion des cas particuliers
- **Cohérence pédagogique** : Adaptation aux différentes pratiques d'évaluation
### 📊 Analyse des Résultats et Statistiques
- **Statistiques descriptives complètes** : Moyenne, médiane, minimum, maximum, écart-type
- **Visualisation graphique interactive** : Histogrammes de distribution avec Chart.js
- **Tableau détaillé par élève** : Classement alphabétique avec scores détaillés par exercice
- **Calculs intelligents** : Gestion automatique des types "notes" et "score" avec formules spécialisées
- **Gestion des absences** : Traitement cohérent des valeurs spéciales dans les statistiques
### 🎨 Interface Utilisateur Moderne
- **Dashboard avec statistiques** : Cartes interactives
- **Navigation intuitive** : Actions principales mises en avant avec design cohérent
- **Indicateurs de progression visuels** : Cercles de progression animés avec code couleur
- **Design responsive** : Interface adaptée à tous les écrans avec TailwindCSS
- **Mode plein écran** : Visualisation optimisée pour les présentations
## 🚀 Démarrage Rapide
### 📋 Prérequis
- **Python 3.8+** (recommandé : 3.11+)
- **uv** : Gestionnaire de paquets moderne Python ([installation](https://docs.astral.sh/uv/))
- **Git** : Pour le contrôle de version
### ⚡ Installation (5 minutes)
### **Backend (FastAPI)**
```bash
# 1. Cloner et accéder au projet
git clone <repository>
cd notytex
# 2. Installer les dépendances
uv sync
# 3. Configuration obligatoire
cp .env.example .env
# Modifier .env avec SECRET_KEY (minimum 32 caractères obligatoire)
# 4. Initialiser la base de données (voir modes ci-dessous)
uv run flask --app app init-db
# 5. Lancer l'application en mode développement
uv run flask --app app run --debug
cd backend
uv sync --all-extras
uv run uvicorn api.main:app --reload --port 8000
```
### 🎯 Modes d'Initialisation de la Base de Données
**Notytex** propose **3 modes d'initialisation** adaptés aux différents contextes d'usage :
#### 🌱 **Mode Minimal** (par défaut) - Début d'année scolaire
### **Frontend (Vue.js)**
```bash
uv run flask --app app init-db --mode minimal
# ou simplement
uv run flask --app app init-db
cd frontend
npm install
npm run dev
```
- **Usage** : Début d'année scolaire, base vierge
- **Contenu** : Configuration de base uniquement
- **Idéal pour** : Démarrer une nouvelle année avec ses vraies classes et élèves
### **Accès**
#### 📚 **Mode Milieu d'Année** - Données réalistes complètes
- **Frontend** : http://localhost:3000
- **API Backend** : http://localhost:8000
- **Documentation API** : http://localhost:8000/api/v2/docs
- **ReDoc** : http://localhost:8000/api/v2/redoc
---
## 🏗️ **Architecture Technique**
### **Stack Technologique**
**Backend :**
- FastAPI 0.109+ (API REST moderne avec support async)
- SQLAlchemy 2.0+ avec aiosqlite (ORM async)
- Pydantic 2.0+ (validation et sérialisation)
- Uvicorn (serveur ASGI)
**Frontend :**
- Vue.js 3.4+ (framework progressif)
- Vite (build tool ultra-rapide)
- Vue Router 4 (routing SPA)
- Pinia (state management)
- TailwindCSS 3 (styling moderne)
- Chart.js 4 (graphiques interactifs)
- Axios (client HTTP)
**Base de données :**
- SQLite (développement)
- PostgreSQL recommandé (production)
---
## 📊 **Modèle de Données**
```
ClassGroup (Classe)
Students (Élèves avec gestion temporelle)
Assessment (Évaluation par trimestre)
Exercise (Exercices)
GradingElement (Questions/Compétences)
Grade (Notes individuelles)
```
---
## ⭐ **Fonctionnalités Principales**
### **Gestion des Classes et Élèves**
- Création et organisation de classes par année
- Inscription, transfert et départ d'élèves avec historique
- Import CSV en masse
- Statistiques par trimestre et par classe
### **Système d'Évaluation**
- Création unifiée d'évaluations (éval + exercices + barème)
- Organisation par trimestre (1, 2, 3)
- Filtrage avancé (trimestre, classe, statut de correction)
- Indicateurs de progression de correction en temps réel
### **Notation Dual Configurable**
**2 Types de Notation :**
1. **`notes`** : Valeurs numériques décimales (ex: 15.5/20)
2. **`score`** : Échelle 0-3 pour compétences (0=Non acquis → 3=Expert)
**Valeurs Spéciales :**
- `.` = Absent (compte comme 0)
- `d` = Dispensé (exclu des calculs)
- Configuration personnalisable via interface
### **Analyse et Statistiques**
- Dashboard avec statistiques globales
- Résultats détaillés par évaluation
- Histogrammes de distribution des notes
- Heatmaps par compétences et domaines
- Statistiques descriptives (moyenne, médiane, écart-type)
### **Conseil de Classe**
- Préparation automatique avec données consolidées
- Saisie et historique des appréciations
- Vue complète des performances par élève
### **Envoi de Bilans par Email**
- Génération automatique de bilans individualisés
- Support SMTP configurable (Gmail, Outlook, etc.)
- Templates HTML responsives
- Envoi en lot avec rapport détaillé
---
## 🧪 **Tests**
### **Backend**
```bash
uv run flask --app app init-db --mode midyear
cd backend
# Tous les tests
uv run pytest tests/ -v
# Tests unitaires uniquement
uv run pytest tests/unit/ -v
# Avec couverture
uv run pytest tests/ --cov=. --cov-report=html
```
- **Usage** : Tester l'application avec des données représentatives
- **Contenu** :
- **5 classes** avec 142 élèves au total (25-32 élèves par classe)
- **30 évaluations** créées (6 par classe sur 2 trimestres)
- **4 évaluations entièrement corrigées** par classe (Trimestre 1)
- **2 évaluations partiellement corrigées** par classe (Trimestre 2)
- **Notes réalistes** générées automatiquement
- **Idéal pour** : Démonstrations, formations, tests de performance
- **Volumétrie** : Correspond aux spécifications du CLAUDE.md (milieu de 2ème trimestre)
**Résultat actuel : 99/99 tests ✅**
#### 🧪 **Mode Démonstration** - Données minimales
### **Frontend**
```bash
uv run flask --app app init-db --mode demo
cd frontend
# Tests unitaires (à venir)
npm run test:unit
# Tests E2E (à venir)
npm run test:e2e
```
- **Usage** : Tests rapides et démonstrations simples
- **Contenu** : 2 classes, 5 élèves, 1 évaluation simple
- **Idéal pour** : Premiers pas avec l'application
---
### 🌐 Accès à l'Application
- **URL de développement** : http://localhost:5000
- **Interface** : Dashboard avec navigation intuitive et indicateurs de progression
- **Données** : Variables selon le mode d'initialisation choisi
## 🏗️ Architecture Technique
### 🎯 Principes Architecturaux
- **Architecture modulaire découplée** : Séparation claire des responsabilités
- **Repository Pattern** : Accès aux données abstraites et testables
- **Configuration externalisée** : Respect des principes 12 Factor App
- **Gestion d'erreurs centralisée** : Traitement uniforme des exceptions
- **Logging structuré JSON** : Traçabilité complète avec corrélation des requêtes
### 📁 Structure du Code
## 📂 **Structure du Projet**
```
notytex/
├── 🚀 app.py # Point d'entrée Flask + routes de base
├── 📊 models.py # Modèles SQLAlchemy + logique métier
├── ⚙️ app_config_classes.py # Classes de configuration Flask (dev/prod/test)
├── 🔧 config/ # Configuration sécurisée externalisée
│ ├── __init__.py
└── settings.py # Gestion variables d'environnement + validation
├── 🛡️ exceptions/ # Gestion d'erreurs centralisée
│ ├── __init__.py
└── handlers.py # Gestionnaires d'erreurs globaux (JSON/HTML)
├── 🔍 core/ # Utilitaires centraux
│ ├── __init__.py
── logging.py # Logging structuré JSON + corrélation requêtes
├── 📦 repositories/ # Pattern Repository pour accès données
│ ├── __init__.py
│ ├── base_repository.py # Repository générique CRUD
└── assessment_repository.py # Repository spécialisé Assessment
├── 📁 routes/ # Blueprints organisés par fonctionnalité
│ ├── assessments.py # CRUD évaluations (création unifiée)
│ ├── exercises.py # Gestion des exercices
│ ├── grading.py # Saisie et gestion des notes
└── config.py # Interface configuration système
├── 🎨 templates/ # Templates Jinja2 avec indicateurs UX intégrés
├── 🧪 tests/ # Tests pytest (100 tests ✅)
── 📋 domain/ # Exceptions métier personnalisées
├── backend/ # API FastAPI
│ ├── api/ # Routes et endpoints
│ │ ├── main.py # Application principale
│ │ └── routes/ # Routes organisées par fonctionnali
│ ├── domain/ # Logique métier pure
│ ├── services/ # Services de calcul
│ │ └── value_objects/ # Objets valeur
│ ├── infrastructure/ # Couche d'infrastructure
│ ├── database/ # Modèles SQLAlchemy + repositories
└── external/ # Services externes (email)
│ ├── schemas/ # Modèles Pydantic (validation I/O)
── core/ # Configuration
│ └── tests/ # Tests unitaires et d'intégration
├── frontend/ # SPA Vue.js
│ ├── src/
│ ├── components/ # Composants réutilisables
│ │ ├── views/ # Pages de l'application
│ ├── stores/ # State management Pinia
│ ├── services/ # Clients API
│ ├── router/ # Configuration routing
│ └── assets/ # Assets statiques
│ └── public/ # Fichiers publics
├── docs/ # Documentation complète
── school_management.db # Base de données SQLite
└── README.md # Ce fichier
```
### 📊 Modèle de Données Hiérarchique
---
```
ClassGroup (Classes: 6ème A, 5ème B...)
Students (Élèves de la classe)
Assessment (Évaluations: Contrôle Chapitre 3, Trimestre obligatoire)
Exercise (Exercices: Exercice 1, Exercice 2...)
GradingElement (Questions: a, b, c... + type: notes|score)
Grade (Notes attribuées à chaque élève + valeurs spéciales)
```
## ⚙️ **Configuration**
### 🛠️ Stack Technique
- **Framework Backend** : Flask (Python) avec architecture modulaire
- **Base de données** : SQLite avec SQLAlchemy ORM + Repository Pattern
- **Frontend** : Templates Jinja2 + TailwindCSS + JavaScript + Chart.js
- **Tests** : Pytest avec couverture complète (100 tests ✅)
- **Configuration** : Variables d'environnement externalisées (.env)
- **Logging** : Structuré JSON avec corrélation des requêtes
- **Sécurité** : Configuration sécurisée + gestion d'erreurs centralisée
## ⚙️ Configuration
### 🔧 Variables d'Environnement (.env)
### **Backend (`backend/.env`)**
```bash
# OBLIGATOIRE - Sécurité
SECRET_KEY=your-secret-key-here-minimum-32-characters-required
# Base de données
DATABASE_URL=sqlite+aiosqlite:///../school_management.db
# Optionnel - Base de données
DATABASE_URL=sqlite:///school_management.db
# Sécurité
SECRET_KEY=your-secret-key-here-min-32-chars
# Optionnel - Environnement de développement
FLASK_ENV=development
DEBUG=true
# CORS (origines autorisées)
CORS_ORIGINS=["http://localhost:3000","http://localhost:5173"]
# Logging
LOG_LEVEL=INFO
DB_ECHO=false
WTF_CSRF_TIME_LIMIT=3600
# Email (optionnel)
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
SMTP_USERNAME=your-email@gmail.com
SMTP_PASSWORD=your-app-password
EMAIL_FROM=your-email@gmail.com
```
### 🏭 Configuration de Production
### **Frontend**
Le frontend utilise un proxy Vite configuré dans `vite.config.js` pour rediriger `/api` vers le backend.
---
## 📖 **Documentation Complète**
- **Architecture détaillée** : [`REWRITE.md`](REWRITE.md) - Historique de la réécriture v1 → v2
- **Backend** : [`backend/README.md`](backend/README.md) - Documentation API
- **Parité fonctionnelle** : [`backend/docs/PARITY_CHECKLIST.md`](backend/docs/PARITY_CHECKLIST.md)
- **Documentation API** : http://localhost:8000/api/v2/docs (Swagger)
---
## 🔧 **Commandes Utiles**
### **Backend**
```bash
# Variables critiques pour la production
SECRET_KEY=your-production-secret-key-min-32-chars-strong
DATABASE_URL=postgresql://user:password@localhost/notytex_prod
FLASK_ENV=production
DEBUG=false
LOG_LEVEL=WARNING
# Démarrer l'API en mode développement
cd backend && uv run uvicorn api.main:app --reload --port 8000
# Exécuter les tests
cd backend && uv run pytest tests/ -v
# Formater le code
cd backend && uv run black .
# Linter
cd backend && uv run ruff check .
```
> ⚠️ **Important** : La variable `SECRET_KEY` est obligatoire et doit faire au minimum 32 caractères. L'application refusera de démarrer sans cette configuration.
## 🧪 Tests et Qualité
### 🚦 Lancer les Tests
### **Frontend**
```bash
# Tous les tests (100 tests ✅)
uv run pytest
# Démarrer en développement
cd frontend && npm run dev
# Tests avec rapport de couverture
uv run pytest --cov=. --cov-report=html
# Build pour production
cd frontend && npm run build
# Tests spécifiques par module
uv run pytest tests/test_models.py -v
uv run pytest tests/test_repositories.py -v
# Preview du build
cd frontend && npm run preview
```
### 🎯 Organisation des Tests
---
- **test_config.py** : Tests configuration externalisée + validation
- **test_error_handlers.py** : Tests gestion d'erreurs centralisée
- **test_logging.py** : Tests logging structuré JSON
- **test_repositories.py** : Tests Repository Pattern + CRUD
- **test_models.py** : Tests modèles SQLAlchemy + logique métier
- **test*routes*\*.py** : Tests routes Flask + contrôleurs
- **test_forms.py** : Tests validation WTForms
## 📊 **État du Projet**
### 📊 Métriques de Qualité
### **Fonctionnalités Implémentées (100%)**
-**100 tests** passent avec succès
-**Architecture découplée** avec Repository Pattern
-**Configuration sécurisée** externalisée
-**Gestion d'erreurs robuste** centralisée
| Module | Fonctionnalités | Status |
|--------|----------------|--------|
| **Classes** | CRUD, stats, dashboard | ✅ |
| **Élèves** | CRUD, inscriptions, import CSV | ✅ |
| **Évaluations** | Création unifiée, filtres, progression | ✅ |
| **Notation** | Grille interactive, valeurs spéciales | ✅ |
| **Résultats** | Statistiques, graphiques, heatmaps | ✅ |
| **Conseil** | Préparation, appréciations | ✅ |
| **Configuration** | Compétences, domaines, échelle, SMTP | ✅ |
| **Email** | Envoi bilans individualisés | ✅ |
## 🛠️ Guide de Développement
### **Tests**
### 🔄 Workflow de Développement
- **Backend** : 99/99 tests unitaires ✅
- **API** : 45 routes opérationnelles ✅
- **Frontend** : 14 vues complètes ✅
```bash
# 1. Configuration initiale
cp .env.example .env
# Éditer .env avec SECRET_KEY obligatoire
---
# 2. Choisir le mode d'initialisation selon le contexte
uv run flask --app app init-db --mode minimal # Début d'année
uv run flask --app app init-db --mode midyear # Tests avec données complètes
uv run flask --app app init-db --mode demo # Démonstration rapide
## 🎓 **Public Cible**
# 3. Développement avec rechargement automatique
uv run flask --app app run --debug
- Enseignants du secondaire (collège/lycée)
- Établissements souhaitant digitaliser leurs évaluations
- Contexte de coexistence notation classique / évaluation par compétences
# 4. Validation avant commit
uv run pytest
---
# 5. Analyse des logs en temps réel
tail -f logs/notytex.log | jq '.' # Pour formater le JSON
```
## 📝 **Notes de Version**
### 🆕 Ajouter une Nouvelle Fonctionnalité
### **Version 2.0.0 (Actuelle)**
1. **Modèles** : Définir les entités dans `models.py`
2. **Repository** : Créer l'accès données dans `repositories/`
3. **Routes** : Implémenter les contrôleurs dans `routes/`
4. **Templates** : Créer les vues dans `templates/`
5. **Forms** : Ajouter la validation dans `forms.py`
6. **Tests** : Couvrir la fonctionnalité dans `tests/`
- ✨ Réécriture complète en FastAPI + Vue.js
- ⚡ Architecture moderne avec séparation backend/frontend
- 🚀 API REST JSON pure avec documentation OpenAPI
- 🎨 Interface utilisateur réactive avec Vue 3
- 📊 Graphiques interactifs avec Chart.js
- 🔒 Validation Pydantic sur toutes les entrées
- 🧪 99 tests unitaires avec 100% de succès
### 🎯 Conventions de Code
### **Version 1.0.0 (Legacy)**
- **PEP 8** : Style Python standard
- **Type hints** : Recommandés pour les nouvelles fonctions
- **Docstrings** : Format Google pour les fonctions publiques
- **Tests** : Couverture obligatoire pour les nouvelles fonctionnalités
- Application Flask monolithique
- Code disponible dans l'historique Git (branche `main` avant migration)
## 📊 Monitoring et Observabilité
---
### 📝 Logs Structurés JSON
## 🤝 **Contribution**
- **Format** : JSON avec ID de corrélation unique par requête
- **Localisation** : `logs/notytex.log`
- **Niveaux** : DEBUG, INFO, WARNING, ERROR
- **Contexte automatique** : URL, méthode HTTP, IP, user-agent, timestamp
- **Événements métier** : Création/modification/suppression d'évaluations
Ce projet a été développé avec l'aide d'assistants IA (principalement Claude). Les contributions sont bienvenues !
### 🔍 Exemple de Log Structuré
---
```json
{
"timestamp": "2025-08-06T10:30:45.123Z",
"level": "INFO",
"correlation_id": "uuid-1234-5678-9abc",
"message": "Assessment created successfully",
"context": {
"assessment_id": 123,
"class_group_id": 45,
"trimester": 1
}
}
```
## 📄 **Licence**
## 🎓 Exemples d'Utilisation Complète
MIT
### 🌱 **Scénario Début d'Année** - Mode Minimal
---
```bash
# Initialisation pour démarrer l'année scolaire
uv run flask --app app init-db --mode minimal
```
## 🔗 **Liens Utiles**
**Étapes typiques :**
- [FastAPI Documentation](https://fastapi.tiangolo.com/)
- [Vue.js 3 Documentation](https://vuejs.org/)
- [SQLAlchemy 2.0](https://docs.sqlalchemy.org/en/20/)
- [Pydantic](https://docs.pydantic.dev/)
- [TailwindCSS](https://tailwindcss.com/)
1. **Configuration initiale** : Année scolaire 2025-2026 automatiquement définie
2. **Création des classes** : Ajouter manuellement 6ème A, 5ème B, etc.
3. **Import des élèves** : Saisir ou importer les listes d'élèves réelles
4. **Première évaluation** : Créer le premier contrôle de l'année
---
### 📚 **Scénario Milieu d'Année** - Mode Données Complètes
```bash
# Initialisation avec données réalistes de milieu d'année
uv run flask --app app init-db --mode midyear
```
**Contenu automatiquement généré :**
- **Classes** : 6ème A (28 élèves), 6ème B (25 élèves), 5ème A (30 élèves), 5ème B (27 élèves), 4ème A (32 élèves)
- **Évaluations Trimestre 1** (100% corrigées) :
- Contrôle Nombres entiers (coefficient 2.0)
- Évaluation Géométrie (coefficient 2.5)
- Contrôle Fractions (coefficient 3.0)
- Devoir Maison Recherche (coefficient 1.5)
- **Évaluations Trimestre 2** (partiellement corrigées) :
- Contrôle Proportionnalité (coefficient 2.5)
- Évaluation Statistiques (coefficient 2.0)
**Utilisation immédiate :**
1. **Dashboard** : Aperçu des 142 élèves, 30 évaluations, 5 classes
2. **Indicateurs de progression** : Visualisation des corrections en cours
3. **Analyse des résultats** : Statistiques et graphiques sur les évaluations terminées
4. **Saisie de notes** : Continuer la correction des évaluations partielles
### 📝 **Scénario Création d'Évaluation** - Workflow Standard
1. **🏗️ Création de l'évaluation**
- Titre : "Contrôle Chapitre 3 - Fonctions"
- Paramètres : Date, **trimestre obligatoire** (ex: 2), classe, coefficient
2. **⚙️ Structure de l'évaluation**
- **Exercice 1** : "Calculs de base" (notes en points)
- Question 1a : 2 points
- Question 1b : 3 points
- **Exercice 2** : "Compétences graphiques" (score 0-3)
- Compétence "Lire un graphique" : échelle 0-3
3. **📊 Suivi de la progression**
- **Indicateur initial** : "Correction 0%" (rouge) visible sur toutes les pages
- **Saisie des notes** : Clic sur l'indicateur → accès direct à la page de notation
- **Progression temps réel** : "Correction 45%" (orange) → "Correction 100%" (vert)
4. **📈 Analyse des résultats**
- **Statistiques automatiques** : Moyenne, médiane, écart-type
- **Visualisation graphique** : Histogramme de distribution des notes
- **Tableau détaillé** : Classement alphabétique avec scores par exercice
## 🛡️ Sécurité et Bonnes Pratiques
### 🔐 Sécurité Applicative
- **Configuration externalisée** : Variables d'environnement (.env) - aucune donnée sensible en dur
- **Validation centralisée** : WTForms + validation des données en entrée
- **Gestion d'erreurs sécurisée** : Pas de fuite d'informations sensibles dans les messages
- **Logs sécurisés** : Exclusion des données personnelles/sensibles des logs
- **CSRF Protection** : Protection native Flask-WTF contre les attaques CSRF
### 🏗️ Architecture Robuste
- **Respect des principes 12 Factor App** : Configuration, logs, processus
- **Repository Pattern** : Couche d'abstraction pour l'accès aux données
- **Gestion d'erreurs centralisée** : Traitement uniforme des exceptions
- **Tests complets** : Couverture de 100% des fonctionnalités critiques
## 👥 Public Cible et Contexte d'Usage
### 🎓 Utilisateurs Principaux
- **Enseignants** du secondaire (collège, lycée)
### 📚 Contextes Pédagogiques
- **Coexistence des pratiques** : Notation classique ET évaluation par compétences
- **Gestion par trimestre** : Organisation structurée des évaluations scolaires
- **Diversité des exercices** : Support des différents formats de contrôles
**Développé avec ❤️ pour simplifier la vie des enseignants**