✨ 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!
149 lines
5.1 KiB
Markdown
149 lines
5.1 KiB
Markdown
# Checklist de Parité Fonctionnelle v1 ↔ v2
|
||
|
||
## Statut Global
|
||
|
||
| Catégorie | v1 | v2 API | Statut |
|
||
|-----------|----|----|--------|
|
||
| Classes | ✅ | ✅ | Parité complète |
|
||
| Élèves | ✅ | ✅ | Parité complète |
|
||
| Évaluations | ✅ | ✅ | Parité complète |
|
||
| Conseil de classe | ✅ | ✅ | Parité complète |
|
||
| Configuration | ✅ | ✅ | Parité complète |
|
||
|
||
---
|
||
|
||
## Gestion des Classes
|
||
|
||
| Fonctionnalité | v1 | v2 API | Notes |
|
||
|----------------|----|----|-------|
|
||
| Liste des classes | ✅ | `GET /classes` | ✅ |
|
||
| Création d'une classe | ✅ | `POST /classes` | ✅ |
|
||
| Modification d'une classe | ✅ | `PUT /classes/{id}` | ✅ |
|
||
| Suppression d'une classe | ✅ | `DELETE /classes/{id}` | ✅ |
|
||
| Dashboard avec stats trimestre | ✅ | `GET /classes/{id}/stats?trimester=` | ✅ |
|
||
| Histogramme des moyennes | ✅ | Inclus dans stats | ✅ |
|
||
| Analyse par domaines | ✅ | Inclus dans stats | ✅ |
|
||
| Analyse par compétences | ✅ | Inclus dans stats | ✅ |
|
||
|
||
---
|
||
|
||
## Gestion des Élèves
|
||
|
||
| Fonctionnalité | v1 | v2 API | Notes |
|
||
|----------------|----|----|-------|
|
||
| Liste globale | ✅ | `GET /students` | ✅ |
|
||
| Liste par classe | ✅ | `GET /classes/{id}/students` | ✅ |
|
||
| Détail élève | ✅ | `GET /students/{id}` | ✅ Avec historique inscriptions |
|
||
| Création d'un élève | ✅ | `POST /students` | ✅ |
|
||
| Modification d'un élève | ✅ | `PUT /students/{id}` | ✅ |
|
||
| Inscription dans une classe | ✅ | `POST /students/enroll` | ✅ |
|
||
| Transfert entre classes | ✅ | `POST /students/transfer` | ✅ |
|
||
| Départ d'une classe | ✅ | `POST /students/departure` | ✅ |
|
||
| Import CSV | ✅ | `POST /classes/{id}/import-csv` | ✅ |
|
||
| Historique des mouvements | ✅ | Inclus dans détail élève | ✅ |
|
||
|
||
---
|
||
|
||
## Évaluations
|
||
|
||
| Fonctionnalité | v1 | v2 API | Notes |
|
||
|----------------|----|----|-------|
|
||
| Liste avec filtres | ✅ | `GET /assessments?class_id=&trimester=` | ✅ |
|
||
| Tri par date/titre | ✅ | Paramètre `sort` | ✅ |
|
||
| Création unifiée | ✅ | `POST /assessments` | ✅ Avec exercices et éléments |
|
||
| Modification | ✅ | `PUT /assessments/{id}` | ✅ |
|
||
| Suppression cascade | ✅ | `DELETE /assessments/{id}` | ✅ |
|
||
| Indicateur progression | ✅ | Inclus dans liste | ✅ |
|
||
| Détail évaluation | ✅ | `GET /assessments/{id}` | ✅ |
|
||
| Saisie des notes | ✅ | `POST /assessments/{id}/grades` | ✅ Bulk save |
|
||
| Résultats statistiques | ✅ | `GET /assessments/{id}/results` | ✅ |
|
||
| Histogramme distribution | ✅ | Inclus dans results | ✅ |
|
||
| Tableau scores élèves | ✅ | Inclus dans results | ✅ |
|
||
| Heatmap compétences | ✅ | Inclus dans results | ✅ |
|
||
| Heatmap domaines | ✅ | Inclus dans results | ✅ |
|
||
| Envoi bilans email | ✅ | `POST /assessments/{id}/send-reports` | ✅ |
|
||
|
||
---
|
||
|
||
## Conseil de Classe
|
||
|
||
| Fonctionnalité | v1 | v2 API | Notes |
|
||
|----------------|----|----|-------|
|
||
| Vue préparation | ✅ | `GET /council/classes/{id}` | ✅ |
|
||
| Stats par élève | ✅ | Inclus dans préparation | ✅ |
|
||
| Saisie appréciations | ✅ | `POST /council/.../appreciations/{student}` | ✅ |
|
||
| Finalisation | ✅ | `PUT /council/.../finalize` | ✅ |
|
||
| Lecture appréciation | ✅ | `GET /council/.../appreciations/{student}` | ✅ |
|
||
|
||
---
|
||
|
||
## Configuration
|
||
|
||
| Fonctionnalité | v1 | v2 API | Notes |
|
||
|----------------|----|----|-------|
|
||
| Config complète | ✅ | `GET /config` | ✅ |
|
||
| Modification année scolaire | ✅ | `PUT /config` | ✅ |
|
||
| Liste compétences | ✅ | `GET /config/competences` | ✅ |
|
||
| CRUD compétences | ✅ | `POST/PUT/DELETE /config/competences/{id}` | ✅ |
|
||
| Liste domaines | ✅ | `GET /config/domains` | ✅ |
|
||
| CRUD domaines | ✅ | `POST/PUT/DELETE /config/domains/{id}` | ✅ |
|
||
| Échelle de notation | ✅ | `GET /config/scale` | ✅ |
|
||
| CRUD valeurs échelle | ✅ | `POST/PUT/DELETE /config/scale/{value}` | ✅ |
|
||
| Config SMTP | ✅ | `GET/PUT /config/smtp` | ✅ |
|
||
| Test SMTP | ✅ | `POST /config/smtp/test` | ✅ |
|
||
|
||
---
|
||
|
||
## Fonctionnalités Frontend (à implémenter en Vue.js)
|
||
|
||
| Fonctionnalité | Notes |
|
||
|----------------|-------|
|
||
| Navigation clavier dans grille | JavaScript frontend |
|
||
| Drag & drop import CSV | JavaScript frontend |
|
||
| Animations et transitions | CSS/Vue.js |
|
||
| Mode sombre | CSS/Vue.js |
|
||
|
||
---
|
||
|
||
## Résumé API v2
|
||
|
||
- **Total routes** : 45
|
||
- **Tests unitaires** : 99
|
||
- **Services domain** : 5 (GradingCalculator, StatisticsService, ConfigService, EmailService, StudentReportService)
|
||
|
||
### Routes par catégorie
|
||
|
||
| Module | Routes |
|
||
|--------|--------|
|
||
| Classes | 5 |
|
||
| Students | 7 |
|
||
| Assessments | 7 |
|
||
| Council | 4 |
|
||
| Config | 22 |
|
||
| **Total** | **45** |
|
||
|
||
---
|
||
|
||
## Notes d'implémentation
|
||
|
||
### Différences architecturales
|
||
|
||
1. **v1** : Flask avec templates Jinja2 (monolithique)
|
||
2. **v2** : FastAPI avec API REST (découplé)
|
||
|
||
### Calculs métier
|
||
|
||
Tous les calculs (scores, statistiques, progression) utilisent les mêmes formules :
|
||
- Type "notes" : valeur directe
|
||
- Type "score" : (score/3) × max_points
|
||
- Valeurs spéciales : `.` = 0, `d` = dispensé, `a` = absent
|
||
|
||
### Migration de données
|
||
|
||
La structure de la base de données est identique entre v1 et v2.
|
||
Une migration directe des données est possible.
|
||
|
||
---
|
||
|
||
*Document généré le 2025-11-21*
|