L9 Lotse – KI-Assistent: Transkription, Berichtsentwurf, Vollständigkeitsprüfung, Freigabeprinzip (Services)

- OpenAI-kompatible Transkription + Processor transcription (done/failed/disabled, AiGeneration, Notiz aus Sprachnotiz)
- Claude-Lotse (strukturierte Ausgabe, Refusal/Fallback), Datenminimierung, Vorschläge in content.lotse
- Vollständigkeitsprüfung (Regeln + KI-Hinweise mit Deep-Link), Einstellungen, KI-Protokoll
- Freigabeprinzip: Submit eines Lotse-Entwurfs nur mit Prüfbestätigung (serverseitig)
- Migration lotse_address_form (TenantSettings)

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-14 17:19:38 +02:00
co-authored by Claude Opus 5
parent d5c1221ab5
commit ff5c57f276
39 changed files with 1815 additions and 7 deletions
+16
View File
@@ -0,0 +1,16 @@
import type { ProviderMeta, TranscriptionProvider } from "@/server/ai/providers";
/** Deterministic transcription provider for tests/demos: fixed text or configured error. */
export class FakeTranscriptionProvider implements TranscriptionProvider {
readonly name = "fake";
readonly model = "fake-whisper-1";
readonly calls: Array<{ mimeType: string; size: number; language: string }> = [];
constructor(private readonly opts: { text?: string; fail?: Error } = {}) {}
async transcribe(input: { bytes: Buffer; mimeType: string; language: "de" | "en" }): Promise<{ text: string; meta: ProviderMeta }> {
this.calls.push({ mimeType: input.mimeType, size: input.bytes.byteLength, language: input.language });
if (this.opts.fail) throw this.opts.fail;
return { text: this.opts.text ?? "Heizkörper im Bad getauscht.", meta: { provider: this.name, model: this.model } };
}
}