Files
craftvia/messages/de/notifications.json
T
msolarczekandClaude Opus 5 7b37c41a83 L6 Benachrichtigungen & Audit: Empfängerregeln, In-App-Benachrichtigungen und Craftvia-Mails
- handleEvent (Signatur unverändert) löst alle 17 Domain-Events auf: Team/Assignees,
  Backoffice (read_all + report:approve), Teamleiter-Freigaben, Ersteller, Abrechnung,
  Notdienst, Import, Sync; Akteur ausgenommen, alle IDs über ctx.db neu aufgelöst.
- In-App-Notification über ctx.db (ungelesene gleiche Meldung wird aufgefrischt),
  E-Mail über enqueueMail mit dedupeKey event:entity:user (+ optional occurrenceId),
  Opt-out je Typ, Notdienst als Pflichtmail, feste Empfänger ohne Doppelmail.
- Mail-Templates craftvia_* (de/en) inkl. Notdienst-Format Spec §19.4 und Craftvia-Fußzeile.
- Migration tenant_mail_settings: mailFromName, mailReplyTo, emergencyRecipients,
  billingRecipients an tenant_settings (keine neue Tabelle).
- Texte aus messages/{de,en}/notifications.json.
- Test scripts/test-benachrichtigungen-events.ts (63 Prüfungen).

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

184 lines
8.0 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.
{
"bell": {
"label": "Benachrichtigungen",
"unreadCount": "{count, plural, =0 {Keine ungelesenen} one {# ungelesen} other {# ungelesen}}",
"empty": "Keine Benachrichtigungen.",
"markAllRead": "Alle gelesen",
"showAll": "Alle anzeigen"
},
"list": {
"crumb": "Übersicht",
"title": "Benachrichtigungen",
"sub": "Zuweisungen, Berichte, Notdienst und Fehler – neueste zuerst.",
"filterStatus": "Status",
"filterType": "Art",
"statusAll": "Alle",
"statusUnread": "Ungelesen",
"statusRead": "Gelesen",
"typeAll": "Alle Arten",
"apply": "Filtern",
"reset": "Zurücksetzen",
"empty": "Keine Benachrichtigungen für diese Auswahl.",
"unread": "Neu",
"read": "Gelesen",
"open": "Öffnen",
"markRead": "Als gelesen markieren",
"markAllRead": "Alle als gelesen markieren",
"previous": "Zurück",
"next": "Weiter",
"page": "Seite {page} von {pages}"
},
"types": {
"work_order_assigned": "Teamzuweisung",
"work_order_changed": "Auftrag geändert",
"work_order_cancelled": "Auftrag storniert",
"work_order_started": "Auftrag gestartet",
"work_order_daily_report_created": "Tagesbericht erstellt",
"work_order_technically_completed": "Technisch abgeschlossen",
"work_order_signature_missing": "Unterschrift fehlt",
"work_order_missing_required": "Pflichtangaben fehlen",
"work_order_released_for_billing": "Zur Abrechnung freigegeben",
"report_submitted": "Bericht zur Prüfung",
"report_approved": "Bericht freigegeben",
"report_rejected": "Bericht zurückgewiesen",
"emergency_created": "Notdiensteinsatz erstellt",
"emergency_completed": "Notdiensteinsatz abgeschlossen",
"import_ready_for_review": "Import zur Prüfung",
"import_failed": "Fehler bei Dokumentverarbeitung",
"sync_failed": "Synchronisationsfehler"
},
"events": {
"work_order_assigned": { "title": "Neuer Auftrag {number}", "message": "{title} – {customer} wurde Ihrem Team zugewiesen." },
"work_order_changed": { "title": "Auftrag {number} geändert", "message": "{title} – {customer}: Angaben wurden aktualisiert." },
"work_order_cancelled": { "title": "Auftrag {number} storniert", "message": "{title} – {customer} wurde storniert." },
"work_order_started": { "title": "Auftrag {number} gestartet", "message": "{actor} hat den Einsatz bei {customer} begonnen." },
"work_order_daily_report_created": { "title": "Tagesbericht zu {number}", "message": "{actor} hat einen Tagesbericht für {customer} erstellt." },
"work_order_technically_completed": { "title": "Auftrag {number} technisch abgeschlossen", "message": "{title} – {customer}: Einsatz vor Ort beendet." },
"work_order_signature_missing": { "title": "Unterschrift fehlt: {number}", "message": "{title} – {customer}: Kundenunterschrift liegt nicht vor." },
"work_order_missing_required": { "title": "Pflichtangaben fehlen: {number}", "message": "{title} – {customer}: Dokumentation unvollständig." },
"work_order_released_for_billing": { "title": "Auftrag {number} zur Abrechnung", "message": "{title} – {customer} ist bereit zur Abrechnung." },
"report_submitted": { "title": "Bericht zur Prüfung: {number}", "message": "{actor} hat einen Bericht zu {title} eingereicht." },
"report_approved": { "title": "Bericht freigegeben: {number}", "message": "Der Bericht zu {title} wurde freigegeben." },
"report_rejected": { "title": "Bericht zurückgewiesen: {number}", "message": "Der Bericht zu {title} braucht eine Korrektur." },
"emergency_created": { "title": "Notdiensteinsatz {number} erstellt", "message": "{actor} hat einen Notdiensteinsatz bei {customer} angelegt." },
"emergency_completed": { "title": "Notdiensteinsatz {number} abgeschlossen", "message": "{customer}: zur Prüfung und Abrechnung." },
"import_ready_for_review": { "title": "Import zur Prüfung bereit", "message": "Die Daten aus {fileName} liegen zur Prüfung vor." },
"import_failed": { "title": "Fehler bei Dokumentverarbeitung", "message": "{fileName} konnte nicht verarbeitet werden." },
"sync_failed": { "title": "Synchronisation fehlgeschlagen", "message": "Eine Änderung konnte nicht übernommen werden ({reason})." }
},
"fallback": {
"unknown": "unbekannt",
"system": "System",
"document": "Dokument"
},
"preferences": {
"title": "Benachrichtigungen",
"sub": "In der App erhalten Sie alle Benachrichtigungen. Hier legen Sie fest, welche zusätzlich per E-Mail kommen.",
"email": "E-Mail",
"mandatory": "Pflicht – nicht abbestellbar",
"save": "Speichern",
"saved": "Einstellungen gespeichert."
},
"mailSettings": {
"crumb": "Einstellungen",
"title": "E-Mail-Versand",
"sub": "Absender, Antwortadresse und feste Empfänger für Notdienst und Abrechnung.",
"back": "Zurück zu Einstellungen",
"sender": "Absender",
"fromName": "Absendername",
"fromNameHint": "Erscheint als Name im Posteingang. Leer = Firmenname.",
"fromAddress": "Absenderadresse",
"fromAddressHint": "Die Adresse bleibt {address}, damit Mails zugestellt werden (SPF/DKIM).",
"replyTo": "Antwortadresse",
"replyToHint": "Antworten auf Benachrichtigungen gehen an diese Adresse.",
"recipients": "Feste Empfänger",
"emergencyRecipients": "Empfänger Notdienst",
"emergencyHint": "Eine Adresse je Zeile. Erhalten jeden neuen und abgeschlossenen Notdiensteinsatz.",
"billingRecipients": "Empfänger Abrechnung",
"billingHint": "Eine Adresse je Zeile. Erhalten Aufträge, die zur Abrechnung freigegeben sind. Leer = Backoffice.",
"save": "Speichern",
"saved": "Einstellungen gespeichert.",
"invalid": "Bitte Eingaben prüfen: {detail}"
},
"audit": {
"crumb": "Einstellungen",
"title": "Audit-Protokoll",
"sub": "Wer hat wann was geändert – nur lesbar.",
"back": "Zurück zu Einstellungen",
"from": "Von",
"to": "Bis",
"actor": "Benutzer",
"actorAll": "Alle Benutzer",
"action": "Aktion",
"actionAll": "Alle Aktionen",
"entity": "Objektart",
"entityAll": "Alle Objektarten",
"entityId": "Objekt-ID",
"apply": "Filtern",
"reset": "Zurücksetzen",
"time": "Zeitpunkt",
"object": "Objekt",
"result": "Ergebnis",
"resultOk": "Erfolgreich",
"resultDenied": "Abgelehnt",
"details": "Details",
"empty": "Keine Einträge für diese Auswahl.",
"total": "{count, plural, one {# Eintrag} other {# Einträge}}",
"previous": "Zurück",
"next": "Weiter",
"page": "Seite {page} von {pages}",
"system": "System",
"platform": "Plattform",
"detailTitle": "Eintrag im Audit-Protokoll",
"close": "Schließen",
"field": "Feld",
"before": "Vorher",
"after": "Nachher",
"changed": "geändert",
"noValues": "Keine Werte protokolliert.",
"ip": "IP-Adresse",
"userAgent": "User-Agent",
"notCaptured": "nicht erfasst",
"actions": {
"create": "Erstellt",
"update": "Geändert",
"delete": "Gelöscht",
"login": "Anmeldung",
"logout": "Abmeldung",
"denied": "Abgelehnt",
"export": "Export",
"import": "Import",
"provision": "Eingerichtet",
"approve": "Freigegeben",
"reject": "Zurückgewiesen"
},
"entities": {
"user": "Benutzer",
"role": "Rolle",
"tenant": "Mandant",
"tenant_settings": "Einstellungen",
"tenant_mail_settings": "E-Mail-Versand",
"tenant_module": "Modul",
"module": "Modul",
"session": "Sitzung",
"account_inactive": "Inaktives Konto",
"work_order": "Auftrag",
"customer": "Kunde",
"site": "Objekt",
"team": "Team",
"report": "Bericht",
"signature": "Unterschrift",
"document": "Dokument",
"import_job": "Auftragsimport",
"material_usage": "Material",
"time_entry": "Arbeitszeit",
"work_session": "Einsatzzeit",
"photo": "Foto",
"voice_note": "Sprachnotiz",
"notification": "Benachrichtigung",
"notification_settings": "Benachrichtigungseinstellungen",
"sync_operation": "Synchronisation"
}
}
}