L3 Auftragsimport: Prüfmaske, Upload, API und Lane-Bericht
- /imports: Upload per Drag & Drop/Dateiauswahl mit Fortschritt, Liste mit Status, Neu verarbeiten
- /imports/[id]: Originaldokument + Prüfmaske (Kunde, Objekt, Ansprechpartner, Auftrag, Positionen),
unsichere Felder markiert, Kunden-/Objektentscheidung, Bestätigen/Verwerfen
- Datei-Route für die Vorschau, Server Actions (moduleGuard("imports"))
- API: POST /api/v1/work-orders/import, GET /api/v1/imports/[id], POST /api/v1/imports/[id]/confirm
- Texte messages/{de,en}/imports.json, Bericht docs/craftvia/lanes/import.md
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,209 @@
|
||||
{
|
||||
"crumb": "Aufträge",
|
||||
"title": "Auftragsimport",
|
||||
"sub": "Auftragsbestätigung hochladen, erkannte Daten prüfen und den Auftrag anlegen. Ohne Bestätigung entsteht kein Auftrag.",
|
||||
"noPermission": "Für den Auftragsimport fehlt die Berechtigung.",
|
||||
"upload": {
|
||||
"title": "Dokument hochladen",
|
||||
"drop": "PDF, JPG oder PNG hierher ziehen",
|
||||
"or": "oder",
|
||||
"choose": "Datei auswählen",
|
||||
"limits": "PDF bis 25 MB, Bilder bis 15 MB. Das Original bleibt am Auftrag gespeichert.",
|
||||
"uploading": "Wird hochgeladen … {percent} %",
|
||||
"done": "Hochgeladen. Daten werden erkannt.",
|
||||
"errors": {
|
||||
"file_type_not_allowed": "Dateityp nicht erlaubt. Erlaubt sind PDF, JPG und PNG.",
|
||||
"file_too_large": "Datei ist zu groß.",
|
||||
"file_type_mismatch": "Dateiinhalt passt nicht zum Dateityp.",
|
||||
"file_empty": "Datei ist leer.",
|
||||
"file_missing": "Keine Datei ausgewählt.",
|
||||
"forbidden": "Keine Berechtigung.",
|
||||
"unauthorized": "Sitzung abgelaufen. Bitte neu anmelden.",
|
||||
"network": "Hochladen fehlgeschlagen. Verbindung prüfen.",
|
||||
"error": "Hochladen fehlgeschlagen."
|
||||
}
|
||||
},
|
||||
"list": {
|
||||
"title": "Importe",
|
||||
"empty": "Noch keine Importe. Laden Sie eine Auftragsbestätigung hoch.",
|
||||
"file": "Datei",
|
||||
"uploadedAt": "Hochgeladen",
|
||||
"uploadedBy": "Von",
|
||||
"status": "Status",
|
||||
"action": "Aktion",
|
||||
"review": "Prüfen",
|
||||
"open": "Ansehen",
|
||||
"workOrder": "Auftrag {number}"
|
||||
},
|
||||
"status": {
|
||||
"uploaded": "Hochgeladen",
|
||||
"processing": "Verarbeitung",
|
||||
"review_required": "Prüfung erforderlich",
|
||||
"confirmed": "Bestätigt",
|
||||
"failed": "Fehlgeschlagen",
|
||||
"discarded": "Verworfen"
|
||||
},
|
||||
"actions": {
|
||||
"retry": "Neu verarbeiten",
|
||||
"retrying": "Wird gestartet …",
|
||||
"discard": "Verwerfen",
|
||||
"discardConfirm": "Import verwerfen? Es wird kein Auftrag angelegt. Das Originaldokument bleibt gespeichert.",
|
||||
"confirm": "Bestätigen und Auftrag anlegen",
|
||||
"confirming": "Auftrag wird angelegt …"
|
||||
},
|
||||
"detail": {
|
||||
"back": "Zurück zu den Importen",
|
||||
"meta": "{file} · hochgeladen am {date} von {user}",
|
||||
"model": "Erkannt mit {model}",
|
||||
"preview": "Originaldokument",
|
||||
"previewTitle": "Vorschau des Originaldokuments",
|
||||
"openNewTab": "In neuem Tab öffnen",
|
||||
"download": "Herunterladen",
|
||||
"processing": "Das Dokument wird verarbeitet. Die Seite aktualisiert sich automatisch.",
|
||||
"failed": "Die Verarbeitung ist fehlgeschlagen.",
|
||||
"failedDetail": "Technischer Hinweis: {message}",
|
||||
"confirmed": "Import bestätigt. Auftrag {number} wurde angelegt.",
|
||||
"openWorkOrder": "Auftrag öffnen",
|
||||
"corrections": "{count, plural, =0 {Keine Korrekturen} one {1 Feld korrigiert} other {# Felder korrigiert}}",
|
||||
"discarded": "Import verworfen. Es wurde kein Auftrag angelegt.",
|
||||
"extractedText": "Erkannter Text",
|
||||
"noText": "Kein Text erkannt."
|
||||
},
|
||||
"review": {
|
||||
"title": "Erkannte Daten prüfen",
|
||||
"intro": "Unsichere Felder sind markiert. Bitte prüfen und bei Bedarf korrigieren.",
|
||||
"manualEntry": "Keine automatische Erkennung verfügbar. Bitte Daten manuell erfassen.",
|
||||
"hintsTitle": "Hinweise zur Plausibilität",
|
||||
"uncertain": "unsicher",
|
||||
"confidence": "Sicherheit {percent} %",
|
||||
"source": "Quelle: {text}",
|
||||
"required": "Pflichtfeld",
|
||||
"sections": {
|
||||
"customer": "Kunde",
|
||||
"site": "Objekt",
|
||||
"contact": "Ansprechpartner",
|
||||
"order": "Auftrag",
|
||||
"positions": "Positionen und Material"
|
||||
},
|
||||
"customer": {
|
||||
"existing": "Bestehenden Kunden verwenden",
|
||||
"new": "Neuen Kunden anlegen",
|
||||
"candidates": "Mögliche Treffer im Kundenstamm",
|
||||
"noCandidates": "Keine passenden Kunden gefunden.",
|
||||
"match": "Übereinstimmung {percent} %",
|
||||
"merge": "Dubletten im Kundenstamm zusammenführen",
|
||||
"search": "Kunden suchen",
|
||||
"searchPlaceholder": "Name, Kundennummer oder Ort",
|
||||
"searchButton": "Suchen",
|
||||
"searchEmpty": "Keine Kunden gefunden.",
|
||||
"select": "Auswählen"
|
||||
},
|
||||
"site": {
|
||||
"none": "Kein Objekt zuordnen",
|
||||
"existing": "Bestehendes Objekt verwenden",
|
||||
"new": "Neues Objekt anlegen",
|
||||
"noSites": "Für den gewählten Kunden sind keine Objekte angelegt.",
|
||||
"chooseCustomer": "Zuerst einen bestehenden Kunden auswählen.",
|
||||
"suggested": "Gleiche Adresse"
|
||||
},
|
||||
"reasons": {
|
||||
"customer_number": "Kundennummer",
|
||||
"company_name": "Firmenname",
|
||||
"company_name_similar": "ähnlicher Firmenname",
|
||||
"person_name": "Name",
|
||||
"email": "E-Mail",
|
||||
"phone": "Telefon",
|
||||
"address": "Adresse",
|
||||
"house_number": "Hausnummer",
|
||||
"site_name": "Objektname"
|
||||
},
|
||||
"fields": {
|
||||
"customerNumber": "Kundennummer",
|
||||
"companyName": "Firmenname",
|
||||
"firstName": "Vorname",
|
||||
"lastName": "Nachname",
|
||||
"street": "Straße",
|
||||
"houseNumber": "Hausnummer",
|
||||
"postalCode": "PLZ",
|
||||
"city": "Ort",
|
||||
"country": "Land",
|
||||
"phone": "Telefon",
|
||||
"email": "E-Mail",
|
||||
"name": "Name",
|
||||
"siteName": "Objektbezeichnung",
|
||||
"title": "Auftragstitel",
|
||||
"externalOrderNumber": "Auftragsnummer (Dokument)",
|
||||
"offerNumber": "Angebotsnummer",
|
||||
"description": "Leistungsbeschreibung",
|
||||
"plannedStart": "Geplanter Beginn",
|
||||
"plannedEnd": "Geplantes Ende",
|
||||
"notes": "Besondere Hinweise"
|
||||
},
|
||||
"extractionFields": {
|
||||
"orderNumber": "Auftragsnummer",
|
||||
"offerNumber": "Angebotsnummer",
|
||||
"customerNumber": "Kundennummer",
|
||||
"companyName": "Firmenname",
|
||||
"customerFirstName": "Vorname",
|
||||
"customerLastName": "Nachname",
|
||||
"customerAddress": "Kundenadresse",
|
||||
"siteName": "Objekt",
|
||||
"siteAddress": "Objektadresse",
|
||||
"contactName": "Ansprechpartner",
|
||||
"phone": "Telefon",
|
||||
"email": "E-Mail",
|
||||
"orderDate": "Auftragsdatum",
|
||||
"documentDate": "Dokumentdatum",
|
||||
"plannedStart": "Geplanter Beginn",
|
||||
"plannedEnd": "Geplantes Ende",
|
||||
"title": "Titel",
|
||||
"description": "Leistungsbeschreibung",
|
||||
"positions": "Positionen",
|
||||
"notes": "Hinweise",
|
||||
"totalAmount": "Gesamtbetrag",
|
||||
"references": "Referenzen"
|
||||
},
|
||||
"hints": {
|
||||
"date_invalid": "{field}: Datum nicht lesbar.",
|
||||
"date_implausible": "{field}: Datum liegt ungewöhnlich weit in Vergangenheit oder Zukunft.",
|
||||
"postal_code_invalid": "{field}: Postleitzahl ist nicht 5-stellig.",
|
||||
"email_invalid": "{field}: E-Mail-Adresse hat kein gültiges Format.",
|
||||
"phone_invalid": "{field}: Telefonnummer hat kein gültiges Format.",
|
||||
"end_before_start": "{field}: Ende liegt vor dem Beginn.",
|
||||
"manual_entry": "Keine automatische Erkennung verfügbar. Bitte manuell erfassen."
|
||||
},
|
||||
"positions": {
|
||||
"name": "Bezeichnung",
|
||||
"articleNumber": "Artikelnr.",
|
||||
"quantity": "Menge",
|
||||
"unit": "Einheit",
|
||||
"asMaterial": "als Materialvorgabe übernehmen",
|
||||
"remove": "Position entfernen",
|
||||
"add": "Position hinzufügen",
|
||||
"empty": "Keine Positionen erkannt."
|
||||
}
|
||||
},
|
||||
"errors": {
|
||||
"form_invalid": "Bitte die markierten Felder prüfen.",
|
||||
"title_required": "Auftragstitel fehlt.",
|
||||
"customer_required": "Bitte einen Kunden auswählen.",
|
||||
"customer_name_required": "Firmenname oder Nachname angeben.",
|
||||
"site_required": "Bitte ein Objekt auswählen.",
|
||||
"site_name_required": "Objektbezeichnung oder Straße angeben.",
|
||||
"site_requires_existing_customer": "Ein bestehendes Objekt setzt einen bestehenden Kunden voraus.",
|
||||
"email_invalid": "E-Mail-Adresse hat kein gültiges Format.",
|
||||
"postal_code_invalid": "Postleitzahl muss 5-stellig sein.",
|
||||
"end_before_start": "Ende liegt vor dem Beginn.",
|
||||
"date_invalid": "Datum nicht lesbar.",
|
||||
"quantity_invalid": "Menge muss eine Zahl sein.",
|
||||
"customer_number_taken": "Diese Kundennummer ist bereits vergeben. Bestehenden Kunden verwenden oder Nummer leeren.",
|
||||
"import_not_reviewable": "Dieser Import wurde bereits bearbeitet.",
|
||||
"import_not_discardable": "Dieser Import kann nicht mehr verworfen werden.",
|
||||
"import_not_retryable": "Nur fehlgeschlagene Importe können neu verarbeitet werden.",
|
||||
"not_found": "Datensatz nicht gefunden.",
|
||||
"forbidden": "Keine Berechtigung für diese Aktion.",
|
||||
"file_unavailable": "Originaldatei ist nicht verfügbar.",
|
||||
"dispatch_failed": "Verarbeitung konnte nicht gestartet werden.",
|
||||
"error": "Vorgang nicht möglich."
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user