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": "Emergency",
"sync": "Sync",
"profile": "Profile",
"approvalsBadge": "{count} time entries to approve"
"approvalsBadge": "{count} time entries to approve",
"lotse": "Lotse"
},
"connection": {
"online": "Online",
+171 -2
View File
@@ -89,6 +89,8 @@
"use": "Usage",
"enabled": "Use Lotse in this business",
"enabledHint": "Switched off: no report drafts, no summaries, voice notes without transcription.",
"chatEnabled": "Lotse chat for technicians",
"chatEnabledHint": "Technicians write or talk to the Lotse. Actions (status, times, material, notes) are only executed after the technician confirms them.",
"addressForm": "Lotse form of address",
"addressFormHint": "Applies consistently to all Lotse texts in this business.",
"address": {
@@ -114,7 +116,9 @@
"order": "Work order title, description and scope",
"notes": "Activity notes and voice note texts",
"work": "Checklist, material with deviation reasons, photo comments, working times",
"audio": "For transcription: the audio file of the voice note"
"audio": "For transcription: the audio file of the voice note",
"chat": "Lotse chat: the technician's messages (phone numbers, e-mail and postal addresses replaced) and the order data above. Customer names and contact data only as placeholders – values are inserted only in the answer on the technician's device.",
"chatAudio": "Voice input in the chat: the recording for transcription (not stored)"
},
"notSentTitle": "Not sent",
"notSent": {
@@ -152,7 +156,172 @@
"voice_summary": "Voice note summary",
"transcription": "Transcription",
"import_extraction": "Order import",
"completeness_check": "Completeness check"
"completeness_check": "Completeness check",
"lotse_chat": "Lotse chat"
}
},
"chat": {
"title": "Lotse chat",
"intro": "Briefly write or say what is done – e.g. “Order finished, storage tank installed, 2 hrs, 1 filter fitted”. The Lotse proposes actions. Nothing is saved before confirmation.",
"context": "Order {number} · {title}",
"noContext": "No order context",
"ask": "Ask the Lotse",
"input": "Message to the Lotse",
"send": "Send",
"sending": "Lotse is thinking …",
"newChat": "New chat",
"userLabel": "Own message",
"lotseLabel": "Lotse",
"empty": "No messages yet.",
"notConfigured": "The Lotse is not set up. The office can configure the AI provider.",
"offline": "No connection. The Lotse needs internet – your input is kept.",
"chipsLabel": "Suggested answers",
"linksLabel": "Complete directly",
"confirmAll": "Confirm all ({count})",
"mic": {
"record": "Speak",
"stop": "Stop recording",
"recording": "Recording · {time}",
"transcribing": "Converting to text …",
"unavailable": "Voice input is not set up.",
"denied": "No access to the microphone.",
"unsupported": "Voice input is not supported on this device.",
"failed": "Conversion to text failed. Please type.",
"hint": "Check the text before sending."
},
"card": {
"confirm": "Confirm",
"edit": "Edit",
"discard": "Discard",
"saveConfirm": "Apply and confirm",
"cancel": "Cancel",
"busy": "Running …",
"validUntil": "Valid until {time}",
"status": {
"proposed": "Open – please confirm",
"confirmed": "Done",
"discarded": "Discarded",
"expired": "Expired",
"failed": "Not executed"
},
"kind": {
"transition_work_order": "Change status",
"book_time": "Book time",
"record_material": "Record material",
"add_note": "Save note",
"suggest_report_fields": "Report suggestion"
},
"action": {
"accept": "Accept order {number}",
"start_travel": "Start travel to {number}",
"start_work": "Start work on {number}",
"pause": "Pause {number}",
"resume": "Resume work on {number}",
"complete": "Technically complete order {number}"
},
"switchFrom": "The running clock of {number} will be paused.",
"completeHint": "Your own clock is stopped. Missing mandatory items prevent completion.",
"order": "Order {number}",
"timeLine": "{date} · {from}–{to} · {duration} hrs",
"timeType": {
"work": "Working time",
"travel": "Travel",
"return_travel": "Return travel",
"material_procurement": "Fetching material"
},
"type": "Type",
"date": "Date",
"from": "From",
"to": "To",
"reason": "Reason",
"note": "Note",
"approvalHint": "Counts after approval by the team lead or office.",
"pendingApproval": "Submitted for approval",
"planned": "Planned item",
"additional": "Additional material",
"name": "Name",
"quantity": "Quantity",
"unit": "Unit",
"deviationReason": "Reason for deviation",
"noteKind": "Note type",
"text": "Text",
"reportFields": "Suggestions for the {type}",
"reportType": {
"daily": "daily report",
"completion": "completion report"
},
"reportHint": "Appears in the report as “Suggestion from the Lotse” and is accepted or discarded there.",
"openReport": "Open report",
"field": {
"workPerformed": "Work performed",
"deviations": "Deviations",
"additionalWork": "Additional work",
"openItems": "Open items",
"nextSteps": "Next steps",
"hints": "Notes"
}
},
"noteKind": {
"work_done": "Work done",
"deviation": "Deviation",
"problem": "Problem",
"additional_work": "Additional work",
"not_executable": "Not executable",
"follow_up": "Follow-up",
"recommendation": "Recommendation",
"customer_note": "Customer note",
"general": "General"
},
"system": {
"failed": "Not executed ({number}): {reason}",
"stopped": "“Confirm all” stopped – {remaining, plural, one {# card is} other {# cards are}} still open.",
"rounds_exceeded": "That was too much at once. Please write shorter or in steps.",
"turn_budget": "That was too much at once. Please write shorter or in steps.",
"refusal": "The Lotse cannot propose anything for this.",
"provider_failed": "The Lotse is not reachable right now. Please try again later.",
"proposals_ready": "Proposals are ready. Please check and confirm.",
"empty": "No answer received. Please rephrase."
},
"links": {
"order": "Open order",
"report": "Open report",
"myTime": "Open my times",
"materials": "Open material",
"otherOrder": "Open running order",
"runningSession": "A colleague's clock is still running"
},
"errors": {
"generic": "That did not work. Please try again.",
"not_found": "Not found.",
"forbidden": "You lack the permission.",
"disabled": "The Lotse is switched off for this company.",
"chat_disabled": "The Lotse chat is switched off for this company.",
"not_configured": "The Lotse is not set up.",
"provider_failed": "The Lotse is not reachable right now. Please try again later.",
"budget_exceeded": "The company's monthly AI quota is used up.",
"invalid": "Please check your input.",
"conflict": "Changed in the meantime. Please reload.",
"expired": "Proposal expired (after 30 minutes). Please ask again.",
"already_decided": "This proposal has already been handled.",
"tampered": "The proposal was changed and not executed.",
"blocked": "Mandatory items are missing.",
"offline": "No connection – nothing sent.",
"overlap": "The period overlaps with recorded time.",
"too_old": "Entries can only be added up to 7 days back.",
"in_future": "Times in the future cannot be booked.",
"too_long": "An entry may be at most 16 hours long.",
"end_before_start": "The end is before the start.",
"work_order_status": "Not possible in the current order status.",
"other_session_running": "A clock is still running on another order.",
"transition_not_allowed": "This status change is not possible right now.",
"transition_forbidden": "You lack the permission.",
"not_editable": "The report has been submitted and can no longer be changed.",
"reason_required": "The reason is missing.",
"use_billing_overview": "Only possible via the billing overview."
},
"unavailable": {
"title": "Lotse chat not available",
"back": "Back to overview"
}
}
}