# 📋 Préparation du Conseil de Classe
La **Préparation du Conseil de Classe** est une fonctionnalité avancée de Notytex qui permet aux enseignants de préparer efficacement leurs conseils de classe en centralisant les données d'évaluation et en rédigeant les appréciations individuelles.
## 🎯 Vue d'ensemble
### Objectifs principaux
- **Centraliser** les résultats de tous les élèves pour un trimestre donné
- **Rédiger** les appréciations individuelles avec auto-sauvegarde
- **Analyser** les performances de classe avec statistiques automatiques
- **Optimiser** le workflow avec deux modes de visualisation
### Accès à la fonctionnalité
```
Navigation : Classes → [Nom de la classe] → Dashboard → Conseil de classe T[X]
URL : /classes/{id}/council?trimestre={1|2|3}
```
## 📊 Architecture des Données
### Services principaux
#### CouncilPreparationService
```python
# Orchestrateur principal
class CouncilPreparationService:
def prepare_council_data(class_id, trimester) -> CouncilPreparationData
```
#### StudentEvaluationService
```python
# Calculs et analyse des performances
class StudentEvaluationService:
def get_students_summaries(class_id, trimester) -> List[StudentTrimesterSummary]
def calculate_student_trimester_average(student_id, trimester) -> float
# Nouvelles méthodes 2025
def get_student_special_values_summary(student_id, trimester) -> Dict[str, Any]
def get_student_competence_domain_breakdown(student_id, trimester) -> Dict[str, List[Dict]]
```
#### GradeRepository (Nouvelles méthodes 2025)
```python
# Repository étendu pour valeurs spéciales et commentaires
class GradeRepository:
# Méthodes existantes...
# Nouvelles méthodes pour valeurs spéciales
def get_special_values_counts_by_student_trimester(student_id, trimester) -> Dict[str, int]
def get_special_values_counts_by_student_assessment(student_id, assessment_id) -> Dict[str, int]
def get_special_values_details_by_student_trimester(student_id, trimester) -> Dict[str, List[Dict]]
def get_special_values_details_by_student_assessment(student_id, assessment_id) -> Dict[str, List[Dict]]
# Nouvelle méthode pour commentaires organisés
def get_all_comments_by_student_trimester(student_id, trimester) -> Dict[str, Any]
```
#### AppreciationService
```python
# Gestion des appréciations
class AppreciationService:
def save_appreciation(data) -> CouncilAppreciation
def auto_save_appreciation(data) -> CouncilAppreciation
```
### Modèles de données
#### StudentTrimesterSummary
```python
@dataclass
class StudentTrimesterSummary:
student: Student
overall_average: Optional[float]
assessment_count: int
grades_by_assessment: Dict[int, Dict] # {assessment_id: {score, max, title}}
appreciation: Optional[CouncilAppreciation]
performance_status: str # 'excellent', 'good', 'average', 'struggling'
competence_domain_breakdown: Optional[Dict] = None # Données compétences/domaines
special_values_summary: Optional[Dict] = None # Nouvelle: résumé valeurs spéciales et commentaires
```
#### Structure special_values_summary (Nouveau 2025)
```python
special_values_summary = {
# Résumé global des valeurs spéciales pour le trimestre
"global": {
".": {"count": 2, "label": "Pas de réponse", "color": "#ef4444", "details": [...]},
"d": {"count": 1, "label": "Dispensé", "color": "#6b7280", "details": [...]},
"a": {"count": 1, "label": "Absent", "color": "#f59e0b", "details": [...]}
},
# Détail par évaluation
"by_assessment": {
1: {
"title": "Contrôle Chapitre 1",
"date": "2025-08-10",
"special_values": {
".": {"count": 1, "label": "Pas de réponse", "details": [...]}
}
}
},
# Commentaires organisés par évaluations (Nouveau)
"comments_by_assessments": {
"assessments": [
{
"id": 1,
"title": "Contrôle Chapitre 1 - Nombres entiers",
"date": "2025-08-10",
"comments": [
{
"element_label": "Additions",
"element_description": "Calculs simples",
"value": ".",
"comment": "Élève absent lors de cette question"
}
]
}
],
"total_comments": 3,
"has_comments": true
},
# Métadonnées
"total_special_values": 4,
"has_special_values": true
}
```
#### CouncilPreparationData
```python
@dataclass
class CouncilPreparationData:
class_group_id: int
trimester: int
student_summaries: List[StudentTrimesterSummary]
class_statistics: Dict
appreciation_stats: Dict
total_students: int
completed_appreciations: int
```
## 🎨 Interface Utilisateur
### Page principale
#### Section Hero
- **Informations contextuelles** : Classe, trimestre, nombre d'élèves
- **Sélecteur de trimestre** : Navigation rapide entre T1, T2, T3
- **Actions principales** : Export PDF, Synthèse de classe, Mode Focus
#### Statistiques de classe
```javascript
{
"mean": 14.2, // Moyenne générale
"median": 14.5, // Médiane
"min": 8.5, // Note minimum
"max": 18.5, // Note maximum
"std_dev": 2.1, // Écart-type
"performance_distribution": {
"excellent": 3, // ≥ 16/20
"good": 8, // ≥ 14/20
"average": 12, // ≥ 10/20
"struggling": 2, // < 10/20
"no_data": 0
}
}
```
#### Filtres et recherche
- **Recherche par nom** : Filtre instantané (300ms debounce)
- **Tri** : Alphabétique, par moyenne, par statut de performance
- **Filtre par statut** : Toutes, Appréciations terminées, En attente, En difficulté
### Cartes élèves individuelles
#### Informations affichées
```html
NOM Prénom
[excellent|good|average|struggling]
[Rédigée|À rédiger]
Valeurs spéciales:. 2d 1a 1
Évaluation Title15.5/20
Auto-sauvegarde...
```
### Vue détaillée expandable
Chaque carte élève peut être étendue pour révéler des informations complémentaires essentielles à la préparation du conseil de classe.
#### Valeurs spéciales par évaluation
```html
Valeurs spéciales
Contrôle Chapitre 1
. 2d 1
```
#### Commentaires enseignant organisés 📝
**Nouvelle fonctionnalité 2025** : Affichage compact et structuré de tous les commentaires saisis par l'enseignant.
```html
Commentaires (3)