Ansprechpartner am Vorgang hinterlegen #9

Closed
opened 2026-08-22 23:28:52 +00:00 by florian.wilde · 3 comments
Owner

Problem

Die Sachstandsanfrage kann namentlich anreden, bekommt den Ansprechpartner
mangels Feld aber nicht übergeben. Herausgeht ein „Sehr geehrte Damen und
Herren" an eine Sachbearbeiterin, mit der man vorige Woche telefoniert hat.

Steht in der Roadmap unter 1.2 — Weniger tippen.

Warum das mehr ist als Höflichkeit

Ein namentlich adressiertes Schreiben landet bei der Person, die den
Vorgang kennt, statt in der Poststelle. Beim Bezirk Oberfranken ist das der
Unterschied zwischen zwei Wochen und zwei Monaten.

Was ich will

  • Am Vorgang lässt sich ein Ansprechpartner hinterlegen — vorzugsweise als
    Verweis auf einen bestehenden Kontakt, damit Anschrift und E-Mail
    mitkommen
  • Die Sachstandsanfrage und alle anderen Schreiben zum Vorgang nutzen ihn
    für Anrede und Anschrift
  • Wechselt der Ansprechpartner, bleibt nachvollziehbar, wer es vorher war

Akzeptanzkriterien

  • Am Vorgang lässt sich ein Kontakt als Ansprechpartner auswählen
  • Die Sachstandsanfrage redet ihn namentlich an
  • Ohne hinterlegten Ansprechpartner bleibt es bei „Sehr geehrte Damen
    und Herren" — kein leerer Name im Brief
  • Der Ansprechpartner erscheint auf der Vorgangsseite, damit man vor
    dem Anruf weiß, wen man fragt

Hinweis

Migration nötig. Bündelung mit den übrigen Punkten aus Roadmap 1.2 prüfen.

Zusammenhang

Verbessert die Qualität aller Schreiben aus „Schreiben erzeugen: Word-Datei,
Ablage in der Akte, Wiedervorlage", ist aber unabhängig davon umsetzbar.

Angelegt auf Zuruf im Chat, nicht aus dem Dashboard — bitte in Nebula
nachtragen.

## Problem Die Sachstandsanfrage kann namentlich anreden, bekommt den Ansprechpartner mangels Feld aber nicht übergeben. Herausgeht ein „Sehr geehrte Damen und Herren" an eine Sachbearbeiterin, mit der man vorige Woche telefoniert hat. Steht in der Roadmap unter **1.2 — Weniger tippen**. ## Warum das mehr ist als Höflichkeit Ein namentlich adressiertes Schreiben landet bei der Person, die den Vorgang kennt, statt in der Poststelle. Beim Bezirk Oberfranken ist das der Unterschied zwischen zwei Wochen und zwei Monaten. ## Was ich will - Am Vorgang lässt sich ein Ansprechpartner hinterlegen — vorzugsweise als Verweis auf einen bestehenden Kontakt, damit Anschrift und E-Mail mitkommen - Die Sachstandsanfrage und alle anderen Schreiben zum Vorgang nutzen ihn für Anrede und Anschrift - Wechselt der Ansprechpartner, bleibt nachvollziehbar, wer es vorher war ## Akzeptanzkriterien - [ ] Am Vorgang lässt sich ein Kontakt als Ansprechpartner auswählen - [ ] Die Sachstandsanfrage redet ihn namentlich an - [ ] Ohne hinterlegten Ansprechpartner bleibt es bei „Sehr geehrte Damen und Herren" — kein leerer Name im Brief - [ ] Der Ansprechpartner erscheint auf der Vorgangsseite, damit man vor dem Anruf weiß, wen man fragt ## Hinweis Migration nötig. Bündelung mit den übrigen Punkten aus Roadmap 1.2 prüfen. ## Zusammenhang Verbessert die Qualität aller Schreiben aus „Schreiben erzeugen: Word-Datei, Ablage in der Akte, Wiedervorlage", ist aber unabhängig davon umsetzbar. _Angelegt auf Zuruf im Chat, nicht aus dem Dashboard — bitte in Nebula nachtragen._
florian.wilde added the in-arbeit label 2026-08-23 13:32:30 +00:00
florian.wilde started working 2026-08-23 13:32:45 +00:00
Author
Owner

🤖 Claude Code hat mit der Umsetzung begonnen.

  • Branch: feat/9-ansprechpartner-am-vorgang
  • Verstanden als: Am Vorgang wird ein bestehender Kontakt als Ansprechpartner benannt; Schreiben zum Vorgang reden ihn namentlich an und adressieren an seine Anschrift — ohne benannten Ansprechpartner bleibt alles wie bisher.
  • Geplantes Vorgehen:
    • Kleine Migration: ansprechpartnerId am Vorgang, Verweis auf einen Kontakt derselben Akte. Wird der Kontakt gelöscht, bleibt der Vorgang stehen und der Verweis fällt weg (SetNull) — ein Vorgang darf nicht an einem Kontakt hängen.
    • Anrede als reine Funktion mit Test: „Sehr geehrte Frau Schmitt," nur, wenn ein Name da ist, sonst unverändert „Sehr geehrte Damen und Herren". Ein halb gefüllter Name darf nie zu „Sehr geehrte Frau ," werden.
    • Auswahl im Vorgangsformular, Anzeige auf der Vorgangsseite mit Durchwahl und E-Mail — damit man vor dem Anruf weiß, wen man fragt.
    • Sachstandsanfrage und die übrigen Schreiben zum Vorgang nutzen ihn für Anrede und Anschrift.

Zum Punkt „nachvollziehbar, wer es vorher war": Das übernimmt das vorhandene Protokoll — jede Änderung am Vorgang wird mit Vorher/Nachher festgehalten. Ich prüfe beim Bauen, dass der Wechsel dort auch mit Namen und nicht nur mit der Id erscheint; sonst ist es nicht nachvollziehbar, sondern nur protokolliert.

Zeiterfassung läuft.

🤖 **Claude Code hat mit der Umsetzung begonnen.** - Branch: `feat/9-ansprechpartner-am-vorgang` - Verstanden als: Am Vorgang wird ein bestehender Kontakt als Ansprechpartner benannt; Schreiben zum Vorgang reden ihn namentlich an und adressieren an seine Anschrift — ohne benannten Ansprechpartner bleibt alles wie bisher. - Geplantes Vorgehen: - Kleine Migration: `ansprechpartnerId` am Vorgang, Verweis auf einen Kontakt derselben Akte. Wird der Kontakt gelöscht, bleibt der Vorgang stehen und der Verweis fällt weg (`SetNull`) — ein Vorgang darf nicht an einem Kontakt hängen. - Anrede als reine Funktion mit Test: „Sehr geehrte Frau Schmitt," nur, wenn ein Name da ist, sonst unverändert „Sehr geehrte Damen und Herren". Ein halb gefüllter Name darf nie zu „Sehr geehrte Frau ," werden. - Auswahl im Vorgangsformular, Anzeige auf der Vorgangsseite mit Durchwahl und E-Mail — damit man vor dem Anruf weiß, wen man fragt. - Sachstandsanfrage und die übrigen Schreiben zum Vorgang nutzen ihn für Anrede und Anschrift. Zum Punkt „nachvollziehbar, wer es vorher war": Das übernimmt das vorhandene Protokoll — jede Änderung am Vorgang wird mit Vorher/Nachher festgehalten. Ich prüfe beim Bauen, dass der Wechsel dort auch mit **Namen** und nicht nur mit der Id erscheint; sonst ist es nicht nachvollziehbar, sondern nur protokolliert. Zeiterfassung läuft.
florian.wilde worked for 58 minutes 2026-08-23 14:31:20 +00:00
florian.wilde added zu-testen and removed in-arbeit labels 2026-08-23 14:32:26 +00:00
Author
Owner

✅ Umsetzung abgeschlossen — bereit zum Testen.

Was geändert wurde

  • Ansprechpartner am Vorgang: Im Vorgangsformular unter „Wer ist am Zug?" lässt sich ein Kontakt aus dem Verzeichnis wählen. Auf der Vorgangsseite steht er dann mit Organisation, Durchwahl und E-Mail — verlinkt auf den Kontakt, damit man vor dem Anruf weiß, wen man fragt.
  • Die Sachstandsanfrage redet ihn an: „Sehr geehrte Frau Sachs," statt „Sehr geehrte Damen und Herren". Sein Name steht über der Behörde im Empfängerblock, damit die Poststelle den Brief zur Person sortiert.
  • Auch das Schreiben aus dem Editor (/schreiben/neu?art=SACHSTAND) übernimmt Anrede, Empfängername und Anschrift aus dem Kontakt.
  • Anrede am Kontakt: neues Feld „Frau" / „Herr" / keine Angabe. Geraten wird nie — ohne Angabe wird mit vollem Namen angeredet („Sehr geehrte(r) Kim Berger,"). Eine falsch geratene Anrede fällt dem Empfänger sofort auf und kostet genau die Aufmerksamkeit, die man gewinnen wollte.
  • Ohne Ansprechpartner ändert sich nichts: Es bleibt bei „Sehr geehrte Damen und Herren", und die Vorgangsseite sagt das auch, statt ein leeres Feld zu zeigen.
  • Der Wechsel ist nachvollziehbar: Er steht mit Namen im Protokoll, nicht mit der internen Kennung.

Ein Fund am Rande: Die Sachstandsanfrage konnte namentlich anreden — sie bekam den Namen nur nie übergeben. entwurf.ts lud einen der verknüpften Kontakte (take: 1) und verwarf ihn wieder. Genau der tote Zweig, den das Issue beschreibt. Und der Schreiben-Editor verwarf bisher die Empfängeranschrift aus dem Entwurf, weil sein State immer leer startete.

Zur Migration: eine kleine, wie angekündigt. prisma migrate diff wollte zum fünften Mal die Trigramm-Indizes der Volltextsuche löschen — Zeilen wieder von Hand entfernt, und nach dem Anwenden geprüft, dass dokument_absender_trgm und vorgang_titel_trgm noch stehen.

Geänderte Dateien

  • src/lib/kontakte/anrede.ts (neu)
  • prisma/schema.prisma, prisma/migrations/20260823153000_ansprechpartner/
  • src/lib/vorgaenge/sachstandsanfrage.ts, src/lib/schreiben/entwurf.ts
  • src/server/actions/vorgaenge.ts, src/lib/validierung/vorgaenge.ts, src/lib/validierung/kontakte.ts
  • src/components/vorgaenge/vorgangs-formular.tsx, src/components/kontakte/kontakt-formular.tsx, src/components/schreiben/schreiben-editor.tsx
  • src/app/(app)/vorgaenge/[id]/page.tsx, src/app/(app)/vorgaenge/neu/page.tsx, src/app/(app)/kontakte/[id]/bearbeiten/page.tsx, src/app/(app)/schreiben/neu/page.tsx
  • tests/anrede.test.ts (neu), tests/vorgaenge.test.ts, e2e/ansprechpartner.spec.ts (neu)

So testest du es

  1. git switch feat/9-ansprechpartner-am-vorgang, dann npm run db:migrate (oder npx prisma migrate deploy) und npm run dev
  2. Kontakte → einen Kontakt bearbeiten, bei Anrede „Frau" oder „Herr" setzen, speichern.
  3. Vorgänge → einen Vorgang öffnen, unten unter Angaben bearbeiten bei Ansprechpartner diesen Kontakt wählen, speichern.
    Erwartet: Oben im Kopf steht er jetzt mit Organisation, Telefon und E-Mail.
  4. Den Vorgang auf Wartet auf andere stellen und Sachstandsanfrage erzeugen klicken.
    Erwartet: Der Text beginnt mit dem Namen des Ansprechpartners, darunter die Behörde; die Anrede lautet „Sehr geehrte Frau …,".
  5. Denselben Vorgang über Dokumente → Schreiben als Sachstandsanfrage erzeugen (oder /schreiben/neu?art=SACHSTAND&vorgangId=…).
    Erwartet: Empfängername und Anschrift sind vorbelegt, die Anrede steht im Text.
  6. Gegenprobe: Ansprechpartner wieder auf „– keiner benannt –" stellen, speichern.
    Erwartet: Auf der Vorgangsseite steht „Keiner benannt — Schreiben gehen an ‚Sehr geehrte Damen und Herren'", und die Sachstandsanfrage verwendet wieder die allgemeine Anrede.
  7. Protokoll öffnen und den letzten Eintrag zum Vorgang aufklappen.
    Erwartet: Beim Feld ansprechpartner stehen alter und neuer Name, nicht die interne Kennung.
  8. Gegenprobe zur Anrede: einen Kontakt ohne Anrede als Ansprechpartner setzen.
    Erwartet: „Sehr geehrte(r) Vorname Nachname," — es wird nicht geraten.

Geprüft: 9 Einheitstests, 5 End-to-End-Tests. Volle Suite grün — 635 Unit-Tests, 117 End-to-End-Tests, Typecheck und Lint sauber.

Aufgewendete Zeit: 00:58
Pull Request: #20

Nach Freigabe: /issue-freigabe 9

✅ **Umsetzung abgeschlossen — bereit zum Testen.** <!-- claude-status branch: feat/9-ansprechpartner-am-vorgang pr: 20 zeit_sekunden: 3516 --> **Was geändert wurde** - **Ansprechpartner am Vorgang**: Im Vorgangsformular unter „Wer ist am Zug?" lässt sich ein Kontakt aus dem Verzeichnis wählen. Auf der Vorgangsseite steht er dann mit Organisation, Durchwahl und E-Mail — verlinkt auf den Kontakt, damit man vor dem Anruf weiß, wen man fragt. - **Die Sachstandsanfrage redet ihn an**: „Sehr geehrte Frau Sachs," statt „Sehr geehrte Damen und Herren". Sein Name steht **über** der Behörde im Empfängerblock, damit die Poststelle den Brief zur Person sortiert. - **Auch das Schreiben aus dem Editor** (`/schreiben/neu?art=SACHSTAND`) übernimmt Anrede, Empfängername und Anschrift aus dem Kontakt. - **Anrede am Kontakt**: neues Feld „Frau" / „Herr" / keine Angabe. **Geraten wird nie** — ohne Angabe wird mit vollem Namen angeredet („Sehr geehrte(r) Kim Berger,"). Eine falsch geratene Anrede fällt dem Empfänger sofort auf und kostet genau die Aufmerksamkeit, die man gewinnen wollte. - **Ohne Ansprechpartner ändert sich nichts**: Es bleibt bei „Sehr geehrte Damen und Herren", und die Vorgangsseite sagt das auch, statt ein leeres Feld zu zeigen. - **Der Wechsel ist nachvollziehbar**: Er steht mit **Namen** im Protokoll, nicht mit der internen Kennung. **Ein Fund am Rande:** Die Sachstandsanfrage konnte namentlich anreden — sie bekam den Namen nur nie übergeben. `entwurf.ts` lud einen der verknüpften Kontakte (`take: 1`) und verwarf ihn wieder. Genau der tote Zweig, den das Issue beschreibt. Und der Schreiben-Editor verwarf bisher die Empfängeranschrift aus dem Entwurf, weil sein State immer leer startete. **Zur Migration:** eine kleine, wie angekündigt. `prisma migrate diff` wollte zum fünften Mal die Trigramm-Indizes der Volltextsuche löschen — Zeilen wieder von Hand entfernt, und nach dem Anwenden geprüft, dass `dokument_absender_trgm` und `vorgang_titel_trgm` noch stehen. **Geänderte Dateien** - `src/lib/kontakte/anrede.ts` *(neu)* - `prisma/schema.prisma`, `prisma/migrations/20260823153000_ansprechpartner/` - `src/lib/vorgaenge/sachstandsanfrage.ts`, `src/lib/schreiben/entwurf.ts` - `src/server/actions/vorgaenge.ts`, `src/lib/validierung/vorgaenge.ts`, `src/lib/validierung/kontakte.ts` - `src/components/vorgaenge/vorgangs-formular.tsx`, `src/components/kontakte/kontakt-formular.tsx`, `src/components/schreiben/schreiben-editor.tsx` - `src/app/(app)/vorgaenge/[id]/page.tsx`, `src/app/(app)/vorgaenge/neu/page.tsx`, `src/app/(app)/kontakte/[id]/bearbeiten/page.tsx`, `src/app/(app)/schreiben/neu/page.tsx` - `tests/anrede.test.ts` *(neu)*, `tests/vorgaenge.test.ts`, `e2e/ansprechpartner.spec.ts` *(neu)* **So testest du es** 1. `git switch feat/9-ansprechpartner-am-vorgang`, dann `npm run db:migrate` (oder `npx prisma migrate deploy`) und `npm run dev` 2. **Kontakte** → einen Kontakt bearbeiten, bei **Anrede** „Frau" oder „Herr" setzen, speichern. 3. **Vorgänge** → einen Vorgang öffnen, unten unter *Angaben bearbeiten* bei **Ansprechpartner** diesen Kontakt wählen, speichern. Erwartet: Oben im Kopf steht er jetzt mit Organisation, Telefon und E-Mail. 4. Den Vorgang auf **Wartet auf andere** stellen und **Sachstandsanfrage erzeugen** klicken. Erwartet: Der Text beginnt mit dem Namen des Ansprechpartners, darunter die Behörde; die Anrede lautet „Sehr geehrte Frau …,". 5. Denselben Vorgang über **Dokumente → Schreiben** als Sachstandsanfrage erzeugen (oder `/schreiben/neu?art=SACHSTAND&vorgangId=…`). Erwartet: Empfängername und Anschrift sind vorbelegt, die Anrede steht im Text. 6. Gegenprobe: Ansprechpartner wieder auf „– keiner benannt –" stellen, speichern. Erwartet: Auf der Vorgangsseite steht „Keiner benannt — Schreiben gehen an ‚Sehr geehrte Damen und Herren'", und die Sachstandsanfrage verwendet wieder die allgemeine Anrede. 7. **Protokoll** öffnen und den letzten Eintrag zum Vorgang aufklappen. Erwartet: Beim Feld `ansprechpartner` stehen alter und neuer **Name**, nicht die interne Kennung. 8. Gegenprobe zur Anrede: einen Kontakt ohne Anrede als Ansprechpartner setzen. Erwartet: „Sehr geehrte(r) Vorname Nachname," — es wird nicht geraten. **Geprüft:** 9 Einheitstests, 5 End-to-End-Tests. Volle Suite grün — 635 Unit-Tests, 117 End-to-End-Tests, Typecheck und Lint sauber. **Aufgewendete Zeit:** 00:58 **Pull Request:** #20 Nach Freigabe: `/issue-freigabe 9`
Author
Owner

🚀 Freigegeben und nach main übernommen.

  • Merge-Commit: 98d1338
  • Pull Request: #20 (gemergt)
  • Fassung: v1.9.0 (getaggt)
  • Gesamtaufwand: 00:58

Issue wird geschlossen.

🚀 **Freigegeben und nach `main` übernommen.** <!-- claude-status merge: 98d1338eaebfaf62062b10558dd21aaea54e33b0 pr: 20 zeit_sekunden: 3516 --> - Merge-Commit: `98d1338` - Pull Request: #20 (gemergt) - Fassung: **v1.9.0** (getaggt) - Gesamtaufwand: 00:58 Issue wird geschlossen.
florian.wilde removed the zu-testen label 2026-08-23 14:56:30 +00:00
Sign in to join this conversation.
1 Participants
Notifications
Total Time Spent: 58 minutes
florian.wilde
58 minutes
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: florian.wilde/betreuungs-cockpit#9