Files
craftvia/messages/en/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
15 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": "Work orders",
"title": "Work orders",
"subtitle": "Plan, assign, review and release for billing",
"new": "New work order",
"conflictsLink": "Sync conflicts",
"allGroups": "All",
"empty": "No work orders for this selection.",
"resultCount": "{count, plural, =0 {No work orders} one {# work order} other {# work orders}}",
"presetActive": "Tile filter: {name}",
"removePreset": "Remove tile filter",
"view": {
"cards": "Cards",
"table": "Table"
},
"pagination": {
"prev": "Previous",
"next": "Next",
"page": "Page {page} of {pages}"
},
"filter": {
"title": "Filter",
"q": "Number, title, customer, city",
"from": "From",
"to": "To",
"customer": "Customer",
"site": "Site",
"team": "Team",
"user": "Technician",
"status": "Status",
"orderType": "Order type",
"priority": "Priority",
"sort": "Sort",
"any": "All",
"apply": "Apply",
"reset": "Reset"
},
"sort": {
"plannedStart": "Planned start",
"createdAt": "Created",
"updatedAt": "Last changed",
"number": "Number",
"priority": "Priority",
"status": "Status",
"asc": "ascending",
"desc": "descending"
},
"columns": {
"number": "Number",
"title": "Title",
"customer": "Customer",
"site": "Site",
"planned": "Planned",
"team": "Team",
"status": "Status",
"priority": "Priority"
},
"status": {
"draft": "Draft",
"review_required": "Review required",
"planned": "Planned",
"assigned": "Assigned",
"accepted": "Accepted",
"en_route": "En route",
"in_progress": "In progress",
"paused": "Paused",
"waiting_material": "Waiting for material",
"daily_report_created": "Daily report created",
"technically_completed": "Technically completed",
"signature_pending": "Signature pending",
"in_review": "In review",
"released_for_billing": "Released for billing",
"billed": "Billed",
"cancelled": "Cancelled"
},
"statusGroup": {
"new": "New",
"planned": "Planned",
"en_route": "En route",
"in_progress": "In progress",
"documentation_incomplete": "Documentation incomplete",
"in_review": "In review",
"ready_for_billing": "Ready for billing",
"billed": "Billed",
"cancelled": "Cancelled"
},
"priority": {
"low": "Low",
"normal": "Normal",
"high": "High",
"urgent": "Urgent"
},
"billingType": {
"fixed": "Fixed price",
"time_material": "Time and material",
"maintenance_contract": "Maintenance contract",
"warranty": "Warranty"
},
"emergency": "Emergency",
"unassigned": "Not assigned",
"noDate": "No date",
"create": {
"title": "New work order",
"sub": "Choose a customer, enter the order",
"stepCustomer": "1. Find customer",
"customerSearch": "Company, name, customer number or city",
"searchButton": "Search",
"noCustomers": "No customer found. Customers are created under “Customers”.",
"chooseCustomer": "Select",
"changeCustomer": "Choose another customer",
"stepDetails": "2. Enter order",
"submit": "Create work order",
"pending": "Creating…"
},
"fields": {
"title": "Title",
"customer": "Customer",
"site": "Site",
"contact": "Contact person",
"none": "— none —",
"orderType": "Order type",
"priority": "Priority",
"plannedStart": "Planned start",
"plannedEnd": "Planned end",
"description": "Description",
"scope": "Scope of work",
"internalNotes": "Internal notes (office only)",
"technicianNotes": "Notes for technicians",
"signatureRequired": "Signature required",
"signatureFromType": "As order type",
"yes": "Yes",
"no": "No",
"billingType": "Billing type",
"externalOrderNumber": "External order number",
"offerNumber": "Offer number",
"status": "Create as",
"timezoneHint": "Times in {tz}"
},
"detail": {
"back": "Back to work orders",
"version": "Version {version}",
"nextStep": "Next step",
"moreActions": "Other status changes",
"edit": "Edit",
"assign": "Assign",
"reassign": "Change assignment",
"cancel": "Cancel order",
"noActions": "No status change is available for you right now.",
"blockersTitle": "Still missing before completion:",
"tabs": {
"overview": "Overview",
"checklist": "Checklist & required photos",
"material": "Material",
"times": "Times",
"photos": "Photos",
"notes": "Notes",
"reports": "Reports",
"documents": "Documents",
"history": "History"
}
},
"overview": {
"customer": "Customer",
"site": "Site",
"contact": "Contact person",
"planning": "Planning",
"assignment": "Assignment",
"team": "Team",
"teamLead": "Team lead",
"assignees": "Technicians",
"order": "Order",
"created": "Created",
"updated": "Changed",
"accessNotes": "Access",
"safetyNotes": "Safety"
},
"checklist": {
"items": "Checklist",
"photos": "Required photos",
"empty": "No checklist items.",
"emptyPhotos": "No required photos.",
"required": "Required",
"optional": "Optional",
"requiresPhoto": "with photo",
"done": "Done",
"open": "Open",
"photoCount": "{count, plural, =0 {No photo} one {# photo} other {# photos}}",
"addItem": "Add item",
"addPhoto": "Add required photo",
"label": "Label",
"applyTemplate": "Apply template",
"template": "Template",
"applyButton": "Apply",
"remove": "Remove",
"complete": "All completion requirements met."
},
"material": {
"title": "Material – planned and actual",
"empty": "No material planned or recorded.",
"name": "Name",
"articleNumber": "Article number",
"planned": "Planned",
"actual": "Actual",
"deviation": "Deviation",
"unit": "Unit",
"notes": "Remark",
"reason": "Reason",
"additional": "Additional",
"notRecorded": "Not recorded yet",
"add": "Plan material",
"remove": "Remove",
"usage": {
"fully_used": "Fully used",
"partially_used": "Partially used",
"not_used": "Not used",
"additional": "Additionally used"
}
},
"times": {
"empty": "No times recorded yet.",
"person": "Person",
"start": "Start",
"end": "End",
"duration": "Working time",
"minutes": "{minutes} min",
"corrected": "Corrected: {reason}",
"sessionStatus": {
"en_route": "En route",
"running": "Running",
"paused": "Paused",
"ended": "Ended"
},
"entryType": {
"travel": "Travel",
"work": "Work",
"break": "Break",
"material_procurement": "Material procurement",
"return_travel": "Return travel",
"interruption": "Interruption"
}
},
"photos": {
"empty": "No photos yet.",
"phase": {
"before": "Before",
"during": "During",
"after": "After"
},
"open": "Open",
"inReport": "In report"
},
"notes": {
"empty": "No notes.",
"internal": "Internal notes",
"technician": "Notes for technicians",
"kind": {
"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"
}
},
"reports": {
"empty": "No reports yet.",
"type": {
"daily": "Daily report",
"completion": "Completion report"
},
"status": {
"draft": "Draft",
"submitted": "In review",
"team_approved": "Approved by team lead",
"approved": "Approved",
"rejected": "Rejected",
"superseded": "Superseded"
},
"open": "Open report",
"signature": "Signature: {outcome}",
"signatureOutcome": {
"signed": "signed",
"customer_absent": "customer absent",
"refused": "refused",
"later": "later",
"not_required": "not required"
},
"billingTitle": "Billing",
"billingHint": "Release requires an approved completion report.",
"release": "Release for billing",
"reject": "Send back for correction",
"markBilled": "Mark as billed",
"revoke": "Revoke release"
},
"documents": {
"empty": "No documents on this order.",
"upload": "Upload document",
"file": "File (PDF, JPG, PNG, WebP)",
"title": "Title (optional)",
"category": "Category",
"visibility": "Visibility",
"submit": "Upload",
"archive": "Remove",
"download": "Download",
"categories": {
"order_confirmation": "Order confirmation",
"technical_drawing": "Technical drawing",
"floor_plan": "Floor plan",
"wiring_diagram": "Wiring diagram",
"assembly_instructions": "Assembly instructions",
"safety_document": "Safety document",
"product_document": "Product document",
"customer_note": "Customer note",
"work_record": "Work record",
"daily_report": "Daily report",
"completion_report": "Completion report",
"customer_approval": "Customer approval",
"photo": "Photo",
"voice_note": "Voice note",
"signature": "Signature",
"other": "Other"
},
"visibilities": {
"backoffice_only": "Office only",
"team_lead": "Team lead",
"team": "Team",
"customer_report": "Customer report"
}
},
"history": {
"statusChanges": "Status changes",
"audit": "Log",
"empty": "No entries yet.",
"created": "Created as {status}",
"change": "{from} → {to}",
"by": "by {name}",
"system": "System",
"action": {
"create": "Created",
"update": "Changed",
"delete": "Deleted"
}
},
"assign": {
"title": "Assign work order",
"sub": "Choose a team, optionally individual technicians and a team lead",
"team": "Team",
"chooseTeam": "— choose team —",
"members": "Individual technicians (optional)",
"teamLead": "Responsible team lead",
"teamLeadDefault": "Team lead of the team",
"noTeams": "No active teams. Teams are created under “Teams”.",
"submit": "Assign",
"pending": "Assigning…"
},
"transition": {
"to": {
"draft": "As draft",
"review_required": "Mark for review",
"planned": "Schedule",
"assigned": "Assign",
"accepted": "Accept",
"en_route": "Start travel",
"in_progress": "Start work",
"paused": "Pause",
"waiting_material": "Waiting for material",
"daily_report_created": "Daily report created",
"technically_completed": "Complete technically",
"signature_pending": "Signature pending",
"in_review": "Submit for review",
"released_for_billing": "Release for billing",
"billed": "Mark as billed",
"cancelled": "Cancel order"
},
"correction": "Send back for correction",
"revoke": "Revoke release",
"reasonTitle": "Reason required",
"reason": "Reason",
"reasonPlaceholder": "Briefly describe why",
"confirm": "Confirm",
"pending": "Saving…",
"done": "Status changed."
},
"edit": {
"title": "Edit work order",
"submit": "Save",
"pending": "Saving…",
"saved": "Saved."
},
"conflicts": {
"crumb": "Work orders",
"title": "Sync conflicts",
"sub": "Changes recorded offline that could not be applied automatically",
"empty": "No open conflicts.",
"received": "Received",
"user": "Device / person",
"operation": "Operation",
"entity": "Work order",
"baseVersion": "Device state: version {base} · current: version {current}",
"payload": "Content",
"apply": "Apply",
"discard": "Discard",
"applied": "Applied.",
"discarded": "Discarded.",
"applyHint": "Apply re-runs the operation against the current state – on behalf of the person who recorded it.",
"scopeHint": "Apply supports status changes and submitted reports; please rework other operations in the order."
},
"errors": {
"not_found": "Not found or no permission.",
"forbidden": "You lack the permission for this.",
"invalid": "Please check your input.",
"conflict": "The order was changed in the meantime. Reload and try again.",
"blocked": "Not possible yet – information is missing.",
"internal": "Operation not possible.",
"validation_failed": "Please check required fields.",
"work_order_not_found": "Work order not found.",
"customer_not_found": "Customer not found.",
"site_not_found": "Site not found.",
"contact_not_found": "Contact person not found.",
"site_customer_mismatch": "The site belongs to another customer.",
"contact_customer_mismatch": "The contact person belongs to another customer.",
"order_type_not_found": "Order type not found.",
"planned_end_before_start": "The end is before the start.",
"nothing_to_update": "No changes.",
"not_editable": "The order can no longer be changed in this status.",
"delete_only_draft": "Only drafts can be deleted.",
"transition_not_allowed": "This status change is not intended.",
"transition_forbidden": "You may not perform this status change.",
"transition_blocked": "Not possible yet – information is missing.",
"reason_required": "Please give a reason.",
"version_conflict": "The order was changed in the meantime. Reload and try again.",
"team_not_found": "Team not found or not active.",
"user_not_found": "At least one person is not active.",
"material_plan_not_found": "Material item not found.",
"material_in_use": "Material has already been recorded for this item.",
"checklist_item_not_found": "Checklist item not found.",
"checklist_item_checked": "Completed items are kept as evidence.",
"photo_requirement_not_found": "Required photo not found.",
"photo_requirement_has_photos": "Photos already exist for this requirement.",
"template_not_found": "Template not found.",
"sync_conflict_not_found": "Conflict not found or already resolved.",
"sync_conflict_already_resolved": "Conflict already resolved.",
"sync_payload_invalid": "The operation is incomplete.",
"sync_user_inactive": "The person is no longer active.",
"reapply_unsupported": "This operation cannot be applied yet.",
"document_not_found": "Document not found.",
"file_type_not_allowed": "File type not allowed.",
"file_too_large": "File is empty or too large.",
"file_missing": "Please choose a file.",
"category_invalid": "Category not allowed.",
"visibility_forbidden": "You may not assign this visibility.",
"initial_status_not_allowed": "This initial status is not allowed."
},
"blockers": {
"checklist_item": "Checklist: {label}",
"photo_requirement": "Required photo: {label}",
"running_session": "A work session is still running",
"field": {
"signature": "Signature missing",
"approved_completion_report": "Completion report not approved yet"
}
},
"saved": "Saved."
}