Files
craftvia/messages/de/imports.json
T
msolarczekandClaude Opus 5 b0aedb5d23 L10b Betrieb & Aufräumen: Lotse-Betrieb – Aufbewahrung KI-Protokoll und Token-Kontingent
Aufräumpunkt k (Spec §31):
- Aufbewahrung: services/lotse/retention.ts leert input/output und createdById von
  AiGeneration-Einträgen älter als AI_GENERATION_RETENTION_DAYS (Default 180), Metadaten bleiben,
  Audit je Mandant. Queue/Processor ai-retention, täglicher BullMQ-Job-Scheduler beim Start des
  craftvia-worker.
- Kontingent: services/lotse/budget.ts (Tokens ein+aus je Kalendermonat, TenantSettings-Wert vor
  Env AI_MONTHLY_TOKEN_LIMIT, 0 = unbegrenzt). Lotse-Entwurf und Sprachnotiz-Zusammenfassung
  → blocked budget_exceeded mit Klartext; Import-Extraktion fällt auf manuelle Erfassung zurück
  (Hinweis ai_budget_exceeded). /settings/lotse: Kontingent setzen, Verbrauch anzeigen.
- scripts/test-betrieb-audit.ts: Audit nach Commit/Rollback/verschachtelt, Merge atomar und in
  äußerer Transaktion, Audit „read", Aufbewahrung (Frist, Metadaten, Idempotenz, Mandant B),
  Kontingent (Mandant/Env/Vormonat/unbegrenzt, Rollen, Audit).

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

211 lines
8.4 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": "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.",
"ai_budget_exceeded": "Das monatliche KI-Kontingent ist aufgebraucht – deshalb keine automatische Erkennung."
},
"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."
}
}