149 lines
4.3 KiB
Markdown
149 lines
4.3 KiB
Markdown
|
|
# GWÖ-Antragsprüfer
|
|||
|
|
|
|||
|
|
**Automatische Gemeinwohl-Bilanzierung von Parlamentsanträgen nach der GWÖ-Matrix 2.0 für Gemeinden**
|
|||
|
|
|
|||
|
|

|
|||
|
|

|
|||
|
|

|
|||
|
|
|
|||
|
|
## 🎯 Was ist das?
|
|||
|
|
|
|||
|
|
Der GWÖ-Antragsprüfer analysiert Anträge aus Landesparlamenten (aktuell NRW) und bewertet sie nach den Kriterien der **Gemeinwohl-Ökonomie (GWÖ)**:
|
|||
|
|
|
|||
|
|
- **GWÖ-Score (0-10)**: Wie gut entspricht der Antrag den GWÖ-Werten?
|
|||
|
|
- **Matrix-Zuordnung**: Welche Felder der GWÖ-Matrix werden adressiert?
|
|||
|
|
- **Programmtreue**: Passt der Antrag zu Wahl- und Parteiprogrammen?
|
|||
|
|
- **Verbesserungsvorschläge**: Konkrete Textänderungen mit GWÖ-Begründung
|
|||
|
|
|
|||
|
|
## ✨ Features
|
|||
|
|
|
|||
|
|
- 🔍 **Landtag-Suche**: Direkte Anbindung an OPAL (NRW Parlamentsdokumentation)
|
|||
|
|
- 📊 **GWÖ-Matrix-Visualisierung**: 5×5-Tabelle mit Bewertungssymbolen
|
|||
|
|
- 🏷️ **Tag-Wolke**: Filter nach Themen mit Multi-Select
|
|||
|
|
- 🎯 **Partei-Filter**: Durchschnittswerte pro Fraktion
|
|||
|
|
- 📄 **PDF-Export**: Professionelle Berichte im GWÖ-Design
|
|||
|
|
- 🔒 **Security**: CSP, CORS, Rate Limiting
|
|||
|
|
|
|||
|
|
## 🚀 Schnellstart
|
|||
|
|
|
|||
|
|
### Voraussetzungen
|
|||
|
|
|
|||
|
|
- Python 3.12+
|
|||
|
|
- Docker & Docker Compose
|
|||
|
|
- DashScope API-Key (Qwen LLM)
|
|||
|
|
|
|||
|
|
### Installation
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# Repository klonen
|
|||
|
|
git clone https://github.com/tobiasroedel/gwoe-antragspruefer.git
|
|||
|
|
cd gwoe-antragspruefer
|
|||
|
|
|
|||
|
|
# Environment-Variablen
|
|||
|
|
cp .env.example .env
|
|||
|
|
# DASHSCOPE_API_KEY eintragen
|
|||
|
|
|
|||
|
|
# Mit Docker starten
|
|||
|
|
docker compose up -d
|
|||
|
|
|
|||
|
|
# Oder lokal entwickeln
|
|||
|
|
python -m venv venv
|
|||
|
|
source venv/bin/activate
|
|||
|
|
pip install -r requirements.txt
|
|||
|
|
uvicorn app.main:app --reload
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Die App läuft auf http://localhost:8000
|
|||
|
|
|
|||
|
|
## 📁 Projektstruktur
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
webapp/
|
|||
|
|
├── app/
|
|||
|
|
│ ├── main.py # FastAPI-Endpoints
|
|||
|
|
│ ├── analyzer.py # LLM-Analyse-Logik
|
|||
|
|
│ ├── database.py # SQLite-Persistenz
|
|||
|
|
│ ├── models.py # Pydantic-Modelle
|
|||
|
|
│ ├── parlamente.py # Landtag-Adapter (OPAL)
|
|||
|
|
│ ├── report.py # PDF-Generierung
|
|||
|
|
│ ├── config.py # Settings
|
|||
|
|
│ ├── kontext/ # GWÖ-Matrix, Wahlprogramme
|
|||
|
|
│ ├── templates/ # Jinja2-HTML
|
|||
|
|
│ └── static/ # CSS, JS, Assets
|
|||
|
|
├── data/ # SQLite-DBs (Volume)
|
|||
|
|
├── reports/ # Generierte PDFs (Volume)
|
|||
|
|
├── docker-compose.yml
|
|||
|
|
├── Dockerfile
|
|||
|
|
└── requirements.txt
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 🔧 Konfiguration
|
|||
|
|
|
|||
|
|
### Environment-Variablen
|
|||
|
|
|
|||
|
|
| Variable | Beschreibung | Default |
|
|||
|
|
|----------|--------------|---------|
|
|||
|
|
| `DASHSCOPE_API_KEY` | Alibaba DashScope API-Key | (required) |
|
|||
|
|
| `LLM_MODEL_DEFAULT` | Standard-Modell | `qwen-plus-latest` |
|
|||
|
|
| `LLM_MODEL_PREMIUM` | Premium-Modell | `qwen-max` |
|
|||
|
|
|
|||
|
|
### Unterstützte Bundesländer
|
|||
|
|
|
|||
|
|
| Code | Name | Status |
|
|||
|
|
|------|------|--------|
|
|||
|
|
| NRW | Nordrhein-Westfalen | ✅ Aktiv |
|
|||
|
|
| BY | Bayern | 🔜 Geplant |
|
|||
|
|
| BW | Baden-Württemberg | 🔜 Geplant |
|
|||
|
|
|
|||
|
|
## 📊 API-Endpoints
|
|||
|
|
|
|||
|
|
| Methode | Pfad | Beschreibung |
|
|||
|
|
|---------|------|--------------|
|
|||
|
|
| GET | `/` | Web-UI |
|
|||
|
|
| GET | `/api/assessments` | Alle Bewertungen |
|
|||
|
|
| GET | `/api/assessment?drucksache=18/12345` | Einzelne Bewertung |
|
|||
|
|
| POST | `/api/analyze-drucksache` | Neue Analyse starten |
|
|||
|
|
| GET | `/api/search?q=Klima` | Interne Suche |
|
|||
|
|
| GET | `/api/search-landtag?q=Klima` | Landtag-Suche |
|
|||
|
|
| GET | `/api/assessment/pdf?drucksache=18/12345` | PDF-Download |
|
|||
|
|
|
|||
|
|
## 🧠 GWÖ-Prompt (v5)
|
|||
|
|
|
|||
|
|
Der Analyse-Prompt basiert auf:
|
|||
|
|
- **GWÖ-Matrix 2.0 für Gemeinden** (Arbeitsbuch)
|
|||
|
|
- **ECOnGOOD Corporate Design Manual 2024**
|
|||
|
|
- **Wahlprogramme** der NRW-Landtagsparteien 2022
|
|||
|
|
|
|||
|
|
Ausgabe-Format:
|
|||
|
|
- GWÖ-Score mit Matrix-Feldern und Symbolen (++/+/○/−/−−)
|
|||
|
|
- Wahlprogramm- und Parteiprogrammtreue
|
|||
|
|
- **Verbesserungsvorschläge im Redline-Format** (Original → Vorschlag → Begründung)
|
|||
|
|
- Themen-Tags für Kategorisierung
|
|||
|
|
|
|||
|
|
## 🛠️ Entwicklung
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# Tests ausführen
|
|||
|
|
pytest
|
|||
|
|
|
|||
|
|
# Linting
|
|||
|
|
ruff check app/
|
|||
|
|
|
|||
|
|
# Type-Checking
|
|||
|
|
mypy app/
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 📝 Lizenz
|
|||
|
|
|
|||
|
|
MIT License - siehe [LICENSE](LICENSE)
|
|||
|
|
|
|||
|
|
## 🙏 Credits
|
|||
|
|
|
|||
|
|
- [Gemeinwohl-Ökonomie](https://econgood.org) - Matrix und Arbeitsbücher
|
|||
|
|
- [Alibaba DashScope](https://dashscope.aliyuncs.com) - Qwen LLM API
|
|||
|
|
- [Landtag NRW](https://www.landtag.nrw.de) - OPAL-Dokumentation
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
**Entwickelt von Tobias Rödel** · [tobiasroedel.de](https://tobiasroedel.de)
|