Skip to content

Feature: Folge-Mails bestehenden Vorgängen zuordnen

Verwandte Spec

Erweitert spec-phase-3-ai-triage-implementierung (Thread-Notiz) um kontakt-/referenzbasierte Zuordnung ohne neuen Entwurf.

Summary

  • Eingehende Folge- oder Änderungs-Mails werden einer bestehenden Anfrage zugeordnet, statt einen zweiten Entwurf anzulegen.
  • Anfrage bleibt Root-Vorgang; Angebots-/Rechnungsnummern dienen nur als Erkennungshinweis.
  • Eindeutige Treffer: automatisch. Mehrdeutige Treffer: Vorschlag im Posteingang, kein neuer Entwurf.

Problem / Motivation

  • Aktuell erzeugt die KI bei gleicher Absender-Mail ohne gemeinsame conversation_id oft einen neuen Entwurf (ANF-…-0003 / 0004).
  • Telefon-/manuell angelegte Anfragen haben keinen Mail-Thread; Ergänzungen kommen später als neue Conversation.
  • Gewünscht: Zuordnung zur bereits qualifizierten Anfrage inkl. Timeline-Dokumentation.

Ziele und Nicht-Ziele

  • Ziele:
    • Deterministische Zuordnung über Thread, In-Reply-To, Referenznummern, eindeutigen Kontakt.
    • Semantische KI-Entscheidung nur über serverseitig geladene Kandidaten.
    • Dokumentation in anfrage_activity_events (nicht nur Freitext-Notiz).
  • Nicht-Ziele:
    • Direkte Mail-FKs an Angebot/Rechnung.
    • Automatisches Löschen/Mergen bestehender Dubletten-Entwürfe.
    • Confidence-gesteuerte Auto-Verwerfung.

Anforderungen

  • FR-1: Thread- oder In-Reply-To-Treffer → Auto-Link, kein neuer Entwurf.
  • FR-2: Eindeutige ANF-*-/Angebots-/Rechnungsnummer mit passender Absender-/Kontaktbeziehung → Auto-Link zur Anfrage.
  • FR-3: Genau eine aktive Anfrage zum Absender/Kontakt → Auto-Link; mehrere → Vorschlag.
  • FR-4: KI darf nur aus übergebenen Kandidaten wählen; fremde IDs werden verworfen.
  • FR-5: Bei Auto-Link/Vorschlag kein createAnfrageDraft.
  • FR-6: Verknüpfung setzt inbox_messages.anfrage_id, mail_threads.anfrage_id und idempotentes mail_received-Event mit Match-Quelle.
  • FR-7: Posteingang zeigt Auto-Link bzw. Kandidaten mit „Zuordnen“ / „Trotzdem neue Anfrage“.
  • NFR-1: Alle Queries sind company_id-scoped; keine Cross-Tenant-Treffer.

Nutzer- und Systemszenarien

S-1: Ergänzung ohne gemeinsamen Thread

  • Gegeben: Qualifizierte Anfrage mit contact_email=kunde@firma.at, keine zweite aktive Anfrage.
  • Wenn: Neue Mail vom gleichen Absender mit Änderungswunsch.
  • Dann: Auto-Link zur Anfrage, Timeline-Eintrag, kein neuer Entwurf.

S-2: Mehrere offene Anfragen

  • Gegeben: Zwei aktive Anfragen desselben Absenders.
  • Wenn: Folge-Mail ohne Referenznummer.
  • Dann: Vorschlag beider Kandidaten, kein Entwurf.

S-3: Referenz auf Angebot

  • Gegeben: Mail erwähnt Angebotsnummer, Angebot ist mit Anfrage verknüpft, Absender passt.
  • Wenn: Triage läuft.
  • Dann: Auto-Link zur Anfrage (nicht zum Angebot selbst).

Akzeptanzkriterien

  • [x] AC-1 Zu FR-1 / Thread: Antwort im selben Thread erzeugt keinen zweiten Entwurf 📅 2026-07-20
  • [x] AC-2 Zu FR-2 / S-3: Angebots-/Rechnungsnummer führt zur Anfrage 📅 2026-07-20
  • [x] AC-3 Zu FR-3 / S-1/S-2: Eindeutig = Auto-Link, mehrdeutig = Suggest 📅 2026-07-20
  • [x] AC-4 Zu FR-4: KI-Kandidaten-ID außerhalb der Liste wird ignoriert 📅 2026-07-20
  • [x] AC-5 Zu FR-6: Retry erzeugt kein doppeltes mail_received-Event 📅 2026-07-20
  • [x] AC-6 Bestehende neue Anfragen ohne Treffer bleiben unverändert 📅 2026-07-20

Entscheidungen

  • D-1 Root-Objekt ist immer die Anfrage; Angebot/Rechnung nur Match-Hint.
  • D-2 Safe-Auto: nur eindeutige Treffer automatisch; sonst Vorschlag ohne Entwurf.
  • Prozess-1 Phase 3: spec-phase-3-ai-triage-implementierung
  • Prozess-1 Plan: plan-prozess-1-kundenanfrage-posteingang

Work7 · Software für Handwerksbetriebe