feat(kantine-datev): Kantinenabrechnung als Modul in neuer Gruppe Finanzbuchhaltung

- neue Seitenleisten-Kategorie accounting (Finanzbuchhaltung / Financial accounting)
- CSV (UTF-8, UTF-8 mit BOM, Windows-1252) pruefen, Vorschau mit Zeilenfehlern, DATEV-Lohn-ASCII-Export
- Beraternummer, Mandantennummer, Lohnart je Mandant als Admin-Einstellung (KantineDatevConfig mit Zeilenschutz), anfangs leer
- hochgeladene Daten werden nicht gespeichert; Download per Blob (auch im Desktop-Client)

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-10-02 11:32:55 +02:00
parent 0edd6e9b1a
commit 1f85277a3b
38 changed files with 2460 additions and 2 deletions
+81
View File
@@ -1618,12 +1618,93 @@
"loadError": "Die eigenen Module konnten nicht geladen werden."
}
},
"kantineDatev": {
"title": "Kantinenabrechnung",
"description": "Kantinen-CSV prüfen und als DATEV-Lohndatei für die Gehaltsabrechnung herunterladen.",
"tabs": {
"billing": "Abrechnung",
"settings": "Einstellungen"
},
"loading": "Wird geladen …",
"dropZone": {
"placeholder": "CSV-Datei hierher ziehen oder klicken",
"formats": ".csv, Semikolon-getrennt, UTF-8 oder Windows-1252",
"clear": "Datei entfernen"
},
"noStorage": "Die hochgeladenen Daten werden nicht gespeichert.",
"checking": "Datei wird geprüft …",
"notConfigured": {
"admin": "Beraternummer, Mandantennummer und Lohnart sind noch nicht hinterlegt. Ohne diese Angaben kann keine DATEV-Datei erstellt werden.",
"adminAction": "Zu den Einstellungen",
"user": "Ein Administrator muss zuerst Beraternummer, Mandantennummer und Lohnart hinterlegen."
},
"summary": {
"title": "Ergebnis der Prüfung",
"rows": "Zeilen",
"month": "Abrechnungsmonat",
"total": "Gesamtbetrag",
"noMonth": "nicht erkannt"
},
"warnings": {
"title": "Hinweise",
"multipleMonths": "Verschiedene Abrechnungsmonate erkannt: {months}. Alle Zeilen sollten im selben Abrechnungsmonat liegen."
},
"errors": {
"title": "Fehler in der Datei",
"line": "Zeile",
"field": "Feld",
"message": "Meldung",
"headerMissing": "Die Datei enthält keine Kopfzeile.",
"headerColumns": "Die Kopfzeile hat zu wenige Spalten. Ist das Trennzeichen korrekt (Semikolon)?",
"columnCount": "Die Zeile hat zu wenige Spalten.",
"personalNrMissing": "Personalnummer fehlt",
"personalNrNotNumeric": "Personalnummer muss numerisch sein",
"betragMissing": "Betrag fehlt",
"betragFormat": "Betrag muss im deutschen Zahlenformat vorliegen (Komma als Dezimaltrenner)",
"vonMissing": "Abrechnung von fehlt",
"vonFormat": "Abrechnung von muss im Format TT.MM.JJJJ vorliegen",
"bisMissing": "Abrechnung bis fehlt",
"bisFormat": "Abrechnung bis muss im Format TT.MM.JJJJ vorliegen",
"multiMonthRange": "Abrechnungszeitraum erstreckt sich über mehrere Monate",
"noRows": "Die Datei enthält keine Datenzeilen.",
"settingsMissing": "Beraternummer, Mandantennummer und Lohnart sind noch nicht hinterlegt.",
"hasErrors": "Die Datei enthält Fehler und kann nicht exportiert werden.",
"qualityCheckFailed": "Die erzeugte Datei hat die Qualitätsprüfung nicht bestanden.",
"request": "Die Anfrage ist fehlgeschlagen. Bitte versuchen Sie es erneut."
},
"fields": {
"header": "Kopfzeile",
"zeile": "Zeile",
"datei": "Datei",
"personalNr": "Personalnummer",
"betrag": "Betrag",
"abrechnungVon": "Abrechnung von",
"abrechnungBis": "Abrechnung bis",
"abrechnungVon/abrechnungBis": "Abrechnungszeitraum"
},
"download": {
"button": "DATEV-Datei herunterladen",
"busy": "Datei wird erstellt …",
"done": "Die Datei {filename} wurde heruntergeladen."
},
"settings": {
"intro": "Diese Angaben stehen im Kopf und in den Zeilen der DATEV-Datei. Sie gelten für alle Benutzer Ihres Mandanten und werden nur einmal hinterlegt.",
"beraterNr": "Beraternummer",
"mandantNr": "Mandantennummer",
"lohnart": "Lohnart",
"digitsOnly": "Bitte nur Ziffern eingeben (1 bis 10 Stellen).",
"save": "Speichern",
"saving": "Wird gespeichert …",
"saved": "Die Einstellungen wurden gespeichert."
}
},
"moduleCategories": {
"domain-tools": "Domains",
"security-tools": "Sicherheit",
"fleet": "Fuhrpark",
"infrastructure": "Infrastruktur",
"procurement": "Beschaffung",
"accounting": "Finanzbuchhaltung",
"custom-modules": "Eigene Module"
}
}