Promote develop → main (2026-05-01 21:39 UTC)

This commit was merged in pull request #12.
Dieser Commit ist enthalten in:
2026-05-01 23:39:22 +02:00
Commit 0775a475a4
3 geänderte Dateien mit 26 neuen und 7 gelöschten Zeilen

Datei anzeigen

@@ -11,4 +11,8 @@ python-multipart
aiosmtplib aiosmtplib
geonamescache>=2.0 geonamescache>=2.0
telethon telethon
# Bericht-Export (PDF via WeasyPrint + DOCX via python-docx)
Jinja2>=3.1
weasyprint>=68.0
python-docx>=1.2
pikepdf>=9.0 pikepdf>=9.0

Datei anzeigen

@@ -26,10 +26,15 @@ LOGO_PATH = Path(__file__).parent / "static" / "favicon.svg"
FC_STATUS_LABELS = { FC_STATUS_LABELS = {
# 1:1 vom Monitor-Frontend (components.js) — konsistent zum UI.
"confirmed": "Bestätigt", "confirmed": "Bestätigt",
"unconfirmed": "Unbestätigt", "unconfirmed": "Unbestätigt",
"contradicted": "Widerlegt",
"developing": "Unklar",
"established": "Gesichert",
"disputed": "Umstritten", "disputed": "Umstritten",
"false": "Falsch", "unverified": "Ungeprüft",
"false": "Falsch", # Legacy-Fallback
} }
@@ -709,7 +714,7 @@ async def generate_pdf(
), ),
lagebild_timestamp=(incident.get("updated_at") or "")[:16].replace("T", " "), lagebild_timestamp=(incident.get("updated_at") or "")[:16].replace("T", " "),
sources=_prepare_sources(incident)[:30] if scope == "report" else _prepare_sources(incident), sources=_prepare_sources(incident)[:30] if scope == "report" else _prepare_sources(incident),
fact_checks=_prepare_fact_checks(fact_checks[:20] if scope == "report" else fact_checks), fact_checks=_prepare_fact_checks(fact_checks),
source_stats=_prepare_source_stats(articles)[:20] if scope == "report" else _prepare_source_stats(articles), source_stats=_prepare_source_stats(articles)[:20] if scope == "report" else _prepare_source_stats(articles),
timeline=_prepare_timeline(articles) if scope == "full" else [], timeline=_prepare_timeline(articles) if scope == "full" else [],
articles=articles if scope == "full" else [], articles=articles if scope == "full" else [],

Datei anzeigen

@@ -1165,7 +1165,17 @@ async def export_incident(
) )
snapshots = [dict(r) for r in await cursor.fetchall()] snapshots = [dict(r) for r in await cursor.fetchall()]
# Executive Summary (KI-generiert, gecacht) # Zusammenfassung fuer den Export:
# - Bei Adhoc-Lagen primaer "Neueste Entwicklungen" (latest_developments) als Markdown-Bullets,
# weil Live-Monitoring von Aktualitaet lebt.
# - Fallback (oder bei Research): Executive Summary (KI-generiert, gecacht).
is_adhoc = (incident.get("type") or "adhoc") != "research"
latest_dev = (incident.get("latest_developments") or "").strip()
exec_summary = None
if is_adhoc and latest_dev:
from report_generator import _markdown_to_html as _md_to_html
exec_summary = _md_to_html(latest_dev)
if not exec_summary:
exec_summary = incident.get("executive_summary") exec_summary = incident.get("executive_summary")
if not exec_summary: if not exec_summary:
summary_text = incident.get("summary") or "" summary_text = incident.get("summary") or ""