# Changelog --- ## 2026-03-29 – UStVA: kontonummernbasierte Kennzahlenberechnung ### Geändert - `UstvaCalculator::calculate()` wertet ausschließlich `accounts.ustva_kz` des Kategorie-Kontos aus – `buchungstyp` und `steuerart` werden nicht mehr benötigt - `UstvaCalculator::fetchBookingsForKz()` filtert über `k.ustva_kz IN (...)` statt über Buchungsfelder - Kz 83 und 84 kommen jetzt direkt aus `betrag_ust` der Erlöskonten (statt `Kz81 × 19 %`) - Kz 91 und 94 kommen direkt aus `betrag_ust` der ig.-Erwerb-Konten (statt abgeleitet) ### Betrifft - `src/Services/UstvaCalculator.php` - Migration `010_ustva_kz_konto_mapping.sql` - `BERICHTE.md` (UStVA-Kapitel vollständig neu) ### Migration 010 – Kontenanpassungen - Alle Betriebsausgabe-Konten mit `steuercode='VSt19'`: `ustva_kz` von `'66'` auf `'61'` - Alle Betriebsausgabe-Konten mit `steuercode='VSt7'`: `ustva_kz` von `'66'` auf `'62'` - Neue Konten: 3425 „Innergemeinschaftliche Erwerbe 19 %" (`ustva_kz='89'`), 3420 „Innergemeinschaftliche Erwerbe 7 %" (`ustva_kz='93'`) --- ## 2026-03-28 – 30% Eigenanteil-Kennzeichnung und Korrekturbuchungen ### Hinzugefügt - Checkbox „30% Eigenanteil buchen" in der Buchungszeilen-Erfassung (zwischen Nettobetrag und Submit-Button) - Neues Feld `eigenanteil_30 TINYINT(1)` in der `belege`-Tabelle (Migration `009_beleg_eigenanteil_30.sql`) - Der Checkbox-Wert wird beim Speichern einer Buchung in die Beleg-Metadaten übernommen - Bei gesetzter Checkbox werden automatisch zwei Korrekturbuchungen angelegt oder aktualisiert: - 30% des Nettobetrags an Konto 8922 (nicht abzugsfähiger Eigenanteil), Zahlungskonto 1800 - 30% der errechneten USt an Konto 1776 (Vorsteuerkorrektur), Zahlungskonto 1800 – nur wenn USt-Satz > 0 - Im Testmodus: bestehende Korrekturbuchungen werden direkt überschrieben - Im Produktivmodus: bestehende Korrekturbuchungen werden GoBD-konform storniert und neu angelegt ### Betrifft - `src/Views/belege/detail.php` - `src/Controllers/BookingController.php` - `src/Models/Booking.php` (neue Methoden `upsertEigenanteil30`, `upsertKorrekturbuchung`) - Migration: `009_beleg_eigenanteil_30.sql` --- ## 2026-03-27 – DATEV-konformer SKR03 Kontenrahmen (#11) ### Geändert - **Kontenrahmen**: Bisherige ~80 Konten durch DATEV-konformen SKR03 ersetzt (Migration `008_skr03_vollstaendig.sql`) - **Umfang**: 157 Systemkonten aus Klassen 0 (Anlagevermögen), 1 (Zahlungsmittel, Vorsteuer, USt, Privat), 2 (Eigenkapital), 4 (Betriebsausgaben), 8 (Betriebseinnahmen) - **EÜR-Fokus**: Keine Forderungs- oder Verbindlichkeitskonten (nicht bilanzierend) - **Kompatibilität**: Alte Konten bleiben mit `is_system = 0` erhalten – bestehende Buchungen sind nicht betroffen ### Betrifft - Migration: `008_skr03_vollstaendig.sql` --- ## 2026-03-27 – Ausgangsrechnungen in Dashboard/EÜR/UStVA (#8) ### Behoben - **Seed-Skript**: `scripts/seed-testdata.php` rief `Invoice::finalize()` auf, ohne anschließend Beleg und Buchungen anzulegen – Ausgangsrechnungen fehlten daher in allen Auswertungen - **Ursache**: `Invoice::finalize()` (Model) setzt nur Status und Rechnungsnummer; die Buchungserstellung liegt in `InvoiceController::createBelegAndBookings()` und wurde im Seed nicht aufgerufen - **Fix**: Seed-Skript legt nach `Invoice::finalize()` nun Beleg und zugehörige Buchungen an (analog zur Controller-Logik), sodass Ausgangsrechnungen korrekt in EÜR, UStVA und Dashboard erscheinen ### Betrifft - Skript: `scripts/seed-testdata.php` - Test: `tests/09_InvoiceToReportsTest.php` (neu – End-to-End-Test Ausgangsrechnung → EÜR/UStVA/Dashboard) --- ## 2026-03-26 – Lieferantenmanagement (#7) ### Neu - **Lieferantenverwaltung**: Neue Seite `/suppliers` zum Anlegen, Bearbeiten und Löschen von Lieferanten - **Lieferant am Beleg**: Im Metadaten-Formular der Belegdetailseite kann ein Lieferant per Dropdown/Freitexteingabe ausgewählt werden; unbekannte Namen werden beim Speichern automatisch angelegt - **Datenbank**: Tabelle `suppliers` (id, name) und Fremdschlüssel `supplier_id` in `belege` - **Navigation**: Neuer Menüpunkt "Lieferanten" im Bereich Belege & Buchungen ### Betrifft - Migration: `007_suppliers.sql` - Model: `Supplier.php` (neu), `Beleg.php` (JOIN + updateMeta) - Controller: `SupplierController.php` (neu), `BelegController.php` - Views: `suppliers/list.php`, `suppliers/form.php` (neu), `belege/detail.php`, `layout/nav.php` - Routes: `public/index.php` - Test: `08_LieferantTest.php` --- ## 2026-03-26 – EÜR-Buchungsmodell (Soll/Haben → Einnahme/Ausgabe) ### Geändert - **Buchungsmodell**: Doppelte Buchführung (Soll-Konto/Haben-Konto) durch reines EÜR-Modell ersetzt – jede Buchung hat nun `buchungstyp` (Einnahme/Ausgabe), `kategorie_konto_id` (Was?) und `zahlungskonto_id` (Wie bezahlt?) - **Kontenarten**: Umbenannt von Aktiv/Passiv/Aufwand/Ertrag/Neutral zu Betriebseinnahme/Betriebsausgabe/Zahlungskonto/Verbindlichkeit/Privat - **EÜR-Berechnung**: Vereinfacht – gruppiert direkt nach `buchungstyp` statt komplexer Soll/Haben-Ableitung - **UStVA-Berechnung**: Verwendet `buchungstyp` statt Kontenart-Ableitung für USt/VSt-Zuordnung - **UI-Terminologie**: Alle Bezeichnungen in Views, Journal, Dashboard und Formularen von Soll/Haben auf Typ/Kategorie/Zahlungskonto umgestellt - **CSV-Export**: Spalten an neues Modell angepasst (Typ, Kategorie-Kto., Zahlungskonto-Kto.) ### Betrifft - Schema (`001_initial_schema.sql`), Seed (`002_seed_skr03.sql`) - Models: `Booking.php`, `Account.php` - Services: `EuerCalculator.php`, `UstvaCalculator.php` - Controllers: `BookingController.php`, `AccountController.php`, `InvoiceController.php` - Views: `dashboard.php`, `journal.php`, `detail.php`, `accounts/form.php`, `accounts/list.php` - JavaScript: `app.js` - Tests: 02, 04, 05 aktualisiert + neuer Test 06 (EÜR-Buchungsmodell) --- ## 2026-03-25 – Session-Authentifizierung & Benutzerverwaltung ### Features - **Session-Authentifizierung**: HTTP Basic Auth durch cookie-basierte Session-Authentifizierung ersetzt; Sessions laufen nach 24 Stunden absolut ab - **Benutzerverwaltung** (`/useradmin`): Benutzer anlegen, bearbeiten (Benutzername und Passwort), deaktivieren und löschen; Passwörter mit bcrypt gehasht - **Ersteinrichtungsflow**: Beim ersten Start ohne Benutzer ermöglicht `/login` das Anlegen des ersten Administrator-Accounts - **Abmelden-Button** in der Seitenleiste ### Geändert - `AUTH_USER` und `AUTH_PASS` entfernt – Zugangsdaten werden ausschließlich in der Datenbank verwaltet - Neue Datenbanktabelle `users` (Migration `005_users.sql`) ### Behoben - Fehler in `BelegController` behoben --- ## 2026-03-25 – Sicherheit, UX-Verbesserungen & Bugfixes ### Sicherheit - **Timing-sicherer Login**: Passwort- und Benutzernamevergleich auf `hash_equals()` umgestellt (verhindert Timing-Angriffe) - **SVG-Upload gesperrt**: Logo-Upload akzeptiert nur noch PNG und JPEG – SVG wurde entfernt (XSS-Risiko) - **CSV-Injection-Schutz**: Felder im Buchungsjournal-CSV-Export werden gegen Formula-Injection (`=`, `+`, `-`, `@`) abgesichert ### Features - **Inline-Editing**: Belegdatum und Rechnungsnr. können direkt in der Beleg-Detailansicht per Klick bearbeitet werden (kein Seitenreload) - **Belegart-Filter**: Neue Filteroption in der Belegliste zum Filtern nach Belegart (Eingangsrechnung, Ausgangsrechnung, Quittung etc.) - **Favicon & App-Icon**: Favicon für Browser-Tabs, Apple Touch Icon und Web-App-Manifest eingebunden ### Robustheit - **Datenbankfehler-Handling**: PDO-Exceptions in Invoice-, Booking- und BelegController werden separat abgefangen und geloggt statt als generische Fehler zu erscheinen --- ## 2026-03-24 – Initiales Release ### Features - **Basis-System**: MVC-Framework, Routing, Authentifizierung, Datenbank-Migrations-System - **Ausgangsrechnungen**: Erstellen, Verwalten und PDF-Export von Ausgangsrechnungen - **EÜR-Vorbereitung**: Einnahmen-Überschuss-Rechnung als PDF-Export - **UStVA-Vorbereitung**: Umsatzsteuer-Voranmeldung inkl. XML-Export für elster.de