// reconcile_ids.js const fs = require('fs'); const path = require('path'); const http = require('http'); // --- CONFIGURACIÓN --- const API_URL = 'http://localhost:5217/api/catalogos/municipios'; // ¡Asegúrate que tu API esté corriendo en este puerto! const GEOJSON_PATH = path.join(__dirname, 'Elecciones-Web', 'frontend', 'public', 'buenos-aires-municipios.geojson'); const OUTPUT_PATH = path.join(__dirname, 'Elecciones-Web', 'frontend', 'public', 'municipioIdMap.json'); const normalizeString = (str) => { if (!str) return ''; return str.normalize("NFD").replace(/[\u0300-\u036f]/g, "").toLowerCase(); }; async function reconcile() { console.log('Iniciando el script de reconciliación de IDs...'); try { const apiData = await new Promise((resolve, reject) => { http.get(API_URL, res => { const { statusCode } = res; if (statusCode !== 200) { reject(new Error(`La petición a la API falló con el código de estado: ${statusCode}`)); res.resume(); return; } let data = ''; res.on('data', chunk => data += chunk); res.on('end', () => resolve(JSON.parse(data))); }).on('error', reject); }); console.log(`Se obtuvieron ${apiData.length} municipios desde la API.`); const apiNameMap = new Map(apiData.map(m => [normalizeString(m.nombre), m.id])); const geoJsonRaw = fs.readFileSync(GEOJSON_PATH, 'utf8'); const geoJsonData = JSON.parse(geoJsonRaw); console.log(`Se leyeron ${geoJsonData.features.length} features desde el GeoJSON.`); const finalIdMap = {}; let matches = 0; const notFound = []; // --- CAMBIO CLAVE: YA NO NECESITAMOS ALIAS MANUALES --- for (const feature of geoJsonData.features) { const geoJsonId = feature.properties.cca; const nombreGeoJson = normalizeString(feature.properties.nam); if (apiNameMap.has(nombreGeoJson)) { const apiId = apiNameMap.get(nombreGeoJson); finalIdMap[geoJsonId] = apiId; matches++; } else { notFound.push(feature.properties.nam); } } console.log(`\n--- RESULTADOS ---`); console.log(`Coincidencias encontradas: ${matches} de ${geoJsonData.features.length}`); if (notFound.length > 0) { console.warn(`\nNo se encontró coincidencia para los siguientes ${notFound.length} municipios del GeoJSON:`); console.warn(notFound.join(', ')); } fs.writeFileSync(OUTPUT_PATH, JSON.stringify(finalIdMap, null, 2)); console.log(`\n¡Éxito! El mapa de IDs se ha guardado en: ${OUTPUT_PATH}`); } catch (error) { console.error('\nOcurrió un error:', error.message); if(error.code === 'ECONNREFUSED') { console.error('Asegúrate de que tu servicio de API esté corriendo en la URL especificada.'); } } } reconcile();