fix: Programm-Treue-Block bei BUND-/Antraegen mit komplett fehlenden Programmen ausblenden

User: '?? Hinweis: Für folgende Parteien lag kein Wahl-/Parteiprogramm
vor — keine Treue-Bewertung möglich: CDU, CSU, AfD, SPD, GRÜNE, LINKE,
BSW, FDP.' Vorher zeigte die UI den Disclaimer + trotzdem die LLM-
halluzinierten Programm-Treue-Scores aller 8 BT-Parteien — schlechte UX.

WAHLPROGRAMME['BUND'] ist aktuell leer (keine Bundestags-Wahlprogramme
indiziert), daher wird check_missing_programmes alle BT-Fraktionen als
'fehlend' markieren. Bisher wurden trotzdem die LLM-Scores rausgespielt.

Fix in v3/screens/antrag_detail.html und v3/pdf/antrag_pdf.html:
- Wenn _all_missing (alle Fraktionen fehlen) → ganze Programm-Treue-
  Sektion ausblenden, nur klare Disclaimer-Box zeigen ('Programm-Treue
  nicht verfuegbar — fuer dieses Parlament sind aktuell keine Programme
  indiziert').
- Wenn nur einzelne Fraktionen fehlen → die einzelnen Karten via
  {% if fs.fraktion not in _missing_set %} skippen, Disclaimer fuer
  die wegfallenden Fraktionen zeigen ('werden hier nicht aufgefuehrt').

Damit keine LLM-halluzinierten Scores mehr gezeigt werden, wo es keine
Quelle gibt. Issue #186 (historische Programme indizieren) ist die
langfristige Loesung — diese Aenderung macht die UI bis dahin ehrlich.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Dotty Dotter 2026-05-07 14:59:00 +02:00
parent 55423e92e3
commit 332453b940
2 changed files with 43 additions and 5 deletions

View File

@ -653,15 +653,30 @@
<!-- ─── Programm-Treue pro Fraktion ─────────────────────────────────── -->
{% if assessment.wahlprogramm_scores %}
{% set _missing_set = (assessment.fehlende_programme or []) | map('lower') | list %}
{% set _all_missing = assessment.fehlende_programme and (assessment.wahlprogramm_scores | length == assessment.fehlende_programme | length) %}
{% if _all_missing %}
<div class="pdf-section">
<h2 class="pdf-h2">Programm-Treue pro Fraktion</h2>
<p style="font-size:9pt;color:#555;line-height:1.55;padding:6pt 10pt;background:rgba(247,148,29,0.08);border-left:3pt solid #bf6c10;border-radius:1pt;">
<strong>Programm-Treue nicht verfügbar.</strong>
Für dieses Parlament ({{ bundesland }}) sind aktuell keine Wahl- und
Parteiprogramme indiziert. Eine inhaltliche Bewertung gegen die einzelnen
Programme ist damit nicht möglich; um halluzinierte Scores zu vermeiden,
wird die Programm-Treue-Sektion hier nicht ausgewiesen.
</p>
</div>
{% else %}
<div class="pdf-section">
<h2 class="pdf-h2">Programm-Treue pro Fraktion</h2>
{% if assessment.fehlende_programme %}
<p style="font-size:9pt;color:#555;margin-bottom:6pt;">
<strong>Hinweis:</strong> Für folgende Parteien lag kein Wahl-/Parteiprogramm vor:
<strong>Hinweis:</strong> Für folgende Parteien lag kein Wahl-/Parteiprogramm vor — sie werden hier nicht aufgeführt:
{{ assessment.fehlende_programme | join(", ") }}.
</p>
{% endif %}
{% for fs in assessment.wahlprogramm_scores %}
{% if fs.fraktion | lower not in _missing_set %}
<div class="pdf-fraktion">
<div class="pdf-fraktion-head">
<span class="pdf-fraktion-name">{{ fs.fraktion }}</span>
@ -694,9 +709,11 @@
</div>
{% endfor %}
</div>
{% endif %}{# fraktion not in fehlende_programme #}
{% endfor %}
</div>
{% endif %}
{% endif %}{# _all_missing-else #}
{% endif %}{# wahlprogramm_scores #}
<!-- ─── Verbesserungsvorschläge (Redline-Diff) ─────────────────────── -->
{% if assessment.verbesserungen %}

View File

@ -180,18 +180,37 @@
</section>
{% endif %}
{# 6 ── Programm-Treue ─────────────────────────────────────────────── #}
{# 6 ── Programm-Treue — wird komplett ausgeblendet wenn ALLE
Fraktionen ohne Programm sind (typisch bei Bundestags-Antraegen,
wo aktuell keine Programme indiziert sind), sonst werden nur
die einzelnen Fraktionen ohne Programm gefiltert. #}
{% if antrag.fraktions_scores %}
{% set _missing_set = (antrag.fehlende_programme or []) | map('lower') | list %}
{% set _all_missing = antrag.fehlende_programme and (antrag.fraktions_scores | length == antrag.fehlende_programme | length) %}
{% if _all_missing %}
<section class="v3-section">
<h3 class="v3-h3">Programm-Treue pro Fraktion</h3>
<div class="v3-disclaimer">
<strong>Programm-Treue nicht verfügbar.</strong>
Für dieses Parlament ({{ antrag.bundesland }}) sind aktuell keine Wahl- und
Parteiprogramme indiziert. Eine inhaltliche Bewertung gegen die einzelnen
Programme ist damit nicht möglich; die Programm-Treue-Sektion wird nicht
angezeigt, um halluzinierte Scores zu vermeiden.
</div>
</section>
{% else %}
<section class="v3-section">
<h3 class="v3-h3">Programm-Treue pro Fraktion</h3>
{% if antrag.fehlende_programme %}
<div class="v3-disclaimer">
<strong>Hinweis:</strong> Für folgende Parteien lag kein Wahl-/Parteiprogramm vor — keine Treue-Bewertung möglich:
<strong>Hinweis:</strong> Für folgende Parteien lag kein Wahl-/Parteiprogramm vor — sie werden hier nicht aufgeführt:
{{ antrag.fehlende_programme | join(", ") }}.
</div>
{% endif %}
<div class="v3-fraktionen">
{% for fs in antrag.fraktions_scores %}
{% if fs.fraktion | lower not in _missing_set %}
<div class="v3-fraktion">
<div class="v3-fraktion-head">
<span class="v3-fraktion-name">{{ fs.fraktion }}</span>
@ -229,10 +248,12 @@
</details>
{% endfor %}
</div>
{% endif %}{# fraktion nicht in fehlende_programme #}
{% endfor %}
</div>
</section>
{% endif %}
{% endif %}{# _all_missing-else #}
{% endif %}{# fraktions_scores #}
{# 7 ── Verbesserungsvorschläge — volle Breite, nicht kollabiert ───── #}
{% if antrag.verbesserungen %}