Upload templates/index.html with huggingface_hub
Browse files- templates/index.html +324 -19
templates/index.html
CHANGED
|
@@ -1700,7 +1700,7 @@ textarea:focus {
|
|
| 1700 |
</div>
|
| 1701 |
</div>
|
| 1702 |
|
| 1703 |
-
<!-- Colonne droite : Indicateurs de la persistance et du management de l
|
| 1704 |
<div class="compact-heatmap-right">
|
| 1705 |
<div class="compact-persistence-analysis" id="compact-persistenceAnalysis">
|
| 1706 |
<h5>🧭 Indicateurs de la gestion du temps et régularité</h5>
|
|
@@ -1721,7 +1721,7 @@ textarea:focus {
|
|
| 1721 |
|
| 1722 |
<div class="compact-persistence-text" style="margin-top: 10px;">
|
| 1723 |
<div style="margin-bottom: 10px;">
|
| 1724 |
-
<strong>
|
| 1725 |
<div style="margin-top: 5px; padding: 8px; background: transparent; border-radius: 6px; font-size: 13px;">
|
| 1726 |
<span id="compact-patternText">Analyse en cours...</span>
|
| 1727 |
</div>
|
|
@@ -1983,6 +1983,24 @@ const trustWeights = {
|
|
| 1983 |
"SM": 0.20
|
| 1984 |
};
|
| 1985 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1986 |
// MAPPING PERSÉVÉRANCE PAR PROFIL
|
| 1987 |
const perseveranceProfiles = {
|
| 1988 |
"Étudiant engagé": {
|
|
@@ -2054,16 +2072,6 @@ const perseveranceProfiles = {
|
|
| 2054 |
level: "Faible",
|
| 2055 |
interpretation: "Manque de motivation, efforts sporadiques et peu soutenus",
|
| 2056 |
color: "#E53935"
|
| 2057 |
-
},
|
| 2058 |
-
"Étudiant persévérant": {
|
| 2059 |
-
level: "Élevée",
|
| 2060 |
-
interpretation: "Constance dans l'effort malgré les doutes et difficultés",
|
| 2061 |
-
color: "#4CAF50"
|
| 2062 |
-
},
|
| 2063 |
-
"Étudiant actif": {
|
| 2064 |
-
level: "Moyenne",
|
| 2065 |
-
interpretation: "Efforts soutenus mais parfois désorganisés ou mal canalisés",
|
| 2066 |
-
color: "#FB8C00"
|
| 2067 |
}
|
| 2068 |
};
|
| 2069 |
|
|
@@ -2295,7 +2303,15 @@ function loadScenarios() {
|
|
| 2295 |
function tryLoad(pathIndex) {
|
| 2296 |
if (pathIndex >= possiblePaths.length) {
|
| 2297 |
console.error("❌ Impossible de charger les scénarios depuis aucun chemin");
|
| 2298 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2299 |
return;
|
| 2300 |
}
|
| 2301 |
|
|
@@ -2309,12 +2325,11 @@ function loadScenarios() {
|
|
| 2309 |
})
|
| 2310 |
.then(data => {
|
| 2311 |
console.log("✅ Scénarios chargés:", data.scenarios?.length || 0);
|
| 2312 |
-
scenarios = data.scenarios ||
|
| 2313 |
|
| 2314 |
if (scenarios.length === 0) {
|
| 2315 |
console.warn("Aucun scénario trouvé dans le fichier");
|
| 2316 |
-
|
| 2317 |
-
return;
|
| 2318 |
}
|
| 2319 |
|
| 2320 |
loadScenario(0);
|
|
@@ -2329,6 +2344,156 @@ function loadScenarios() {
|
|
| 2329 |
tryLoad(0);
|
| 2330 |
}
|
| 2331 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2332 |
function showError(message) {
|
| 2333 |
const manifestList = document.getElementById("manifest-list");
|
| 2334 |
if (manifestList) {
|
|
@@ -2637,6 +2802,61 @@ function drawCompactEnrichedHeatmap(scenario) {
|
|
| 2637 |
title: "Autonome et stratégique",
|
| 2638 |
emoji: "😊",
|
| 2639 |
pattern: "Travail régulier et équilibré"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2640 |
}
|
| 2641 |
};
|
| 2642 |
|
|
@@ -2744,7 +2964,7 @@ function generateCompactPersistenceData(scenarioId, totalDays) {
|
|
| 2744 |
const data = new Array(totalDays).fill(0);
|
| 2745 |
|
| 2746 |
switch(scenarioId) {
|
| 2747 |
-
case 1: //
|
| 2748 |
for (let i = 0; i < totalDays; i++) {
|
| 2749 |
const weekday = i % 7;
|
| 2750 |
if (weekday === 3 || weekday === 4) { // Jeudi et vendredi
|
|
@@ -2757,7 +2977,7 @@ function generateCompactPersistenceData(scenarioId, totalDays) {
|
|
| 2757 |
}
|
| 2758 |
break;
|
| 2759 |
|
| 2760 |
-
case 2: //
|
| 2761 |
for (let i = 0; i < totalDays; i++) {
|
| 2762 |
const progress = i / totalDays;
|
| 2763 |
if (progress < 0.3) {
|
|
@@ -2770,7 +2990,7 @@ function generateCompactPersistenceData(scenarioId, totalDays) {
|
|
| 2770 |
}
|
| 2771 |
break;
|
| 2772 |
|
| 2773 |
-
case 3: //
|
| 2774 |
for (let i = 0; i < totalDays; i++) {
|
| 2775 |
const weekday = i % 7;
|
| 2776 |
if (weekday === 5 || weekday === 6) { // Weekend léger
|
|
@@ -2781,6 +3001,85 @@ function generateCompactPersistenceData(scenarioId, totalDays) {
|
|
| 2781 |
}
|
| 2782 |
break;
|
| 2783 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2784 |
default:
|
| 2785 |
for (let i = 0; i < totalDays; i++) {
|
| 2786 |
data[i] = Math.floor(Math.random() * 5); // 0-4 aléatoire
|
|
@@ -2818,6 +3117,12 @@ function analyzeCompactPersistenceMetrics(activityData, scenarioId) {
|
|
| 2818 |
} else if (weekData[0] < weekAvg * 0.7 && weekData[4] > weekAvg * 1.2) {
|
| 2819 |
pattern = "Accélération progressive";
|
| 2820 |
patternDescription = "Démarrage lent, fin forte";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2821 |
}
|
| 2822 |
}
|
| 2823 |
|
|
|
|
| 1700 |
</div>
|
| 1701 |
</div>
|
| 1702 |
|
| 1703 |
+
<!-- Colonne droite : Indicateurs de la persistance et du management de l'effort -->
|
| 1704 |
<div class="compact-heatmap-right">
|
| 1705 |
<div class="compact-persistence-analysis" id="compact-persistenceAnalysis">
|
| 1706 |
<h5>🧭 Indicateurs de la gestion du temps et régularité</h5>
|
|
|
|
| 1721 |
|
| 1722 |
<div class="compact-persistence-text" style="margin-top: 10px;">
|
| 1723 |
<div style="margin-bottom: 10px;">
|
| 1724 |
+
<strong>Dynamique temporelle de l'effort :</strong>
|
| 1725 |
<div style="margin-top: 5px; padding: 8px; background: transparent; border-radius: 6px; font-size: 13px;">
|
| 1726 |
<span id="compact-patternText">Analyse en cours...</span>
|
| 1727 |
</div>
|
|
|
|
| 1983 |
"SM": 0.20
|
| 1984 |
};
|
| 1985 |
|
| 1986 |
+
// SCÉNARIOS PAR DÉFAUT (14 profils)
|
| 1987 |
+
const DEFAULT_SCENARIOS = [
|
| 1988 |
+
{ id: 1, title: "Étudiant engagé", manifest: { type: "Engagement élevé", manifeste: "Je suis très motivé et j'essaie de faire toutes les activités", description: "Étudiant avec un fort engagement et une régularité dans le travail" } },
|
| 1989 |
+
{ id: 2, title: "Étudiant actif mais inefficace", manifest: { type: "Activité désorganisée", manifeste: "Je travaille beaucoup mais je ne vois pas les résultats", description: "Beaucoup d'effort mais peu de résultats concrets" } },
|
| 1990 |
+
{ id: 3, title: "Étudiant orienté vers le succès", manifest: { type: "Performance orientée", manifeste: "Je vise l'excellence dans tout ce que je fais", description: "Très orienté vers les résultats et la réussite" } },
|
| 1991 |
+
{ id: 4, title: "Étudiant motivé", manifest: { type: "Motivation soutenue", manifeste: "Je suis déterminé à réussir ce cours", description: "Bonne motivation avec des objectifs clairs" } },
|
| 1992 |
+
{ id: 5, title: "Étudiant surmotivé", manifest: { type: "Surinvestissement", manifeste: "Je passe trop de temps sur le cours au détriment du reste", description: "Investissement excessif pouvant mener à l'épuisement" } },
|
| 1993 |
+
{ id: 6, title: "Étudiant stratégique", manifest: { type: "Approche calculée", manifeste: "Je choisis les activités qui rapportent le plus de points", description: "Approche rationnelle et ciblée de l'apprentissage" } },
|
| 1994 |
+
{ id: 7, title: "Étudiant en amélioration", manifest: { type: "Progression constante", manifeste: "Je vois mes progrès semaine après semaine", description: "Évolution positive des compétences et résultats" } },
|
| 1995 |
+
{ id: 8, title: "Étudiant en difficulté", manifest: { type: "Difficultés persistantes", manifeste: "J'ai du mal à comprendre malgré mes efforts", description: "Rencontre des obstacles d'apprentissage importants" } },
|
| 1996 |
+
{ id: 9, title: "Étudiant évitant l'échec", manifest: { type: "Évitement", manifeste: "J'ai peur de me tromper donc je ne tente pas", description: "Anxiété face à l'échec limitant les tentatives" } },
|
| 1997 |
+
{ id: 10, title: "Étudiant à risque", manifest: { type: "Risque d'abandon", manifeste: "Je pense abandonner le cours", description: "Très faible engagement et motivation" } },
|
| 1998 |
+
{ id: 11, title: "Étudiant en progression", manifest: { type: "Amélioration technique", manifeste: "Mes compétences techniques s'améliorent régulièrement", description: "Développement progressif des compétences techniques" } },
|
| 1999 |
+
{ id: 12, title: "Étudiant acceptant l'échec", manifest: { type: "Résilience", manifeste: "Je vois l'échec comme une opportunité d'apprendre", description: "Attitude positive face aux erreurs et échecs" } },
|
| 2000 |
+
{ id: 13, title: "Étudiant inactif", manifest: { type: "Inactivité", manifeste: "Je ne trouve pas la motivation pour commencer", description: "Très faible participation et engagement" } },
|
| 2001 |
+
{ id: 14, title: "Étudiant non engagé", manifest: { type: "Désengagement", manifeste: "Ce cours ne m'intéresse pas vraiment", description: "Manque d'intérêt et d'implication" } }
|
| 2002 |
+
];
|
| 2003 |
+
|
| 2004 |
// MAPPING PERSÉVÉRANCE PAR PROFIL
|
| 2005 |
const perseveranceProfiles = {
|
| 2006 |
"Étudiant engagé": {
|
|
|
|
| 2072 |
level: "Faible",
|
| 2073 |
interpretation: "Manque de motivation, efforts sporadiques et peu soutenus",
|
| 2074 |
color: "#E53935"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2075 |
}
|
| 2076 |
};
|
| 2077 |
|
|
|
|
| 2303 |
function tryLoad(pathIndex) {
|
| 2304 |
if (pathIndex >= possiblePaths.length) {
|
| 2305 |
console.error("❌ Impossible de charger les scénarios depuis aucun chemin");
|
| 2306 |
+
console.log("Utilisation des scénarios par défaut (14 profils)");
|
| 2307 |
+
scenarios = generateDefaultScenarios();
|
| 2308 |
+
|
| 2309 |
+
if (scenarios.length === 0) {
|
| 2310 |
+
showError("Impossible de charger les scénarios.");
|
| 2311 |
+
return;
|
| 2312 |
+
}
|
| 2313 |
+
|
| 2314 |
+
loadScenario(0);
|
| 2315 |
return;
|
| 2316 |
}
|
| 2317 |
|
|
|
|
| 2325 |
})
|
| 2326 |
.then(data => {
|
| 2327 |
console.log("✅ Scénarios chargés:", data.scenarios?.length || 0);
|
| 2328 |
+
scenarios = data.scenarios || generateDefaultScenarios();
|
| 2329 |
|
| 2330 |
if (scenarios.length === 0) {
|
| 2331 |
console.warn("Aucun scénario trouvé dans le fichier");
|
| 2332 |
+
scenarios = generateDefaultScenarios();
|
|
|
|
| 2333 |
}
|
| 2334 |
|
| 2335 |
loadScenario(0);
|
|
|
|
| 2344 |
tryLoad(0);
|
| 2345 |
}
|
| 2346 |
|
| 2347 |
+
// Générer les scénarios par défaut
|
| 2348 |
+
function generateDefaultScenarios() {
|
| 2349 |
+
console.log("Génération des 14 scénarios par défaut");
|
| 2350 |
+
|
| 2351 |
+
const defaultScenarios = [...DEFAULT_SCENARIOS];
|
| 2352 |
+
|
| 2353 |
+
// Ajouter des données complètes à chaque scénario
|
| 2354 |
+
defaultScenarios.forEach((scenario, index) => {
|
| 2355 |
+
// Compétences aléatoires
|
| 2356 |
+
scenario.competences = generateRandomCompetences(14);
|
| 2357 |
+
|
| 2358 |
+
// Données radar spécifiques au profil
|
| 2359 |
+
scenario.radar = generateProfileRadarData(scenario.title);
|
| 2360 |
+
|
| 2361 |
+
// Message ReflAgent spécifique
|
| 2362 |
+
scenario.reflAgent = generateReflAgentMessage(scenario.title);
|
| 2363 |
+
|
| 2364 |
+
// Niveau de risque selon le profil
|
| 2365 |
+
scenario.risk = calculateRiskLevel(scenario.title);
|
| 2366 |
+
});
|
| 2367 |
+
|
| 2368 |
+
return defaultScenarios;
|
| 2369 |
+
}
|
| 2370 |
+
|
| 2371 |
+
// Générer des compétences aléatoires
|
| 2372 |
+
function generateRandomCompetences(count) {
|
| 2373 |
+
const competenceLabels = [
|
| 2374 |
+
"Analyse de texte", "Rédaction académique", "Recherche documentaire",
|
| 2375 |
+
"Présentation orale", "Travail collaboratif", "Gestion du temps",
|
| 2376 |
+
"Résolution de problèmes", "Pensée critique", "Communication écrite",
|
| 2377 |
+
"Organisation personnelle", "Auto-évaluation", "Utilisation des TICE",
|
| 2378 |
+
"Métacognition", "Adaptabilité"
|
| 2379 |
+
];
|
| 2380 |
+
|
| 2381 |
+
const competences = [];
|
| 2382 |
+
for (let i = 0; i < count; i++) {
|
| 2383 |
+
const labelIndex = i % competenceLabels.length;
|
| 2384 |
+
// Valeur aléatoire entre 30 et 95 selon l'index
|
| 2385 |
+
const value = 30 + Math.floor(Math.random() * 65);
|
| 2386 |
+
competences.push({
|
| 2387 |
+
label: competenceLabels[labelIndex],
|
| 2388 |
+
value: value
|
| 2389 |
+
});
|
| 2390 |
+
}
|
| 2391 |
+
|
| 2392 |
+
return competences;
|
| 2393 |
+
}
|
| 2394 |
+
|
| 2395 |
+
// Générer des données radar selon le profil
|
| 2396 |
+
function generateProfileRadarData(profileTitle) {
|
| 2397 |
+
let baseValues;
|
| 2398 |
+
|
| 2399 |
+
switch(profileTitle) {
|
| 2400 |
+
case "Étudiant engagé":
|
| 2401 |
+
baseValues = [85, 72, 68, 35, 74, 80, 78];
|
| 2402 |
+
break;
|
| 2403 |
+
case "Étudiant actif mais inefficace":
|
| 2404 |
+
baseValues = [90, 65, 60, 60, 70, 85, 65];
|
| 2405 |
+
break;
|
| 2406 |
+
case "Étudiant orienté vers le succès":
|
| 2407 |
+
baseValues = [90, 85, 80, 25, 90, 75, 85];
|
| 2408 |
+
break;
|
| 2409 |
+
case "Étudiant motivé":
|
| 2410 |
+
baseValues = [65, 70, 65, 45, 60, 70, 68];
|
| 2411 |
+
break;
|
| 2412 |
+
case "Étudiant surmotivé":
|
| 2413 |
+
baseValues = [95, 80, 75, 20, 88, 98, 82];
|
| 2414 |
+
break;
|
| 2415 |
+
case "Étudiant stratégique":
|
| 2416 |
+
baseValues = [70, 78, 72, 40, 75, 55, 80];
|
| 2417 |
+
break;
|
| 2418 |
+
case "Étudiant en amélioration":
|
| 2419 |
+
baseValues = [70, 68, 65, 50, 68, 72, 70];
|
| 2420 |
+
break;
|
| 2421 |
+
case "Étudiant en difficulté":
|
| 2422 |
+
baseValues = [72, 60, 55, 70, 65, 85, 58];
|
| 2423 |
+
break;
|
| 2424 |
+
case "Étudiant évitant l'échec":
|
| 2425 |
+
baseValues = [35, 40, 38, 80, 30, 45, 40];
|
| 2426 |
+
break;
|
| 2427 |
+
case "Étudiant à risque":
|
| 2428 |
+
baseValues = [75, 60, 55, 65, 55, 70, 58];
|
| 2429 |
+
break;
|
| 2430 |
+
case "Étudiant en progression":
|
| 2431 |
+
baseValues = [70, 78, 75, 45, 68, 65, 78];
|
| 2432 |
+
break;
|
| 2433 |
+
case "Étudiant acceptant l'échec":
|
| 2434 |
+
baseValues = [85, 70, 68, 55, 58, 62, 72];
|
| 2435 |
+
break;
|
| 2436 |
+
case "Étudiant inactif":
|
| 2437 |
+
baseValues = [15, 20, 18, 90, 10, 25, 22];
|
| 2438 |
+
break;
|
| 2439 |
+
case "Étudiant non engagé":
|
| 2440 |
+
baseValues = [30, 35, 32, 75, 25, 40, 38];
|
| 2441 |
+
break;
|
| 2442 |
+
default:
|
| 2443 |
+
baseValues = [70, 65, 62, 50, 65, 70, 68];
|
| 2444 |
+
}
|
| 2445 |
+
|
| 2446 |
+
// Ajouter une légère variation
|
| 2447 |
+
return DEFAULT_RADAR_METRICS.map((metric, index) => ({
|
| 2448 |
+
label: metric.label,
|
| 2449 |
+
value: Math.max(10, Math.min(100, baseValues[index] + (Math.random() * 10 - 5)))
|
| 2450 |
+
}));
|
| 2451 |
+
}
|
| 2452 |
+
|
| 2453 |
+
// Générer un message ReflAgent selon le profil
|
| 2454 |
+
function generateReflAgentMessage(profileTitle) {
|
| 2455 |
+
const messages = {
|
| 2456 |
+
"Étudiant engagé": "Félicitations ! Ton engagement est remarquable. Continue sur cette lancée en maintenant ta régularité de travail.",
|
| 2457 |
+
"Étudiant actif mais inefficace": "Tu travailles beaucoup, mais l'efficacité pourrait être améliorée. Concentre-toi sur la qualité plutôt que la quantité.",
|
| 2458 |
+
"Étudiant orienté vers le succès": "Ton orientation vers la réussite est excellente. N'oublie pas que l'apprentissage est aussi important que les résultats.",
|
| 2459 |
+
"Étudiant motivé": "Ta motivation est un atout précieux. Structure ton travail pour transformer cette motivation en résultats concrets.",
|
| 2460 |
+
"Étudiant surmotivé": "Attention au surinvestissement. Un équilibre est nécessaire pour éviter l'épuisement. Priorise les activités essentielles.",
|
| 2461 |
+
"Étudiant stratégique": "Ton approche stratégique est intelligente. Assure-toi de ne pas négliger les compétences transversales importantes.",
|
| 2462 |
+
"Étudiant en amélioration": "Tes progrès sont visibles ! Continue à travailler régulièrement pour consolider ces améliorations.",
|
| 2463 |
+
"Étudiant en difficulté": "Tu rencontres des difficultés, mais ne baisse pas les bras. Demande de l'aide et concentre-toi sur les bases.",
|
| 2464 |
+
"Étudiant évitant l'échec": "La peur de l'échec peut être paralysante. Rappelle-toi que l'erreur fait partie de l'apprentissage.",
|
| 2465 |
+
"Étudiant à risque": "Ton engagement est fragile. Commence par de petits objectifs réalisables pour reprendre confiance.",
|
| 2466 |
+
"Étudiant en progression": "Tes compétences techniques s'améliorent bien. Maintenant, travaille sur leur application dans des contextes variés.",
|
| 2467 |
+
"Étudiant acceptant l'échec": "Ton attitude face à l'échec est constructive. Utilise ces expériences pour identifier tes points d'amélioration.",
|
| 2468 |
+
"Étudiant inactif": "Le premier pas est le plus difficile. Choisis une seule activité simple pour commencer, sans pression.",
|
| 2469 |
+
"Étudiant non engagé": "Il est normal de manquer d'intérêt parfois. Cherche un aspect du cours qui pourrait te motiver davantage."
|
| 2470 |
+
};
|
| 2471 |
+
|
| 2472 |
+
return messages[profileTitle] || "Analyse de votre profil d'apprentissage en cours...";
|
| 2473 |
+
}
|
| 2474 |
+
|
| 2475 |
+
// Calculer le niveau de risque selon le profil
|
| 2476 |
+
function calculateRiskLevel(profileTitle) {
|
| 2477 |
+
const riskLevels = {
|
| 2478 |
+
"Étudiant engagé": 20,
|
| 2479 |
+
"Étudiant actif mais inefficace": 50,
|
| 2480 |
+
"Étudiant orienté vers le succès": 25,
|
| 2481 |
+
"Étudiant motivé": 30,
|
| 2482 |
+
"Étudiant surmotivé": 40,
|
| 2483 |
+
"Étudiant stratégique": 35,
|
| 2484 |
+
"Étudiant en amélioration": 45,
|
| 2485 |
+
"Étudiant en difficulté": 70,
|
| 2486 |
+
"Étudiant évitant l'échec": 65,
|
| 2487 |
+
"Étudiant à risque": 85,
|
| 2488 |
+
"Étudiant en progression": 40,
|
| 2489 |
+
"Étudiant acceptant l'échec": 55,
|
| 2490 |
+
"Étudiant inactif": 90,
|
| 2491 |
+
"Étudiant non engagé": 75
|
| 2492 |
+
};
|
| 2493 |
+
|
| 2494 |
+
return riskLevels[profileTitle] || 50;
|
| 2495 |
+
}
|
| 2496 |
+
|
| 2497 |
function showError(message) {
|
| 2498 |
const manifestList = document.getElementById("manifest-list");
|
| 2499 |
if (manifestList) {
|
|
|
|
| 2802 |
title: "Autonome et stratégique",
|
| 2803 |
emoji: "😊",
|
| 2804 |
pattern: "Travail régulier et équilibré"
|
| 2805 |
+
},
|
| 2806 |
+
4: {
|
| 2807 |
+
title: "Motivé et constant",
|
| 2808 |
+
emoji: "👍",
|
| 2809 |
+
pattern: "Rythme régulier toute la semaine"
|
| 2810 |
+
},
|
| 2811 |
+
5: {
|
| 2812 |
+
title: "Surinvestissement",
|
| 2813 |
+
emoji: "🔥",
|
| 2814 |
+
pattern: "Activité intense, risque de surcharge"
|
| 2815 |
+
},
|
| 2816 |
+
6: {
|
| 2817 |
+
title: "Stratégique et ciblé",
|
| 2818 |
+
emoji: "🎯",
|
| 2819 |
+
pattern: "Efforts concentrés sur les priorités"
|
| 2820 |
+
},
|
| 2821 |
+
7: {
|
| 2822 |
+
title: "Amélioration continue",
|
| 2823 |
+
emoji: "📈",
|
| 2824 |
+
pattern: "Progression visible semaine après semaine"
|
| 2825 |
+
},
|
| 2826 |
+
8: {
|
| 2827 |
+
title: "Difficultés persistantes",
|
| 2828 |
+
emoji: "😔",
|
| 2829 |
+
pattern: "Efforts dispersés, peu de régularité"
|
| 2830 |
+
},
|
| 2831 |
+
9: {
|
| 2832 |
+
title: "Évitement",
|
| 2833 |
+
emoji: "😨",
|
| 2834 |
+
pattern: "Activité minimale, pics sporadiques"
|
| 2835 |
+
},
|
| 2836 |
+
10: {
|
| 2837 |
+
title: "Risque d'abandon",
|
| 2838 |
+
emoji: "⚠️",
|
| 2839 |
+
pattern: "Très faible activité, irrégularité totale"
|
| 2840 |
+
},
|
| 2841 |
+
11: {
|
| 2842 |
+
title: "Progression technique",
|
| 2843 |
+
emoji: "🔧",
|
| 2844 |
+
pattern: "Amélioration régulière des compétences"
|
| 2845 |
+
},
|
| 2846 |
+
12: {
|
| 2847 |
+
title: "Résilience",
|
| 2848 |
+
emoji: "💪",
|
| 2849 |
+
pattern: "Persévérance malgré les difficultés"
|
| 2850 |
+
},
|
| 2851 |
+
13: {
|
| 2852 |
+
title: "Inactivité",
|
| 2853 |
+
emoji: "😴",
|
| 2854 |
+
pattern: "Très peu d'activité détectée"
|
| 2855 |
+
},
|
| 2856 |
+
14: {
|
| 2857 |
+
title: "Désengagement",
|
| 2858 |
+
emoji: "😑",
|
| 2859 |
+
pattern: "Activité sporadique et décroissante"
|
| 2860 |
}
|
| 2861 |
};
|
| 2862 |
|
|
|
|
| 2964 |
const data = new Array(totalDays).fill(0);
|
| 2965 |
|
| 2966 |
switch(scenarioId) {
|
| 2967 |
+
case 1: // Étudiant engagé - Effort concentré avant échéances
|
| 2968 |
for (let i = 0; i < totalDays; i++) {
|
| 2969 |
const weekday = i % 7;
|
| 2970 |
if (weekday === 3 || weekday === 4) { // Jeudi et vendredi
|
|
|
|
| 2977 |
}
|
| 2978 |
break;
|
| 2979 |
|
| 2980 |
+
case 2: // Étudiant actif mais inefficace - Démarrage lent, accélération tardive
|
| 2981 |
for (let i = 0; i < totalDays; i++) {
|
| 2982 |
const progress = i / totalDays;
|
| 2983 |
if (progress < 0.3) {
|
|
|
|
| 2990 |
}
|
| 2991 |
break;
|
| 2992 |
|
| 2993 |
+
case 3: // Étudiant orienté vers le succès - Travail régulier
|
| 2994 |
for (let i = 0; i < totalDays; i++) {
|
| 2995 |
const weekday = i % 7;
|
| 2996 |
if (weekday === 5 || weekday === 6) { // Weekend léger
|
|
|
|
| 3001 |
}
|
| 3002 |
break;
|
| 3003 |
|
| 3004 |
+
case 4: // Étudiant motivé - Rythme constant
|
| 3005 |
+
for (let i = 0; i < totalDays; i++) {
|
| 3006 |
+
const weekday = i % 7;
|
| 3007 |
+
if (weekday === 5 || weekday === 6) { // Weekend modéré
|
| 3008 |
+
data[i] = Math.floor(Math.random() * 2) + 1; // 1-2
|
| 3009 |
+
} else {
|
| 3010 |
+
data[i] = Math.floor(Math.random() * 2) + 2; // 2-3
|
| 3011 |
+
}
|
| 3012 |
+
}
|
| 3013 |
+
break;
|
| 3014 |
+
|
| 3015 |
+
case 5: // Étudiant surmotivé - Activité intense
|
| 3016 |
+
for (let i = 0; i < totalDays; i++) {
|
| 3017 |
+
data[i] = Math.floor(Math.random() * 2) + 3; // 3-4
|
| 3018 |
+
}
|
| 3019 |
+
break;
|
| 3020 |
+
|
| 3021 |
+
case 6: // Étudiant stratégique - Efforts ciblés
|
| 3022 |
+
for (let i = 0; i < totalDays; i++) {
|
| 3023 |
+
const weekday = i % 7;
|
| 3024 |
+
if (weekday === 1 || weekday === 3) { // Mardi et jeudi
|
| 3025 |
+
data[i] = Math.floor(Math.random() * 2) + 3; // 3-4
|
| 3026 |
+
} else {
|
| 3027 |
+
data[i] = Math.floor(Math.random() * 2) + 1; // 1-2
|
| 3028 |
+
}
|
| 3029 |
+
}
|
| 3030 |
+
break;
|
| 3031 |
+
|
| 3032 |
+
case 7: // Étudiant en amélioration - Progression
|
| 3033 |
+
for (let i = 0; i < totalDays; i++) {
|
| 3034 |
+
const progress = i / totalDays;
|
| 3035 |
+
data[i] = Math.floor(progress * 3) + 1; // 1-4 progressif
|
| 3036 |
+
}
|
| 3037 |
+
break;
|
| 3038 |
+
|
| 3039 |
+
case 8: // Étudiant en difficulté - Irrégulier
|
| 3040 |
+
for (let i = 0; i < totalDays; i++) {
|
| 3041 |
+
data[i] = Math.random() > 0.6 ? Math.floor(Math.random() * 2) + 1 : 0;
|
| 3042 |
+
}
|
| 3043 |
+
break;
|
| 3044 |
+
|
| 3045 |
+
case 9: // Étudiant évitant l'échec - Minimal
|
| 3046 |
+
for (let i = 0; i < totalDays; i++) {
|
| 3047 |
+
data[i] = Math.random() > 0.7 ? 1 : 0;
|
| 3048 |
+
}
|
| 3049 |
+
break;
|
| 3050 |
+
|
| 3051 |
+
case 10: // Étudiant à risque - Très irrégulier
|
| 3052 |
+
for (let i = 0; i < totalDays; i++) {
|
| 3053 |
+
data[i] = Math.random() > 0.8 ? 1 : 0;
|
| 3054 |
+
}
|
| 3055 |
+
break;
|
| 3056 |
+
|
| 3057 |
+
case 11: // Étudiant en progression - Amélioration constante
|
| 3058 |
+
for (let i = 0; i < totalDays; i++) {
|
| 3059 |
+
const base = Math.floor(i / 7);
|
| 3060 |
+
data[i] = Math.min(4, base + Math.floor(Math.random() * 2));
|
| 3061 |
+
}
|
| 3062 |
+
break;
|
| 3063 |
+
|
| 3064 |
+
case 12: // Étudiant acceptant l'échec - Résilient
|
| 3065 |
+
for (let i = 0; i < totalDays; i++) {
|
| 3066 |
+
data[i] = Math.floor(Math.random() * 3) + 1; // 1-3
|
| 3067 |
+
}
|
| 3068 |
+
break;
|
| 3069 |
+
|
| 3070 |
+
case 13: // Étudiant inactif - Très faible
|
| 3071 |
+
for (let i = 0; i < totalDays; i++) {
|
| 3072 |
+
data[i] = Math.random() > 0.9 ? 1 : 0;
|
| 3073 |
+
}
|
| 3074 |
+
break;
|
| 3075 |
+
|
| 3076 |
+
case 14: // Étudiant non engagé - Décroissant
|
| 3077 |
+
for (let i = 0; i < totalDays; i++) {
|
| 3078 |
+
const progress = i / totalDays;
|
| 3079 |
+
data[i] = Math.random() > (0.3 + progress * 0.5) ? Math.floor(Math.random() * 2) : 0;
|
| 3080 |
+
}
|
| 3081 |
+
break;
|
| 3082 |
+
|
| 3083 |
default:
|
| 3084 |
for (let i = 0; i < totalDays; i++) {
|
| 3085 |
data[i] = Math.floor(Math.random() * 5); // 0-4 aléatoire
|
|
|
|
| 3117 |
} else if (weekData[0] < weekAvg * 0.7 && weekData[4] > weekAvg * 1.2) {
|
| 3118 |
pattern = "Accélération progressive";
|
| 3119 |
patternDescription = "Démarrage lent, fin forte";
|
| 3120 |
+
} else if (weekData[5] > weekAvg * 1.3 && weekData[6] > weekAvg * 1.3) {
|
| 3121 |
+
pattern = "Travail weekend";
|
| 3122 |
+
patternDescription = "Activité principalement le weekend";
|
| 3123 |
+
} else if (weekAvg < 1) {
|
| 3124 |
+
pattern = "Très faible";
|
| 3125 |
+
patternDescription = "Activité minimale toute la semaine";
|
| 3126 |
}
|
| 3127 |
}
|
| 3128 |
|