Files
craftvia/messages/de/workOrders.json
T
msolarczekandClaude Opus 5 85bae832d0 L10b Betrieb & Aufräumen: Sync – Berichts-Ops, Konflikt-Übernahme, eigene Session im Bundle
- Aufräumpunkt j: report.save_draft und report.submit mit Zod-Schemas (lib/sync/ops.ts) und
  Registry-Einträgen → services/reports/sync-ops.ts. report.submit reicht baseVersion als
  expectedWorkOrderVersion und aiReviewed an submitReport durch; Lotse-Entwürfe ohne Bestätigung →
  rejected invalid. signature.capture bleibt unregistriert (Upload-Art für Unterschriftsbild fehlt).
- Aufräumpunkt b: „Übernehmen" in der Konfliktliste delegiert an den Sync-Dispatcher
  (apply.ts#reapplyOperation, ohne baseVersion) statt des L2-Stubs; unterstützt
  work_order.transition und report.submit. Hinweistext der Konfliktliste angepasst.
- Aufräumpunkt c: getFieldBundle liefert je Auftrag mySession (eigene aktive WorkSession); die
  Offline-Ansicht leitet den Zeitstatus daraus ab (alte Bundles: Näherung über Auftragsstatus).
- scripts/test-betrieb-sync.ts (Bundle, clientId je Mandant, Berichts-Ops, Konflikt-Übernahme,
  Mandant B, Monteur ohne Zuweisung); test-einsatz-sync.ts prüft „nicht verfügbare Op" jetzt mit
  signature.capture, weil report.save_draft registriert ist.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-14 18:19:19 +02:00

468 lines
16 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"crumb": "Aufträge",
"title": "Aufträge",
"subtitle": "Planen, zuweisen, prüfen und zur Abrechnung freigeben",
"new": "Neuer Auftrag",
"conflictsLink": "Sync-Konflikte",
"allGroups": "Alle",
"empty": "Keine Aufträge für diese Auswahl.",
"resultCount": "{count, plural, =0 {Keine Aufträge} one {# Auftrag} other {# Aufträge}}",
"presetActive": "Kachel-Filter: {name}",
"removePreset": "Kachel-Filter entfernen",
"view": {
"cards": "Karten",
"table": "Tabelle"
},
"pagination": {
"prev": "Zurück",
"next": "Weiter",
"page": "Seite {page} von {pages}"
},
"filter": {
"title": "Filter",
"q": "Nummer, Titel, Kunde, Ort",
"from": "Von",
"to": "Bis",
"customer": "Kunde",
"site": "Objekt",
"team": "Team",
"user": "Monteur",
"status": "Status",
"orderType": "Auftragsart",
"priority": "Priorität",
"sort": "Sortierung",
"any": "Alle",
"apply": "Filtern",
"reset": "Zurücksetzen"
},
"sort": {
"plannedStart": "Geplanter Beginn",
"createdAt": "Angelegt",
"updatedAt": "Zuletzt geändert",
"number": "Nummer",
"priority": "Priorität",
"status": "Status",
"asc": "aufsteigend",
"desc": "absteigend"
},
"columns": {
"number": "Nummer",
"title": "Titel",
"customer": "Kunde",
"site": "Objekt",
"planned": "Geplant",
"team": "Team",
"status": "Status",
"priority": "Priorität"
},
"status": {
"draft": "Entwurf",
"review_required": "Prüfung erforderlich",
"planned": "Geplant",
"assigned": "Zugewiesen",
"accepted": "Angenommen",
"en_route": "In Anfahrt",
"in_progress": "In Bearbeitung",
"paused": "Pausiert",
"waiting_material": "Wartet auf Material",
"daily_report_created": "Tagesbericht erstellt",
"technically_completed": "Technisch abgeschlossen",
"signature_pending": "Unterschrift ausstehend",
"in_review": "Zur Prüfung",
"released_for_billing": "Zur Abrechnung freigegeben",
"billed": "Abgerechnet",
"cancelled": "Storniert"
},
"statusGroup": {
"new": "Neu",
"planned": "Geplant",
"en_route": "Unterwegs",
"in_progress": "In Arbeit",
"documentation_incomplete": "Dokumentation unvollständig",
"in_review": "Zur Prüfung",
"ready_for_billing": "Bereit zur Abrechnung",
"billed": "Abgerechnet",
"cancelled": "Storniert"
},
"priority": {
"low": "Niedrig",
"normal": "Normal",
"high": "Hoch",
"urgent": "Dringend"
},
"billingType": {
"fixed": "Pauschal",
"time_material": "Nach Aufwand",
"maintenance_contract": "Wartungsvertrag",
"warranty": "Gewährleistung"
},
"emergency": "Notdienst",
"unassigned": "Nicht zugewiesen",
"noDate": "Ohne Termin",
"create": {
"title": "Neuer Auftrag",
"sub": "Kunde wählen, Auftrag erfassen",
"stepCustomer": "1. Kunde suchen",
"customerSearch": "Firma, Name, Kundennummer oder Ort",
"searchButton": "Suchen",
"noCustomers": "Kein Kunde gefunden. Kunden werden unter „Kunden“ angelegt.",
"chooseCustomer": "Auswählen",
"changeCustomer": "Anderen Kunden wählen",
"stepDetails": "2. Auftrag erfassen",
"submit": "Auftrag anlegen",
"pending": "Lege an…"
},
"fields": {
"title": "Titel",
"customer": "Kunde",
"site": "Objekt",
"contact": "Ansprechpartner",
"none": "— keine Auswahl —",
"orderType": "Auftragsart",
"priority": "Priorität",
"plannedStart": "Geplanter Beginn",
"plannedEnd": "Geplantes Ende",
"description": "Beschreibung",
"scope": "Leistungsumfang",
"internalNotes": "Hinweise intern (nur Büro)",
"technicianNotes": "Hinweise für Monteure",
"signatureRequired": "Unterschrift erforderlich",
"signatureFromType": "Wie Auftragsart",
"yes": "Ja",
"no": "Nein",
"billingType": "Abrechnungsart",
"externalOrderNumber": "Externe Auftragsnummer",
"offerNumber": "Angebotsnummer",
"status": "Anlegen als",
"timezoneHint": "Zeiten in {tz}"
},
"detail": {
"back": "Zurück zu Aufträgen",
"version": "Version {version}",
"nextStep": "Nächster Schritt",
"moreActions": "Weitere Statusänderungen",
"edit": "Bearbeiten",
"assign": "Zuweisen",
"reassign": "Zuweisung ändern",
"cancel": "Stornieren",
"noActions": "Für Sie ist gerade keine Statusänderung möglich.",
"blockersTitle": "Vor dem Abschluss fehlt noch:",
"tabs": {
"overview": "Übersicht",
"checklist": "Checkliste & Pflichtfotos",
"material": "Material",
"times": "Zeiten",
"photos": "Fotos",
"notes": "Notizen",
"reports": "Berichte",
"documents": "Dokumente",
"history": "Verlauf"
}
},
"overview": {
"customer": "Kunde",
"site": "Objekt",
"contact": "Ansprechpartner",
"planning": "Planung",
"assignment": "Zuweisung",
"team": "Team",
"teamLead": "Teamleiter",
"assignees": "Monteure",
"order": "Auftrag",
"created": "Angelegt",
"updated": "Geändert",
"accessNotes": "Zugang",
"safetyNotes": "Sicherheit"
},
"checklist": {
"items": "Checkliste",
"photos": "Pflichtfotos",
"empty": "Keine Checklistenpunkte.",
"emptyPhotos": "Keine Pflichtfotos.",
"required": "Pflicht",
"optional": "Optional",
"requiresPhoto": "mit Foto",
"done": "Erledigt",
"open": "Offen",
"photoCount": "{count, plural, =0 {Kein Foto} one {# Foto} other {# Fotos}}",
"addItem": "Punkt hinzufügen",
"addPhoto": "Pflichtfoto hinzufügen",
"label": "Bezeichnung",
"applyTemplate": "Vorlage übernehmen",
"template": "Vorlage",
"applyButton": "Übernehmen",
"remove": "Entfernen",
"complete": "Alle Abschluss-Voraussetzungen erfüllt."
},
"material": {
"title": "Material – geplant und tatsächlich",
"empty": "Kein Material geplant oder erfasst.",
"name": "Bezeichnung",
"articleNumber": "Artikelnummer",
"planned": "Geplant",
"actual": "Tatsächlich",
"deviation": "Abweichung",
"unit": "Einheit",
"notes": "Bemerkung",
"reason": "Begründung",
"additional": "Zusätzlich",
"notRecorded": "Noch nicht erfasst",
"add": "Material planen",
"remove": "Entfernen",
"usage": {
"fully_used": "Vollständig verwendet",
"partially_used": "Teilweise verwendet",
"not_used": "Nicht verwendet",
"additional": "Zusätzlich verwendet"
}
},
"times": {
"empty": "Noch keine Zeiten erfasst.",
"person": "Person",
"start": "Beginn",
"end": "Ende",
"duration": "Arbeitszeit",
"minutes": "{minutes} min",
"corrected": "Korrigiert: {reason}",
"sessionStatus": {
"en_route": "Unterwegs",
"running": "Läuft",
"paused": "Pausiert",
"ended": "Beendet"
},
"entryType": {
"travel": "Anfahrt",
"work": "Arbeit",
"break": "Pause",
"material_procurement": "Materialbeschaffung",
"return_travel": "Rückfahrt",
"interruption": "Unterbrechung"
}
},
"photos": {
"empty": "Noch keine Fotos.",
"phase": {
"before": "Vorher",
"during": "Während",
"after": "Nachher"
},
"open": "Öffnen",
"inReport": "Im Bericht"
},
"notes": {
"empty": "Keine Notizen.",
"internal": "Hinweise intern",
"technician": "Hinweise für Monteure",
"kind": {
"work_done": "Ausgeführt",
"deviation": "Abweichung",
"problem": "Problem",
"additional_work": "Zusatzarbeit",
"not_executable": "Nicht ausführbar",
"follow_up": "Folgearbeit",
"recommendation": "Empfehlung",
"customer_note": "Kundenhinweis",
"general": "Allgemein"
}
},
"reports": {
"empty": "Noch keine Berichte.",
"type": {
"daily": "Tagesbericht",
"completion": "Abschlussbericht"
},
"status": {
"draft": "Entwurf",
"submitted": "Zur Prüfung",
"team_approved": "Vom Teamleiter freigegeben",
"approved": "Freigegeben",
"rejected": "Zurückgewiesen",
"superseded": "Ersetzt"
},
"open": "Bericht öffnen",
"signature": "Unterschrift: {outcome}",
"signatureOutcome": {
"signed": "unterschrieben",
"customer_absent": "Kunde nicht anwesend",
"refused": "verweigert",
"later": "später",
"not_required": "nicht erforderlich"
},
"billingTitle": "Abrechnung",
"billingHint": "Freigabe nur mit freigegebenem Abschlussbericht.",
"release": "Zur Abrechnung freigeben",
"reject": "Zur Korrektur zurückweisen",
"markBilled": "Als abgerechnet markieren",
"revoke": "Freigabe zurücknehmen"
},
"documents": {
"empty": "Keine Dokumente am Auftrag.",
"upload": "Dokument hochladen",
"file": "Datei (PDF, JPG, PNG, WebP)",
"title": "Titel (optional)",
"category": "Kategorie",
"visibility": "Sichtbarkeit",
"submit": "Hochladen",
"archive": "Entfernen",
"download": "Herunterladen",
"categories": {
"order_confirmation": "Auftragsbestätigung",
"technical_drawing": "Technische Zeichnung",
"floor_plan": "Grundriss",
"wiring_diagram": "Schaltplan",
"assembly_instructions": "Montageanleitung",
"safety_document": "Sicherheitsdokument",
"product_document": "Produktunterlage",
"customer_note": "Kundennotiz",
"work_record": "Arbeitsnachweis",
"daily_report": "Tagesbericht",
"completion_report": "Abschlussbericht",
"customer_approval": "Kundenfreigabe",
"photo": "Foto",
"voice_note": "Sprachnotiz",
"signature": "Unterschrift",
"other": "Sonstiges"
},
"visibilities": {
"backoffice_only": "Nur Büro",
"team_lead": "Teamleiter",
"team": "Team",
"customer_report": "Kundenbericht"
}
},
"history": {
"statusChanges": "Statusänderungen",
"audit": "Protokoll",
"empty": "Noch keine Einträge.",
"created": "Angelegt als {status}",
"change": "{from} → {to}",
"by": "von {name}",
"system": "System",
"action": {
"create": "Erstellt",
"update": "Geändert",
"delete": "Gelöscht"
}
},
"assign": {
"title": "Auftrag zuweisen",
"sub": "Team wählen, optional einzelne Monteure und Teamleiter",
"team": "Team",
"chooseTeam": "— Team wählen —",
"members": "Einzelne Monteure (optional)",
"teamLead": "Zuständiger Teamleiter",
"teamLeadDefault": "Teamleiter des Teams",
"noTeams": "Keine aktiven Teams. Teams werden unter „Teams“ angelegt.",
"submit": "Zuweisen",
"pending": "Weise zu…"
},
"transition": {
"to": {
"draft": "Als Entwurf",
"review_required": "Zur Prüfung markieren",
"planned": "Einplanen",
"assigned": "Zuweisen",
"accepted": "Annehmen",
"en_route": "Anfahrt starten",
"in_progress": "Arbeit aufnehmen",
"paused": "Pausieren",
"waiting_material": "Wartet auf Material",
"daily_report_created": "Tagesbericht erstellt",
"technically_completed": "Technisch abschließen",
"signature_pending": "Unterschrift ausstehend",
"in_review": "Zur Prüfung geben",
"released_for_billing": "Zur Abrechnung freigeben",
"billed": "Als abgerechnet markieren",
"cancelled": "Stornieren"
},
"correction": "Zur Korrektur zurückweisen",
"revoke": "Freigabe zurücknehmen",
"reasonTitle": "Begründung erforderlich",
"reason": "Begründung",
"reasonPlaceholder": "Kurz beschreiben, warum",
"confirm": "Bestätigen",
"pending": "Speichere…",
"done": "Status geändert."
},
"edit": {
"title": "Auftrag bearbeiten",
"submit": "Speichern",
"pending": "Speichere…",
"saved": "Gespeichert."
},
"conflicts": {
"crumb": "Aufträge",
"title": "Sync-Konflikte",
"sub": "Offline erfasste Änderungen, die nicht automatisch übernommen werden konnten",
"empty": "Keine offenen Konflikte.",
"received": "Eingegangen",
"user": "Gerät / Person",
"operation": "Vorgang",
"entity": "Auftrag",
"baseVersion": "Stand Gerät: Version {base} · aktuell: Version {current}",
"payload": "Inhalt",
"apply": "Übernehmen",
"discard": "Verwerfen",
"applied": "Übernommen.",
"discarded": "Verworfen.",
"applyHint": "Übernehmen wendet den Vorgang erneut auf den aktuellen Stand an – im Namen der Person, die ihn erfasst hat.",
"scopeHint": "Übernehmen ist für Statusänderungen und abgesendete Berichte möglich; andere Vorgänge bitte im Auftrag nacharbeiten."
},
"errors": {
"not_found": "Nicht gefunden oder keine Berechtigung.",
"forbidden": "Dafür fehlt die Berechtigung.",
"invalid": "Eingaben prüfen.",
"conflict": "Der Auftrag wurde inzwischen geändert. Seite neu laden und erneut versuchen.",
"blocked": "Noch nicht möglich – es fehlen Angaben.",
"internal": "Vorgang nicht möglich.",
"validation_failed": "Pflichtfelder prüfen.",
"work_order_not_found": "Auftrag nicht gefunden.",
"customer_not_found": "Kunde nicht gefunden.",
"site_not_found": "Objekt nicht gefunden.",
"contact_not_found": "Ansprechpartner nicht gefunden.",
"site_customer_mismatch": "Das Objekt gehört zu einem anderen Kunden.",
"contact_customer_mismatch": "Der Ansprechpartner gehört zu einem anderen Kunden.",
"order_type_not_found": "Auftragsart nicht gefunden.",
"planned_end_before_start": "Das Ende liegt vor dem Beginn.",
"nothing_to_update": "Keine Änderungen.",
"not_editable": "Der Auftrag kann in diesem Status nicht mehr geändert werden.",
"delete_only_draft": "Nur Entwürfe können gelöscht werden.",
"transition_not_allowed": "Dieser Statuswechsel ist nicht vorgesehen.",
"transition_forbidden": "Diesen Statuswechsel dürfen Sie nicht ausführen.",
"transition_blocked": "Noch nicht möglich – es fehlen Angaben.",
"reason_required": "Bitte eine Begründung angeben.",
"version_conflict": "Der Auftrag wurde inzwischen geändert. Seite neu laden und erneut versuchen.",
"team_not_found": "Team nicht gefunden oder nicht aktiv.",
"user_not_found": "Mindestens eine Person ist nicht aktiv.",
"material_plan_not_found": "Materialposition nicht gefunden.",
"material_in_use": "Zu dieser Position wurde bereits Material erfasst.",
"checklist_item_not_found": "Checklistenpunkt nicht gefunden.",
"checklist_item_checked": "Erledigte Punkte bleiben als Nachweis erhalten.",
"photo_requirement_not_found": "Pflichtfoto nicht gefunden.",
"photo_requirement_has_photos": "Zu diesem Pflichtfoto gibt es bereits Fotos.",
"template_not_found": "Vorlage nicht gefunden.",
"sync_conflict_not_found": "Konflikt nicht gefunden oder bereits erledigt.",
"sync_conflict_already_resolved": "Konflikt wurde bereits erledigt.",
"sync_payload_invalid": "Der Vorgang ist unvollständig.",
"sync_user_inactive": "Die Person ist nicht mehr aktiv.",
"reapply_unsupported": "Dieser Vorgang kann noch nicht übernommen werden.",
"document_not_found": "Dokument nicht gefunden.",
"file_type_not_allowed": "Dateityp nicht erlaubt.",
"file_too_large": "Datei ist leer oder zu groß.",
"file_missing": "Bitte eine Datei wählen.",
"category_invalid": "Kategorie nicht erlaubt.",
"visibility_forbidden": "Diese Sichtbarkeit dürfen Sie nicht vergeben.",
"initial_status_not_allowed": "Dieser Anfangsstatus ist nicht erlaubt."
},
"blockers": {
"checklist_item": "Checkliste: {label}",
"photo_requirement": "Pflichtfoto: {label}",
"running_session": "Ein Einsatz läuft noch",
"field": {
"signature": "Unterschrift fehlt",
"approved_completion_report": "Abschlussbericht ist noch nicht freigegeben"
}
},
"saved": "Gespeichert."
}