Files
Classeo/backend/src/Scolarite/Domain/Model/Competency/CompetencyLevel.php
Mathias STRASSER b7dc27f2a5
Some checks failed
CI / Backend Tests (push) Has been cancelled
CI / Frontend Tests (push) Has been cancelled
CI / E2E Tests (push) Has been cancelled
CI / Naming Conventions (push) Has been cancelled
CI / Build Check (push) Has been cancelled
feat: Calculer automatiquement les moyennes après chaque saisie de notes
Les enseignants ont besoin de moyennes à jour immédiatement après la
publication ou modification des notes, sans attendre un batch nocturne.

Le système recalcule via Domain Events synchrones : statistiques
d'évaluation (min/max/moyenne/médiane), moyennes matières pondérées
(normalisation /20), et moyenne générale par élève. Les résultats sont
stockés dans des tables dénormalisées avec cache Redis (TTL 5 min).

Trois endpoints API exposent les données avec contrôle d'accès par rôle.
Une commande console permet le backfill des données historiques au
déploiement.
2026-04-04 02:25:00 +02:00

53 lines
1.3 KiB
PHP

<?php
declare(strict_types=1);
namespace App\Scolarite\Domain\Model\Competency;
/**
* Niveaux de compétence standards du référentiel français.
*
* Ces niveaux sont les valeurs par défaut pour tout établissement
* en mode compétences. Un établissement peut définir des niveaux
* personnalisés dans la table competency_levels.
*
* @see FR23 : Mode compétences sans notes chiffrées
*/
enum CompetencyLevel: string
{
case NOT_ACQUIRED = 'not_acquired';
case IN_PROGRESS = 'in_progress';
case ACQUIRED = 'acquired';
case EXCEEDED = 'exceeded';
public function label(): string
{
return match ($this) {
self::NOT_ACQUIRED => 'Non acquis',
self::IN_PROGRESS => 'En cours d\'acquisition',
self::ACQUIRED => 'Acquis',
self::EXCEEDED => 'Dépassé',
};
}
public function sortOrder(): int
{
return match ($this) {
self::NOT_ACQUIRED => 1,
self::IN_PROGRESS => 2,
self::ACQUIRED => 3,
self::EXCEEDED => 4,
};
}
public function color(): string
{
return match ($this) {
self::NOT_ACQUIRED => '#e74c3c',
self::IN_PROGRESS => '#f39c12',
self::ACQUIRED => '#2ecc71',
self::EXCEEDED => '#3498db',
};
}
}