import { createConnection } from 'mysql2/promise'; import { config } from 'dotenv'; config(); const conn = await createConnection(process.env.DATABASE_URL); // Libellés parasites connus (noms de catégories ou lignes de synthèse) const PARASITES_KEYWORDS = [ 'Infogérance', 'Infogerance', 'Sécurité', 'Securite', 'Téléphonie', 'Telephonie', 'App global', 'App HEP', 'App SMR', 'Applicatifs', // commence par 'TOTAL', 'Total', 'Ventilation', 'Répartition', 'Repartition', 'Nouveautés', 'Nouveautes', ]; // 1. Lister les lignes parasites const [rows] = await conn.execute( `SELECT id, annee, etablissementCode, etablissementNom FROM opex_bases_repartition ORDER BY annee, etablissementCode` ); console.log('=== Toutes les lignes opex_bases_repartition ==='); for (const r of rows) { const code = r.etablissementCode ?? ''; const nom = r.etablissementNom ?? ''; const isParasite = PARASITES_KEYWORDS.some(k => code.toLowerCase().includes(k.toLowerCase()) || nom.toLowerCase().includes(k.toLowerCase()) ) || /^(total|ventilation|répartition|applicatifs)/i.test(code.trim()); if (isParasite) { console.log(` PARASITE id=${r.id} annee=${r.annee} code="${code}" nom="${nom}"`); } } // 2. Supprimer les parasites const [delResult] = await conn.execute( `DELETE FROM opex_bases_repartition WHERE etablissementCode REGEXP '^(Infog|S.curit|T.l.phonie|App global|App HEP|App SMR|Applicatifs|TOTAL|Total|Ventilation|R.partition|Nouveaut)' OR etablissementNom REGEXP '^(Infog|S.curit|T.l.phonie|App global|App HEP|App SMR|Applicatifs|TOTAL|Total|Ventilation|R.partition|Nouveaut)'` ); console.log(`\nSupprimé ${delResult.affectedRows} lignes parasites.`); // 3. Vérification finale const [remaining] = await conn.execute( `SELECT annee, COUNT(*) as cnt FROM opex_bases_repartition GROUP BY annee ORDER BY annee` ); console.log('=== Lignes restantes par année ==='); console.table(remaining); await conn.end();