gwoe-antragspruefer/docs/archive/DOKUMENTATION-2026-03-24.md
Dotty Dotter 45379a2639 #62 Phase 1+3: ADRs + Doku-Struktur in webapp/docs/
Architektur-Entscheidung aus Issue #62: Diátaxis-Framework für Doku-
Pflege ohne Drift. Pflege im Repo, ADRs immutable, Stale-Snapshots
explizit als Archiv markiert.

Phase 1 — Architecture Decision Records:

- docs/README.md — Diátaxis-Index, Erklärung was wo dokumentiert wird
- docs/adr/README.md — ADR-Workflow + Index
- docs/adr/template.md — Vorlage für neue ADRs
- docs/adr/0001-llm-citation-binding.md — Issue #60 Doppel-Fix-Story
  (A=ENUM-Anker, B=server-seitige Rekonstruktion, warum Option C verworfen)
- docs/adr/0002-adapter-architecture.md — ParlamentAdapter-Basisklasse
  + Registry, Klassen vs. Strategy vs. Modul-pro-Adapter
- docs/adr/0003-citation-property-tests.md — Sub-D Strategie, warum
  Property-Test gegen echte PDFs statt Schema-Tests oder Online-Verify
- docs/adr/0004-deployment-workflow.md — Docker-Compose + Volumes
  Standard-Workflow + SN-XML-Sonderpfad + Container-UTC-Gotcha

Phase 3 — Stale Doku archiviert:

- DOKUMENTATION.md (24.März, Skript-Architektur vor Webapp-Migrate)
  → docs/archive/DOKUMENTATION-2026-03-24.md
- STATUS-2026-03-28.md (Tagesstand-Snapshot)
  → docs/archive/STATUS-2026-03-28.md
- README.md (28.März, listet nur NRW-Adapter, vor 16 weiteren BLs)
  → docs/archive/README-2026-03-28.md
- docs/archive/README.md erklärt warum die Files da sind und warum
  niemand sie überschreiben oder ersetzen sollte

Plus neue Top-Level-README.md im Project-Root (außerhalb git, da
project-root kein Repo ist) als Folder-Index für den User.

CLAUDE.md ergänzt um Doku-Sektion mit Verweis auf docs/adr/.

Phase 2 (mkdocs Setup) folgt separat — braucht eine Docker-Image-
Erweiterung, die ich nicht autark einrollen will ohne Decision.

Tests: 194/194 grün (keine Code-Änderung).

Refs: #62
2026-04-10 01:38:03 +02:00

382 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# GWÖ-Antragsprüfer — Dokumentation
*Stand: 24. März 2026, 22:15*
---
## 0. Datenbank
Alle Bewertungen werden in einer SQLite-Datenbank gespeichert: `gwoe-antraege.db`
```bash
# DB initialisieren (einmalig)
sqlite3 gwoe-antraege.db < scripts/init-db.sql
# Übersicht aller Anträge
sqlite3 -header -column gwoe-antraege.db "SELECT * FROM v_antraege_uebersicht;"
# Statistik nach Fraktion
sqlite3 -header -column gwoe-antraege.db "SELECT * FROM v_statistik_fraktionen;"
# Themen-Ranking
sqlite3 -header -column gwoe-antraege.db "SELECT * FROM v_themen_ranking;"
```
Schema: siehe `scripts/init-db.sql` und `prompt-gwoe-antragspruefer-v4.md`
---
## 1. Batch-Workflow
### Vollautomatisiert
```bash
# Einzelner Antrag
./scripts/process_single.sh 18-18102
# Batch aus Datei
./scripts/gwoe-batch.sh --batch neue-antraege.txt
# Alle neu rendern
./scripts/gwoe-batch.sh --render-all
```
### Manuell (Schritt für Schritt)
```bash
# 1. PDF herunterladen
curl -sL "https://www.landtag.nrw.de/portal/WWW/dokumentenarchiv/Dokument/MMD18-18102.pdf" \
-o antraege/18-18102.pdf
# 2. Text extrahieren
pdftotext -layout antraege/18-18102.pdf antraege/18-18102.txt
# 3. LLM analysieren (manuell oder via API)
# → JSON in assessments.json einfügen
# 4. data.ts aktualisieren
cat assessments.json > quarto-report/src/data.ts # vereinfacht
# 5. Quarto rendern
cd quarto-report && npm run generate
cd reports && quarto render gwoe-18-18102.qmd --to pdf
# 6. Mit Original mergen
pdftk quarto-report/reports/gwoe-18-18102.pdf antraege/18-18102.pdf \
cat output output/gwoe-bericht-18-18102.pdf
```
### API-Aufruf (Claude)
```bash
curl -sS https://api.anthropic.com/v1/messages \
-H "Content-Type: application/json" \
-H "x-api-key: $ANTHROPIC_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-d '{
"model": "claude-sonnet-4-20250514",
"max_tokens": 4096,
"system": "<SYSTEM_PROMPT>",
"messages": [{"role": "user", "content": "<USER_PROMPT>"}]
}'
```
---
## 1. Überblick
Der GWÖ-Antragsprüfer bewertet parlamentarische Anträge (aktuell: NRW Landtag) systematisch nach drei Dimensionen:
1. **GWÖ-Treue (0-10):** Übereinstimmung mit der Gemeinwohl-Ökonomie Matrix 2.0
2. **Wahlprogrammtreue (0-10):** Konsistenz mit dem NRW-Wahlprogramm 2022 der einreichenden Fraktion(en) und der Fraktionen in Regierungsverantwortung
3. **Parteiprogrammtreue (0-10):** Konsistenz mit dem Grundsatzprogramm der einreichenden Fraktion(en) und der Fraktionen in Regierungsverantwortung
Das Tool generiert professionelle PDF-Berichte mit dem offiziellen ECOnGOOD-Branding.
---
## 2. Gewählte Matrix: V2.0 für Gemeinden
### Warum nicht Matrix 5.1?
Die **GWÖ-Matrix 5.1** ist für Unternehmen konzipiert mit Berührungsgruppen wie "Kund:innen", "Eigentümer:innen", "Mitarbeitende". Diese passen nicht zu parlamentarischen Anträgen.
### Warum nicht Matrix 2.1.A?
Die Matrix 2.1.A ist für die "öffentliche Hand" allgemein. Die **Matrix 2.0 für Gemeinden** bietet einen etwas weiteren Blick und ist kompakter formuliert — ideal für parlamentarische Analyse.
### Die Matrix 2.0 für Gemeinden
| Aspekt | Beschreibung |
|--------|--------------|
| **Struktur** | 5×5 (25 Felder) |
| **Fokus** | Kommunale Gebietskörperschaften |
| **Zielgruppe** | Kommunalpolitik, Landesanträge |
| **Staatsprinzipien** | ja (verfassungsrechtlich verankert) |
### Die 5×5-Struktur
**Spalten (Werte des Gemeinwohls + Staatsprinzipien):**
| Nr | Wert | Staatsprinzip |
|----|------|---------------|
| 1 | Menschenwürde | Rechtsstaatsprinzip |
| 2 | Solidarität | Gemeinnutz |
| 3 | Ökologische Nachhaltigkeit | Umwelt-Verantwortung |
| 4 | Soziale Gerechtigkeit | Sozialstaatsprinzip |
| 5 | Transparenz & Mitbestimmung | Demokratie |
**Zeilen (Berührungsgruppen):**
| Code | Gruppe | Beschreibung |
|------|--------|--------------|
| A | Ausgelagerte Betriebe, Lieferant:innen, Dienstleister:innen | Externe Beschaffung, Lieferketten |
| B | Finanzpartner:innen, Geldgeber:innen, Steuerzahler:innen | Haushalt, Finanzpolitik |
| C | Politische Führung, Verwaltung, Ehrenamtliche | Mandatsträger:innen, Mitarbeitende |
| D | Bürger:innen und Wirtschaft | Interne Wirkung, Daseinsvorsorge |
| E | Staat, Gesellschaft und Natur | Überregionale/langfristige Wirkung |
### Relevanz für Landesanträge
Die meisten Parlamentsanträge betreffen:
- **D-Zeile:** Wirkung auf Bürger:innen und Wirtschaft im Land
- **E-Zeile:** Überregionale oder langfristige Auswirkungen
**Prinzip:** D (intern) hat Vorrang vor E (extern).
---
## 3. Programmtreue-Bewertung
### Zwei Dimensionen
Anträge werden sowohl gegen das **Wahlprogramm** als auch gegen das **Grundsatzprogramm** der Fraktionen geprüft:
| Partei | Wahlprogramm | Grundsatzprogramm |
|--------|--------------|-------------------|
| CDU | NRW 2022 | "In Freiheit leben" (2024) |
| SPD | NRW 2022 | Hamburger Programm (2007) |
| GRÜNE | NRW 2022 | "...zu achten und zu schützen..." (2020) |
| FDP | NRW 2022 | "Verantwortung für die Freiheit" (2012) |
| AfD | NRW 2022 | "Programm für Deutschland" (2016) |
### Bewertungsskala
| Score | Bedeutung |
|-------|-----------|
| 9-10 | Vollständige Übereinstimmung |
| 7-8 | Hohe Übereinstimmung |
| 5-6 | Partielle Übereinstimmung |
| 3-4 | Geringe Übereinstimmung |
| 1-2 | Widerspricht Teilaspekten |
| 0 | Vollständiger Widerspruch |
---
## 4. Bewertungsskala GWÖ
| Punkte | Stufe | Beschreibung |
|--------|-------|--------------|
| 7-10 | **Vorbildlich** | Innovative Maßnahmen, weitreichende Verbesserungen |
| 4-6 | **Erfahren** | Erkennbare Verbesserungen, gute Ergebnisse |
| 2-3 | **Fortgeschritten** | Erste Maßnahmen, erste Erfolge |
| 1 | **Erste Schritte** | Erstes Engagement |
| 0 | **Basislinie** | Nur gesetzliche Anforderungen |
| negativ | **Widerspruch** | Aktiver Widerspruch zu GWÖ-Werten |
### Matrix-Feldwertung
Für jedes berührte Feld im Antrag:
- `++` (+2/+3): Stark fördernd
- `+` (+1): Fördernd
- `○` (0): Neutral
- `` (-1): Widersprechend
- `` (-2/-3): Stark widersprechend
---
## 5. ECOnGOOD Corporate Design
### Branding (aus CD Manual 2024)
Das Layout folgt strikt dem offiziellen ECOnGOOD Corporate Design Manual (Juni 2024).
**Farbpalette (Primärfarben aus Logo):**
| Farbe | Hex | CMYK | Pantone | Verwendung |
|-------|-----|------|---------|------------|
| **Dunkelgrau** | `#5a5a5a` | 0-0-0-80 | 425 U | Fließtext, H1-Überschriften |
| **Grün** | `#889e33` | 40-10-90-20 | 583 U | Positive Werte, H3, Akzente |
| **Blau** | `#009da5` | 100-10-40-00 | 320 U | Hauptfarbe, H2, Links, Linien |
| **Hellgrau** | `#bfbfbf` | 0-0-0-30 | 421 U | Hintergründe, Fußzeilen |
**Typografie:**
- **Primär:** Avenir (light, roman, black)
- **Fallback:** Arial
- **Web:** Avenir
- **Überschriften:**
- H1: Avenir black, 22pt, Dunkelgrau
- H2: Avenir black, 16pt, Blau oder Grün
- H3: Avenir black, 12pt, Blau oder Grün
- **Fließtext:** Avenir roman, 10pt, Dunkelgrau
- **Hervorhebungen:** Avenir black
**Logo:** ECOnGOOD-Logo (`econgood-logo.png`) — zwei stilisierte Pusteblumen (Blau + Grün)
**Boxen (CD-konform):**
- Flächig farbig (Grün oder Blau) mit weißem Text
- Oder mit farbiger Outline und farbigem Text
- Keine abgerundeten Ecken (arc=0pt)
**Tabellen:**
- Titelleiste in Markenfarbe (Blau)
- Weißer Text in Titelleiste, fett, Großbuchstaben
- Innere horizontale Linien max. 1pt
- 3mm Abstand zwischen Text und Linie
**Layout:**
- Offenes, leichtes Design
- Reinweißer Hintergrund
- Kräftige Farben (aktiv)
- Genug Weißraum zwischen Elementen
### Empfehlungs-Symbole
| Empfehlung | Symbol | Farbe | Hex |
|------------|--------|-------|-----|
| Uneingeschränkt unterstützen | `[++]` | Grün | `#889e33` |
| Unterstützen mit Änderungen | `[+]` | Blau | `#009da5` |
| Überarbeiten | `[!]` | Orange | `#F7941D` |
| Ablehnen | `[X]` | Rot | `#d00000` |
---
## 6. Technische Umsetzung
### Stack
- **TypeScript** — Datentypen, Generator
- **Quarto** — Markdown → PDF (via LuaLaTeX)
- **TikZ** — Grafische Elemente (Score-Balken)
- **pdftk** — PDF-Merge (Bewertung + Original-Antrag)
### Projektstruktur
```
quarto-report/
├── src/
│ ├── types.ts # Datentypen, Matrix-Labels
│ ├── data.ts # Testbewertungen
│ └── generate-qmd.ts # Quarto-Generator
├── reports/ # Generierte .qmd + .pdf
├── econgood-logo.png # Logo (aus CD Manual)
└── package.json
```
### Workflow
1. LLM analysiert Antrag → JSON-Ausgabe
2. JSON → TypeScript Assessment-Objekt
3. Generator erzeugt `.qmd` (Quarto Markdown)
4. Quarto rendert → PDF
5. pdftk merged Bewertung + Original-Antrag
---
## 7. Kontext-Dateien
Im Ordner `kontext/`:
| Datei | Beschreibung |
|-------|--------------|
| `gwoe-matrix-2.0.md` | Matrix 2.0 für Gemeinden — vollständige Dokumentation |
| `gwoe-matrix-2.0-gemeinden.pdf` | Offizielles Matrix-PDF |
| `gwoe-arbeitsbuch-gemeinden-2.0.pdf` | Arbeitsbuch zur Matrix |
| `parteiprogramme.md` | Kurzreferenz Wahlprogramme + Grundsatzprogramme |
| `cdu-grundsatzprogramm-2024.pdf` | CDU "In Freiheit leben" |
| `spd-hamburger-programm-2007.pdf` | SPD Hamburger Programm |
| `gruene-grundsatzprogramm-2020.pdf` | Grüne Grundsatzprogramm |
| `fdp-grundsatzprogramm-2012.pdf` | FDP "Verantwortung für die Freiheit" |
| `afd-grundsatzprogramm-2016.pdf` | AfD "Programm für Deutschland" |
| `wahlprogramme-nrw-2022.md` | NRW Wahlprogramme 2022 |
---
## 8. Getestete Anträge
| Drucksache | Titel | GWÖ | Empfehlung |
|------------|-------|-----|------------|
| 18/18081 | Schlechte-Kita-Gesetz stoppen (SPD) | 8/10 | Uneingeschränkt unterstützen |
| 18/18088 | Iran-Solidarität (alle) | 9/10 | Uneingeschränkt unterstützen |
| 18/18094 | Versorgungssicherheit/Fracking (AfD) | 1/10 | Ablehnen |
| 18/18099 | Kultur-Schecks (CDU/Grüne) | 6/10 | Unterstützen mit Änderungen |
| 18/18104 | KI-Korrektur (FDP) | 6/10 | Unterstützen mit Änderungen |
---
## 9. Gendering
**Standard:** `:` (Doppelpunkt) statt `*` (Sternchen)
Beispiele:
- Bürger:innen
- Lieferant:innen
- Mitarbeiter:innen
---
## 10. Quellen
- **GWÖ-Matrix 2.0:** https://germany.econgood.org/wp-content/uploads/sites/8/2024/04/Matrix-Gemeinwohl-Bilanzierung-Gemeinden-V2.0.pdf
- **Arbeitsbuch 2.0:** https://austria.econgood.org/wp-content/uploads/sites/7/2022/01/Arbeitsbuch-Gemeinden_2.pdf
- **ECOnGOOD CD Manual:** Corporate Design/2024_ECOnGOOD_Manual_DE_Juni_02.pdf
- **GWÖ Deutschland:** https://germany.econgood.org
- **Kontakt:** Gemeinde@ecogood.org
---
## 11. Changelog
| Datum | Version | Änderung |
|-------|---------|----------|
| 24.03.2026 | v4 | Matrix 2.0 statt 2.1.A, Parteiprogrammtreue ergänzt, `:` beim Gendern, ECOnGOOD-Logo |
| 23.03.2026 | v3 | Umstellung auf Matrix 2.1.A (5×5), GWÖ-Branding |
| 23.03.2026 | v2 | Vollständiger Kontext (Matrix + Wahlprogramme) |
| 23.03.2026 | v1 | Initiale Version mit Matrix 5.1 |
---
*Projektordner:* `~/Nextcloud/dotty/projekte/2026-03-23 GWÖ-Antragsprüfer _WIP_/`
*Telegram:* https://t.me/c/3823618505/4247
---
## Session 28.03.2026 (Nachmittag/Abend)
### Security
- CSP, X-Frame-Options, X-XSS-Protection etc. als Middleware
- /docs deaktiviert
### v5-Prompt mit Verbesserungsvorschlägen
Neues Format:
```json
{
"original": "Zitat aus Antrag",
"vorschlag": "Verbesserter Text mit **Markierungen**",
"begruendung": "GWÖ-Begründung"
}
```
### UI-Erweiterungen
- Partei-Filter (Dropdown)
- Tag-Wolke mit Multi-Select
- Partei-Durchschnitte in Stats-Bar
- Kombinierte Filter (Score + Partei)
### Infrastruktur-Fixes
- DB-Persistenz: Dockerfile kopiert data/ nicht mehr
- JSON-Import deaktiviert
- Retry-Logik für LLM (3 Versuche)
### Repository
- https://repo.toppyr.de/tobias/gwoe-antragspruefer
- MIT License
- Vollständige Dokumentation