diff --git a/app/main.py b/app/main.py index b82e0cd..188aa7c 100644 --- a/app/main.py +++ b/app/main.py @@ -151,11 +151,13 @@ async def index(request: Request): parlament_names = { bl.code: bl.parlament_name for bl in alle_bundeslaender() } + from .models import MATRIX_LABELS return templates.TemplateResponse("index.html", { "request": request, "app_name": settings.app_name, "bundeslaender": bl_list, "parlament_names": parlament_names, + "matrix_labels": MATRIX_LABELS, }) diff --git a/app/templates/index.html b/app/templates/index.html index dcc88d4..2aeb638 100644 --- a/app/templates/index.html +++ b/app/templates/index.html @@ -1700,55 +1700,72 @@ const matrixData = {}; (item.gwoeMatrix || []).forEach(m => { matrixData[m.field] = m; }); + // GWÖ-Matrix Definitionen (aus models.py) const rowLabels = { - 'A': 'Lieferant:innen', - 'B': 'Finanzen', - 'C': 'Führung/Verwaltung', - 'D': 'Bürger:innen', - 'E': 'Gesellschaft/Natur' + 'A': 'Ausgelagerte Betriebe, Lieferant:innen', + 'B': 'Finanzpartner:innen, Steuerzahler:innen', + 'C': 'Politische Führung, Verwaltung', + 'D': 'Bürger:innen und Wirtschaft', + 'E': 'Staat, Gesellschaft und Natur' + }; + const rowTooltips = { + 'A': 'Externe Beschaffung, Lieferketten, Dienstleister:innen', + 'B': 'Umgang mit öffentlichen Mitteln, Haushalt, Geldgeber:innen', + 'C': 'Mandatsträger:innen, Mitarbeitende, Ehrenamtliche', + 'D': 'Wirkung innerhalb der Grenzen, Daseinsvorsorge', + 'E': 'Wirkung über die Grenzen hinaus, Zukunft' }; - - // Spaltenüberschriften der GWÖ-Matrix (5 Werte) const colLabels = { - 1: 'Menschen-würde', - 2: 'Solidarität', - 3: 'Ökol. Nachh.', - 4: 'Soz. Gerecht.', + 1: 'Menschenwürde', + 2: 'Solidarität', + 3: 'Ökol. Nachhaltigkeit', + 4: 'Soz. Gerechtigkeit', 5: 'Transparenz' }; const colFull = { 1: 'Menschenwürde', - 2: 'Solidarität', + 2: 'Solidarität', 3: 'Ökologische Nachhaltigkeit', 4: 'Soziale Gerechtigkeit', 5: 'Transparenz & Mitbestimmung' }; - - let matrixTableHtml = ''; - for (let col = 1; col <= 5; col++) matrixTableHtml += ``; + const colPrinzip = { + 1: 'Rechtsstaatsprinzip — Werden Grundrechte geschützt? Rechtliche Gleichstellung?', + 2: 'Gemeinnutz — Wird das Gemeinwohl gefördert? Mehrwert für die Gemeinschaft?', + 3: 'Umwelt-Verantwortung — Klimaschutz? Ressourcenschonung? Biodiversität?', + 4: 'Sozialstaatsprinzip — Gerechte Verteilung? Daseinsvorsorge? Soziale Absicherung?', + 5: 'Demokratie — Bürgerbeteiligung? Offenlegung? Demokratische Prozesse?' + }; + const fieldLabels = {{ matrix_labels | tojson }}; + const ratingExplain = (r) => r >= 4 ? '++ stark fördernd' : r >= 1 ? '+ fördernd' : r === 0 ? '○ neutral' : r >= -3 ? '− widersprechend' : '−− stark widersprechend'; + + let matrixTableHtml = '
${colLabels[col]}
'; + for (let col = 1; col <= 5; col++) matrixTableHtml += ``; matrixTableHtml += ''; - + ['A', 'B', 'C', 'D', 'E'].forEach(row => { - matrixTableHtml += ``; + matrixTableHtml += ``; for (let col = 1; col <= 5; col++) { const field = `${row}${col}`; const entry = matrixData[field]; + const fullLabel = fieldLabels[field] || field; if (entry) { const cssClass = entry.rating > 0 ? 'positive' : (entry.rating < 0 ? 'negative' : 'neutral'); - matrixTableHtml += ``; + const tooltip = `${field}: ${fullLabel}\n\n${entry.aspect || ''}\n\nBewertung: ${entry.rating} (${ratingExplain(entry.rating)})`; + matrixTableHtml += ``; } else { - matrixTableHtml += ''; + matrixTableHtml += ``; } } matrixTableHtml += ''; }); matrixTableHtml += '
${colLabels[col]}
${row}: ${rowLabels[row]}
${row}: ${rowLabels[row]}${entry.symbol}${entry.symbol}
'; - - // Zusätzlich die Detail-Liste der bewerteten Felder + + // Detail-Liste der bewerteten Felder mit vollen Beschreibungen const matrixDetailHtml = (item.gwoeMatrix || []).map(m => ` -
- ${m.field}: ${m.label} - ${m.symbol} +
+ ${m.field} ${fieldLabels[m.field] || m.label}: ${m.aspect || ''} + ${m.symbol} (${m.rating})
`).join('');