diff --git a/docs/audit/andalucia-pending-review-queue-v1072.md b/docs/audit/andalucia-pending-review-queue-v1072.md new file mode 100644 index 0000000..4a935e0 --- /dev/null +++ b/docs/audit/andalucia-pending-review-queue-v1072.md @@ -0,0 +1,44 @@ +# Andalucía pending distributor review queue v0.10.7.2 + +Generated: 2026-05-23 + +## Summary + +- Andalucía municipal GeoJSON features: **786** +- Already covered by distributor hints: **254** +- Pending municipal review rows: **532** +- CSV: `docs/audit/andalucia_pending_review_queue_v1072.csv` + +## Pending rows by province + +| province | pending rows | +|---|---:| +| Almería | 73 | +| Cádiz | 29 | +| Córdoba | 44 | +| Granada | 129 | +| Huelva | 53 | +| Jaén | 50 | +| Málaga | 70 | +| Sevilla | 84 | + +## Intended use + +This queue is a sanitized working list for future Andalucía distributor research. + +It does not import new distributor hints. + +Future imports must only promote rows from this queue when there is +strong public, source-backed evidence for a `verified_partial` hint. + +## Safety constraints + +- No CUPS. +- No addresses. +- No exact coordinates. +- No customer data. +- No private grid inventory. +- No raw external API responses. +- No unsupported exclusivity claims. +- No Red Eléctrica distributor hint. +- No generic `Pequeña distribuidora` placeholder. diff --git a/docs/audit/andalucia_pending_review_queue_v1072.csv b/docs/audit/andalucia_pending_review_queue_v1072.csv new file mode 100644 index 0000000..dca7c3c --- /dev/null +++ b/docs/audit/andalucia_pending_review_queue_v1072.csv @@ -0,0 +1,533 @@ +dataset_id,zone_id,municipality,province,review_status,candidate_distributor,candidate_confidence,source_url,source_label,review_notes +andalucia,municipality:almeria::abla,Abla,Almería,pending_municipal_review,,,,, +andalucia,municipality:almeria::abrucena,Abrucena,Almería,pending_municipal_review,,,,, +andalucia,municipality:almeria::adra,Adra,Almería,pending_municipal_review,,,,, +andalucia,municipality:almeria::albanchez,Albanchez,Almería,pending_municipal_review,,,,, +andalucia,municipality:almeria::alboloduy,Alboloduy,Almería,pending_municipal_review,,,,, +andalucia,municipality:almeria::alcolea,Alcolea,Almería,pending_municipal_review,,,,, +andalucia,municipality:almeria::alcudia_de_monteagud,Alcudia de Monteagud,Almería,pending_municipal_review,,,,, +andalucia,municipality:almeria::alhabia,Alhabia,Almería,pending_municipal_review,,,,, +andalucia,municipality:almeria::alhama_de_almeria,Alhama de Almería,Almería,pending_municipal_review,,,,, +andalucia,municipality:almeria::alicun,Alicún,Almería,pending_municipal_review,,,,, +andalucia,municipality:almeria::almocita,Almócita,Almería,pending_municipal_review,,,,, +andalucia,municipality:almeria::alsodux,Alsodux,Almería,pending_municipal_review,,,,, +andalucia,municipality:almeria::antas,Antas,Almería,pending_municipal_review,,,,, +andalucia,municipality:almeria::bacares,Bacares,Almería,pending_municipal_review,,,,, +andalucia,municipality:almeria::balanegra,Balanegra,Almería,pending_municipal_review,,,,, +andalucia,municipality:almeria::bayarque,Bayarque,Almería,pending_municipal_review,,,,, +andalucia,municipality:almeria::beires,Beires,Almería,pending_municipal_review,,,,, +andalucia,municipality:almeria::benahadux,Benahadux,Almería,pending_municipal_review,,,,, +andalucia,municipality:almeria::benitagla,Benitagla,Almería,pending_municipal_review,,,,, +andalucia,municipality:almeria::benizalon,Benizalón,Almería,pending_municipal_review,,,,, +andalucia,municipality:almeria::berja,Berja,Almería,pending_municipal_review,,,,, +andalucia,municipality:almeria::canjayar,Canjáyar,Almería,pending_municipal_review,,,,, +andalucia,municipality:almeria::carboneras,Carboneras,Almería,pending_municipal_review,,,,, +andalucia,municipality:almeria::castro_de_filabres,Castro de Filabres,Almería,pending_municipal_review,,,,, +andalucia,municipality:almeria::chercos,Chercos,Almería,pending_municipal_review,,,,, +andalucia,municipality:almeria::chirivel,Chirivel,Almería,pending_municipal_review,,,,, +andalucia,municipality:almeria::cuevas_del_almanzora,Cuevas del Almanzora,Almería,pending_municipal_review,,,,, +andalucia,municipality:almeria::cobdar,Cóbdar,Almería,pending_municipal_review,,,,, +andalucia,municipality:almeria::enix,Enix,Almería,pending_municipal_review,,,,, +andalucia,municipality:almeria::felix,Felix,Almería,pending_municipal_review,,,,, +andalucia,municipality:almeria::finana,Fiñana,Almería,pending_municipal_review,,,,, +andalucia,municipality:almeria::fondon,Fondón,Almería,pending_municipal_review,,,,, +andalucia,municipality:almeria::garrucha,Garrucha,Almería,pending_municipal_review,,,,, +andalucia,municipality:almeria::gador,Gádor,Almería,pending_municipal_review,,,,, +andalucia,municipality:almeria::gergal,Gérgal,Almería,pending_municipal_review,,,,, +andalucia,municipality:almeria::huecija,Huécija,Almería,pending_municipal_review,,,,, +andalucia,municipality:almeria::huercal_de_almeria,Huércal de Almería,Almería,pending_municipal_review,,,,, +andalucia,municipality:almeria::instincion,Instinción,Almería,pending_municipal_review,,,,, +andalucia,municipality:almeria::laroya,Laroya,Almería,pending_municipal_review,,,,, +andalucia,municipality:almeria::las_tres_villas,Las Tres Villas,Almería,pending_municipal_review,,,,, +andalucia,municipality:almeria::los_gallardos,Los Gallardos,Almería,pending_municipal_review,,,,, +andalucia,municipality:almeria::lubrin,Lubrín,Almería,pending_municipal_review,,,,, +andalucia,municipality:almeria::lucainena_de_las_torres,Lucainena de las Torres,Almería,pending_municipal_review,,,,, +andalucia,municipality:almeria::laujar_de_andarax,Láujar de Andarax,Almería,pending_municipal_review,,,,, +andalucia,municipality:almeria::lijar,Líjar,Almería,pending_municipal_review,,,,, +andalucia,municipality:almeria::macael,Macael,Almería,pending_municipal_review,,,,, +andalucia,municipality:almeria::maria,María,Almería,pending_municipal_review,,,,, +andalucia,municipality:almeria::mojacar,Mojácar,Almería,pending_municipal_review,,,,, +andalucia,municipality:almeria::nacimiento,Nacimiento,Almería,pending_municipal_review,,,,, +andalucia,municipality:almeria::ohanes,Ohanes,Almería,pending_municipal_review,,,,, +andalucia,municipality:almeria::olula_de_castro,Olula de Castro,Almería,pending_municipal_review,,,,, +andalucia,municipality:almeria::oria,Oria,Almería,pending_municipal_review,,,,, +andalucia,municipality:almeria::padules,Padules,Almería,pending_municipal_review,,,,, +andalucia,municipality:almeria::paterna_del_rio,Paterna del Río,Almería,pending_municipal_review,,,,, +andalucia,municipality:almeria::pulpi,Pulpí,Almería,pending_municipal_review,,,,, +andalucia,municipality:almeria::rioja,Rioja,Almería,pending_municipal_review,,,,, +andalucia,municipality:almeria::ragol,Rágol,Almería,pending_municipal_review,,,,, +andalucia,municipality:almeria::santa_cruz_de_marchena,Santa Cruz de Marchena,Almería,pending_municipal_review,,,,, +andalucia,municipality:almeria::santa_fe_de_mondujar,Santa Fe de Mondújar,Almería,pending_municipal_review,,,,, +andalucia,municipality:almeria::senes,Senés,Almería,pending_municipal_review,,,,, +andalucia,municipality:almeria::sierro,Sierro,Almería,pending_municipal_review,,,,, +andalucia,municipality:almeria::sorbas,Sorbas,Almería,pending_municipal_review,,,,, +andalucia,municipality:almeria::sufli,Suflí,Almería,pending_municipal_review,,,,, +andalucia,municipality:almeria::tabernas,Tabernas,Almería,pending_municipal_review,,,,, +andalucia,municipality:almeria::taberno,Taberno,Almería,pending_municipal_review,,,,, +andalucia,municipality:almeria::tahal,Tahal,Almería,pending_municipal_review,,,,, +andalucia,municipality:almeria::terque,Terque,Almería,pending_municipal_review,,,,, +andalucia,municipality:almeria::turre,Turre,Almería,pending_municipal_review,,,,, +andalucia,municipality:almeria::uleila_del_campo,Uleila del Campo,Almería,pending_municipal_review,,,,, +andalucia,municipality:almeria::velefique,Velefique,Almería,pending_municipal_review,,,,, +andalucia,municipality:almeria::vera,Vera,Almería,pending_municipal_review,,,,, +andalucia,municipality:almeria::velez_blanco,Vélez-Blanco,Almería,pending_municipal_review,,,,, +andalucia,municipality:almeria::illar,Íllar,Almería,pending_municipal_review,,,,, +andalucia,municipality:cadiz::alcala_de_los_gazules,Alcalá de los Gazules,Cádiz,pending_municipal_review,,,,, +andalucia,municipality:cadiz::alcala_del_valle,Alcalá del Valle,Cádiz,pending_municipal_review,,,,, +andalucia,municipality:cadiz::algeciras,Algeciras,Cádiz,pending_municipal_review,,,,, +andalucia,municipality:cadiz::arcos_de_la_frontera,Arcos de la Frontera,Cádiz,pending_municipal_review,,,,, +andalucia,municipality:cadiz::benalup_casas_viejas,Benalup-Casas Viejas,Cádiz,pending_municipal_review,,,,, +andalucia,municipality:cadiz::castellar_de_la_frontera,Castellar de la Frontera,Cádiz,pending_municipal_review,,,,, +andalucia,municipality:cadiz::chiclana_de_la_frontera,Chiclana de la Frontera,Cádiz,pending_municipal_review,,,,, +andalucia,municipality:cadiz::conil_de_la_frontera,Conil de la Frontera,Cádiz,pending_municipal_review,,,,, +andalucia,municipality:cadiz::cadiz,Cádiz,Cádiz,pending_municipal_review,,,,, +andalucia,municipality:cadiz::el_gastor,El Gastor,Cádiz,pending_municipal_review,,,,, +andalucia,municipality:cadiz::el_puerto_de_santa_maria,El Puerto de Santa María,Cádiz,pending_municipal_review,,,,, +andalucia,municipality:cadiz::espera,Espera,Cádiz,pending_municipal_review,,,,, +andalucia,municipality:cadiz::grazalema,Grazalema,Cádiz,pending_municipal_review,,,,, +andalucia,municipality:cadiz::jerez_de_la_frontera,Jerez de la Frontera,Cádiz,pending_municipal_review,,,,, +andalucia,municipality:cadiz::los_barrios,Los Barrios,Cádiz,pending_municipal_review,,,,, +andalucia,municipality:cadiz::medina_sidonia,Medina Sidonia,Cádiz,pending_municipal_review,,,,, +andalucia,municipality:cadiz::paterna_de_rivera,Paterna de Rivera,Cádiz,pending_municipal_review,,,,, +andalucia,municipality:cadiz::puerto_real,Puerto Real,Cádiz,pending_municipal_review,,,,, +andalucia,municipality:cadiz::puerto_serrano,Puerto Serrano,Cádiz,pending_municipal_review,,,,, +andalucia,municipality:cadiz::san_jose_del_valle,San José del Valle,Cádiz,pending_municipal_review,,,,, +andalucia,municipality:cadiz::san_martin_del_tesorillo,San Martín del Tesorillo,Cádiz,pending_municipal_review,,,,, +andalucia,municipality:cadiz::san_roque,San Roque,Cádiz,pending_municipal_review,,,,, +andalucia,municipality:cadiz::setenil_de_las_bodegas,Setenil de las Bodegas,Cádiz,pending_municipal_review,,,,, +andalucia,municipality:cadiz::tarifa,Tarifa,Cádiz,pending_municipal_review,,,,, +andalucia,municipality:cadiz::torre_alhaquime,Torre Alháquime,Cádiz,pending_municipal_review,,,,, +andalucia,municipality:cadiz::trebujena,Trebujena,Cádiz,pending_municipal_review,,,,, +andalucia,municipality:cadiz::vejer_de_la_frontera,Vejer de la Frontera,Cádiz,pending_municipal_review,,,,, +andalucia,municipality:cadiz::villaluenga_del_rosario,Villaluenga del Rosario,Cádiz,pending_municipal_review,,,,, +andalucia,municipality:cadiz::zahara,Zahara,Cádiz,pending_municipal_review,,,,, +andalucia,municipality:cordoba::adamuz,Adamuz,Córdoba,pending_municipal_review,,,,, +andalucia,municipality:cordoba::almodovar_del_rio,Almodóvar del Río,Córdoba,pending_municipal_review,,,,, +andalucia,municipality:cordoba::baena,Baena,Córdoba,pending_municipal_review,,,,, +andalucia,municipality:cordoba::belalcazar,Belalcázar,Córdoba,pending_municipal_review,,,,, +andalucia,municipality:cordoba::benameji,Benamejí,Córdoba,pending_municipal_review,,,,, +andalucia,municipality:cordoba::bujalance,Bujalance,Córdoba,pending_municipal_review,,,,, +andalucia,municipality:cordoba::cabra,Cabra,Córdoba,pending_municipal_review,,,,, +andalucia,municipality:cordoba::cardena,Cardeña,Córdoba,pending_municipal_review,,,,, +andalucia,municipality:cordoba::canete_de_las_torres,Cañete de las Torres,Córdoba,pending_municipal_review,,,,, +andalucia,municipality:cordoba::conquista,Conquista,Córdoba,pending_municipal_review,,,,, +andalucia,municipality:cordoba::cordoba,Córdoba,Córdoba,pending_municipal_review,,,,, +andalucia,municipality:cordoba::dos_torres,Dos Torres,Córdoba,pending_municipal_review,,,,, +andalucia,municipality:cordoba::el_guijo,El Guijo,Córdoba,pending_municipal_review,,,,, +andalucia,municipality:cordoba::el_viso,El Viso,Córdoba,pending_municipal_review,,,,, +andalucia,municipality:cordoba::encinas_reales,Encinas Reales,Córdoba,pending_municipal_review,,,,, +andalucia,municipality:cordoba::fernan_nunez,Fernán-Núñez,Córdoba,pending_municipal_review,,,,, +andalucia,municipality:cordoba::fuente_carreteros,Fuente Carreteros,Córdoba,pending_municipal_review,,,,, +andalucia,municipality:cordoba::fuente_palmera,Fuente Palmera,Córdoba,pending_municipal_review,,,,, +andalucia,municipality:cordoba::fuente_la_lancha,Fuente la Lancha,Córdoba,pending_municipal_review,,,,, +andalucia,municipality:cordoba::fuente_tojar,Fuente-Tójar,Córdoba,pending_municipal_review,,,,, +andalucia,municipality:cordoba::guadalcazar,Guadalcázar,Córdoba,pending_municipal_review,,,,, +andalucia,municipality:cordoba::la_guijarrosa,La Guijarrosa,Córdoba,pending_municipal_review,,,,, +andalucia,municipality:cordoba::la_rambla,La Rambla,Córdoba,pending_municipal_review,,,,, +andalucia,municipality:cordoba::la_victoria,La Victoria,Córdoba,pending_municipal_review,,,,, +andalucia,municipality:cordoba::los_blazquez,Los Blázquez,Córdoba,pending_municipal_review,,,,, +andalucia,municipality:cordoba::lucena,Lucena,Córdoba,pending_municipal_review,,,,, +andalucia,municipality:cordoba::luque,Luque,Córdoba,pending_municipal_review,,,,, +andalucia,municipality:cordoba::montalban_de_cordoba,Montalbán de Córdoba,Córdoba,pending_municipal_review,,,,, +andalucia,municipality:cordoba::montilla,Montilla,Córdoba,pending_municipal_review,,,,, +andalucia,municipality:cordoba::montoro,Montoro,Córdoba,pending_municipal_review,,,,, +andalucia,municipality:cordoba::monturque,Monturque,Córdoba,pending_municipal_review,,,,, +andalucia,municipality:cordoba::nueva_carteya,Nueva Carteya,Córdoba,pending_municipal_review,,,,, +andalucia,municipality:cordoba::obejo,Obejo,Córdoba,pending_municipal_review,,,,, +andalucia,municipality:cordoba::palenciana,Palenciana,Córdoba,pending_municipal_review,,,,, +andalucia,municipality:cordoba::palma_del_rio,Palma del Río,Córdoba,pending_municipal_review,,,,, +andalucia,municipality:cordoba::pozoblanco,Pozoblanco,Córdoba,pending_municipal_review,,,,, +andalucia,municipality:cordoba::san_sebastian_de_los_ballesteros,San Sebastián de los Ballesteros,Córdoba,pending_municipal_review,,,,, +andalucia,municipality:cordoba::santa_eufemia,Santa Eufemia,Córdoba,pending_municipal_review,,,,, +andalucia,municipality:cordoba::santaella,Santaella,Córdoba,pending_municipal_review,,,,, +andalucia,municipality:cordoba::valenzuela,Valenzuela,Córdoba,pending_municipal_review,,,,, +andalucia,municipality:cordoba::valsequillo,Valsequillo,Córdoba,pending_municipal_review,,,,, +andalucia,municipality:cordoba::villanueva_del_rey,Villanueva del Rey,Córdoba,pending_municipal_review,,,,, +andalucia,municipality:cordoba::villaralto,Villaralto,Córdoba,pending_municipal_review,,,,, +andalucia,municipality:cordoba::zuheros,Zuheros,Córdoba,pending_municipal_review,,,,, +andalucia,municipality:granada::agron,Agrón,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::alamedilla,Alamedilla,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::albolote,Albolote,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::albondon,Albondón,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::albunol,Albuñol,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::albunuelas,Albuñuelas,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::albunan,Albuñán,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::aldeire,Aldeire,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::alfacar,Alfacar,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::algarinejo,Algarinejo,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::alhendin,Alhendín,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::alicun_de_ortega,Alicún de Ortega,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::almegijar,Almegíjar,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::alpujarra_de_la_sierra,Alpujarra de la Sierra,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::alquife,Alquife,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::arenas_del_rey,Arenas del Rey,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::atarfe,Atarfe,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::baza,Baza,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::beas_de_guadix,Beas de Guadix,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::benamaurel,Benamaurel,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::busquistar,Busquístar,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::berchules,Bérchules,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::cacin,Cacín,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::calicasas,Calicasas,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::campotejar,Campotéjar,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::castillejar,Castilléjar,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::castril,Castril,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::chauchina,Chauchina,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::chimeneas,Chimeneas,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::cijuela,Cijuela,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::cogollos_de_guadix,Cogollos de Guadix,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::cogollos_de_la_vega,Cogollos de la Vega,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::colomera,Colomera,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::cortes_de_baza,Cortes de Baza,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::cortes_y_graena,Cortes y Graena,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::cuevas_del_campo,Cuevas del Campo,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::cadiar,Cádiar,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::castaras,Cástaras,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::cullar_vega,Cúllar Vega,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::dehesas_viejas,Dehesas Viejas,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::dehesas_de_guadix,Dehesas de Guadix,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::deifontes,Deifontes,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::diezma,Diezma,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::domingo_perez_de_granada,Domingo Pérez de Granada,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::dolar,Dólar,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::dudar,Dúdar,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::durcal,Dúrcal,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::el_pinar,El Pinar,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::el_valle,El Valle,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::escuzar,Escúzar,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::fornes,Fornes,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::fuente_vaqueros,Fuente Vaqueros,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::gobernador,Gobernador,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::gorafe,Gorafe,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::granada,Granada,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::guadahortuna,Guadahortuna,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::guadix,Guadix,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::guevejar,Güevéjar,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::guejar_sierra,Güéjar Sierra,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::huelago,Huélago,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::hueneja,Huéneja,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::huetor_tajar,Huétor Tájar,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::huetor_de_santillan,Huétor de Santillán,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::iznalloz,Iznalloz,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::jayena,Jayena,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::jete,Jete,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::juviles,Juviles,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::jatar,Játar,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::jerez_del_marquesado,Jérez del Marquesado,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::la_calahorra,La Calahorra,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::la_malaha,La Malahá,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::la_peza,La Peza,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::la_taha,La Taha,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::lanjaron,Lanjarón,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::las_gabias,Las Gabias,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::lecrin,Lecrín,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::lentegi,Lentegí,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::lobras,Lobras,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::loja,Loja,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::lugros,Lugros,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::lachar,Láchar,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::lujar,Lújar,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::marchal,Marchal,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::moclin,Moclín,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::montefrio,Montefrío,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::montejicar,Montejícar,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::moraleda_de_zafayona,Moraleda de Zafayona,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::morelabor,Morelábor,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::murtas,Murtas,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::niguelas,Nigüelas,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::nivar,Nívar,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::ogijares,Ogíjares,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::orce,Orce,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::otivar,Otívar,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::padul,Padul,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::pedro_martinez,Pedro Martínez,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::peligros,Peligros,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::pinos_puente,Pinos Puente,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::polopos,Polopos,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::policar,Polícar,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::puebla_de_don_fadrique,Puebla de Don Fadrique,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::pinar,Píñar,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::portugos,Pórtugos,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::quentar,Quéntar,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::rubite,Rubite,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::salar,Salar,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::santa_cruz_del_comercio,Santa Cruz del Comercio,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::sorvilan,Sorvilán,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::torre_cardela,Torre-Cardela,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::torrenueva_costa,Torrenueva Costa,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::torvizcon,Torvizcón,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::trevelez,Trevélez,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::turon,Turón,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::ugijar,Ugíjar,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::valderrubio,Valderrubio,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::valle_del_zalabi,Valle del Zalabí,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::vegas_del_genil,Vegas del Genil,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::ventas_de_huelma,Ventas de Huelma,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::villa_de_otura,Villa de Otura,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::villamena,Villamena,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::villanueva_mesia,Villanueva Mesía,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::villanueva_de_las_torres,Villanueva de las Torres,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::valor,Válor,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::viznar,Víznar,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::zafarraya,Zafarraya,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::zagra,Zagra,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::zujar,Zújar,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::illora,Íllora,Granada,pending_municipal_review,,,,, +andalucia,municipality:granada::orgiva,Órgiva,Granada,pending_municipal_review,,,,, +andalucia,municipality:huelva::almonte,Almonte,Huelva,pending_municipal_review,,,,, +andalucia,municipality:huelva::alosno,Alosno,Huelva,pending_municipal_review,,,,, +andalucia,municipality:huelva::alajar,Alájar,Huelva,pending_municipal_review,,,,, +andalucia,municipality:huelva::aroche,Aroche,Huelva,pending_municipal_review,,,,, +andalucia,municipality:huelva::arroyomolinos_de_leon,Arroyomolinos de León,Huelva,pending_municipal_review,,,,, +andalucia,municipality:huelva::beas,Beas,Huelva,pending_municipal_review,,,,, +andalucia,municipality:huelva::berrocal,Berrocal,Huelva,pending_municipal_review,,,,, +andalucia,municipality:huelva::bonares,Bonares,Huelva,pending_municipal_review,,,,, +andalucia,municipality:huelva::cabezas_rubias,Cabezas Rubias,Huelva,pending_municipal_review,,,,, +andalucia,municipality:huelva::cartaya,Cartaya,Huelva,pending_municipal_review,,,,, +andalucia,municipality:huelva::castano_del_robledo,Castaño del Robledo,Huelva,pending_municipal_review,,,,, +andalucia,municipality:huelva::canaveral_de_leon,Cañaveral de León,Huelva,pending_municipal_review,,,,, +andalucia,municipality:huelva::chucena,Chucena,Huelva,pending_municipal_review,,,,, +andalucia,municipality:huelva::corteconcepcion,Corteconcepción,Huelva,pending_municipal_review,,,,, +andalucia,municipality:huelva::cortelazor,Cortelazor,Huelva,pending_municipal_review,,,,, +andalucia,municipality:huelva::el_almendro,El Almendro,Huelva,pending_municipal_review,,,,, +andalucia,municipality:huelva::el_granado,El Granado,Huelva,pending_municipal_review,,,,, +andalucia,municipality:huelva::encinasola,Encinasola,Huelva,pending_municipal_review,,,,, +andalucia,municipality:huelva::escacena_del_campo,Escacena del Campo,Huelva,pending_municipal_review,,,,, +andalucia,municipality:huelva::fuenteheridos,Fuenteheridos,Huelva,pending_municipal_review,,,,, +andalucia,municipality:huelva::galaroza,Galaroza,Huelva,pending_municipal_review,,,,, +andalucia,municipality:huelva::gibraleon,Gibraleón,Huelva,pending_municipal_review,,,,, +andalucia,municipality:huelva::higuera_de_la_sierra,Higuera de la Sierra,Huelva,pending_municipal_review,,,,, +andalucia,municipality:huelva::hinojales,Hinojales,Huelva,pending_municipal_review,,,,, +andalucia,municipality:huelva::hinojos,Hinojos,Huelva,pending_municipal_review,,,,, +andalucia,municipality:huelva::huelva,Huelva,Huelva,pending_municipal_review,,,,, +andalucia,municipality:huelva::la_palma_del_condado,La Palma del Condado,Huelva,pending_municipal_review,,,,, +andalucia,municipality:huelva::la_zarza_perrunal,La Zarza-Perrunal,Huelva,pending_municipal_review,,,,, +andalucia,municipality:huelva::linares_de_la_sierra,Linares de la Sierra,Huelva,pending_municipal_review,,,,, +andalucia,municipality:huelva::los_marines,Los Marines,Huelva,pending_municipal_review,,,,, +andalucia,municipality:huelva::lucena_del_puerto,Lucena del Puerto,Huelva,pending_municipal_review,,,,, +andalucia,municipality:huelva::manzanilla,Manzanilla,Huelva,pending_municipal_review,,,,, +andalucia,municipality:huelva::moguer,Moguer,Huelva,pending_municipal_review,,,,, +andalucia,municipality:huelva::niebla,Niebla,Huelva,pending_municipal_review,,,,, +andalucia,municipality:huelva::palos_de_la_frontera,Palos de la Frontera,Huelva,pending_municipal_review,,,,, +andalucia,municipality:huelva::paterna_del_campo,Paterna del Campo,Huelva,pending_municipal_review,,,,, +andalucia,municipality:huelva::paymogo,Paymogo,Huelva,pending_municipal_review,,,,, +andalucia,municipality:huelva::puebla_de_guzman,Puebla de Guzmán,Huelva,pending_municipal_review,,,,, +andalucia,municipality:huelva::rociana_del_condado,Rociana del Condado,Huelva,pending_municipal_review,,,,, +andalucia,municipality:huelva::rosal_de_la_frontera,Rosal de la Frontera,Huelva,pending_municipal_review,,,,, +andalucia,municipality:huelva::san_bartolome_de_la_torre,San Bartolomé de la Torre,Huelva,pending_municipal_review,,,,, +andalucia,municipality:huelva::san_juan_del_puerto,San Juan del Puerto,Huelva,pending_municipal_review,,,,, +andalucia,municipality:huelva::san_silvestre_de_guzman,San Silvestre de Guzmán,Huelva,pending_municipal_review,,,,, +andalucia,municipality:huelva::sanlucar_de_guadiana,Sanlúcar de Guadiana,Huelva,pending_municipal_review,,,,, +andalucia,municipality:huelva::santa_barbara_de_casa,Santa Bárbara de Casa,Huelva,pending_municipal_review,,,,, +andalucia,municipality:huelva::santa_olalla_del_cala,Santa Olalla del Cala,Huelva,pending_municipal_review,,,,, +andalucia,municipality:huelva::trigueros,Trigueros,Huelva,pending_municipal_review,,,,, +andalucia,municipality:huelva::valdelarco,Valdelarco,Huelva,pending_municipal_review,,,,, +andalucia,municipality:huelva::valverde_del_camino,Valverde del Camino,Huelva,pending_municipal_review,,,,, +andalucia,municipality:huelva::villablanca,Villablanca,Huelva,pending_municipal_review,,,,, +andalucia,municipality:huelva::villalba_del_alcor,Villalba del Alcor,Huelva,pending_municipal_review,,,,, +andalucia,municipality:huelva::villanueva_de_los_castillejos,Villanueva de los Castillejos,Huelva,pending_municipal_review,,,,, +andalucia,municipality:huelva::villarrasa,Villarrasa,Huelva,pending_municipal_review,,,,, +andalucia,municipality:jaen::albanchez_de_magina,Albanchez de Mágina,Jaén,pending_municipal_review,,,,, +andalucia,municipality:jaen::alcala_la_real,Alcalá la Real,Jaén,pending_municipal_review,,,,, +andalucia,municipality:jaen::aldeaquemada,Aldeaquemada,Jaén,pending_municipal_review,,,,, +andalucia,municipality:jaen::andujar,Andújar,Jaén,pending_municipal_review,,,,, +andalucia,municipality:jaen::arquillos,Arquillos,Jaén,pending_municipal_review,,,,, +andalucia,municipality:jaen::banos_de_la_encina,Baños de la Encina,Jaén,pending_municipal_review,,,,, +andalucia,municipality:jaen::begijar,Begíjar,Jaén,pending_municipal_review,,,,, +andalucia,municipality:jaen::benatae,Benatae,Jaén,pending_municipal_review,,,,, +andalucia,municipality:jaen::belmez_de_la_moraleda,Bélmez de la Moraleda,Jaén,pending_municipal_review,,,,, +andalucia,municipality:jaen::cabra_del_santo_cristo,Cabra del Santo Cristo,Jaén,pending_municipal_review,,,,, +andalucia,municipality:jaen::castellar,Castellar,Jaén,pending_municipal_review,,,,, +andalucia,municipality:jaen::castillo_de_locubin,Castillo de Locubín,Jaén,pending_municipal_review,,,,, +andalucia,municipality:jaen::cazorla,Cazorla,Jaén,pending_municipal_review,,,,, +andalucia,municipality:jaen::chiclana_de_segura,Chiclana de Segura,Jaén,pending_municipal_review,,,,, +andalucia,municipality:jaen::chilluevar,Chilluévar,Jaén,pending_municipal_review,,,,, +andalucia,municipality:jaen::cuarto_del_madrono,Cuarto del Madroño,Jaén,pending_municipal_review,,,,, +andalucia,municipality:jaen::escanuela,Escañuela,Jaén,pending_municipal_review,,,,, +andalucia,municipality:jaen::espeluy,Espeluy,Jaén,pending_municipal_review,,,,, +andalucia,municipality:jaen::frailes,Frailes,Jaén,pending_municipal_review,,,,, +andalucia,municipality:jaen::fuensanta_de_martos,Fuensanta de Martos,Jaén,pending_municipal_review,,,,, +andalucia,municipality:jaen::fuerte_del_rey,Fuerte del Rey,Jaén,pending_municipal_review,,,,, +andalucia,municipality:jaen::genave,Génave,Jaén,pending_municipal_review,,,,, +andalucia,municipality:jaen::higuera_de_calatrava,Higuera de Calatrava,Jaén,pending_municipal_review,,,,, +andalucia,municipality:jaen::huelma,Huelma,Jaén,pending_municipal_review,,,,, +andalucia,municipality:jaen::jabalquinto,Jabalquinto,Jaén,pending_municipal_review,,,,, +andalucia,municipality:jaen::jaen,Jaén,Jaén,pending_municipal_review,,,,, +andalucia,municipality:jaen::jimena,Jimena,Jaén,pending_municipal_review,,,,, +andalucia,municipality:jaen::jodar,Jódar,Jaén,pending_municipal_review,,,,, +andalucia,municipality:jaen::la_iruela,La Iruela,Jaén,pending_municipal_review,,,,, +andalucia,municipality:jaen::la_puerta_de_segura,La Puerta de Segura,Jaén,pending_municipal_review,,,,, +andalucia,municipality:jaen::lahiguera,Lahiguera,Jaén,pending_municipal_review,,,,, +andalucia,municipality:jaen::larva,Larva,Jaén,pending_municipal_review,,,,, +andalucia,municipality:jaen::lopera,Lopera,Jaén,pending_municipal_review,,,,, +andalucia,municipality:jaen::los_villares,Los Villares,Jaén,pending_municipal_review,,,,, +andalucia,municipality:jaen::lupion,Lupión,Jaén,pending_municipal_review,,,,, +andalucia,municipality:jaen::marmolejo,Marmolejo,Jaén,pending_municipal_review,,,,, +andalucia,municipality:jaen::montizon,Montizón,Jaén,pending_municipal_review,,,,, +andalucia,municipality:jaen::navas_de_san_juan,Navas de San Juan,Jaén,pending_municipal_review,,,,, +andalucia,municipality:jaen::porcuna,Porcuna,Jaén,pending_municipal_review,,,,, +andalucia,municipality:jaen::santa_elena,Santa Elena,Jaén,pending_municipal_review,,,,, +andalucia,municipality:jaen::santiago_de_calatrava,Santiago de Calatrava,Jaén,pending_municipal_review,,,,, +andalucia,municipality:jaen::santisteban_del_puerto,Santisteban del Puerto,Jaén,pending_municipal_review,,,,, +andalucia,municipality:jaen::santo_tome,Santo Tomé,Jaén,pending_municipal_review,,,,, +andalucia,municipality:jaen::siles,Siles,Jaén,pending_municipal_review,,,,, +andalucia,municipality:jaen::torreblascopedro,Torreblascopedro,Jaén,pending_municipal_review,,,,, +andalucia,municipality:jaen::torredelcampo,Torredelcampo,Jaén,pending_municipal_review,,,,, +andalucia,municipality:jaen::torres,Torres,Jaén,pending_municipal_review,,,,, +andalucia,municipality:jaen::torres_de_albanchez,Torres de Albánchez,Jaén,pending_municipal_review,,,,, +andalucia,municipality:jaen::valdepenas_de_jaen,Valdepeñas de Jaén,Jaén,pending_municipal_review,,,,, +andalucia,municipality:jaen::villarrodrigo,Villarrodrigo,Jaén,pending_municipal_review,,,,, +andalucia,municipality:malaga::alameda,Alameda,Málaga,pending_municipal_review,,,,, +andalucia,municipality:malaga::alcaucin,Alcaucín,Málaga,pending_municipal_review,,,,, +andalucia,municipality:malaga::alfarnate,Alfarnate,Málaga,pending_municipal_review,,,,, +andalucia,municipality:malaga::alfarnatejo,Alfarnatejo,Málaga,pending_municipal_review,,,,, +andalucia,municipality:malaga::alhaurin_de_la_torre,Alhaurín de la Torre,Málaga,pending_municipal_review,,,,, +andalucia,municipality:malaga::alhaurin_el_grande,Alhaurín el Grande,Málaga,pending_municipal_review,,,,, +andalucia,municipality:malaga::almargen,Almargen,Málaga,pending_municipal_review,,,,, +andalucia,municipality:malaga::almogia,Almogía,Málaga,pending_municipal_review,,,,, +andalucia,municipality:malaga::almachar,Almáchar,Málaga,pending_municipal_review,,,,, +andalucia,municipality:malaga::antequera,Antequera,Málaga,pending_municipal_review,,,,, +andalucia,municipality:malaga::archidona,Archidona,Málaga,pending_municipal_review,,,,, +andalucia,municipality:malaga::arenas,Arenas,Málaga,pending_municipal_review,,,,, +andalucia,municipality:malaga::arriate,Arriate,Málaga,pending_municipal_review,,,,, +andalucia,municipality:malaga::benahavis,Benahavís,Málaga,pending_municipal_review,,,,, +andalucia,municipality:malaga::benamargosa,Benamargosa,Málaga,pending_municipal_review,,,,, +andalucia,municipality:malaga::benamocarra,Benamocarra,Málaga,pending_municipal_review,,,,, +andalucia,municipality:malaga::benaojan,Benaoján,Málaga,pending_municipal_review,,,,, +andalucia,municipality:malaga::canillas_de_aceituno,Canillas de Aceituno,Málaga,pending_municipal_review,,,,, +andalucia,municipality:malaga::canillas_de_albaida,Canillas de Albaida,Málaga,pending_municipal_review,,,,, +andalucia,municipality:malaga::carratraca,Carratraca,Málaga,pending_municipal_review,,,,, +andalucia,municipality:malaga::cartajima,Cartajima,Málaga,pending_municipal_review,,,,, +andalucia,municipality:malaga::casarabonela,Casarabonela,Málaga,pending_municipal_review,,,,, +andalucia,municipality:malaga::casares,Casares,Málaga,pending_municipal_review,,,,, +andalucia,municipality:malaga::canete_la_real,Cañete la Real,Málaga,pending_municipal_review,,,,, +andalucia,municipality:malaga::colmenar,Colmenar,Málaga,pending_municipal_review,,,,, +andalucia,municipality:malaga::comares,Comares,Málaga,pending_municipal_review,,,,, +andalucia,municipality:malaga::coin,Coín,Málaga,pending_municipal_review,,,,, +andalucia,municipality:malaga::cuevas_bajas,Cuevas Bajas,Málaga,pending_municipal_review,,,,, +andalucia,municipality:malaga::cuevas_del_becerro,Cuevas del Becerro,Málaga,pending_municipal_review,,,,, +andalucia,municipality:malaga::cartama,Cártama,Málaga,pending_municipal_review,,,,, +andalucia,municipality:malaga::competa,Cómpeta,Málaga,pending_municipal_review,,,,, +andalucia,municipality:malaga::cutar,Cútar,Málaga,pending_municipal_review,,,,, +andalucia,municipality:malaga::el_borge,El Borge,Málaga,pending_municipal_review,,,,, +andalucia,municipality:malaga::el_burgo,El Burgo,Málaga,pending_municipal_review,,,,, +andalucia,municipality:malaga::estepona,Estepona,Málaga,pending_municipal_review,,,,, +andalucia,municipality:malaga::farajan,Faraján,Málaga,pending_municipal_review,,,,, +andalucia,municipality:malaga::genalguacil,Genalguacil,Málaga,pending_municipal_review,,,,, +andalucia,municipality:malaga::igualeja,Igualeja,Málaga,pending_municipal_review,,,,, +andalucia,municipality:malaga::istan,Istán,Málaga,pending_municipal_review,,,,, +andalucia,municipality:malaga::iznate,Iznate,Málaga,pending_municipal_review,,,,, +andalucia,municipality:malaga::jimera_de_libar,Jimera de Líbar,Málaga,pending_municipal_review,,,,, +andalucia,municipality:malaga::jubrique,Jubrique,Málaga,pending_municipal_review,,,,, +andalucia,municipality:malaga::juzcar,Júzcar,Málaga,pending_municipal_review,,,,, +andalucia,municipality:malaga::macharaviaya,Macharaviaya,Málaga,pending_municipal_review,,,,, +andalucia,municipality:malaga::mollina,Mollina,Málaga,pending_municipal_review,,,,, +andalucia,municipality:malaga::monda,Monda,Málaga,pending_municipal_review,,,,, +andalucia,municipality:malaga::montecorto,Montecorto,Málaga,pending_municipal_review,,,,, +andalucia,municipality:malaga::montejaque,Montejaque,Málaga,pending_municipal_review,,,,, +andalucia,municipality:malaga::malaga,Málaga,Málaga,pending_municipal_review,,,,, +andalucia,municipality:malaga::ojen,Ojén,Málaga,pending_municipal_review,,,,, +andalucia,municipality:malaga::parauta,Parauta,Málaga,pending_municipal_review,,,,, +andalucia,municipality:malaga::periana,Periana,Málaga,pending_municipal_review,,,,, +andalucia,municipality:malaga::pizarra,Pizarra,Málaga,pending_municipal_review,,,,, +andalucia,municipality:malaga::pujerra,Pujerra,Málaga,pending_municipal_review,,,,, +andalucia,municipality:malaga::riogordo,Riogordo,Málaga,pending_municipal_review,,,,, +andalucia,municipality:malaga::ronda,Ronda,Málaga,pending_municipal_review,,,,, +andalucia,municipality:malaga::salares,Salares,Málaga,pending_municipal_review,,,,, +andalucia,municipality:malaga::sayalonga,Sayalonga,Málaga,pending_municipal_review,,,,, +andalucia,municipality:malaga::sedella,Sedella,Málaga,pending_municipal_review,,,,, +andalucia,municipality:malaga::serrato,Serrato,Málaga,pending_municipal_review,,,,, +andalucia,municipality:malaga::sierra_de_yeguas,Sierra de Yeguas,Málaga,pending_municipal_review,,,,, +andalucia,municipality:malaga::teba,Teba,Málaga,pending_municipal_review,,,,, +andalucia,municipality:malaga::totalan,Totalán,Málaga,pending_municipal_review,,,,, +andalucia,municipality:malaga::valle_de_abdalajis,Valle de Abdalajís,Málaga,pending_municipal_review,,,,, +andalucia,municipality:malaga::villanueva_de_tapia,Villanueva de Tapia,Málaga,pending_municipal_review,,,,, +andalucia,municipality:malaga::villanueva_del_rosario,Villanueva del Rosario,Málaga,pending_municipal_review,,,,, +andalucia,municipality:malaga::villanueva_del_trabuco,Villanueva del Trabuco,Málaga,pending_municipal_review,,,,, +andalucia,municipality:malaga::vinuela,Viñuela,Málaga,pending_municipal_review,,,,, +andalucia,municipality:malaga::alora,Álora,Málaga,pending_municipal_review,,,,, +andalucia,municipality:malaga::archez,Árchez,Málaga,pending_municipal_review,,,,, +andalucia,municipality:sevilla::aguadulce,Aguadulce,Sevilla,pending_municipal_review,,,,, +andalucia,municipality:sevilla::albaida_del_aljarafe,Albaida del Aljarafe,Sevilla,pending_municipal_review,,,,, +andalucia,municipality:sevilla::alcala_de_guadaira,Alcalá de Guadaíra,Sevilla,pending_municipal_review,,,,, +andalucia,municipality:sevilla::alcala_del_rio,Alcalá del Río,Sevilla,pending_municipal_review,,,,, +andalucia,municipality:sevilla::algamitas,Algámitas,Sevilla,pending_municipal_review,,,,, +andalucia,municipality:sevilla::almaden_de_la_plata,Almadén de la Plata,Sevilla,pending_municipal_review,,,,, +andalucia,municipality:sevilla::almensilla,Almensilla,Sevilla,pending_municipal_review,,,,, +andalucia,municipality:sevilla::aznalcazar,Aznalcázar,Sevilla,pending_municipal_review,,,,, +andalucia,municipality:sevilla::aznalcollar,Aznalcóllar,Sevilla,pending_municipal_review,,,,, +andalucia,municipality:sevilla::badolatosa,Badolatosa,Sevilla,pending_municipal_review,,,,, +andalucia,municipality:sevilla::benacazon,Benacazón,Sevilla,pending_municipal_review,,,,, +andalucia,municipality:sevilla::bollullos_de_la_mitacion,Bollullos de la Mitación,Sevilla,pending_municipal_review,,,,, +andalucia,municipality:sevilla::bormujos,Bormujos,Sevilla,pending_municipal_review,,,,, +andalucia,municipality:sevilla::brenes,Brenes,Sevilla,pending_municipal_review,,,,, +andalucia,municipality:sevilla::burguillos,Burguillos,Sevilla,pending_municipal_review,,,,, +andalucia,municipality:sevilla::camas,Camas,Sevilla,pending_municipal_review,,,,, +andalucia,municipality:sevilla::cantillana,Cantillana,Sevilla,pending_municipal_review,,,,, +andalucia,municipality:sevilla::carmona,Carmona,Sevilla,pending_municipal_review,,,,, +andalucia,municipality:sevilla::carrion_de_los_cespedes,Carrión de los Céspedes,Sevilla,pending_municipal_review,,,,, +andalucia,municipality:sevilla::casariche,Casariche,Sevilla,pending_municipal_review,,,,, +andalucia,municipality:sevilla::castilblanco_de_los_arroyos,Castilblanco de los Arroyos,Sevilla,pending_municipal_review,,,,, +andalucia,municipality:sevilla::castilleja_de_guzman,Castilleja de Guzmán,Sevilla,pending_municipal_review,,,,, +andalucia,municipality:sevilla::castilleja_de_la_cuesta,Castilleja de la Cuesta,Sevilla,pending_municipal_review,,,,, +andalucia,municipality:sevilla::castilleja_del_campo,Castilleja del Campo,Sevilla,pending_municipal_review,,,,, +andalucia,municipality:sevilla::canada_rosal,Cañada Rosal,Sevilla,pending_municipal_review,,,,, +andalucia,municipality:sevilla::constantina,Constantina,Sevilla,pending_municipal_review,,,,, +andalucia,municipality:sevilla::coria_del_rio,Coria del Río,Sevilla,pending_municipal_review,,,,, +andalucia,municipality:sevilla::coripe,Coripe,Sevilla,pending_municipal_review,,,,, +andalucia,municipality:sevilla::dos_hermanas,Dos Hermanas,Sevilla,pending_municipal_review,,,,, +andalucia,municipality:sevilla::el_coronil,El Coronil,Sevilla,pending_municipal_review,,,,, +andalucia,municipality:sevilla::el_cuervo_de_sevilla,El Cuervo de Sevilla,Sevilla,pending_municipal_review,,,,, +andalucia,municipality:sevilla::el_garrobo,El Garrobo,Sevilla,pending_municipal_review,,,,, +andalucia,municipality:sevilla::el_palmar_de_troya,El Palmar de Troya,Sevilla,pending_municipal_review,,,,, +andalucia,municipality:sevilla::el_pedroso,El Pedroso,Sevilla,pending_municipal_review,,,,, +andalucia,municipality:sevilla::el_real_de_la_jara,El Real de la Jara,Sevilla,pending_municipal_review,,,,, +andalucia,municipality:sevilla::el_ronquillo,El Ronquillo,Sevilla,pending_municipal_review,,,,, +andalucia,municipality:sevilla::el_rubio,El Rubio,Sevilla,pending_municipal_review,,,,, +andalucia,municipality:sevilla::el_saucejo,El Saucejo,Sevilla,pending_municipal_review,,,,, +andalucia,municipality:sevilla::el_viso_del_alcor,El Viso del Alcor,Sevilla,pending_municipal_review,,,,, +andalucia,municipality:sevilla::espartinas,Espartinas,Sevilla,pending_municipal_review,,,,, +andalucia,municipality:sevilla::estepa,Estepa,Sevilla,pending_municipal_review,,,,, +andalucia,municipality:sevilla::gelves,Gelves,Sevilla,pending_municipal_review,,,,, +andalucia,municipality:sevilla::gerena,Gerena,Sevilla,pending_municipal_review,,,,, +andalucia,municipality:sevilla::gilena,Gilena,Sevilla,pending_municipal_review,,,,, +andalucia,municipality:sevilla::gines,Gines,Sevilla,pending_municipal_review,,,,, +andalucia,municipality:sevilla::guadalcanal,Guadalcanal,Sevilla,pending_municipal_review,,,,, +andalucia,municipality:sevilla::guillena,Guillena,Sevilla,pending_municipal_review,,,,, +andalucia,municipality:sevilla::huevar_del_aljarafe,Huévar del Aljarafe,Sevilla,pending_municipal_review,,,,, +andalucia,municipality:sevilla::la_algaba,La Algaba,Sevilla,pending_municipal_review,,,,, +andalucia,municipality:sevilla::la_campana,La Campana,Sevilla,pending_municipal_review,,,,, +andalucia,municipality:sevilla::la_luisiana,La Luisiana,Sevilla,pending_municipal_review,,,,, +andalucia,municipality:sevilla::la_puebla_de_cazalla,La Puebla de Cazalla,Sevilla,pending_municipal_review,,,,, +andalucia,municipality:sevilla::la_puebla_de_los_infantes,La Puebla de los Infantes,Sevilla,pending_municipal_review,,,,, +andalucia,municipality:sevilla::la_puebla_del_rio,La Puebla del Río,Sevilla,pending_municipal_review,,,,, +andalucia,municipality:sevilla::la_roda_de_andalucia,La Roda de Andalucía,Sevilla,pending_municipal_review,,,,, +andalucia,municipality:sevilla::lantejuela,Lantejuela,Sevilla,pending_municipal_review,,,,, +andalucia,municipality:sevilla::las_cabezas_de_san_juan,Las Cabezas de San Juan,Sevilla,pending_municipal_review,,,,, +andalucia,municipality:sevilla::las_navas_de_la_concepcion,Las Navas de la Concepción,Sevilla,pending_municipal_review,,,,, +andalucia,municipality:sevilla::lebrija,Lebrija,Sevilla,pending_municipal_review,,,,, +andalucia,municipality:sevilla::lora_de_estepa,Lora de Estepa,Sevilla,pending_municipal_review,,,,, +andalucia,municipality:sevilla::lora_del_rio,Lora del Río,Sevilla,pending_municipal_review,,,,, +andalucia,municipality:sevilla::los_corrales,Los Corrales,Sevilla,pending_municipal_review,,,,, +andalucia,municipality:sevilla::los_palacios_y_villafranca,Los Palacios y Villafranca,Sevilla,pending_municipal_review,,,,, +andalucia,municipality:sevilla::mairena_del_alcor,Mairena del Alcor,Sevilla,pending_municipal_review,,,,, +andalucia,municipality:sevilla::mairena_del_aljarafe,Mairena del Aljarafe,Sevilla,pending_municipal_review,,,,, +andalucia,municipality:sevilla::marinaleda,Marinaleda,Sevilla,pending_municipal_review,,,,, +andalucia,municipality:sevilla::martin_de_la_jara,Martín de la Jara,Sevilla,pending_municipal_review,,,,, +andalucia,municipality:sevilla::montellano,Montellano,Sevilla,pending_municipal_review,,,,, +andalucia,municipality:sevilla::moron_de_la_frontera,Morón de la Frontera,Sevilla,pending_municipal_review,,,,, +andalucia,municipality:sevilla::olivares,Olivares,Sevilla,pending_municipal_review,,,,, +andalucia,municipality:sevilla::osuna,Osuna,Sevilla,pending_municipal_review,,,,, +andalucia,municipality:sevilla::pedrera,Pedrera,Sevilla,pending_municipal_review,,,,, +andalucia,municipality:sevilla::pruna,Pruna,Sevilla,pending_municipal_review,,,,, +andalucia,municipality:sevilla::salteras,Salteras,Sevilla,pending_municipal_review,,,,, +andalucia,municipality:sevilla::san_juan_de_aznalfarache,San Juan de Aznalfarache,Sevilla,pending_municipal_review,,,,, +andalucia,municipality:sevilla::sanlucar_la_mayor,Sanlúcar la Mayor,Sevilla,pending_municipal_review,,,,, +andalucia,municipality:sevilla::santiponce,Santiponce,Sevilla,pending_municipal_review,,,,, +andalucia,municipality:sevilla::sevilla,Sevilla,Sevilla,pending_municipal_review,,,,, +andalucia,municipality:sevilla::utrera,Utrera,Sevilla,pending_municipal_review,,,,, +andalucia,municipality:sevilla::valencina_de_la_concepcion,Valencina de la Concepción,Sevilla,pending_municipal_review,,,,, +andalucia,municipality:sevilla::villanueva_de_san_juan,Villanueva de San Juan,Sevilla,pending_municipal_review,,,,, +andalucia,municipality:sevilla::villanueva_del_ariscal,Villanueva del Ariscal,Sevilla,pending_municipal_review,,,,, +andalucia,municipality:sevilla::villaverde_del_rio,Villaverde del Río,Sevilla,pending_municipal_review,,,,, +andalucia,municipality:sevilla::ecija,Écija,Sevilla,pending_municipal_review,,,,, diff --git a/scripts/build_andalucia_pending_review_queue.py b/scripts/build_andalucia_pending_review_queue.py new file mode 100755 index 0000000..303a58d --- /dev/null +++ b/scripts/build_andalucia_pending_review_queue.py @@ -0,0 +1,246 @@ +#!/usr/bin/env python3 +from __future__ import annotations + +import csv +import json +from collections import Counter +from datetime import date +from pathlib import Path +from typing import Any + +GEO_PATH = Path("frontend/public/data/andalucia_municipios.geojson") +HINTS_PATH = Path("frontend/src/data/distributor_hints.json") + +OUT_CSV = Path("docs/audit/andalucia_pending_review_queue_v1072.csv") +OUT_MD = Path("docs/audit/andalucia-pending-review-queue-v1072.md") + +EXPECTED_GEO_FEATURES = 786 +EXPECTED_COVERED = 254 +EXPECTED_PENDING = 532 + + +def load_json(path: Path) -> Any: + return json.loads(path.read_text(encoding="utf-8")) + + +def clean(value: object) -> str: + return str(value or "").strip() + + +def first_prop(props: dict[str, Any], names: list[str]) -> str: + for name in names: + value = clean(props.get(name)) + if value: + return value + return "" + + +def load_geo_rows() -> list[dict[str, str]]: + data = load_json(GEO_PATH) + features = data.get("features", []) + + if len(features) != EXPECTED_GEO_FEATURES: + raise SystemExit( + f"ERROR: Andalucía GeoJSON features={len(features)} " + f"expected={EXPECTED_GEO_FEATURES}" + ) + + rows: list[dict[str, str]] = [] + seen: set[str] = set() + + for feature in features: + props = feature.get("properties", {}) + if not isinstance(props, dict): + raise SystemExit("ERROR: feature sin properties dict") + + dataset_id = clean(props.get("dataset_id")) + if dataset_id != "andalucia": + raise SystemExit(f"ERROR: dataset_id inesperado en geo: {dataset_id!r}") + + zone_id = first_prop( + props, + ["zone_id", "municipio", "mun_code", "ine", "id"], + ) + municipality = first_prop( + props, + ["mun_name", "municipality", "name", "nombre", "municipio"], + ) + province = first_prop( + props, + ["prov_name", "province", "provincia"], + ) + + if not zone_id: + raise SystemExit(f"ERROR: feature sin zone_id usable: {props}") + if zone_id in seen: + raise SystemExit(f"ERROR: zone_id duplicado en Andalucía GeoJSON: {zone_id}") + + seen.add(zone_id) + + rows.append({ + "dataset_id": "andalucia", + "zone_id": zone_id, + "municipality": municipality, + "province": province, + }) + + return rows + + +def load_covered_zone_ids() -> set[str]: + data = load_json(HINTS_PATH) + covered: set[str] = set() + + for item in data.get("items", []): + if item.get("dataset_id") != "andalucia": + continue + + zone_id = first_prop( + item, + ["zone_id", "municipio", "mun_code", "ine", "id", "name"], + ) + if not zone_id: + raise SystemExit(f"ERROR: hint Andalucía sin zone_id usable: {item}") + + covered.add(zone_id) + + if len(covered) != EXPECTED_COVERED: + raise SystemExit( + f"ERROR: Andalucía covered={len(covered)} expected={EXPECTED_COVERED}" + ) + + return covered + + +def assert_safe_rows(rows: list[dict[str, str]]) -> None: + # Check generated schema first. Do not substring-match municipality names: + # e.g. "Benizalón" contains "lon", but it is not a longitude. + forbidden_columns = { + "cups", + "token", + "password", + "secret", + "private_key", + "api_key", + "authorization", + "lat", + "latitude", + "lon", + "longitude", + "coord", + "coordinates", + "address", + "direccion", + "dirección", + } + + for row in rows: + for key in row: + key_l = str(key).lower() + if key_l in forbidden_columns: + raise SystemExit( + f"ERROR: columna sensible {key!r} en fila {row}" + ) + + # Values are allowed to contain normal municipality/province text. + # Still block high-risk secret/CUPS markers in values. + joined = " ".join(str(v or "") for v in row.values()).lower() + for marker in ["cups", "token", "password", "secret", "private_key", "api_key", "authorization"]: + if marker in joined: + raise SystemExit( + f"ERROR: marcador sensible {marker!r} en fila {row}" + ) + + +def main() -> int: + geo_rows = load_geo_rows() + covered = load_covered_zone_ids() + + pending_rows = [] + for row in sorted(geo_rows, key=lambda r: (r["province"], r["municipality"], r["zone_id"])): + if row["zone_id"] in covered: + continue + + pending_rows.append({ + "dataset_id": row["dataset_id"], + "zone_id": row["zone_id"], + "municipality": row["municipality"], + "province": row["province"], + "review_status": "pending_municipal_review", + "candidate_distributor": "", + "candidate_confidence": "", + "source_url": "", + "source_label": "", + "review_notes": "", + }) + + if len(pending_rows) != EXPECTED_PENDING: + raise SystemExit( + f"ERROR: pending={len(pending_rows)} expected={EXPECTED_PENDING} " + f"geo={len(geo_rows)} covered={len(covered)}" + ) + + assert_safe_rows(pending_rows) + + OUT_CSV.parent.mkdir(parents=True, exist_ok=True) + with OUT_CSV.open("w", encoding="utf-8", newline="") as fh: + writer = csv.DictWriter(fh, fieldnames=list(pending_rows[0].keys())) + writer.writeheader() + writer.writerows(pending_rows) + + province_counts = Counter(row["province"] or "unknown" for row in pending_rows) + + lines = [] + lines.append("# Andalucía pending distributor review queue v0.10.7.2") + lines.append("") + lines.append(f"Generated: {date.today().isoformat()}") + lines.append("") + lines.append("## Summary") + lines.append("") + lines.append(f"- Andalucía municipal GeoJSON features: **{len(geo_rows)}**") + lines.append(f"- Already covered by distributor hints: **{len(covered)}**") + lines.append(f"- Pending municipal review rows: **{len(pending_rows)}**") + lines.append(f"- CSV: `{OUT_CSV}`") + lines.append("") + lines.append("## Pending rows by province") + lines.append("") + lines.append("| province | pending rows |") + lines.append("|---|---:|") + for province, count in sorted(province_counts.items()): + lines.append(f"| {province} | {count} |") + lines.append("") + lines.append("## Intended use") + lines.append("") + lines.append("This queue is a sanitized working list for future Andalucía distributor research.") + lines.append("") + lines.append("It does not import new distributor hints.") + lines.append("") + lines.append("Future imports must only promote rows from this queue when there is") + lines.append("strong public, source-backed evidence for a `verified_partial` hint.") + lines.append("") + lines.append("## Safety constraints") + lines.append("") + lines.append("- No CUPS.") + lines.append("- No addresses.") + lines.append("- No exact coordinates.") + lines.append("- No customer data.") + lines.append("- No private grid inventory.") + lines.append("- No raw external API responses.") + lines.append("- No unsupported exclusivity claims.") + lines.append("- No Red Eléctrica distributor hint.") + lines.append("- No generic `Pequeña distribuidora` placeholder.") + lines.append("") + + OUT_MD.write_text("\n".join(lines), encoding="utf-8") + + print(f"OK wrote {OUT_CSV}") + print(f"OK wrote {OUT_MD}") + print(f"andalucia_geo_features={len(geo_rows)}") + print(f"andalucia_covered={len(covered)}") + print(f"andalucia_pending={len(pending_rows)}") + print("pending_by_province=", dict(sorted(province_counts.items()))) + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/scripts/check_andalucia_pending_review_queue.py b/scripts/check_andalucia_pending_review_queue.py new file mode 100755 index 0000000..9ba2b3e --- /dev/null +++ b/scripts/check_andalucia_pending_review_queue.py @@ -0,0 +1,125 @@ +#!/usr/bin/env python3 +from __future__ import annotations + +import csv +import json +from pathlib import Path + +GEO_PATH = Path("frontend/public/data/andalucia_municipios.geojson") +HINTS_PATH = Path("frontend/src/data/distributor_hints.json") +CSV_PATH = Path("docs/audit/andalucia_pending_review_queue_v1072.csv") + +EXPECTED_GEO_FEATURES = 786 +EXPECTED_COVERED = 254 +EXPECTED_PENDING = 532 + + +def clean(value: object) -> str: + return str(value or "").strip() + + +def first_prop(props: dict, names: list[str]) -> str: + for name in names: + value = clean(props.get(name)) + if value: + return value + return "" + + +def main() -> int: + geo = json.loads(GEO_PATH.read_text(encoding="utf-8")) + features = geo.get("features", []) + if len(features) != EXPECTED_GEO_FEATURES: + raise SystemExit(f"ERROR geo features={len(features)} expected={EXPECTED_GEO_FEATURES}") + + geo_zone_ids = set() + for feature in features: + props = feature.get("properties", {}) + if clean(props.get("dataset_id")) != "andalucia": + raise SystemExit("ERROR non-andalucia feature in Andalucía GeoJSON") + zone_id = first_prop(props, ["zone_id", "municipio", "mun_code", "ine", "id"]) + if not zone_id: + raise SystemExit("ERROR feature without zone_id") + geo_zone_ids.add(zone_id) + + hints = json.loads(HINTS_PATH.read_text(encoding="utf-8")) + covered = set() + for item in hints.get("items", []): + if item.get("dataset_id") != "andalucia": + continue + zone_id = first_prop(item, ["zone_id", "municipio", "mun_code", "ine", "id", "name"]) + if not zone_id: + raise SystemExit("ERROR Andalucía hint without zone_id") + covered.add(zone_id) + + if len(covered) != EXPECTED_COVERED: + raise SystemExit(f"ERROR covered={len(covered)} expected={EXPECTED_COVERED}") + + with CSV_PATH.open("r", encoding="utf-8", newline="") as fh: + rows = list(csv.DictReader(fh)) + + if len(rows) != EXPECTED_PENDING: + raise SystemExit(f"ERROR queue rows={len(rows)} expected={EXPECTED_PENDING}") + + queue_zone_ids = set() + for row in rows: + zone_id = clean(row.get("zone_id")) + if not zone_id: + raise SystemExit(f"ERROR row without zone_id: {row}") + if zone_id in queue_zone_ids: + raise SystemExit(f"ERROR duplicated queue zone_id={zone_id}") + if zone_id not in geo_zone_ids: + raise SystemExit(f"ERROR queue zone_id not in geo={zone_id}") + if zone_id in covered: + raise SystemExit(f"ERROR queue zone_id already covered={zone_id}") + if row.get("review_status") != "pending_municipal_review": + raise SystemExit(f"ERROR invalid review_status for {zone_id}") + if row.get("candidate_distributor") or row.get("source_url"): + raise SystemExit(f"ERROR queue must not pre-fill source/distributor for {zone_id}") + + forbidden_columns = { + "cups", + "token", + "password", + "secret", + "private_key", + "api_key", + "authorization", + "lat", + "latitude", + "lon", + "longitude", + "coord", + "coordinates", + "address", + "direccion", + "dirección", + } + + for key in row: + key_l = str(key).lower() + if key_l in forbidden_columns: + raise SystemExit(f"ERROR forbidden sensitive column {key!r} in row {zone_id}") + + joined = " ".join(str(v or "") for v in row.values()).lower() + for marker in ["cups", "token", "password", "secret", "private_key", "api_key", "authorization"]: + if marker in joined: + raise SystemExit(f"ERROR forbidden marker {marker!r} in row {zone_id}") + + queue_zone_ids.add(zone_id) + + if len(covered | queue_zone_ids) != EXPECTED_GEO_FEATURES: + raise SystemExit( + f"ERROR coverage mismatch covered+queue={len(covered | queue_zone_ids)} " + f"expected={EXPECTED_GEO_FEATURES}" + ) + + print("OK Andalucía pending review queue") + print(f"geo_features={len(features)}") + print(f"covered={len(covered)}") + print(f"pending={len(rows)}") + return 0 + + +if __name__ == "__main__": + raise SystemExit(main())