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>
Größerer Wurf rund um Rechnungen: das vollständige E-Rechnungs- und
Lifecycle-Backend wird eingecheckt, die UI-seitige Rechnungserstellung wird
zugunsten eines DATEV-Exports zurückgebaut, und die Test-Infrastruktur wird
auf JDK 25 angehoben.
E-Rechnung & Signatur
- ZUGFeRD/Factur-X/XRechnung-Anreicherung via Mustang (EInvoiceService).
- PAdES-Detached-Signatur via PDFBox + BouncyCastle, System- und Nutzer-
Keystore-Pfad, Nutzer-Keystores AES-GCM-verschlüsselt (AesGcmCipher,
SigningCredentialsService, UserSigningCredentials).
- Konfiguration via EInvoiceProperties + EInvoiceSecurityInitializer.
- Approval-Workflow für kritische Rechnungsvorgänge (Storno, Berichtigung):
InvoiceApprovalService, InvoiceApprovalRequest, ApprovalsView,
InvoicePermissionService, InvoiceRoles.
Lifecycle & Audit
- InvoiceStatus DRAFT/ISSUED/SENT/CANCELLED/CORRECTED, InvoiceType
INVOICE/CORRECTION/CANCELLATION, PaymentStatus, lückenloser Audit-Trail
via InvoiceAuditEntry/Action.
- InvoiceLifecycleService verwaltet alle Übergänge inklusive Storno- und
Berichtigungsbelegen mit Querverweis zur Originalrechnung.
- InvoiceLifecycleMigration zieht Bestandsdaten in das neue Lifecycle-Modell.
- InvoiceExportService bündelt Original + Folgebelege als ZIP für die
Auslieferung an den Steuerberater.
Pflichtangaben-Validator (§ 14 UStG)
- InvoiceComplianceValidator + Exception sammeln alle Verstöße in einem
Lauf (Pflichtfelder, Adressen, Steuernummer/USt-IdNr, Items, Betrags-
konsistenz, Hinweispflicht bei 0 % USt).
- Wird vor jedem DRAFT-→-ISSUED-Übergang im Lifecycle aufgerufen, sodass
festgeschriebene Rechnungen keine Pflichtfeld-Lücken mehr haben können.
Rechnungsnummer-Audit (§ 14 Abs. 4 Nr. 4 UStG / GoBD)
- InvoiceNumberReservation + Status RESERVED/USED/VOIDED protokollieren
jede aus dem Counter gezogene Nummer.
- UserInvoiceDataService schreibt bei Vergabe ein RESERVED-Audit, der
Lifecycle setzt nach Festschreiben USED bzw. nach Löschen eines Entwurfs
VOIDED — Lücken im Nummernkreis sind dadurch erklärbar.
- InvoiceNumberAuditService liefert markUsed/markVoided/findUnused für
Folge-UI und Betriebsprüfungs-Reports.
UI-Rückbau und DATEV-Export
- Routen für CreateInvoiceView, InvoicesView, MyInvoicesView auskommentiert
(Code bleibt erhalten, Reaktivierung dokumentiert).
- Rechnungs-Buttons aus ShowJobsView entfernt, Nav-Eintrag „Rechnungen"
durch „DATEV-Export" ersetzt.
- DatevExportService erzeugt einen DATEV-EXTF-Buchungsstapel (Version 7,
Windows-1252, CRLF) mit SKR03-Erlöskonten (8400/8300/8125), Sammel-
debitor 10000 und korrektem S/H-Verhalten für Stornorechnungen.
- DatevExportView mit Zeitraum-Picker und Auto-Download.
- i18n-Keys (de/en) für nav.datev.export und datev.export.*.
Tests & Build
- EInvoiceServiceTest (Signatur-Pfade), EInvoiceServiceDssValidationTest
(PAdES-Profil via EU DSS 6.2 — dokumentiert PKCS7-B als Ist-Stand),
InvoiceComplianceValidatorTest (26 Cases als Spezifikation der
Pflichtangaben), InvoiceNumberAuditServiceTest, DatevExportServiceTest.
- Mockito 5.18 + ByteBuddy 1.17.5 in <dependencyManagement> gepinnt;
die Spring-Boot-3.4.3-Defaults (Mockito 5.14.2 / ByteBuddy 1.15.11)
konnten den Inline-Mock-Maker auf JDK 25 nicht laden, weshalb die
beiden DemoModeServiceTests vorher rot waren.
- DSS-Test-Dependencies (dss-pades-pdfbox, dss-validation,
dss-utils-apache-commons, dss-crl-parser-x509crl 6.2) im Test-Scope.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Kunden-Repository liefert auch Legacy-Dokumente ohne internal-Flag ($ne: true)
- Auftraggeber- und Abholadress-Labels über neuen CustomerAddressLabelHelper, zeigen nur Firmenname bzw. Vor-/Nachname ohne Adresszusatz
- Pickup-Dialog: E-Mail ist kein Pflichtfeld mehr
- JobManualCompleteView erhält Route-/Leistungen-/Zusammenfassung-/Bemerkung-Block mit Vorbelegung aus dem Auftrag; bei fehlenden Routendaten manuelle Eingabe von Entfernung und Dauer, die in die Preisermittlung einfliessen
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Neues Feld vatRate im User-Profil (Default 19 %), bearbeitbar im
Rechnungs-Tab neben Rechnungslegung-Checkbox und Rechnungsprefix
- Canvas-Vorschau und PDF-Vorschau reagieren live auf den eingegebenen
Steuersatz (JS-Setter updateProfileVatRate, dynamische Sample-Zeilen
und Summary)
- Neue USt-Kachel auf create_invoice mit Eingabefeld; Summary-Kachel,
PDF-Preview und gespeicherte Rechnung übernehmen den Feldwert
- Rechnungsvorschau für reale Aufträge auf dreispaltiges Layout (Name,
Steuersatz, Nettobetrag) inkl. "zzgl. X% USt"-Zeile vereinheitlicht
- Kachel-Overflow auf create_invoice durch box-sizing: border-box
korrigiert
- Menüpunkt "Kunden" in "Adressbuch" umbenannt und App-Label
"Verfügbare Jobs" zu "Auftragsliste" geändert (alle 10 Sprachen)
- Fortlaufende Kundennummer (usrId) ab 10000 über neuen
SequenceGeneratorService und Counter-Dokument in misc-Collection
- Abholung/Lieferstation-Dialog: Änderungen an verknüpften
Stammdaten aktualisieren den bestehenden Adressbuch-Eintrag
statt einen neuen zu erzeugen; Checkbox-Label wechselt zu
"Adresse im Adressbuch aktualisieren"
- Geänderte Adressen ohne Checkbox werden als interner Customer
(internal=true) gesichert und im Adressbuch ausgeblendet
- E-Mail in AddCustomer und in Stations-Dialogen kein Pflichtfeld
mehr; "(Login)" aus profile.email entfernt
- Manuelles Beenden eines Auftrags öffnet neue Seite
JobManualCompleteView statt eines Dialogs
Lieferstationen-Dialog (Backend/Vaadin):
- Aufgaben per Drag & Drop neu anordnen, inkl. Drag-Handle, komprimierter
Kachelansicht während des Drags und horizontaler Einfügelinie als Drop-Target
- Drop-Indikator wird unterdrückt, wenn der Drop keine Positionsänderung bewirken
würde, und nach dem Abschluss clientseitig zuverlässig aufgeräumt
- Drag-Handle, Aufgabentyp-Label und Close-Button auf einheitlicher Position
ausgerichtet; Abstände in der Kachel komprimiert
Station-Abschluss-Flow (Flutter-App + Backend):
- Neuer Button "Station abschließen" unter den Aufgaben; deaktiviert, solange
Pflichtaufgaben offen sind, ansonsten aktiv (auch wenn nur optionale Aufgaben
existieren)
- Hinweisdialog nach Erledigung der letzten Pflichtaufgabe sowie Warnung bei
offenen optionalen Aufgaben vor dem Senden
- Neue station_completed-Nachricht (jobId, jobNumber, stationOrder,
completedAt, hasIncompleteOptionalTasks) wird an den Server gesendet
- Backend: Auftrag wird nicht mehr automatisch beim Erledigen der letzten
Pflichtaufgabe abgeschlossen, sondern erst beim Empfang der
station_completed-Nachricht (neuer Handler in MessageController und
MessagingConfig)
Aufgabenliste in der App:
- Farbcodierung optionaler Aufgaben entfernt; stattdessen vertikal zentrierter
"Optional"-Chip am rechten Kartenrand
Weitere UI-Überarbeitungen über Login, Jobs, Chats, Settings, Aufgaben-Capture-
Screens, Offline-Banner und zugehörige Widgets.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
App:
- Skip-Button für optionale Aufgaben entfernt — optionale Aufgaben blockieren
nicht mehr den Fortschritt und können jederzeit nachträglich bearbeitet werden
Backend:
- Manuelle Auftragsbeendigung mit Begründung in der Job-Zusammenfassung hinzugefügt
- Leere Lieferstationen werden beim Übernehmen automatisch entfernt
- E-Mail-Benachrichtigungen zeigen jetzt den tatsächlichen App-Benutzernamen an
- WebSocket: konfigurierbare Max-Nachrichtengröße und Session-Idle-Timeout
- docker_push.sh Pfadkorrektur
- Lokalisierungen für 10 Sprachen aktualisiert
- EmailService-Test hinzugefügt
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- E-Mail-Feld in Abhol- und Zustellstationsdialogen hinzugefügt
- E-Mail-Pflichtfeld bei "Adresse speichern" mit Validierung
- Kundenvalidierung im Backend (E-Mail Pflicht und Formatprüfung)
- "Adresse speichern" wird bei Auswahl existierender Kunden deaktiviert
- Verbessertes Kunden-Matching über alle Felder inkl. E-Mail
- Übersetzung "Template" → "Vorlage" in messages_de.properties
- Replace red border frame with transparent border and white card
- Add TabSheet with address, appointments, and cargo tabs
- Improve dialog layout with rounded corners and flex structure
- Update landing view to use shell gradient background consistently
- Make surface-panel and hero-panel transparent in landing view
- Add button styling: remove shadows, use LUMO_TERTIARY for secondary actions
- Add clickable drawer header navigation to dashboard
- Remove unused title translations from message files
- Set all shadow variables to none for flat design
- Add dashboard-home-view with transparent background
- Redesign login page to single-column centered layout
- Update landing page with white background
- Add button variant conventions (LUMO_TERTIARY/LUMO_PRIMARY)
- Reorder sections and update responsive breakpoints
- Kacheln untereinander statt nebeneinander angeordnet
- Obere blaue Info-Kachel entfernt
- Hintergrund auf weiß gesetzt
- Login-Formular-Kachel mit weißem Hintergrund
- VotianLT-Titel und Anmelden-Chip entfernt
- Icon und Titel nebeneinander angeordnet
- Größe und Höhe der Kacheln angepasst
- broadcast job updates after mobile task completions are persisted\n- rerender job_summary live for the affected job via UI access\n- show pickup and delivery tile detail lines like on add_job\n- highlight delivery tiles in light green when all station tasks are completed
- Button initial deaktiviert, wird erst aktiviert wenn Abholstation und mindestens eine Lieferstation korrekt gefüllt sind
- Bei Änderungen an Stationsdaten (Dialog-Speichern, Hinzufügen, Löschen) wird der Bereich unter dem Grid ausgeblendet und der Button wieder angezeigt
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- StationTile, PickupStationDialog und DeliveryStationDialog als eigenständige UI-Komponenten extrahiert
- Preis- und Leistungselemente (Streckeneingabe, Leistungen-Grid, Zusammenfassung, Bemerkung) unter das Stationen-Grid verschoben
- TabSheet entfernt, alle Inhalte auf einer einzigen Seite dargestellt
- LlmRestClient-Formatierung angepasst, BaseTask und TaskRepository erweitert
- Übersetzungen für neue Dialog-Labels ergänzt
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Moonshot AI Provider komplett entfernt (LlmConfig, LlmRestClient, application.properties)
- Mail-Konfiguration (Host, Port, User, Passwort, SMTP-Auth, SSL) auf Umgebungsvariablen umgestellt
- LM Studio Modell auf Umgebungsvariable LMSTUDIO_MODEL umgestellt
- Mail-Verschlüsselung von STARTTLS auf SSL umgestellt (Port 465)
- Version auf 0.9.9 erhöht
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Sensible Daten (MongoDB URI, LM Studio URL, HTACCESS-Credentials) werden
jetzt aus Environment-Variablen gelesen. Spring-dotenv Dependency hinzugefügt
für automatisches Laden der .env-Datei. HTACCESS Basic Auth Support für
LM Studio integriert.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>