Merge lane/lotse in feature/craftvia-mvp

Konflikt gelöst: nav.ts Icon-Imports (Siren aus L8, Compass aus L9).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-14 17:44:06 +02:00
co-authored by Claude Opus 5
65 changed files with 3297 additions and 13 deletions
+152
View File
@@ -0,0 +1,152 @@
{
"name": "Lotse",
"suggestionBadge": "Vorschlag vom Lotsen – bitte prüfen",
"draft": {
"button": "Bericht mit Lotse vorbereiten",
"again": "Neu vorbereiten",
"running": "Lotse bereitet den Bericht vor …",
"hint": "Der Lotse formuliert aus Notizen, Sprachnotizen, Zeiten, Material, Fotos und Checkliste einen Vorschlag. In den Bericht kommt nur, was bestätigt wird.",
"notConfigured": "Lotse ist nicht eingerichtet. Das Büro kann den KI-Anbieter hinterlegen.",
"done": "{count, plural, =0 {Keine Vorschläge – dafür fehlen noch Daten.} one {# Vorschlag bereit.} other {# Vorschläge bereit.}}",
"draftedAt": "Vorbereitet am {date}",
"missingTitle": "Das fehlt dem Lotsen noch",
"unsavedHint": "Ungespeicherte Änderungen im Bericht vorher speichern.",
"allDecided": "Alle Vorschläge sind bearbeitet.",
"reviewedAt": "Vorschlag geprüft und bestätigt am {date}"
},
"suggestion": {
"current": "Bisheriger Text",
"empty": "(leer)",
"text": "Vorschlag",
"accept": "Übernehmen",
"discard": "Verwerfen",
"accepted": "Übernommen",
"discarded": "Verworfen"
},
"review": {
"label": "Ich habe den Vorschlag vom Lotsen geprüft.",
"hint": "Pflicht vor dem Absenden: Dieser Bericht wurde mit dem Lotsen vorbereitet."
},
"completeness": {
"title": "{count, plural, one {# Angabe fehlt} other {# Angaben fehlen}}",
"check": "Lotse prüfen lassen",
"fix": "Ergänzen",
"fromLotse": "Hinweis vom Lotsen",
"item": {
"photo_requirement": "Pflichtfoto fehlt: {label}",
"checklist_item": "Pflichtpunkt der Checkliste offen: {label}",
"material_reason": "Materialabweichung ohne Grund: {label}",
"material_unconfirmed": "Geplantes Material nicht bestätigt: {label}",
"no_work_time": "Keine Arbeitszeit erfasst",
"no_description": "Keine Tätigkeitsbeschreibung",
"signature_missing": "Unterschrift fehlt",
"lotse_hint": "{text}"
}
},
"voice": {
"status": {
"pending": "Transkription läuft",
"done": "Transkribiert",
"failed": "Transkription fehlgeschlagen",
"disabled": "Ohne Transkription"
},
"transcript": "Transkript",
"noTranscript": "Noch kein Text. Text kann von Hand eingetragen werden.",
"edit": "Transkript bearbeiten",
"cancel": "Abbrechen",
"save": "Transkript speichern",
"saved": "Transkript gespeichert.",
"summarize": "Sprachnotiz zusammenfassen",
"summarizing": "Lotse fasst zusammen …",
"summaryTitle": "Zusammenfassung",
"adopt": "Als Notiz übernehmen",
"adopted": "Als Notiz gespeichert.",
"dismiss": "Ausblenden",
"fromVoice": "aus Sprachnotiz"
},
"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.",
"not_configured": "Lotse ist nicht eingerichtet.",
"provider_failed": "Lotse ist gerade nicht erreichbar. Bitte später erneut versuchen.",
"not_editable": "Der Bericht ist eingereicht und kann nicht mehr geändert werden.",
"no_suggestion": "Dieser Vorschlag ist schon bearbeitet. Bitte Seite neu laden.",
"no_transcript": "Die Sprachnotiz hat noch keinen Text.",
"pending": "Die Transkription läuft noch.",
"conflict": "Inzwischen geändert. Bitte Seite neu laden.",
"invalid": "Bitte Eingaben prüfen."
},
"settings": {
"back": "Einstellungen",
"crumb": "Organisation",
"title": "Lotse (KI-Assistent)",
"sub": "Einschalten, Anrede und Transparenz",
"saved": "Einstellungen gespeichert.",
"error": "Speichern nicht möglich.",
"use": "Verwendung",
"enabled": "Lotse für diesen Betrieb verwenden",
"enabledHint": "Ausgeschaltet: keine Berichtsentwürfe, keine Zusammenfassungen, Sprachnotizen ohne Transkription.",
"addressForm": "Anrede des Lotsen",
"addressFormHint": "Gilt einheitlich für alle Texte des Lotsen in diesem Betrieb.",
"address": {
"neutral": "Neutral, ohne Anrede",
"sie": "Sie",
"du": "du"
},
"save": "Speichern",
"dataTitle": "Welche Daten an wen gehen",
"draftProvider": "Berichtsentwurf und Zusammenfassung",
"transcriptionProvider": "Transkription von Sprachnotizen",
"providerLine": "{provider} · Modell {model}",
"transcriptionLine": "Server {host} · Modell {model}",
"configured": "eingerichtet",
"notConfigured": "nicht eingerichtet",
"sentTitle": "Gesendet wird",
"sent": {
"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"
},
"notSentTitle": "Nicht gesendet wird",
"notSent": {
"contact": "Telefonnummern, E-Mail-Adressen und Anschriften (werden durch Platzhalter ersetzt)",
"names": "Namen: Mitarbeitende nur als Initialen, Ansprechpartner und Privatkunden als Rolle",
"customer": "Kundenname, Kundennummer, Fotos und Unterschriften"
},
"principle": "Vorschläge des Lotsen werden gekennzeichnet und erst nach Bestätigung übernommen. Ein vorbereiteter Bericht kann nur mit der Bestätigung „Ich habe den Vorschlag geprüft“ abgesendet werden. Die ursprünglichen Notizen bleiben unverändert.",
"protocolLink": "KI-Protokoll ansehen"
},
"protocol": {
"back": "Lotse-Einstellungen",
"crumb": "Organisation · Lotse",
"title": "KI-Protokoll",
"sub": "Jede Nutzung des Lotsen: Zeitpunkt, Art, Modell, Tokens, Nutzer",
"empty": "Noch keine KI-Nutzung.",
"time": "Zeitpunkt",
"kind": "Art",
"model": "Modell",
"tokens": "Tokens (ein/aus)",
"user": "Nutzer",
"system": "System",
"content": "Inhalt",
"show": "Anzeigen",
"contentTitle": "Gesendete Daten und Antwort",
"input": "An den Anbieter gesendet",
"output": "Antwort",
"close": "Schließen",
"contentHint": "Inhalte sehen nur Mandantenadministratoren.",
"prev": "Zurück",
"next": "Weiter",
"pageOf": "Seite {page} von {pages}",
"kinds": {
"report_draft": "Berichtsentwurf",
"voice_summary": "Zusammenfassung Sprachnotiz",
"transcription": "Transkription",
"import_extraction": "Auftragsimport",
"completeness_check": "Vollständigkeitsprüfung"
}
}
}
+1
View File
@@ -13,5 +13,6 @@
"notifications": "Benachrichtigungen",
"audit": "Audit-Protokoll",
"email": "E-Mail-Versand",
"lotse": "Lotse (KI)",
"admin": "Admin-Konsole"
}
+2 -1
View File
@@ -177,7 +177,8 @@
"reasonRequired": "Bitte einen Grund angeben.",
"signerRequired": "Bitte den Namen des Unterzeichners angeben.",
"imageRequired": "Bitte zuerst unterschreiben lassen.",
"notRequiredForbidden": "Für diesen Auftrag ist eine Unterschrift erforderlich."
"notRequiredForbidden": "Für diesen Auftrag ist eine Unterschrift erforderlich.",
"aiReviewRequired": "Bitte bestätigen, dass der Vorschlag vom Lotsen geprüft wurde."
},
"blocker": {
"checklist_item": "Checkliste offen: {label}",
+152
View File
@@ -0,0 +1,152 @@
{
"name": "Lotse",
"suggestionBadge": "Suggestion from Lotse – please review",
"draft": {
"button": "Prepare report with Lotse",
"again": "Prepare again",
"running": "Lotse is preparing the report …",
"hint": "Lotse drafts a suggestion from notes, voice notes, times, material, photos and checklist. Only what is confirmed goes into the report.",
"notConfigured": "Lotse is not set up. The office can configure the AI provider.",
"done": "{count, plural, =0 {No suggestions – data is still missing.} one {# suggestion ready.} other {# suggestions ready.}}",
"draftedAt": "Prepared on {date}",
"missingTitle": "Lotse is still missing",
"unsavedHint": "Save unsaved changes in the report first.",
"allDecided": "All suggestions have been handled.",
"reviewedAt": "Suggestion reviewed and confirmed on {date}"
},
"suggestion": {
"current": "Current text",
"empty": "(empty)",
"text": "Suggestion",
"accept": "Accept",
"discard": "Discard",
"accepted": "Accepted",
"discarded": "Discarded"
},
"review": {
"label": "I have reviewed the Lotse suggestion.",
"hint": "Required before submitting: this report was prepared with Lotse."
},
"completeness": {
"title": "{count, plural, one {# item missing} other {# items missing}}",
"check": "Let Lotse check",
"fix": "Complete",
"fromLotse": "Hint from Lotse",
"item": {
"photo_requirement": "Required photo missing: {label}",
"checklist_item": "Required checklist item open: {label}",
"material_reason": "Material deviation without reason: {label}",
"material_unconfirmed": "Planned material not confirmed: {label}",
"no_work_time": "No working time recorded",
"no_description": "No description of the work",
"signature_missing": "Signature missing",
"lotse_hint": "{text}"
}
},
"voice": {
"status": {
"pending": "Transcription running",
"done": "Transcribed",
"failed": "Transcription failed",
"disabled": "No transcription"
},
"transcript": "Transcript",
"noTranscript": "No text yet. Text can be entered manually.",
"edit": "Edit transcript",
"cancel": "Cancel",
"save": "Save transcript",
"saved": "Transcript saved.",
"summarize": "Summarise voice note",
"summarizing": "Lotse is summarising …",
"summaryTitle": "Summary",
"adopt": "Save as note",
"adopted": "Saved as note.",
"dismiss": "Hide",
"fromVoice": "from voice note"
},
"errors": {
"generic": "That did not work. Please try again.",
"not_found": "Not found.",
"forbidden": "You are not allowed to do this.",
"disabled": "Lotse is switched off for this business.",
"not_configured": "Lotse is not set up.",
"provider_failed": "Lotse is currently unavailable. Please try again later.",
"not_editable": "The report has been submitted and can no longer be changed.",
"no_suggestion": "This suggestion has already been handled. Please reload the page.",
"no_transcript": "The voice note has no text yet.",
"pending": "The transcription is still running.",
"conflict": "Changed in the meantime. Please reload the page.",
"invalid": "Please check your input."
},
"settings": {
"back": "Settings",
"crumb": "Organisation",
"title": "Lotse (AI assistant)",
"sub": "Switch on, form of address and transparency",
"saved": "Settings saved.",
"error": "Could not save.",
"use": "Usage",
"enabled": "Use Lotse in this business",
"enabledHint": "Switched off: no report drafts, no summaries, voice notes without transcription.",
"addressForm": "Lotse form of address",
"addressFormHint": "Applies consistently to all Lotse texts in this business.",
"address": {
"neutral": "Neutral, no form of address",
"sie": "Formal (Sie)",
"du": "Informal (du)"
},
"save": "Save",
"dataTitle": "Which data goes where",
"draftProvider": "Report draft and summary",
"transcriptionProvider": "Voice note transcription",
"providerLine": "{provider} · model {model}",
"transcriptionLine": "Server {host} · model {model}",
"configured": "set up",
"notConfigured": "not set up",
"sentTitle": "Sent",
"sent": {
"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"
},
"notSentTitle": "Not sent",
"notSent": {
"contact": "Phone numbers, e-mail addresses and postal addresses (replaced by placeholders)",
"names": "Names: employees as initials only, contacts and private customers as roles",
"customer": "Customer name, customer number, photos and signatures"
},
"principle": "Lotse suggestions are marked and only applied after confirmation. A prepared report can only be submitted with the confirmation “I have reviewed the suggestion”. The original notes stay unchanged.",
"protocolLink": "View AI log"
},
"protocol": {
"back": "Lotse settings",
"crumb": "Organisation · Lotse",
"title": "AI log",
"sub": "Every use of Lotse: time, kind, model, tokens, user",
"empty": "No AI usage yet.",
"time": "Time",
"kind": "Kind",
"model": "Model",
"tokens": "Tokens (in/out)",
"user": "User",
"system": "System",
"content": "Content",
"show": "Show",
"contentTitle": "Data sent and response",
"input": "Sent to the provider",
"output": "Response",
"close": "Close",
"contentHint": "Only tenant administrators can see contents.",
"prev": "Previous",
"next": "Next",
"pageOf": "Page {page} of {pages}",
"kinds": {
"report_draft": "Report draft",
"voice_summary": "Voice note summary",
"transcription": "Transcription",
"import_extraction": "Order import",
"completeness_check": "Completeness check"
}
}
}
+1
View File
@@ -13,5 +13,6 @@
"notifications": "Notifications",
"audit": "Audit log",
"email": "E-mail delivery",
"lotse": "Lotse (AI)",
"admin": "Admin console"
}
+2 -1
View File
@@ -177,7 +177,8 @@
"reasonRequired": "Please enter a reason.",
"signerRequired": "Please enter the name of the signer.",
"imageRequired": "Please have the customer sign first.",
"notRequiredForbidden": "A signature is required for this work order."
"notRequiredForbidden": "A signature is required for this work order.",
"aiReviewRequired": "Please confirm that you have reviewed the Lotse suggestion."
},
"blocker": {
"checklist_item": "Checklist open: {label}",