refactor: E-Rechnungs-Modul, Freigabe-Workflow und DATEV-Export entfernt
Entfernt ZUGFeRD/Factur-X-Anreicherung (Mustangproject), PAdES-Signatur (BouncyCastle/DSS) inkl. nutzerseitiger Keystore-Verwaltung, den Approval-Workflow für Storno-/Berichtigungsbelege sowie den DATEV-CSV-Export. Navigation kehrt zur klassischen Rechnungsansicht zurück; Version auf 0.9.17. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -95,34 +95,4 @@ spring.ai.openai.read-timeout=120s
|
||||
spring.ai.mcp.server.enabled=true
|
||||
spring.ai.mcp.server.name=votianlt-mcp-server
|
||||
spring.ai.mcp.server.version=1.0.0
|
||||
spring.ai.mcp.server.sse-message-endpoint=/mcp/message
|
||||
|
||||
# ===========================================
|
||||
# E-Rechnung (ZUGFeRD/Factur-X) und PAdES-Signatur
|
||||
# ===========================================
|
||||
# Aktivieren Sie die ZUGFeRD-Anreicherung systemweit. Pro Nutzer entscheidet
|
||||
# zusätzlich das Profilfeld eInvoiceEnabled, ob es tatsächlich angewendet wird.
|
||||
votianlt.einvoice.enabled=false
|
||||
votianlt.einvoice.profile=EN16931
|
||||
|
||||
# PAdES-Signatur: nur aktiv, wenn unten ein gültiger Keystore konfiguriert ist.
|
||||
votianlt.einvoice.signing.enabled=false
|
||||
votianlt.einvoice.signing.keystore-path=
|
||||
votianlt.einvoice.signing.keystore-password=
|
||||
votianlt.einvoice.signing.key-alias=
|
||||
votianlt.einvoice.signing.reason=Rechnung
|
||||
votianlt.einvoice.signing.location=
|
||||
votianlt.einvoice.signing.contact=
|
||||
# Master-Key (>= 16 Zeichen) zum Verschlüsseln nutzerseitig hinterlegter PKCS#12-Keystores.
|
||||
# Verlust dieses Keys macht alle gespeicherten Nutzer-Keystores unbrauchbar.
|
||||
#
|
||||
# SICHERHEITSEMPFEHLUNG (Stufe 2/3):
|
||||
# - Den Key NIEMALS inline hier hinterlegen — nutzen Sie ENV oder eine Secret-Datei.
|
||||
# - ENV-Variante: VOTIANLT_EINVOICE_SIGNING_MASTER_KEY=...
|
||||
# (oder Lower-Case-Equivalent via Spring Relaxed Binding)
|
||||
# - Secret-Datei-Variante: master-key-file zeigt auf eine Datei (Docker-/K8s-Secret),
|
||||
# chmod 600 auf Bare-Metal/VM-Deployments.
|
||||
# - Die Spring-Placeholder-Syntax ${VAR:default} liest die ENV automatisch.
|
||||
# - application.properties selbst sollte nicht weltlesbar sein (chmod 600).
|
||||
votianlt.einvoice.signing.master-key=${VOTIANLT_EINVOICE_SIGNING_MASTER_KEY:}
|
||||
votianlt.einvoice.signing.master-key-file=${VOTIANLT_EINVOICE_SIGNING_MASTER_KEY_FILE:}
|
||||
spring.ai.mcp.server.sse-message-endpoint=/mcp/message
|
||||
@@ -9,17 +9,6 @@ nav.customers=Adressbuch
|
||||
nav.appusers=App-Nutzer
|
||||
nav.statistics=Statistiken
|
||||
nav.invoices=Rechnungen
|
||||
nav.datev.export=DATEV-Export
|
||||
nav.approvals=Freigaben
|
||||
datev.export.title=DATEV-Export
|
||||
datev.export.description=Lädt einen DATEV-kompatiblen Buchungsstapel mit allen festgeschriebenen Rechnungen des gewählten Zeitraums herunter. Die Datei kann in DATEV Unternehmen Online sowie in DATEV-importfähigen Drittprogrammen eingelesen werden.
|
||||
datev.export.from=Von
|
||||
datev.export.to=Bis
|
||||
datev.export.button=Rechnungen exportieren
|
||||
datev.export.success=Export erstellt: {0}
|
||||
datev.export.error.dates=Bitte Von- und Bis-Datum auswählen.
|
||||
datev.export.error.range=Das Bis-Datum darf nicht vor dem Von-Datum liegen.
|
||||
datev.export.error.user=Aktueller Nutzer konnte nicht ermittelt werden.
|
||||
nav.messages=Nachrichten
|
||||
nav.profile=Mein Profil
|
||||
nav.myinvoices=Rechnungen
|
||||
@@ -58,36 +47,6 @@ profile.settings.digitalprocess.info=Aufträge werden digital über die App abge
|
||||
profile.settings.locateappuser=App-Nutzer orten
|
||||
profile.settings.locateappuser.info=Standort der App-Nutzer wird regelmäßig übertragen
|
||||
profile.settings.vatrate=Umsatzsteuer
|
||||
profile.settings.einvoice=ZUGFeRD-E-Rechnung erstellen
|
||||
profile.settings.einvoice.helper=Erzeugt PDF/A-3 mit eingebettetem XRechnung/ZUGFeRD-XML (sofern systemweit aktiviert).
|
||||
profile.settings.signinvoices=Rechnungen digital signieren
|
||||
profile.settings.signinvoices.helper=Erzeugt eine PAdES-Signatur mit dem hinterlegten Zertifikat. Ohne aktives Zertifikat schlägt das Speichern fehl.
|
||||
profile.signing.title=Signatur-Zertifikat
|
||||
profile.signing.hint=Hinterlegen Sie Ihr eigenes PKCS#12-Zertifikat (.p12/.pfx), damit Ihre Rechnungen mit Ihrer Signatur erstellt werden. Der private Schlüssel wird verschlüsselt in der Datenbank gespeichert.
|
||||
profile.signing.masterkey.missing=Hinweis: Der Server-Master-Key ist nicht gesetzt. Bitten Sie Ihren Administrator, votianlt.einvoice.signing.master-key zu konfigurieren, bevor Sie ein Zertifikat hinterlegen.
|
||||
profile.signing.none=Es ist noch kein eigenes Signatur-Zertifikat hinterlegt. Beim Signieren wird der systemweit konfigurierte Schlüssel verwendet.
|
||||
profile.signing.metadata.alias=Alias
|
||||
profile.signing.metadata.subject=Inhaber
|
||||
profile.signing.metadata.issuer=Aussteller
|
||||
profile.signing.metadata.serial=Seriennummer
|
||||
profile.signing.metadata.validity=Gültig
|
||||
profile.signing.expired=Zertifikat abgelaufen
|
||||
profile.signing.expiring=Läuft in den nächsten 30 Tagen ab
|
||||
profile.signing.enabled=Eigenes Zertifikat zum Signieren verwenden
|
||||
profile.signing.toggle.saved=Einstellung gespeichert.
|
||||
profile.signing.delete=Zertifikat entfernen
|
||||
profile.signing.deleted=Signatur-Zertifikat entfernt.
|
||||
profile.signing.upload.title=Zertifikat hochladen
|
||||
profile.signing.upload.drop=PKCS#12-Datei hier ablegen oder klicken
|
||||
profile.signing.upload.received=Datei empfangen — bitte Alias und Passwort angeben.
|
||||
profile.signing.upload.required=Bitte zuerst eine Zertifikatsdatei hochladen.
|
||||
profile.signing.upload.save=Speichern
|
||||
profile.signing.alias=Schlüssel-Alias
|
||||
profile.signing.alias.required=Bitte den Alias des Schlüssels angeben.
|
||||
profile.signing.password=Keystore-Passwort
|
||||
profile.signing.password.required=Bitte das Keystore-Passwort angeben.
|
||||
profile.signing.saved=Signatur-Zertifikat gespeichert.
|
||||
profile.signing.error=Speichern fehlgeschlagen
|
||||
profile.account=Konto
|
||||
profile.security=Sicherheit
|
||||
profile.security.twofactor=Zwei-Faktor-Authentifizierung
|
||||
@@ -798,8 +757,6 @@ invoices.audit.action.replaced=Ersetzt durch neue Rechnung
|
||||
invoices.audit.action.deleted_draft=Entwurf gelöscht
|
||||
invoices.audit.action.payment_recorded=Zahlung erfasst
|
||||
invoices.audit.resulting=Erzeugter Folgebeleg: {0}
|
||||
invoices.column.payment=Zahlung
|
||||
invoices.column.outstanding=Offen
|
||||
invoices.payment.unpaid=Offen
|
||||
invoices.payment.partially_paid=Teilzahlung
|
||||
invoices.payment.paid=Bezahlt
|
||||
@@ -815,28 +772,6 @@ invoices.payment.reference=Zahlungsreferenz (z.B. Kontoauszug, Buchungs-Nr.)
|
||||
invoices.payment.reason=Anmerkung
|
||||
invoices.payment.confirm=Zahlung erfassen
|
||||
invoices.notification.payment=Zahlung erfasst.
|
||||
invoices.einvoice.tooltip=PDF/A-3 mit eingebettetem ZUGFeRD/XRechnung-XML
|
||||
invoices.einvoice.signed=Signiert
|
||||
invoices.action.cancel.request=Storno beantragen
|
||||
invoices.action.correct.request=Berichtigung beantragen
|
||||
invoices.notification.requested=Freigabe-Anfrage erstellt. Bitte auf Freigabe warten.
|
||||
approvals.title=Freigaben
|
||||
approvals.no.permission=Sie haben keine Berechtigung, Freigaben zu bearbeiten.
|
||||
approvals.column.requested=Beantragt am
|
||||
approvals.column.requester=Beantragt von
|
||||
approvals.column.invoice=Rechnung
|
||||
approvals.column.action=Aktion
|
||||
approvals.column.reason=Grund
|
||||
approvals.action.approve=Freigeben
|
||||
approvals.action.reject=Ablehnen
|
||||
approvals.confirm.approve.title=Anfrage zu Rechnung {0} freigeben
|
||||
approvals.confirm.reject.title=Anfrage zu Rechnung {0} ablehnen
|
||||
approvals.review.fields=Berichtigte Angaben
|
||||
approvals.review.reason=Grund
|
||||
approvals.review.comment=Kommentar (optional)
|
||||
approvals.notification.approved=Anfrage freigegeben — Folgebeleg wurde erstellt.
|
||||
approvals.notification.rejected=Anfrage abgelehnt.
|
||||
page.title.approvals=Freigaben
|
||||
|
||||
# My Invoices
|
||||
myinvoices.title=Rechnungen
|
||||
|
||||
@@ -9,17 +9,6 @@ nav.customers=Address Book
|
||||
nav.appusers=App Users
|
||||
nav.statistics=Statistics
|
||||
nav.invoices=Invoices
|
||||
nav.datev.export=DATEV Export
|
||||
nav.approvals=Approvals
|
||||
datev.export.title=DATEV Export
|
||||
datev.export.description=Downloads a DATEV-compatible booking batch containing all finalized invoices for the selected period. The file can be imported into DATEV Unternehmen Online as well as DATEV-compatible third-party tools.
|
||||
datev.export.from=From
|
||||
datev.export.to=To
|
||||
datev.export.button=Export invoices
|
||||
datev.export.success=Export created: {0}
|
||||
datev.export.error.dates=Please pick both From and To dates.
|
||||
datev.export.error.range=To date must not be before From date.
|
||||
datev.export.error.user=Could not determine the current user.
|
||||
nav.messages=Messages
|
||||
nav.profile=My Profile
|
||||
nav.myinvoices=Invoices
|
||||
@@ -58,36 +47,6 @@ profile.settings.digitalprocess.info=Jobs are processed digitally via the app
|
||||
profile.settings.locateappuser=Locate App Users
|
||||
profile.settings.locateappuser.info=App user location is transmitted regularly
|
||||
profile.settings.vatrate=VAT rate
|
||||
profile.settings.einvoice=Create ZUGFeRD e-invoice
|
||||
profile.settings.einvoice.helper=Generates PDF/A-3 with embedded XRechnung/ZUGFeRD XML (when enabled system-wide).
|
||||
profile.settings.signinvoices=Digitally sign invoices
|
||||
profile.settings.signinvoices.helper=Adds a PAdES signature using the configured certificate. Saving fails if no active certificate is available.
|
||||
profile.signing.title=Signing certificate
|
||||
profile.signing.hint=Upload your own PKCS#12 certificate (.p12/.pfx) so invoices are signed with your signature. The private key is stored encrypted in the database.
|
||||
profile.signing.masterkey.missing=Note: The server master key is not configured. Ask your administrator to set votianlt.einvoice.signing.master-key before uploading a certificate.
|
||||
profile.signing.none=No personal signing certificate stored yet. The system-wide key will be used when signing.
|
||||
profile.signing.metadata.alias=Alias
|
||||
profile.signing.metadata.subject=Subject
|
||||
profile.signing.metadata.issuer=Issuer
|
||||
profile.signing.metadata.serial=Serial number
|
||||
profile.signing.metadata.validity=Valid
|
||||
profile.signing.expired=Certificate expired
|
||||
profile.signing.expiring=Expires within the next 30 days
|
||||
profile.signing.enabled=Use my certificate for signing
|
||||
profile.signing.toggle.saved=Setting saved.
|
||||
profile.signing.delete=Remove certificate
|
||||
profile.signing.deleted=Signing certificate removed.
|
||||
profile.signing.upload.title=Upload certificate
|
||||
profile.signing.upload.drop=Drop your PKCS#12 file here or click to upload
|
||||
profile.signing.upload.received=File received — please provide alias and password.
|
||||
profile.signing.upload.required=Please upload a certificate file first.
|
||||
profile.signing.upload.save=Save
|
||||
profile.signing.alias=Key alias
|
||||
profile.signing.alias.required=Please provide the key alias.
|
||||
profile.signing.password=Keystore password
|
||||
profile.signing.password.required=Please provide the keystore password.
|
||||
profile.signing.saved=Signing certificate saved.
|
||||
profile.signing.error=Save failed
|
||||
profile.account=Account
|
||||
profile.security=Security
|
||||
profile.security.twofactor=Two-Factor Authentication
|
||||
@@ -798,8 +757,6 @@ invoices.audit.action.replaced=Replaced by new invoice
|
||||
invoices.audit.action.deleted_draft=Draft deleted
|
||||
invoices.audit.action.payment_recorded=Payment recorded
|
||||
invoices.audit.resulting=Resulting document: {0}
|
||||
invoices.column.payment=Payment
|
||||
invoices.column.outstanding=Outstanding
|
||||
invoices.payment.unpaid=Open
|
||||
invoices.payment.partially_paid=Partially paid
|
||||
invoices.payment.paid=Paid
|
||||
@@ -815,28 +772,6 @@ invoices.payment.reference=Payment reference (e.g. statement, booking ID)
|
||||
invoices.payment.reason=Note
|
||||
invoices.payment.confirm=Record payment
|
||||
invoices.notification.payment=Payment recorded.
|
||||
invoices.einvoice.tooltip=PDF/A-3 with embedded ZUGFeRD/XRechnung XML
|
||||
invoices.einvoice.signed=Signed
|
||||
invoices.action.cancel.request=Request cancellation
|
||||
invoices.action.correct.request=Request correction
|
||||
invoices.notification.requested=Approval request created. Please wait for approval.
|
||||
approvals.title=Approvals
|
||||
approvals.no.permission=You do not have permission to handle approvals.
|
||||
approvals.column.requested=Requested at
|
||||
approvals.column.requester=Requested by
|
||||
approvals.column.invoice=Invoice
|
||||
approvals.column.action=Action
|
||||
approvals.column.reason=Reason
|
||||
approvals.action.approve=Approve
|
||||
approvals.action.reject=Reject
|
||||
approvals.confirm.approve.title=Approve request for invoice {0}
|
||||
approvals.confirm.reject.title=Reject request for invoice {0}
|
||||
approvals.review.fields=Corrected information
|
||||
approvals.review.reason=Reason
|
||||
approvals.review.comment=Comment (optional)
|
||||
approvals.notification.approved=Request approved — follow-up document created.
|
||||
approvals.notification.rejected=Request rejected.
|
||||
page.title.approvals=Approvals
|
||||
|
||||
# My Invoices
|
||||
myinvoices.title=Invoices
|
||||
|
||||
Reference in New Issue
Block a user