- sendReportToCustomer: report:approve, Scope, nur approved mit PDF, Empfänger
Ansprechpartner -> Kunde, Dedupe je Adresse+Version, Audit export
- Server Action + POST /api/v1/reports/{id}/send inkl. OpenAPI-Eintrag
- /reports/[id]: Abschnitt „An Kunden senden" mit bisherigen Versänden, Texte de/en
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
269 lines
9.3 KiB
JSON
269 lines
9.3 KiB
JSON
{
|
|
"title": "Berichte",
|
|
"crumb": "Einsatz & Nachweis",
|
|
"sub": "Tages- und Abschlussberichte prüfen, freigeben und als PDF ablegen.",
|
|
"type": {
|
|
"daily": "Tagesbericht",
|
|
"completion": "Abschlussbericht"
|
|
},
|
|
"status": {
|
|
"draft": "Entwurf",
|
|
"submitted": "Zur Prüfung",
|
|
"team_approved": "Vom Teamleiter geprüft",
|
|
"approved": "Freigegeben",
|
|
"rejected": "Zurückgewiesen",
|
|
"superseded": "Ersetzt"
|
|
},
|
|
"outcome": {
|
|
"signed": "Unterschrieben",
|
|
"customer_absent": "Kunde nicht anwesend",
|
|
"refused": "Kunde verweigert Unterschrift",
|
|
"later": "Unterschrift wird später eingeholt",
|
|
"not_required": "Unterschrift nicht erforderlich"
|
|
},
|
|
"timeType": {
|
|
"travel": "Anfahrt",
|
|
"work": "Arbeitszeit",
|
|
"break": "Pause",
|
|
"material_procurement": "Materialbeschaffung",
|
|
"return_travel": "Rückfahrt",
|
|
"interruption": "Unterbrechung"
|
|
},
|
|
"phase": {
|
|
"before": "Vorher",
|
|
"during": "Während der Arbeit",
|
|
"after": "Nachher"
|
|
},
|
|
"materialStatus": {
|
|
"fully_used": "Vollständig verwendet",
|
|
"partially_used": "Teilweise verwendet",
|
|
"not_used": "Nicht verwendet",
|
|
"additional": "Zusätzlich"
|
|
},
|
|
"field": {
|
|
"customer": "Kunde",
|
|
"customerNumber": "Kundennummer",
|
|
"site": "Objekt",
|
|
"contact": "Ansprechpartner",
|
|
"workOrder": "Auftrag",
|
|
"orderNumber": "Auftragsnummer",
|
|
"externalOrderNumber": "Externe Auftragsnummer",
|
|
"orderType": "Auftragsart",
|
|
"description": "Auftragsbeschreibung",
|
|
"scope": "Leistungsumfang",
|
|
"reportDate": "Berichtsdatum",
|
|
"workDates": "Einsatzdatum",
|
|
"staff": "Eingesetzte Mitarbeiter",
|
|
"technician": "Monteur",
|
|
"version": "Version",
|
|
"reportNumber": "Berichtsnummer",
|
|
"status": "Status",
|
|
"team": "Team",
|
|
"type": "Typ",
|
|
"period": "Zeitraum",
|
|
"updated": "Zuletzt geändert"
|
|
},
|
|
"texts": {
|
|
"workPerformed": "Ausgeführte Leistungen",
|
|
"deviations": "Abweichungen",
|
|
"additionalWork": "Zusatzleistungen",
|
|
"problems": "Probleme",
|
|
"openItems": "Offene Punkte und Restarbeiten",
|
|
"nextSteps": "Nächste Schritte",
|
|
"hints": "Hinweise"
|
|
},
|
|
"section": {
|
|
"header": "Auftrag und Kunde",
|
|
"time": "Arbeitszeiten",
|
|
"texts": "Tätigkeiten und Hinweise",
|
|
"materials": "Material",
|
|
"photos": "Fotos",
|
|
"checklist": "Checkliste",
|
|
"signature": "Kundenunterschrift",
|
|
"versions": "Versionen",
|
|
"blockers": "Vor dem Abschluss fehlt noch"
|
|
},
|
|
"time": {
|
|
"person": "Mitarbeiter",
|
|
"type": "Art",
|
|
"duration": "Dauer",
|
|
"total": "Summe ohne Pausen",
|
|
"totalByType": "Summen je Art",
|
|
"hoursMinutes": "{hours} h {minutes} min",
|
|
"running": "Enthält laufende Zeiten, Stand {time}",
|
|
"empty": "Keine Zeiten erfasst."
|
|
},
|
|
"materials": {
|
|
"used": "Verwendet",
|
|
"notUsed": "Nicht verwendet",
|
|
"additional": "Zusätzlich verwendet",
|
|
"name": "Material",
|
|
"planned": "Geplant",
|
|
"actual": "Ist",
|
|
"reason": "Abweichungsgrund",
|
|
"deviation": "Abweichung",
|
|
"undocumented": "Nicht dokumentiert",
|
|
"empty": "Kein Material erfasst."
|
|
},
|
|
"photos": {
|
|
"empty": "Keine Fotos für den Bericht ausgewählt.",
|
|
"requirement": "Pflichtfoto: {label}",
|
|
"alt": "Foto {index}"
|
|
},
|
|
"checklist": {
|
|
"done": "Erledigt",
|
|
"open": "Offen",
|
|
"required": "Pflicht",
|
|
"empty": "Keine Checkliste."
|
|
},
|
|
"signature": {
|
|
"signer": "Unterzeichner",
|
|
"role": "Funktion",
|
|
"signedAt": "Datum und Uhrzeit",
|
|
"reason": "Begründung",
|
|
"capturedBy": "Aufgenommen von",
|
|
"confirmation": "Bestätigungstext",
|
|
"none": "Noch keine Unterschrift erfasst.",
|
|
"image": "Unterschrift von {name}"
|
|
},
|
|
"list": {
|
|
"empty": "Keine Berichte für diese Auswahl.",
|
|
"filter": "Filtern",
|
|
"reset": "Zurücksetzen",
|
|
"all": "Alle",
|
|
"allWithSuperseded": "Alle inkl. ersetzte",
|
|
"from": "Von",
|
|
"to": "Bis",
|
|
"count": "{count, plural, one {# Bericht} other {# Berichte}}",
|
|
"truncated": "Es werden die neuesten {count} Berichte angezeigt. Bitte Filter nutzen.",
|
|
"open": "Öffnen"
|
|
},
|
|
"detail": {
|
|
"back": "Zurück zu Berichten",
|
|
"pdf": "PDF öffnen",
|
|
"pdfPending": "PDF wird erzeugt. Seite später neu laden.",
|
|
"aiDrafted": "Lotse-Entwurf",
|
|
"aiDraftedHint": "Texte wurden mit Lotse vorbereitet und vom Monteur geprüft.",
|
|
"rejectionReason": "Grund der Zurückweisung",
|
|
"submittedAt": "Eingereicht am",
|
|
"teamApprovedAt": "Vom Teamleiter geprüft am",
|
|
"approvedAt": "Freigegeben am",
|
|
"current": "Diese Version",
|
|
"checksum": "Prüfsumme (PDF)",
|
|
"generatedAt": "Stand der Daten"
|
|
},
|
|
"actions": {
|
|
"approve": "Freigeben",
|
|
"approveTeam": "Als Teamleiter prüfen",
|
|
"reject": "Zurückweisen",
|
|
"rejectTitle": "Bericht zurückweisen",
|
|
"rejectSub": "Der Monteur sieht den Grund und korrigiert den Bericht.",
|
|
"rejectReason": "Grund",
|
|
"rejectPlaceholder": "Was muss korrigiert werden?",
|
|
"newVersion": "Neue Version anlegen",
|
|
"newVersionHint": "Die freigegebene Version bleibt unverändert, bis die neue Version freigegeben ist.",
|
|
"regeneratePdf": "PDF erzeugen",
|
|
"cancel": "Abbrechen",
|
|
"close": "Schließen",
|
|
"done": "Erledigt."
|
|
},
|
|
"errors": {
|
|
"generic": "Vorgang nicht möglich.",
|
|
"not_found": "Bericht nicht gefunden.",
|
|
"forbidden": "Dafür fehlt die Berechtigung.",
|
|
"conflict": "Der Bericht wurde inzwischen geändert. Bitte Seite neu laden.",
|
|
"invalid": "Bitte Eingaben prüfen.",
|
|
"blocked": "Es fehlen noch Angaben.",
|
|
"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.",
|
|
"aiReviewRequired": "Bitte bestätigen, dass der Vorschlag vom Lotsen geprüft wurde."
|
|
},
|
|
"blocker": {
|
|
"checklist_item": "Checkliste offen: {label}",
|
|
"photo_requirement": "Pflichtfoto fehlt: {label}",
|
|
"running_session": "Zeiterfassung läuft noch",
|
|
"missing_field": "Pflichtangabe fehlt: {field}"
|
|
},
|
|
"mobile": {
|
|
"title": "Bericht",
|
|
"backToOrder": "Zurück zum Auftrag",
|
|
"createDaily": "Tagesbericht erstellen",
|
|
"createCompletion": "Abschlussbericht erstellen",
|
|
"dailyHint": "Arbeitstag abschließen. Der Auftrag bleibt offen.",
|
|
"completionHint": "Einsatz abschließen: Bericht prüfen, unterschreiben lassen, absenden.",
|
|
"blockersHint": "Erst diese Punkte erledigen, dann den Abschlussbericht erstellen.",
|
|
"stepReview": "Prüfen",
|
|
"stepEdit": "Ergänzen",
|
|
"stepSign": "Unterschrift",
|
|
"stepSubmit": "Absenden",
|
|
"stepOf": "Schritt {current} von {total}",
|
|
"edit": "Bericht ergänzen",
|
|
"review": "Bericht prüfen",
|
|
"save": "Entwurf speichern",
|
|
"saved": "Entwurf gespeichert.",
|
|
"toSign": "Weiter zur Unterschrift",
|
|
"submit": "Bericht absenden",
|
|
"submitted": "Bericht ist beim Büro zur Prüfung.",
|
|
"readOnly": "Der Bericht ist eingereicht und kann nicht mehr geändert werden.",
|
|
"rejected": "Zurückgewiesen: {reason}",
|
|
"signatureMissing": "Unterschrift oder Grund fehlt noch.",
|
|
"noCompletion": "Noch kein Abschlussbericht angelegt."
|
|
},
|
|
"sign": {
|
|
"title": "Unterschrift",
|
|
"outcomeLabel": "Unterschrift",
|
|
"signerName": "Name des Unterzeichners",
|
|
"signerRole": "Funktion (optional)",
|
|
"reason": "Begründung",
|
|
"clear": "Löschen",
|
|
"padLabel": "Unterschriftsfeld. Mit Finger oder Stift unterschreiben.",
|
|
"padEmpty": "Hier unterschreiben",
|
|
"confirmation": "Ich bestätige die Ausführung der im Bericht {reportNumber} zum Auftrag {orderNumber} dokumentierten Arbeiten. Datum: {date}.",
|
|
"save": "Speichern",
|
|
"saved": "Gespeichert.",
|
|
"alreadySigned": "Unterschrift liegt vor.",
|
|
"noReport": "Zuerst den Abschlussbericht erstellen."
|
|
},
|
|
"customerMail": {
|
|
"title": "An Kunden senden",
|
|
"sub": "Das freigegebene PDF geht als Anhang an den Kunden. Antworten gehen an die Antwortadresse Ihres Betriebs.",
|
|
"to": "Empfänger",
|
|
"toHint": "Vorbelegt mit dem Ansprechpartner des Auftrags bzw. dem Kunden.",
|
|
"noDefault": "Beim Auftrag ist keine E-Mail-Adresse hinterlegt. Bitte Empfänger eingeben.",
|
|
"message": "Nachricht (optional)",
|
|
"messagePlaceholder": "Kurze Nachricht an den Kunden",
|
|
"submit": "Bericht senden",
|
|
"sending": "Wird gesendet …",
|
|
"history": "Bisherige Versände",
|
|
"historyEmpty": "Noch nicht an den Kunden gesendet.",
|
|
"result": {
|
|
"sent": "Bericht an {to} versendet.",
|
|
"queued": "Bericht an {to} wird versendet.",
|
|
"duplicate": "Diese Version wurde bereits an {to} gesendet.",
|
|
"failed": "Versand an {to} fehlgeschlagen. Bitte später erneut versuchen."
|
|
},
|
|
"delivery": {
|
|
"sent": "Versendet",
|
|
"pending": "In Zustellung",
|
|
"failed": "Fehlgeschlagen",
|
|
"other": "Nicht zugestellt"
|
|
},
|
|
"errors": {
|
|
"recipient_missing": "Bitte eine E-Mail-Adresse angeben.",
|
|
"invalid_to": "Bitte eine gültige E-Mail-Adresse angeben.",
|
|
"report_not_approved": "Nur freigegebene Berichte können versendet werden.",
|
|
"pdf_missing": "Das PDF ist noch nicht erzeugt."
|
|
}
|
|
},
|
|
"pdf": {
|
|
"page": "Seite {page} von {pages}",
|
|
"reportId": "Bericht-ID",
|
|
"checksum": "Prüfsumme",
|
|
"approvalStatus": "Freigabestatus",
|
|
"createdAt": "Erstellt am",
|
|
"notApproved": "Nicht freigegeben"
|
|
}
|
|
}
|