{# ───────────────────────────────────────────────────────────────────── v3/screens/antrag_detail.html — Bürger:innen-Modus, single column Override-Strategie: extendet v2/screens/antrag_detail.html und ersetzt nur `block main` komplett. body_scripts erbt via super(), so dass alle v2-JS-Handler (vote, merkliste, share, comments, history, matrix-modal) ohne Code-Duplikation weiterlaufen — sie hängen sich an DOM-IDs (v2-vote-up, v2-merkliste-btn, v2-comments-list, …), die wir in der neuen Layout-Reihenfolge wiederverwenden. Reihenfolge (single column): 1. Metadaten/Titel 2. Zusammenfassung 3. Bewertung (Score xl + Empfehlung daneben + Begründung darunter) 4. Merken / Bewertung treffend 5. Matrix 5×5 6. Programm-Treue (default-closed Klappmechanismus pro Programm) 7. Verbesserungsvorschläge (volle Breite, nicht kollabiert) 8. Abstimmungsergebnis 9. Rest: PDF/Teilen/Neu/Historie + Stärken/Schwächen + Konsistenz + Marker-Legende + News + Kommentare ───────────────────────────────────────────────────────────────────── #} {% extends "v2/screens/antrag_detail.html" %} {% from "v2/components/score_hero.html" import score_hero %} {% from "v2/components/matrix_mini.html" import matrix_mini %} {% from "v2/components/quote_card.html" import quote_card %} {% from "v2/components/redline.html" import redline %} {% block head_extra %} {{ super() }} {% endblock %} {% block main %} {% if error is defined and error %}

Antrag nicht gefunden

{{ error }}

← Zurück zur Übersicht

{% elif antrag is defined and antrag %}

← Zurück zur Übersicht

{# 1 ── Metadaten + Titel ─────────────────────────────────────────── #}
{{ antrag.bundesland | default("") }} {% if antrag.drucksache %} · Drs. {{ antrag.drucksache }}{% endif %} {% if antrag.typ %} · {{ antrag.typ }}{% endif %} {% if antrag.wahlperiode %} · {{ antrag.wahlperiode }}. Wahlperiode{% endif %} {% if antrag.datum %} · eingebracht {{ antrag.datum }}{% endif %}

{{ antrag.title | default("Antrag") }}

{% if antrag.parteien or antrag.analysiert %} {% endif %} {% if antrag.themen %}
{% for t in antrag.themen %}{{ t }}{% endfor %}
{% endif %}
{# Merken + Bewertung treffend — direkt unter den Metadaten ──────── #}
Bewertung treffend?
{# 2 ── Zusammenfassung + Kernpunkte ─────────────────────────────── #} {% if antrag.zusammenfassung or antrag.kernpunkte %}

Zusammenfassung

{% if antrag.zusammenfassung %}

{{ antrag.zusammenfassung }}

{% endif %} {% if antrag.kernpunkte %}
Kernforderungen
    {% for kp in antrag.kernpunkte %}
  • {{ kp }}
  • {% endfor %}
{% endif %}
{% endif %} {# 3 ── Bewertung ─────────────────────────────────────────────────── #}
{% set s = (antrag.score | default(0)) | float %}
{{ "%.1f"|format(s) }}/10
{% if antrag.verdict_title %}
{{ antrag.verdict_title }}
{% if antrag.konfidenz %} Bewertungs-Sicherheit: {{ antrag.konfidenz }} {% endif %}
{% endif %}
{% if antrag.verdict_body %}

{{ antrag.verdict_body }}

{% endif %}
{# 3b ── Stärkster + Schwächster Wert (nach Bewertung, vor User-Aktionen) #} {% if antrag.staerkster_wert or antrag.staerken or antrag.schwaechster_wert or antrag.schwaechen %}
{% if antrag.staerkster_wert and antrag.staerkster_wert.text %}

Stärkster Wert{% if antrag.staerkster_wert.titel %} — {{ antrag.staerkster_wert.titel }}{% endif %}

{{ antrag.staerkster_wert.text }}

{% elif antrag.staerken %}

Stärken

    {% for s in antrag.staerken %}
  • {{ s }}
  • {% endfor %}
{% endif %} {% if antrag.schwaechster_wert and antrag.schwaechster_wert.text %}

Schwächster Wert{% if antrag.schwaechster_wert.titel %} — {{ antrag.schwaechster_wert.titel }}{% endif %}

{{ antrag.schwaechster_wert.text }}

{% elif antrag.schwaechen %}

Schwächen

    {% for s in antrag.schwaechen %}
  • {{ s }}
  • {% endfor %}
{% endif %}
{% endif %} {# 5 ── Matrix 5×5 (volle Profi-Variante, mit Klick-Modal) ────────── #} {% if antrag.matrix %}

Matrix 2.0 · 25 Felder

{% if antrag.schwerpunkt %}
Schwerpunkt-Felder: {% for f in antrag.schwerpunkt %}{{ f }}{% endfor %}
{% endif %} {{ matrix_mini(antrag.matrix) }}
{% endif %} {# 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 %}

Programm-Treue pro Fraktion

Programm-Treue nicht verfügbar. 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.
{% else %}

Programm-Treue pro Fraktion

{% if antrag.fehlende_programme %}
Hinweis: Für folgende Parteien lag kein Wahl-/Parteiprogramm vor — sie werden hier nicht aufgeführt: {{ antrag.fehlende_programme | join(", ") }}.
{% endif %}
{% for fs in antrag.fraktions_scores %} {% if fs.fraktion | lower not in _missing_set %}
{{ fs.fraktion }} {% if fs.ist_antragsteller %}Antragsteller:in{% endif %} {% if fs.ist_regierung %}Regierungsfraktion{% endif %}
{% for prog_key, prog_label in [("wahlprogramm","Wahlprogramm"),("parteiprogramm","Parteiprogramm")] %} {% set p = fs[prog_key] %} {% set p_score = p.score | float %}
{{ prog_label }} {{ "%.0f"|format(p_score) }}/10
{% if p.begruendung %}

{{ p.begruendung }}

{% endif %} {% if p.zitate %}
{% for z in p.zitate %} {{ quote_card(z.text, z.source, True, False, z.pdf_href) }} {% endfor %}
{% else %}

Keine wörtlich passenden Stellen im {{ prog_label }} gefunden. Die Bewertung beruht auf inhaltlicher Auslegung — entweder benennt das Programm das konkrete Thema nicht explizit, oder es bleibt zu allgemein, um wörtlich zugeordnet zu werden.

{% endif %}
{% endfor %}
{% endif %}{# fraktion nicht in fehlende_programme #} {% endfor %}
{% endif %}{# _all_missing-else #} {% endif %}{# fraktions_scores #} {# 7 ── Verbesserungsvorschläge — volle Breite, nicht kollabiert ───── #} {% if antrag.verbesserungen %}

Verbesserungsvorschläge

{% for v in antrag.verbesserungen %}
{% if antrag.verbesserungen | length > 1 %}
Vorschlag {{ loop.index }} von {{ antrag.verbesserungen | length }}
{% endif %} {% if v.segments %} {{ redline(original=v.original | default(""), segments=v.segments) }} {% else %} {{ redline(original=v.original | default(""), vorschlag=v.vorschlag | default("")) }} {% endif %} {% if v.begruendung %}

{{ v.begruendung }}

{% endif %}
{% endfor %}
{% elif antrag.redline and antrag.redline.segments %}

Verbesserungsvorschlag

{{ redline(segments=antrag.redline.segments) }}
{% endif %} {# 8 ── Abstimmungsergebnis (Plenum + namentlich) ──────────────────── #} {% if antrag.plenum_votes %}

Abstimmungsergebnis

{# Konsistenz-Hinweis: GWÖ-Empfehlung vs tatsaechlicher Beschluss #} {% set _state = consistency_state(antrag.verdict_title, antrag.plenum_votes) %} {% set _decisive = decisive_outcome(antrag.plenum_votes) %} {% if _state %}
{% if _state == 'conflict' %}Mehrheit gegen GWÖ-Empfehlung{% else %}Mehrheit deckt sich mit GWÖ-Empfehlung{% endif %} — Empfohlen: {{ antrag.verdict_title }}; Beschluss: {{ _decisive | capitalize }}.
{% endif %} {% set ergebnis_color = { "angenommen":"#2da44e","abgelehnt":"#cf222e","überwiesen":"#0969da", "zurückgezogen":"#8250df","bestätigt":"#2da44e","sammel":"#0969da", } %} {% for v in antrag.plenum_votes %}
{{ v.ergebnis | capitalize }}{% if v.einstimmig %} · einstimmig{% endif %} {% if v.quelle_url %} {{ v.quelle_protokoll }} ↗ {% else %} {{ v.quelle_protokoll }} {% endif %}
{% if v.fraktionen_ja or v.fraktionen_nein or v.fraktionen_enthaltung %} {% set _n_ja = v.fraktionen_ja | length %} {% set _n_nein = v.fraktionen_nein | length %} {% set _n_enth = v.fraktionen_enthaltung | length %} {% set _n_total = _n_ja + _n_nein + _n_enth %} {% if _n_total > 0 %}
{% if _n_ja %}
{% endif %} {% if _n_enth %}
{% endif %} {% if _n_nein %}
{% endif %}
{{ _n_ja }}/{{ _n_total }} Fraktionen Ja · {{ _n_nein }} Nein · {{ _n_enth }} Enth.
{% endif %}
{% if v.fraktionen_ja %}
Ja: {% for f in v.fraktionen_ja %} {% set _opp = opportunismus_score(f, antrag.fraktions_scores) %} {{ f }}{% if _opp is not none %}!{% endif %} {% endfor %}
{% endif %} {% if v.fraktionen_nein %}
Nein: {% for f in v.fraktionen_nein %} {% set _wp = heuchelei_score(f, antrag.fraktions_scores) %} {{ f }}{% if _wp is not none %}{% endif %} {% endfor %}
{% endif %} {% if v.fraktionen_enthaltung %}
Enth.: {% for f in v.fraktionen_enthaltung %}{{ f }}{% endfor %}
{% endif %}
{% endif %}
{% endfor %}
Quelle: Plenarprotokoll · automatisch extrahiert
{% endif %} {% if antrag.abstimmungsverhalten %} {% set aw = antrag.abstimmungsverhalten %}

Namentliche Abstimmung

{{ aw.protokoll | default("") }}{% if aw.datum %} · {{ aw.datum }}{% endif %}
{% if aw.abstimmung %}
{{ aw.abstimmung.ja | default(0) }} Ja · {{ aw.abstimmung.nein | default(0) }} Nein · {{ aw.abstimmung.enthaltung | default(0) }} Enthaltung
{% endif %}
{% endif %} {# ════════════════ 9 ── REST-Block ════════════════════════════════════ #}
{# Ähnliche Anträge — per JS via /api/assessment/similar geladen #}

Ähnliche Anträge

Lade …
{# Teilen — nur fuer angemeldete User; initAuth() blendet via #v2-share-block ein. #} {# Aktions-Links: PDF, Original, JSON, Permalink — unter Teilen #} {# News-Box (per JS gefuellt) — eine Nachricht, max 9 Zeilen #} {# Neu analysieren #}
{# 9d Bewertungs-Historie #}

Bewertungs-Historie

Lade…
{# 9i Kommentare #}

Kommentare

Lade…
{# v3-rest #} {# ════════════════ Modals ═════════════════════════════════════════════ #} {# Matrix-Feld-Info-Modal — gleiche IDs wie v2, JS aus super() greift #}
{# .v3-page #} {% endif %}{# antrag #} {% endblock %} {% block body_scripts %} {{ super() }} {% endblock %}