Replace window.confirm() with Modal dialogs for class deletion and grade reset. Add unsaved-changes guards to AssessmentFormView. Warn before deleting exercises/elements with existing grades. Surface invalid grades in a detailed Modal after save. Replace GradingView local toasts with global notification store. Fix missing French accents across CouncilView, CouncilStudentDetail, and ConfigView. Make dashboard "À corriger" card and student list rows clickable. Add visual hierarchy to assessment detail actions. Add loading overlay to trimester switch. Simplify email sending workflow by removing mode-switch pattern. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
📚 Notytex v2 - Système de Gestion Scolaire
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).
🎯 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.
🚀 Démarrage Rapide
Prérequis
- Python 3.11-3.13 avec
uv(installation) - Node.js 22 LTS avec
npm - Git
Backend (FastAPI)
cd backend
uv sync --all-extras
uv run python -m uvicorn api.main:app --reload --port 8000
Frontend (Vue.js)
cd frontend
npm install
npm run dev
Accès (Mode Développement)
- Frontend : http://localhost:3000
- API Backend : http://localhost:8000
- Documentation API : http://localhost:8000/api/v2/docs
- ReDoc : http://localhost:8000/api/v2/redoc
Déploiement avec Docker / Podman 🐳
# Configuration
cd docker
cp .env.example .env
# Éditez .env et changez SECRET_KEY
# Démarrage (Docker ou Podman)
docker compose up -d
# ou
podman-compose up -d
Accès (Mode Docker/Podman) :
- Frontend : http://localhost:8081
- API Backend : http://localhost:8080
- Documentation API : http://localhost:8080/api/v2/docs
💡 Ports sans privilèges : Les ports 8080/8081 permettent l'utilisation avec Podman sans root
📖 Documentation complète : docker/README.md
🏗️ Architecture Technique
Stack Technologique
Backend :
- FastAPI 0.115+ (API REST moderne avec support async)
- SQLAlchemy 2.0.36+ avec aiosqlite (ORM async)
- Pydantic 2.10+ (validation et sérialisation)
- Uvicorn 0.32+ (serveur ASGI)
- Python 3.11-3.13
Frontend :
- Vue.js 3.5+ (framework progressif)
- Vite 6.0+ (build tool ultra-rapide)
- Vue Router 4.5+ (routing SPA)
- Pinia 2.2+ (state management)
- TailwindCSS 3.4+ (styling moderne)
- Chart.js 4.4+ (graphiques interactifs)
- Axios 1.7+ (client HTTP)
- Node.js 22 LTS
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 :
notes: Valeurs numériques décimales (ex: 15.5/20)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
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
Résultat actuel : 99/99 tests ✅
Frontend
cd frontend
# Tests unitaires (à venir)
npm run test:unit
# Tests E2E (à venir)
npm run test:e2e
📂 Structure du Projet
notytex/
├── backend/ # API FastAPI
│ ├── api/ # Routes et endpoints
│ │ ├── main.py # Application principale
│ │ └── routes/ # Routes organisées par fonctionnalité
│ ├── 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
⚙️ Configuration
Backend (backend/.env)
# Base de données
DATABASE_URL=sqlite+aiosqlite:///../school_management.db
# Sécurité
SECRET_KEY=your-secret-key-here-min-32-chars
# CORS (origines autorisées)
CORS_ORIGINS=["http://localhost:3000","http://localhost:5173"]
# Logging
LOG_LEVEL=INFO
# 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
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- Historique de la réécriture v1 → v2 - Backend :
backend/README.md- Documentation API - Parité fonctionnelle :
backend/docs/PARITY_CHECKLIST.md - Documentation API : http://localhost:8000/api/v2/docs (Swagger)
🔧 Commandes Utiles
Backend
# Démarrer l'API en mode développement
cd backend && uv run python -m 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 .
Frontend
# Démarrer en développement
cd frontend && npm run dev
# Build pour production
cd frontend && npm run build
# Preview du build
cd frontend && npm run preview
📊 État du Projet
Fonctionnalités Implémentées (100%)
| 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 | ✅ |
| Envoi bilans individualisés | ✅ |
Tests
- Backend : 99/99 tests unitaires ✅
- API : 45 routes opérationnelles ✅
- Frontend : 14 vues complètes ✅
🎓 Public Cible
- Enseignants du secondaire (collège/lycée)
- Établissements souhaitant digitaliser leurs évaluations
- Contexte de coexistence notation classique / évaluation par compétences
📝 Notes de Version
Version 2.0.0 (Actuelle)
- ✨ 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
Version 1.0.0 (Legacy)
- Application Flask monolithique
- Code disponible dans l'historique Git (branche
mainavant migration)
🤝 Contribution
Ce projet a été développé avec l'aide d'assistants IA (principalement Claude). Les contributions sont bienvenues !
📄 Licence
MIT
🔗 Liens Utiles
Développé avec ❤️ pour simplifier la vie des enseignants