---
title: "Desastres Anunciados"
subtitle: "Riesgo de desastres en Paraguay desde una mirada crítica — previsibles y socialmente construidos"
date: last-modified
date-format: "D [de] MMMM [de] YYYY"
---
Base empírica y documental sobre el **riesgo de desastres en Paraguay**, desde una
doble premisa: **el desastre no es natural —se construye socialmente— y casi nunca es
sorpresa —está anunciado—**. La amenaza se vuelve desastre allí donde hay
vulnerabilidad; y como el clima **se pronostica** y la vulnerabilidad **se conoce**, el
golpe suele llegar avisado. Prioriza **fuentes oficiales y datos primarios** y **no
incorpora cifras sin fuente verificable** (ver [metodología](metodologia.qmd)).
## Panel de control
```{python}
#| label: panel-control
#| echo: false
import json, os
from IPython.display import HTML
def g(path, default=None):
return json.load(open(path, encoding="utf-8")) if os.path.exists(path) else default
r = g("datos/exposicion/resumen.json", {})
rio = g("datos/nivel-rio-actual.json", {})
emas = g("datos/estaciones-dmh-metro.json", {})
com = g("datos/exposicion/comercio_resumen.json", {})
# --- indicadores ---
er = r.get("en_riesgo", {})
asu = next((e for e in rio.get("estaciones", []) if e.get("nombre") == "Asunción"), None)
crit = rio.get("critica_asuncion_m", 5.5)
if asu:
nivel = asu["nivel_m"]; margen = round(crit - nivel, 2)
fase = "0 · preparación" if nivel < 3.5 else ("2 · naranja" if nivel < 5 else "3 · roja")
rio_val, rio_sub = f"{nivel} m", f"fase {fase} · a {margen} m del crítico"
else:
rio_val, rio_sub = "s/d", "cota no disponible"
act = [e for e in emas.get("estaciones", []) if e.get("activa") and e.get("precip_dia_mm") is not None]
maxmm = max((e["precip_dia_mm"] for e in act), default=None)
lluvia_val = f"{maxmm} mm" if maxmm is not None else "s/d"
lluvia_sub = f"máx. país · {emas.get('resumen',{}).get('activas','?')} estaciones activas"
def kpi(icono, label, valor, sub, color):
return (f"<div style='flex:1;min-width:170px;background:#f7f9fa;border-top:4px solid {color};"
f"border-radius:8px;padding:.7em .9em'>"
f"<div style='font-size:12px;color:#666;text-transform:uppercase;letter-spacing:.03em'>{icono} {label}</div>"
f"<div style='font-size:26px;font-weight:700;color:#222;margin:.1em 0'>{valor}</div>"
f"<div style='font-size:12px;color:#777'>{sub}</div></div>")
ACC = "#d8dee2" # acento neutro uniforme (el color con significado va en las amenazas)
kpis = "<div style='display:flex;gap:.8em;flex-wrap:wrap;margin:.6em 0 1.2em'>" + "".join([
kpi("🌀", "ENOS", "El Niño", "Niño 3.4 +1,8 °C · >90% muy fuerte · 75% histórico (OND)", ACC),
kpi("🌊", "Río en Asunción", rio_val, rio_sub, ACC),
kpi("🌧️", "Lluvia hoy", lluvia_val, lluvia_sub, ACC),
kpi("👥", "Población en riesgo", f"{er.get('poblacion',0):,}".replace(",", "."), "en zona de inundación", ACC),
kpi("🏫", "Establecimientos expuestos", f"{er.get('escuelas',0)} esc · {er.get('salud',0)} salud",
f"{com.get('expuestos','—')} comercios · matrícula {er.get('matricula',0):,}".replace(",", "."), ACC),
]) + "</div>"
# --- grilla de amenazas ---
amenazas = [
("🌊", "Inundación fluvial", "río", "Monitoreo · río bajo", "#1b5e7a", "amenazas/inundacion-fluvial/index.html"),
("🌧️", "Inundación pluvial", "lluvia", "Estación seca (0 mm)", "#2b8cbe", "amenazas/inundacion-pluvial/index.html"),
("🏜️", "Sequía / bajante", "La Niña", "Documentado · récord −1,61 m", "#b58900", "amenazas/sequia/index.html"),
("❄️", "Olas de frío", "Jaho'i", "Documentado · Plan Jaho'i", "#5b8db8", "amenazas/frio/index.html"),
("🦟", "Dengue", "salud climática", "Documentado · epidemia 2023-24", "#2a9d3f", "amenazas/dengue/index.html"),
("🔥", "Incendios", "quemas y sequía", "En desarrollo", "#c0392b", "amenazas/incendios/index.html"),
]
def carta(icono, titulo, tag, estado, color, href):
dev = "En desarrollo" in estado
chip_bg = "#eee" if dev else "#e6f4ea"
chip_c = "#888" if dev else "#1a7a3a"
return (f"<a href='{href}' style='flex:1;min-width:210px;text-decoration:none;color:inherit'>"
f"<div style='border:1px solid #e2e6ea;border-left:5px solid {color};border-radius:8px;"
f"padding:.7em .9em;height:100%;transition:box-shadow .15s' "
f"onmouseover=\"this.style.boxShadow='0 2px 8px rgba(0,0,0,.12)'\" "
f"onmouseout=\"this.style.boxShadow='none'\">"
f"<div style='font-size:15px;font-weight:700'>{icono} {titulo}</div>"
f"<div style='font-size:12px;color:#888;margin:.15em 0 .5em'>{tag}</div>"
f"<span style='font-size:11px;background:{chip_bg};color:{chip_c};padding:.15em .5em;border-radius:10px'>{estado}</span>"
f"</div></a>")
grid = ("<div style='font-weight:700;margin:.4em 0'>Amenazas</div>"
"<div style='display:flex;gap:.7em;flex-wrap:wrap'>"
+ "".join(carta(*a) for a in amenazas) + "</div>")
HTML(kpis + grid)
```
*Indicadores en vivo: exposición (COD-PS/Kontur, MSPBS, MEC), cota del río (DINAC) y
lluvia (EMAs de la DMH). Estado del ENOS según NOAA/CPC. Las amenazas marcadas
**en desarrollo** tienen la estructura montada y se poblarán con fuentes primarias.*
## Explorá el sitio
**Amenazas:** [fluvial](amenazas/inundacion-fluvial/index.qmd) · [pluvial](amenazas/inundacion-pluvial/index.qmd) · [sequía](amenazas/sequia/index.qmd) · [frío](amenazas/frio/index.qmd) · [dengue](amenazas/dengue/index.qmd) · [incendios](amenazas/incendios/index.qmd)
**Transversal:** [Marco](marco/index.qmd) · [Exposición](exposicion/index.qmd) · [Agricultura y ganadería](agro-ganaderia/index.qmd) · [Situación actual](situacion-actual/index.qmd) · [Recomendaciones](recomendaciones/index.qmd) · [Fuentes](fuentes/index.qmd)