L16 Lotse-Chat für Monteure: mobile Chat-Seite, Aktionskarten, Mikrofon, Einstieg und Einstellung

/m/lotse mit Verlauf, Chips, Sprungzielen, Aktionskarten (Bestätigen/Bearbeiten/Verwerfen),
Spracheingabe mit editierbarem Transkript und Offline-Hinweis; Navigationseintrag, Button
„Lotse fragen“ im Auftragsdetail, Schalter und Datenfluss in /settings/lotse, Audit-Labels.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-15 18:57:20 +02:00
co-authored by Claude Opus 5
parent 68f4eb32dc
commit 63baaf29df
15 changed files with 1196 additions and 15 deletions
+2 -1
View File
@@ -6,7 +6,8 @@
"emergency": "Notdienst",
"sync": "Sync",
"profile": "Profil",
"approvalsBadge": "{count} Zeiten zur Freigabe"
"approvalsBadge": "{count} Zeiten zur Freigabe",
"lotse": "Lotse"
},
"connection": {
"online": "Online",
+171 -2
View File
@@ -89,6 +89,8 @@
"use": "Verwendung",
"enabled": "Lotse für diesen Betrieb verwenden",
"enabledHint": "Ausgeschaltet: keine Berichtsentwürfe, keine Zusammenfassungen, Sprachnotizen ohne Transkription.",
"chatEnabled": "Lotse-Chat für Monteure",
"chatEnabledHint": "Monteure schreiben oder sprechen mit dem Lotsen. Aktionen (Status, Zeiten, Material, Notizen) werden nur nach Bestätigung durch den Monteur ausgeführt.",
"addressForm": "Anrede des Lotsen",
"addressFormHint": "Gilt einheitlich für alle Texte des Lotsen in diesem Betrieb.",
"address": {
@@ -114,7 +116,9 @@
"order": "Auftragstitel, Beschreibung und Leistungsumfang",
"notes": "Tätigkeitsnotizen und Texte aus Sprachnotizen",
"work": "Checkliste, Material mit Abweichungsgründen, Fotokommentare, Arbeitszeiten",
"audio": "Für die Transkription: die Audiodatei der Sprachnotiz"
"audio": "Für die Transkription: die Audiodatei der Sprachnotiz",
"chat": "Lotse-Chat: Nachrichten des Monteurs (Telefonnummern, E-Mail-Adressen und Anschriften ersetzt) und die Auftragsdaten oben. Kundennamen und Kontaktdaten nur als Platzhalter – eingesetzt wird erst in der Antwort auf dem Gerät des Monteurs.",
"chatAudio": "Spracheingabe im Chat: die Aufnahme zur Transkription (wird nicht gespeichert)"
},
"notSentTitle": "Nicht gesendet wird",
"notSent": {
@@ -152,7 +156,172 @@
"voice_summary": "Zusammenfassung Sprachnotiz",
"transcription": "Transkription",
"import_extraction": "Auftragsimport",
"completeness_check": "Vollständigkeitsprüfung"
"completeness_check": "Vollständigkeitsprüfung",
"lotse_chat": "Lotse-Chat"
}
},
"chat": {
"title": "Lotse-Chat",
"intro": "Kurz schreiben oder sprechen, was erledigt ist – z. B. „Auftrag fertig, Speicher installiert, 2 Std., 1 Filter verbaut“. Der Lotse schlägt Aktionen vor. Gespeichert wird erst nach Bestätigung.",
"context": "Auftrag {number} · {title}",
"noContext": "Ohne Auftragsbezug",
"ask": "Lotse fragen",
"input": "Nachricht an den Lotsen",
"send": "Senden",
"sending": "Lotse denkt nach …",
"newChat": "Neuer Chat",
"userLabel": "Eigene Nachricht",
"lotseLabel": "Lotse",
"empty": "Noch keine Nachrichten.",
"notConfigured": "Lotse ist nicht eingerichtet. Das Büro kann den KI-Anbieter hinterlegen.",
"offline": "Keine Verbindung. Der Lotse braucht Internet – die Eingabe bleibt erhalten.",
"chipsLabel": "Antwortvorschläge",
"linksLabel": "Direkt ergänzen",
"confirmAll": "Alle bestätigen ({count})",
"mic": {
"record": "Sprechen",
"stop": "Aufnahme beenden",
"recording": "Aufnahme läuft · {time}",
"transcribing": "Wird in Text umgewandelt …",
"unavailable": "Spracheingabe ist nicht eingerichtet.",
"denied": "Kein Zugriff auf das Mikrofon.",
"unsupported": "Spracheingabe wird auf diesem Gerät nicht unterstützt.",
"failed": "Umwandlung in Text fehlgeschlagen. Bitte tippen.",
"hint": "Text vor dem Senden prüfen."
},
"card": {
"confirm": "Bestätigen",
"edit": "Bearbeiten",
"discard": "Verwerfen",
"saveConfirm": "Übernehmen und bestätigen",
"cancel": "Abbrechen",
"busy": "Wird ausgeführt …",
"validUntil": "Gültig bis {time} Uhr",
"status": {
"proposed": "Offen – bitte bestätigen",
"confirmed": "Ausgeführt",
"discarded": "Verworfen",
"expired": "Abgelaufen",
"failed": "Nicht ausgeführt"
},
"kind": {
"transition_work_order": "Status ändern",
"book_time": "Zeit buchen",
"record_material": "Material erfassen",
"add_note": "Notiz speichern",
"suggest_report_fields": "Berichtsvorschlag"
},
"action": {
"accept": "Auftrag {number} annehmen",
"start_travel": "Anfahrt zu {number} starten",
"start_work": "Arbeit an {number} starten",
"pause": "Pause bei {number}",
"resume": "Arbeit an {number} fortsetzen",
"complete": "Auftrag {number} technisch abschließen"
},
"switchFrom": "Die laufende Uhr von {number} wird pausiert.",
"completeHint": "Die eigene Uhr wird beendet. Fehlende Pflichtangaben verhindern den Abschluss.",
"order": "Auftrag {number}",
"timeLine": "{date} · {from}–{to} Uhr · {duration} Std.",
"timeType": {
"work": "Arbeitszeit",
"travel": "Anfahrt",
"return_travel": "Rückfahrt",
"material_procurement": "Material holen"
},
"type": "Art",
"date": "Datum",
"from": "Von",
"to": "Bis",
"reason": "Grund",
"note": "Notiz",
"approvalHint": "Zählt nach Freigabe durch Teamleiter oder Büro.",
"pendingApproval": "Zur Freigabe eingereicht",
"planned": "Geplante Position",
"additional": "Zusatzmaterial",
"name": "Bezeichnung",
"quantity": "Menge",
"unit": "Einheit",
"deviationReason": "Grund der Abweichung",
"noteKind": "Art der Notiz",
"text": "Text",
"reportFields": "Vorschläge für den {type}",
"reportType": {
"daily": "Tagesbericht",
"completion": "Abschlussbericht"
},
"reportHint": "Erscheint im Bericht als „Vorschlag vom Lotsen“ und wird dort übernommen oder verworfen.",
"openReport": "Bericht öffnen",
"field": {
"workPerformed": "Ausgeführte Leistungen",
"deviations": "Abweichungen",
"additionalWork": "Zusatzarbeiten",
"openItems": "Offene Punkte",
"nextSteps": "Nächste Schritte",
"hints": "Hinweise"
}
},
"noteKind": {
"work_done": "Erledigte Arbeit",
"deviation": "Abweichung",
"problem": "Problem",
"additional_work": "Zusatzarbeit",
"not_executable": "Nicht ausführbar",
"follow_up": "Nacharbeit",
"recommendation": "Empfehlung",
"customer_note": "Hinweis vom Kunden",
"general": "Allgemein"
},
"system": {
"failed": "Nicht ausgeführt ({number}): {reason}",
"stopped": "„Alle bestätigen“ gestoppt – {remaining, plural, one {# Karte ist} other {# Karten sind}} noch offen.",
"rounds_exceeded": "Das war zu umfangreich. Bitte kürzer oder in Schritten schreiben.",
"turn_budget": "Das war zu umfangreich. Bitte kürzer oder in Schritten schreiben.",
"refusal": "Dazu kann der Lotse nichts vorschlagen.",
"provider_failed": "Lotse ist gerade nicht erreichbar. Bitte später erneut versuchen.",
"proposals_ready": "Vorschläge liegen bereit. Bitte prüfen und bestätigen.",
"empty": "Keine Antwort erhalten. Bitte anders formulieren."
},
"links": {
"order": "Auftrag öffnen",
"report": "Bericht öffnen",
"myTime": "Meine Zeiten öffnen",
"materials": "Material öffnen",
"otherOrder": "Laufenden Auftrag öffnen",
"runningSession": "Uhr eines Kollegen läuft noch"
},
"errors": {
"generic": "Das hat nicht geklappt. Bitte erneut versuchen.",
"not_found": "Nicht gefunden.",
"forbidden": "Dafür fehlt die Berechtigung.",
"disabled": "Lotse ist für diesen Betrieb ausgeschaltet.",
"chat_disabled": "Der Lotse-Chat ist für diesen Betrieb ausgeschaltet.",
"not_configured": "Lotse ist nicht eingerichtet.",
"provider_failed": "Lotse ist gerade nicht erreichbar. Bitte später erneut versuchen.",
"budget_exceeded": "Das monatliche KI-Kontingent des Betriebs ist aufgebraucht.",
"invalid": "Bitte Eingaben prüfen.",
"conflict": "Inzwischen geändert. Bitte neu laden.",
"expired": "Vorschlag abgelaufen (nach 30 Minuten). Bitte neu anfragen.",
"already_decided": "Dieser Vorschlag ist schon erledigt.",
"tampered": "Der Vorschlag wurde verändert und nicht ausgeführt.",
"blocked": "Pflichtangaben fehlen.",
"offline": "Keine Verbindung – nichts gesendet.",
"overlap": "Der Zeitraum überschneidet sich mit einer erfassten Zeit.",
"too_old": "Nachträge sind nur 7 Tage rückwirkend möglich.",
"in_future": "Zeiten in der Zukunft können nicht gebucht werden.",
"too_long": "Ein Eintrag darf höchstens 16 Stunden lang sein.",
"end_before_start": "Das Ende liegt vor dem Beginn.",
"work_order_status": "Im aktuellen Auftragsstatus nicht möglich.",
"other_session_running": "Auf einem anderen Auftrag läuft noch die Uhr.",
"transition_not_allowed": "Dieser Statuswechsel ist gerade nicht möglich.",
"transition_forbidden": "Dafür fehlt die Berechtigung.",
"not_editable": "Der Bericht ist eingereicht und kann nicht mehr geändert werden.",
"reason_required": "Der Grund fehlt.",
"use_billing_overview": "Nur über die Abrechnungsübersicht möglich."
},
"unavailable": {
"title": "Lotse-Chat nicht verfügbar",
"back": "Zur Übersicht"
}
}
}