// ================= VARIABLES GLOBALES =================
let currentExpert = null;
let scenariosData = [];
let calibrationData = { experts: [] };
const totalExperts = 14;
const metrics = ['AR', 'AE', 'ESR', 'SDM', 'SM'];
// ================= INITIALISATION =================
document.addEventListener('DOMContentLoaded', function() {
console.log('Initialisation du formulaire d\'évaluation des experts...');
initializeUI();
loadAllData();
});
function initializeUI() {
// Initialiser la grille d'experts avec des boutons vides
const expertGrid = document.getElementById('expertGrid');
let html = '';
for (let i = 1; i <= totalExperts; i++) {
html += `
Expert ${i}
`;
}
expertGrid.innerHTML = html;
// Initialiser le texte de progression
updateProgressText(0);
}
function updateProgressText(completedCount) {
document.getElementById('progressText').textContent =
`${completedCount}/${totalExperts} experts ont complété leur évaluation`;
document.getElementById('progressFill').style.width = `${(completedCount / totalExperts) * 100}%`;
}
async function loadAllData() {
showLoading(true);
showInfo('Chargement des données en cours...');
try {
// Charger les scénarios
const scenariosResponse = await fetch('scenarios_list.json');
if (!scenariosResponse.ok) {
throw new Error('scenarios_list.json non trouvé ou erreur de chargement');
}
const scenariosJson = await scenariosResponse.json();
scenariosData = scenariosJson.scenarios || [];
console.log(`${scenariosData.length} scénarios chargés`);
// Charger ou créer les données de calibration
await loadCalibrationData();
// Initialiser la liste des scénarios
initializeScenarioList();
// Mettre à jour la grille des experts avec les données chargées
updateExpertGrid();
showLoading(false);
showSuccess('Données chargées avec succès');
} catch (error) {
console.error('Erreur de chargement:', error);
showLoading(false);
showInfo(`Erreur lors du chargement: ${error.message}. Vous pouvez continuer avec des données vides.`);
// Initialiser avec des données vides
if (scenariosData.length === 0) {
scenariosData = Array.from({length: 16}, (_, i) => ({
id: i + 1,
title: `Scénario ${i + 1}`
}));
initializeScenarioList();
}
updateExpertGrid();
}
}
async function loadCalibrationData() {
try {
// Essayer de charger depuis le localStorage d'abord
const savedData = localStorage.getItem('calibration_trust_data');
if (savedData) {
calibrationData = JSON.parse(savedData);
console.log('Données de calibration chargées depuis localStorage:', calibrationData);
return;
}
// Essayer de charger depuis le fichier
try {
const response = await fetch('calibration-trust.json');
if (response.ok) {
calibrationData = await response.json();
console.log('Données de calibration chargées depuis fichier:', calibrationData);
// Sauvegarder dans localStorage pour usage futur
localStorage.setItem('calibration_trust_data', JSON.stringify(calibrationData));
} else {
createEmptyCalibrationData();
}
} catch (fileError) {
console.log('Fichier calibration-trust.json non trouvé, création de nouvelles données');
createEmptyCalibrationData();
}
} catch (error) {
console.error('Erreur lors du chargement des données de calibration:', error);
createEmptyCalibrationData();
}
// S'assurer que nous avons des données pour tous les experts
ensureAllExpertsExist();
}
function createEmptyCalibrationData() {
calibrationData = { experts: [] };
for (let i = 1; i <= totalExperts; i++) {
calibrationData.experts.push({
expert_id: i,
evaluations: [],
last_updated: null
});
}
console.log('Nouvelles données de calibration créées');
}
function ensureAllExpertsExist() {
for (let i = 1; i <= totalExperts; i++) {
const existingExpert = calibrationData.experts.find(e => e.expert_id === i);
if (!existingExpert) {
calibrationData.experts.push({
expert_id: i,
evaluations: [],
last_updated: null
});
}
}
// Trier par ID d'expert
calibrationData.experts.sort((a, b) => a.expert_id - b.expert_id);
}
function updateExpertGrid() {
const expertGrid = document.getElementById('expertGrid');
let html = '';
let completedCount = 0;
for (let i = 1; i <= totalExperts; i++) {
const expert = calibrationData.experts.find(e => e.expert_id === i);
const isCompleted = expert && expert.evaluations &&
expert.evaluations.length === scenariosData.length &&
expert.evaluations.every(e =>
metrics.every(m => e[m] !== null && e[m] !== undefined)
);
const isCurrent = currentExpert === i;
if (isCompleted) completedCount++;
html += `
Expert ${i}
${isCompleted ? '✓' : ''}
`;
}
expertGrid.innerHTML = html;
// Mettre à jour la barre de progression
updateProgressText(completedCount);
}
function initializeScenarioList() {
const scenarioList = document.getElementById('scenarioList');
let html = '';
scenariosData.forEach((scenario, index) => {
html += `