/** * Seed des bases de répartition OPEX (charges classe 6) pour 2025 et 2026 * depuis les fichiers JSON sources. */ import mysql from 'mysql2/promise'; import { readFileSync } from 'fs'; import { fileURLToPath } from 'url'; import { dirname, join } from 'path'; import dotenv from 'dotenv'; const __dirname = dirname(fileURLToPath(import.meta.url)); dotenv.config({ path: join(__dirname, '..', '.env') }); const conn = await mysql.createConnection(process.env.DATABASE_URL); const dataFiles = { 2025: join(__dirname, '../client/src/data_opex_2025.json'), 2026: join(__dirname, '../client/src/data_opex.json'), }; for (const [annee, filePath] of Object.entries(dataFiles)) { const data = JSON.parse(readFileSync(filePath, 'utf8')); const etabs = data.etablissements || []; if (etabs.length === 0) { console.log(`Année ${annee}: aucun établissement trouvé dans le JSON`); continue; } // Supprimer les bases existantes pour cette année await conn.execute('DELETE FROM opex_bases_repartition WHERE annee = ?', [parseInt(annee)]); // Insérer en batch const values = etabs.map(e => [ parseInt(annee), e.code, e.nom || null, e.base_repartition || 0, ]); if (values.length > 0) { await conn.query( 'INSERT INTO opex_bases_repartition (annee, etablissementCode, etablissementNom, baseRepartition) VALUES ?', [values] ); } console.log(`Année ${annee}: ${values.length} bases de répartition insérées`); console.log(` Total base: ${etabs.reduce((s, e) => s + (e.base_repartition || 0), 0).toLocaleString('fr-FR', { maximumFractionDigits: 0 })} €`); } await conn.end(); console.log('\nSeed bases de répartition terminé.');