{
  "_": "Manifiesto del vigilante de salud de los datos. Una entrada por herramienta. Campos: archivo (ruta en el repo; puede ser carpeta), campo_fecha (lista de claves con la hora de generación, en orden de preferencia), campo_dato (clave con la fecha del último dato, solo informativo), ventana_h (horas máximas sin refrescar antes de avisar; null = estático), workflow (fichero .yml), cadencia (texto), guardas (comprobaciones del contenido), contraste (nombre del contraste de veracidad de scripts/salud_datos.py), pagina (URL pública), fuente.",
  "version": 2,
  "herramientas": [
    {"id": "avisos", "nombre": "Avisos meteorológicos", "familia": "Tiempo", "archivo": "docs/avisos.json", "campo_fecha": ["generado"], "ventana_h": 2, "workflow": "avisos.yml", "cadencia": "cada 30 min", "guardas": {"clave_existe": "avisos"}, "pagina": "https://calentamientoglobal.es/avisos-meteorologicos-activos/", "fuente": "AEMET · MeteoAlarm"},
    {"id": "lluvia_municipios", "nombre": "Lluvia diaria por municipio", "familia": "Agua", "archivo": "docs/lluvias_municipios.json", "campo_fecha": ["generado"], "campo_dato": "hoy_fecha", "ventana_h": 3, "workflow": "actualizar_lluvias_municipios.yml", "cadencia": "cada hora", "guardas": {"min_elementos": {"clave": "provincias", "min": 45}}, "pagina": "https://calentamientoglobal.es/lluvias-en-espana/", "fuente": "AEMET OpenData (pluviómetros)"},
    {"id": "lluvias_nacional", "nombre": "Lluvia acumulada por provincia", "familia": "Agua", "archivo": "docs/lluvias_nacional.json", "campo_fecha": ["ultima_actualizacion"], "campo_dato": "fecha_datos", "ventana_h": 30, "workflow": "actualizar_lluvias.yml", "cadencia": "diaria", "guardas": {"min_elementos": {"clave": "provincias", "min": 45}}, "pagina": "https://calentamientoglobal.es/lluvias-en-espana/", "fuente": "Open-Meteo · ERA5"},
    {"id": "otonio_municipios", "nombre": "Lluvia del otoño por municipio", "familia": "Agua", "archivo": "docs/otonio_municipios.json", "campo_fecha": ["generado"], "campo_dato": "hasta", "ventana_h": 30, "workflow": "actualizar_otonio_municipios.yml", "cadencia": "diaria", "guardas": {"min_elementos": {"clave": "municipios", "min": 500}}, "pagina": "https://calentamientoglobal.es/lluvias-en-espana/", "fuente": "ERA5-Land · Copernicus"},
    {"id": "embalses", "nombre": "Embalses de España", "familia": "Agua", "archivo": "docs/embalses.json", "campo_fecha": ["actualizado", "ultima_actualizacion"], "campo_dato": "boletin_fecha", "ventana_h": 192, "workflow": "actualizar_embalses.yml", "cadencia": "semanal (boletín de los martes)", "guardas": {"clave_existe": "nacional"}, "pagina": "https://calentamientoglobal.es/embalses-espana/", "fuente": "MITECO · Boletín Hidrológico"},
    {"id": "embalses_fichas", "nombre": "Fichas de embalses", "familia": "Agua", "archivo": "docs/embalses/fichas", "campo_fecha": [], "ventana_h": 192, "workflow": "actualizar_fichas_embalses.yml", "cadencia": "semanal, con pasada diaria", "pagina": "https://calentamientoglobal.es/embalses-espana/", "fuente": "MITECO · Boletín Hidrológico"},
    {"id": "caudales", "nombre": "Caudal de los ríos (modelo)", "familia": "Agua", "archivo": "docs/caudal/hoy.json", "campo_fecha": ["generado"], "campo_dato": "emitida", "ventana_h": 30, "workflow": "actualizar_caudales.yml", "cadencia": "diaria (dos pasadas)", "guardas": {"min_elementos": {"clave": "puntos", "min": 100}}, "pagina": "https://calentamientoglobal.es/caudal-rios-espana-mapa/", "fuente": "GloFAS v4 · Copernicus"},
    {"id": "aforos", "nombre": "Aforos medidos (SAIH)", "familia": "Agua", "archivo": "docs/caudal/aforos.json", "campo_fecha": ["generado"], "ventana_h": 14, "workflow": "caudal_aforos.yml", "cadencia": "cada 6 h", "guardas": {"min_elementos": {"clave": "estaciones", "min": 50}}, "pagina": "https://calentamientoglobal.es/caudal-rios-espana-mapa/", "fuente": "SAIH Navarra · ACA · CH Júcar"},
    {"id": "dana", "nombre": "Temporada de DANAs", "familia": "Tiempo", "archivo": "docs/dana/temporada.json", "campo_fecha": ["generado"], "campo_dato": "ultimo_dato", "ventana_h": 30, "workflow": "actualizar_dana.yml", "cadencia": "diaria", "pagina": "https://calentamientoglobal.es/dana/", "fuente": "NCEP · ECMWF · Copernicus"},
    {"id": "viento", "nombre": "Viento en directo", "familia": "Tiempo", "archivo": "docs/viento.json", "campo_fecha": ["generado"], "ventana_h": 10, "workflow": "viento.yml", "cadencia": "4 veces al día", "guardas": {"clave_existe": "capitales"}, "pagina": "https://calentamientoglobal.es/mapa-viento-espana/", "fuente": "Open-Meteo"},
    {"id": "prediccion", "nombre": "Predicción por municipio", "familia": "Tiempo", "archivo": "docs/prediccion", "campo_fecha": [], "ventana_h": 10, "workflow": "actualizar_prediccion.yml", "cadencia": "4 veces al día", "pagina": "https://calentamientoglobal.es/el-tiempo/", "fuente": "AEMET OpenData"},
    {"id": "modelos", "nombre": "Qué dicen los modelos", "familia": "Tiempo", "archivo": "docs/modelos", "campo_fecha": [], "ventana_h": 30, "workflow": "actualizar_modelos.yml", "cadencia": "dos veces al día", "pagina": "https://calentamientoglobal.es/el-tiempo/", "fuente": "ECMWF · ICON · ARPEGE · GFS"},
    {"id": "archivo_capitales", "nombre": "Archivo de las capitales", "familia": "Tiempo", "archivo": "docs/archivo/01.json", "campo_fecha": [], "campo_dato": "ultimo", "ventana_h": 30, "workflow": "actualizar_archivo.yml", "cadencia": "diaria", "pagina": "https://calentamientoglobal.es/el-tiempo/", "fuente": "AEMET · ERA5"},
    {"id": "incendios", "nombre": "Incendios activos", "familia": "Fuego", "archivo": "docs/incendios.json", "campo_fecha": ["ultima_actualizacion"], "ventana_h": 14, "workflow": "actualizar_incendios.yml", "cadencia": "3 veces al día", "guardas": {"verdadero": "datos_ok"}, "pagina": "https://calentamientoglobal.es/incendios-forestales-espana-tiempo-real/", "fuente": "NASA FIRMS"},
    {"id": "superficie_quemada", "nombre": "Superficie quemada", "familia": "Fuego", "archivo": "docs/superficie_incendios.json", "campo_fecha": ["actualizado"], "ventana_h": 30, "workflow": "actualizar_superficie.yml", "cadencia": "diaria", "pagina": "https://calentamientoglobal.es/incendios-forestales-espana-tiempo-real/", "fuente": "EFFIS · Copernicus"},
    {"id": "temperaturas_mar", "nombre": "Temperatura del mar", "familia": "Mar", "archivo": "docs/datos.json", "campo_fecha": ["ultima_actualizacion"], "campo_dato": "fecha_dato", "ventana_h": 30, "workflow": "actualizar.yml", "cadencia": "diaria", "guardas": {"min_numero": {"clave": "puntos_con_datos", "min": 20}}, "contraste": "temperaturas_mar", "pagina": "https://calentamientoglobal.es/temperaturas-del-mar-espana-actualizado/", "fuente": "NOAA OISST v2.1 (satélite)"},
    {"id": "boyas_actual", "nombre": "Boyas: temperatura actual", "familia": "Mar", "archivo": "docs/boyas_actual.json", "campo_fecha": ["generado"], "ventana_h": 16, "workflow": "actualizar_boyas_actual.yml", "cadencia": "2 veces al día", "guardas": {"min_elementos": {"clave": "boyas", "min": 8}}, "pagina": "https://calentamientoglobal.es/temperaturas-del-mar-espana-actualizado/", "fuente": "Copernicus Marine In Situ"},
    {"id": "boyas_modelo", "nombre": "Boyas: histórico y modelo", "familia": "Mar", "archivo": "docs/boyas_mapa.json", "campo_fecha": ["generado"], "ventana_h": 192, "workflow": "actualizar_boyas.yml", "cadencia": "semanal (lunes)", "pagina": "https://calentamientoglobal.es/temperaturas-del-mar-espana-actualizado/", "fuente": "Copernicus Marine In Situ"},
    {"id": "nivel_mar", "nombre": "Nivel del mar", "familia": "Mar", "archivo": "docs/nivel_mar.json", "campo_fecha": ["ultima_actualizacion"], "ventana_h": 30, "workflow": "actualizar_nivel_mar.yml", "cadencia": "diaria", "guardas": {"min_numero": {"clave": "puntos_con_datos", "min": 8}}, "pagina": "https://calentamientoglobal.es/nivel-del-mar-espana-ahora/", "fuente": "Copernicus Marine · DUACS"},
    {"id": "oceano", "nombre": "Olas de calor marinas", "familia": "Mar", "archivo": "docs/oceano.json", "campo_fecha": [], "campo_dato": "fecha", "ventana_h": 30, "workflow": "oceano.yml", "cadencia": "diaria", "pagina": "https://calentamientoglobal.es/mapa-en-tiempo-real-ola-de-calor-marino/", "fuente": "NOAA OISST"},
    {"id": "mediterraneo", "nombre": "Mediterráneo: combustible de DANAs", "familia": "Mar", "archivo": "docs/dana/mediterraneo.json", "campo_fecha": ["generado"], "campo_dato": "ultimo", "ventana_h": 30, "workflow": "actualizar_dana.yml", "cadencia": "diaria", "contraste": "mediterraneo", "pagina": "https://calentamientoglobal.es/dana/", "fuente": "NOAA OISST v2.1"},
    {"id": "calidad_aire", "nombre": "Calidad del aire", "familia": "Aire", "archivo": "docs/calidad_aire.json", "campo_fecha": ["ultima_actualizacion"], "ventana_h": 14, "workflow": "actualizar_calidad_aire.yml", "cadencia": "2 veces al día", "guardas": {"min_numero": {"clave": "ciudades_con_datos", "min": 30}}, "pagina": "https://calentamientoglobal.es/calidad-del-aire/", "fuente": "Open-Meteo · CAMS"},
    {"id": "temperaturas_nocturnas", "nombre": "Noches tropicales", "familia": "Calor", "archivo": "docs/temperaturas_nocturnas.json", "campo_fecha": ["ultima_actualizacion"], "campo_dato": "fecha_anoche", "ventana_h": 30, "workflow": "actualizar_temperaturas_nocturnas.yml", "cadencia": "diaria", "guardas": {"min_numero": {"clave": "total_ciudades", "min": 30}}, "contraste": "noches_tropicales", "pagina": "https://calentamientoglobal.es/noches-tropicales-espana/", "fuente": "AEMET OpenData"},
    {"id": "canicula", "nombre": "Canícula", "familia": "Calor", "archivo": "docs/canicula.json", "campo_fecha": ["ultima_actualizacion"], "ventana_h": null, "workflow": "actualizar_canicula.yml", "cadencia": "diaria (junio a septiembre)", "guardas": {"min_numero": {"clave": "total_provincias", "min": 45}}, "pagina": "https://calentamientoglobal.es/canicula-en-espana-ahora/", "fuente": "Open-Meteo · ERA5"},
    {"id": "calor_mortalidad", "nombre": "Muertes por calor", "familia": "Calor", "archivo": "docs/calor_mortalidad.json", "campo_fecha": ["actualizado"], "ventana_h": 36, "workflow": "actualizar_calor_mortalidad.yml", "cadencia": "diaria", "contraste": "calor_mortalidad", "pagina": "https://calentamientoglobal.es/muertes-por-calor-espana/", "fuente": "MoMo · ISCIII"},
    {"id": "firma_climatica", "nombre": "Desplazamiento climático observado", "familia": "Calor", "archivo": "docs/firma_climatica.json", "campo_fecha": ["generado_utc"], "campo_dato": "fecha", "ventana_h": 30, "workflow": "firma-climatica.yml", "cadencia": "diaria", "guardas": {"min_elementos": {"clave": "ciudades", "min": 20}}, "pagina": "https://calentamientoglobal.es/firma-climatica/", "fuente": "Open-Meteo · ERA5"},
    {"id": "dias32", "nombre": "Días de más de 32 grados: tendencia (ERA5)", "familia": "Calor", "archivo": "docs/dias32.json", "campo_fecha": ["actualizado"], "ventana_h": 1080, "workflow": "dias32.yml", "cadencia": "mensual", "guardas": {"min_elementos": {"clave": "provincias", "min": 40}}, "contraste": "dias32_era5", "pagina": "https://calentamientoglobal.es/cambio-climatico-por-provincias/", "fuente": "ERA5 · Copernicus (modelo fijo)"},
    {"id": "dias32_estaciones", "nombre": "Días de más de 32 grados: estaciones AEMET", "familia": "Calor", "archivo": "docs/dias32_estaciones.json", "campo_fecha": ["generado"], "ventana_h": null, "workflow": "dias32-estaciones.yml", "cadencia": "diaria (mayo a octubre)", "guardas": {"min_elementos": {"clave": "estaciones", "min": 45}}, "contraste": "dias32_estaciones", "pagina": "https://calentamientoglobal.es/cambio-climatico-por-provincias/", "fuente": "AEMET OpenData (estación principal de cada capital)"},
    {"id": "grados_dia", "nombre": "Grados-día de calefacción y refrigeración", "familia": "Calor", "archivo": "docs/grados-dia.json", "campo_fecha": ["generado"], "campo_dato": "fin", "ventana_h": 768, "workflow": "actualizar_grados_dia.yml", "cadencia": "mensual (día 18)", "guardas": {"min_elementos": {"clave": "provincias", "min": 50}}, "contraste": "grados_dia", "pagina": "https://calentamientoglobal.es/grados-dia-calefaccion-refrigeracion-en-espana/", "fuente": "ERA5 · Copernicus (archivo de las capitales)"},
    {"id": "temperatura_global", "nombre": "Temperatura del planeta", "familia": "Planeta", "archivo": "docs/temperatura_global.json", "campo_fecha": ["actualizado"], "campo_dato": "fecha_dato", "ventana_h": 30, "workflow": "actualizar_temperatura_global.yml", "cadencia": "diaria", "guardas": {"verdadero": "fuente_ok"}, "pagina": "https://calentamientoglobal.es/temperatura-del-planeta/", "fuente": "Climate Reanalyzer · ERA5"},
    {"id": "reloj_climatico", "nombre": "Reloj climático", "familia": "Planeta", "archivo": "docs/reloj_climatico.json", "campo_fecha": ["ultima_actualizacion"], "ventana_h": 30, "workflow": "actualizar_reloj_climatico.yml", "cadencia": "diaria", "guardas": {"verdadero": "fuente_ok"}, "pagina": "https://calentamientoglobal.es/reloj-climatico/", "fuente": "Global Carbon Project · MCC"},
    {"id": "emisiones_co2", "nombre": "Emisiones de CO₂ por país", "familia": "Planeta", "archivo": "docs/emisiones_co2.json", "campo_fecha": ["ultima_actualizacion"], "ventana_h": 30, "workflow": "actualizar_emisiones.yml", "cadencia": "diaria", "guardas": {"min_numero": {"clave": "paises_con_datos", "min": 20}}, "pagina": "https://calentamientoglobal.es/emisiones-co2-por-pais/", "fuente": "Carbon Monitor · Global Carbon Project"},
    {"id": "deshielo", "nombre": "Deshielo de los polos", "familia": "Planeta", "archivo": "docs/deshielo.json", "campo_fecha": ["actualizado"], "ventana_h": 30, "workflow": "deshielo.yml", "cadencia": "diaria", "guardas": {"clave_existe": "arctic"}, "pagina": "https://calentamientoglobal.es/deshielo-de-los-polos/", "fuente": "NSIDC"},
    {"id": "glaciares", "nombre": "Estado de los glaciares", "familia": "Planeta", "archivo": "docs/glaciares/indice.json", "campo_fecha": [], "ventana_h": 1080, "workflow": "actualizar_glaciares.yml", "cadencia": "mensual", "pagina": "https://calentamientoglobal.es/glaciares-estado/", "fuente": "WGMS"},
    {"id": "desertificacion", "nombre": "Desertificación", "familia": "Planeta", "archivo": "docs/desertificacion.json", "campo_fecha": [], "ventana_h": 1080, "workflow": "desertificacion.yml", "cadencia": "mensual", "guardas": {"clave_existe": "paises"}, "pagina": "https://calentamientoglobal.es/desertificacion-mapa-interactivo-causas-que-es/", "fuente": "UNCCD · Copernicus"},
    {"id": "amazonia_caudales", "nombre": "Amazonía: caudales", "familia": "Planeta", "archivo": "docs/amazonia/caudales.json", "campo_fecha": ["actualizado"], "campo_dato": "fecha_dato", "ventana_h": 30, "workflow": "amazonia.yml", "cadencia": "diaria", "guardas": {"min_elementos": {"clave": "estaciones", "min": 5}}, "pagina": "https://calentamientoglobal.es/amazonia/", "fuente": "GloFAS · Open-Meteo"},
    {"id": "amazonia_fuego", "nombre": "Amazonía: focos de fuego", "familia": "Planeta", "archivo": "docs/amazonia/fuego.json", "campo_fecha": ["actualizado"], "campo_dato": "puntos_mapa_fecha", "ventana_h": 30, "workflow": "amazonia.yml", "cadencia": "diaria", "pagina": "https://calentamientoglobal.es/amazonia/", "fuente": "INPE"},
    {"id": "desastres", "nombre": "Cambio climático en euros", "familia": "Planeta", "archivo": "docs/desastres_meta.json", "campo_fecha": ["actualizado"], "ventana_h": 192, "workflow": "contador-desastres.yml", "cadencia": "semanal (lunes)", "pagina": "https://calentamientoglobal.es/cuanto-le-cuesta-a-espana-el-cambio-climatico-en-euros/", "fuente": "Consorcio de Compensación de Seguros · EEA"},
    {"id": "municipios_2050", "nombre": "Tu municipio en 2050", "familia": "Planeta", "archivo": "docs/municipios.json", "campo_fecha": [], "ventana_h": null, "workflow": null, "cadencia": "estático (proyección CMIP6)", "guardas": {"min_elementos": {"clave": "items", "min": 5000}}, "pagina": "https://calentamientoglobal.es/tu-municipio-en-2050/", "fuente": "Open-Meteo Climate · CMIP6"},
    {"id": "provincias", "nombre": "Agregador provincial", "familia": "Web", "archivo": "docs/provincias/madrid.json", "campo_fecha": ["generado"], "ventana_h": 30, "workflow": "agregador-provincias.yml", "cadencia": "diaria", "contraste": "provincias", "pagina": "https://calentamientoglobal.es/cambio-climatico-por-provincias/", "fuente": "Cálculo propio sobre las demás herramientas"},
    {"id": "resumen_semanal", "nombre": "Resumen semanal (boletín)", "familia": "Web", "archivo": "docs/resumen_semanal/ultima_semana.json", "campo_fecha": ["generado"], "ventana_h": 192, "workflow": "resumen-semanal.yml", "cadencia": "semanal (lunes)", "guardas": {"min_elementos": {"clave": "provincias", "min": 45}}, "pagina": "https://calentamientoglobal.es/suscripcion-alertas-climaticas/", "fuente": "Cálculo propio"},
    {"id": "prensa", "nombre": "Tarjetas de prensa", "familia": "Web", "archivo": "docs/prensa/titulares.json", "campo_fecha": ["generado"], "ventana_h": 30, "workflow": "actualizar_tarjetas_prensa.yml", "cadencia": "diaria", "pagina": null, "fuente": "Cálculo propio"},
    {"id": "clima_directo", "nombre": "El clima, en directo", "familia": "Directo", "archivo": "estado/clima_directo.json", "campo_fecha": ["generado"], "ventana_h": 9, "workflow": "clima-directo.yml", "cadencia": "cada 4 h", "pagina": "https://calentamientoglobal.es/clima-en-directo/", "fuente": "GDELT · Google News · Bluesky"},
    {"id": "temporales", "nombre": "Temporales en directo", "familia": "Directo", "archivo": "estado/temporales.json", "campo_fecha": [], "ventana_h": 3, "workflow": "temporal-directo.yml", "cadencia": "cada 30 min", "guardas": {"clave_existe": "episodios"}, "pagina": "https://calentamientoglobal.es/temporales/", "fuente": "AEMET · 112 · medios"},
    {"id": "climate_radar", "nombre": "Climate Radar (Telegram)", "familia": "Directo", "archivo": "docs/radar_seen.json", "campo_fecha": ["updated"], "ventana_h": 7, "workflow": "climate-radar.yml", "cadencia": "cada 3 h", "pagina": null, "fuente": "GDELT · Reddit · YouTube · Bluesky"},
    {"id": "bluesky", "nombre": "El dato del día en Bluesky", "familia": "Difusión", "archivo": "docs/bluesky/ultimo.json", "campo_fecha": ["fecha"], "ventana_h": 72, "workflow": "bluesky.yml", "cadencia": "diaria, si hay dato", "pagina": null, "fuente": "Cálculo propio"},
    {"id": "publicar_resumenes", "nombre": "Publicación de resúmenes en WordPress", "familia": "Web", "archivo": null, "campo_fecha": [], "ventana_h": 30, "workflow": "publicar_resumenes.yml", "cadencia": "dos veces al día", "pagina": null, "fuente": "WordPress REST"},
    {"id": "nieve", "nombre": "Nieve en España", "familia": "Tiempo", "archivo": "docs/nieve/index.json", "campo_fecha": ["generado"], "ventana_h": 14, "workflow": "nieve.yml", "cadencia": "3 veces al día", "guardas": {"min_elementos": {"clave": "provincias", "min": 50}}, "pagina": null, "fuente": "ERA5-Land (Copernicus) · NOAA IMS · ECMWF, ICON, ARPEGE, GFS"}
  ]
}
