feat: Fragebogen mit adaptiver Logik (Schritt 2 der Baureihenfolge)

Ebene 2 ("Antrag stellen") als einseitiges Formular statt mehrseitigem
Assistenten — jede zusätzliche Seite kostet Zeit, und laut Spezifikation
wird ein Antrag umgangen, wenn er länger als fünf Minuten dauert.

- GET /antraege/neu: Fragebogen-Formular (Abschnitte A-D exakt nach
  Spezifikation). Adaptive Folgefragen (C2: welche Art von Entscheidung,
  C3: welche Art von Erkennung) werden rein per CSS :has() ein-/
  ausgeblendet, kein JavaScript nötig — visuell mit Chromium-Screenshots
  verifiziert (unchecked vs. checked).
- POST /antraege: legt an und reicht direkt ein (entwurf->eingereicht in
  einem Schritt, kein Zwischenspeichern als Entwurf für v1). Die
  antworten-JSON nutzt exakt dieselben Fakten-Schlüssel wie
  rules/*.yaml (b1-b7, c1-c5, c2_folge, c3_art) — Schritt 3 kann sie
  direkt auswerten, ohne Felder umzubenennen. "Unsicher" wird bewusst
  NICHT zu "ja" normalisiert (das ist eine Auswertungsregel für Schritt
  3, keine Speicherregel) — der Antrag hält fest, was der Mitarbeiter
  tatsächlich geantwortet hat.
- GET /antraege: eigene Anträge (Ebene 2 sieht nur eigene, nicht die
  des ganzen Mandanten — dafür neue Store-Methode
  ListAntraegeForUser, getrennt von ListAntraegeForAccount für den
  späteren Ebene-3-Posteingang).
- GET /antraege/{id}: Detail, fremder Antrag liefert 404 (nicht 403,
  gleiches Muster wie überall sonst im Projekt).
- betreiber-Rolle wird von allen Antrags-Routen weggeleitet (Ebene 5
  ist technisch getrennt vom Mandantenbereich).

rules/OPEN.md Punkt 3 (fehlende Fragebogen-Unterscheidung für die
"verboten"-Varianten) damit geklärt: c3_art existiert jetzt mit den
bereits in rules/kivo_einstufung.yaml erwarteten Werten.

Volle Testsuite inkl. echter Postgres-Tests grün; End-to-End gegen
einen laufenden Server verifiziert (Antrag anlegen, antworten-JSON in
der DB korrekt, Detail-/Listenansicht, Mandantentrennung).
This commit is contained in:
noroot
2026-08-28 23:09:24 +02:00
parent 344a33805a
commit db9c5b7482
14 changed files with 719 additions and 25 deletions

View File

@@ -35,24 +35,17 @@ das lässt offen, ob `auftragsdaten` (zwischen `intern` und
ein (Kundendaten sollten aus denselben Gründen wie Geschäftsgeheimnisse
nicht zum Training verwendet werden) — **Annahme, nicht bestätigt.**
## 3. Genaue Fragebogen-Fakten für "verboten" (KI-VO Art. 5)
## 3. Genaue Fragebogen-Fakten für "verboten" (KI-VO Art. 5) — ERLEDIGT
Fragebogen-Abschnitt C stellt nur eine einzelne Frage (C3: "Erkennt
oder bewertet es Emotionen, Verhalten oder biometrische Merkmale?")
ohne Folgefragen, die zwischen den drei in der Bewertungslogik
genannten Auslösern für "verboten" unterscheiden:
- Emotionserkennung am Arbeitsplatz
- Social Scoring
- Biometrische Kategorisierung
`rules/kivo_einstufung.yaml` geht davon aus, dass Phase 2 (Fragebogen)
für C3 eine Folgefrage ergänzt, die zwischen diesen dreien (und "keins
davon") unterscheidet — analog zur bereits spezifizierten Folgefrage
bei C2. Die Feldnamen `c3_art` und dessen Werte
(`emotionserkennung_arbeitsplatz`, `social_scoring`,
`biometrische_kategorisierung`) sind Platzhalter, bis Phase 2 das
festlegt.
~~Fragebogen-Abschnitt C stellt nur eine einzelne Frage...~~ Mit Phase 2
(Fragebogen, `internal/web/templates/antrag_neu.html`) gelöst: C3 hat
jetzt eine Folgefrage `c3_art` mit den Werten
`emotionserkennung_arbeitsplatz`, `social_scoring`,
`biometrische_kategorisierung` und `keine` — exakt die Werte, die
`rules/kivo_einstufung.yaml` bereits erwartete. Feldnamen sind damit
final, nicht mehr Platzhalter. **Weiterhin offen:** ob diese drei
Varianten fachlich vollständig sind (deckt das wirklich alle "verboten"-
Fälle aus Art. 5 KI-VO ab?) — das war nie Teil dieser Klärung.
## 4. `loeschfrist_max_tage` — konkrete Fristen je Datenklasse