AssetController setzte INSERT INTO bookings bislang direkt ab und umging
damit die Sperre des Geschäftsjahres, den transaktionalen Schutz der
Nummernvergabe und ordnete Stornos dem falschen Geschäftsjahr zu.
Schritt 9/9 setzte bisher nur eine Warnung ab und lief mit Exit-Code 0
weiter, obwohl die neue Version bereits live war. Jetzt zählt auch
tests/e2e/run.sh zum Gate (überspringt sich selbst mit Exit 0 ohne
Runner), ein Fehlschlag setzt UPDATE_FAILED=true und beendet das
Script mit Exit-Code 1. Kein automatischer Rollback – stattdessen ein
lauter Hinweis auf das Backup aus Schritt 3 und ./scripts/restore.sh.
--no-tests bleibt als Notausstieg bestehen.
XML-Symbol neben dem PDF-Symbol lädt die Rechnung als reine XML-Datei
(Profil XRechnung 3.0, CIUS von EN 16931). Fehlende Stamm- oder
Rechnungsdaten verhindern den Download nicht, werden aber mit BT-Nummer
in der Detailansicht ausgewiesen. Die PDF-Einbettung bleibt bei
Factur-X EN16931.
- FinTS-Abruf für Comdirect/DKB/Sparkassen via nemiah/php-fints (4.1)
inkl. photoTAN-Eingabe-Modal und Multi-Konto-Auswahl
- Neue Tabelle bank_sources (CSV/API/FinTS) ersetzt bank_import_formats
und bank_connections, Backfill in Migration 068
- Symmetrische Verschlüsselung sensibler Felder (PayPal-Signature,
FinTS-PIN) mit AES-256-GCM, APP_KEY in .env
- Routes /bank/fints* → /bank/direkt*; "+ Neue Bank…"-Dialog erlaubt
freie API/FinTS-Anbieter
- Scripts/encrypt_bank_secrets.php als idempotenter Migrations-Helfer
- Neue Tests 36 (Crypto) und 37 (BankSource)
- Migration 046: ustva_kz='83'/'84' für Konten 1776/1771, Bestandsmigration für Einnahme-Buchungen
- Booking::create(): USt-Kindzeile auf 1771/1776 für Einnahmen mit 7/19 % (analog VSt)
- UstvaCalculator: Kz 83/84 kontobasiert via 1771/1776, KZ_ACCOUNT_MAP aktualisiert
- Invoice::cancel(): nur Hauptbuchungen direkt stornieren (parent_booking_id IS NULL)
- Tests 10, 27 angepasst; Test 29 neu