257 lines
13 KiB
Markdown
257 lines
13 KiB
Markdown
# Changelog
|
||
|
||
---
|
||
|
||
## 2026-04-01 – Feature: EÜR-Zeile in Konten-Übersicht anzeigen
|
||
|
||
### Neu
|
||
- Spalte „EÜR-Zeile" in der Konten-Liste (/accounts) ergänzt
|
||
- Zeigt den Wert `euer_zeile` je Konto an (z.B. 14, 26, 51, 52 oder „–" wenn leer)
|
||
|
||
## 2026-04-01 – Feature: Bewirtungsbelege (Konten 4650/4651) mit automatischem Split
|
||
|
||
### Neu
|
||
- Buchungen auf Konto 4650 (Bewirtungskosten VSt. 19%) oder 4651 (Bewirtungskosten VSt. 7%) werden automatisch aufgeteilt: 70 % auf das gewählte Konto, 30 % auf das Abzugskonto (4654 bzw. 4656)
|
||
- Neue Felder `bewirtungsgrund` und `teilnehmerliste` in der `bookings`-Tabelle (Migration 016)
|
||
- Im Buchungsformular erscheinen die beiden Felder automatisch, wenn 4650/4651 als Kategorie gewählt wird
|
||
- Vorhandene Buchungen zeigen Bewirtungsgrund und Teilnehmerliste in der Buchungsübersicht an
|
||
|
||
## 2026-04-01 – Bugfix: Nicht abzugsfähige Kosten (4654/4656) separat in EÜR unter KZ 165
|
||
|
||
### Behoben
|
||
- Konten mit `euer_zeile = '51'` (4654, 4656, 4635, 4636, 4289) fließen nicht mehr in `total_ausgaben` und `gewinn` ein
|
||
- Sie erscheinen in einem eigenen Abschnitt „Nicht abzugsfähige Betriebsausgaben (KZ 165)" in Web und PDF
|
||
- Migration 015 setzt `euer_zeile = '51'` für Konto 4656 (fehlte bisher)
|
||
|
||
---
|
||
|
||
## 2026-03-30 – Bugfix: 30 % Eigenanteil fließt jetzt korrekt in UStVA KZ 81/83
|
||
|
||
### Behoben
|
||
- `Booking::upsertEigenanteil30`: statt zwei Buchungen (8922 Netto + 1776 USt-Korrektur) wird
|
||
nur noch eine einzige Buchung auf 8922 mit echtem `ust_satz` und `betrag_ust` erzeugt
|
||
- `upsertKorrekturbuchung`: neue Parameter `ustSatz` und `betragUst`; UPDATE und INSERT setzen
|
||
jetzt `betrag_ust` und `betrag_brutto` korrekt
|
||
- Vorher: `betrag_ust = 0` auf 8922 → KZ 83 blieb leer; 1776-Buchung hatte keine UStVA-Wirkung
|
||
|
||
---
|
||
|
||
## 2026-03-30 – Kontenrahmen-Reset: DATEV SKR03 2026 (IST-Versteuerung)
|
||
|
||
### Geändert
|
||
- Alle Buchungen und Belege gelöscht (Testdaten)
|
||
- Gesamter Kontenrahmen durch DATEV SKR03 2026 (gültig ab 2026-01-01) ersetzt
|
||
- Neue Spalte `euer_zeile` in Tabelle `accounts`: Zeilennummer der Anlage EÜR
|
||
- 145 Konten neu angelegt: Klassen 0, 1, 3, 4, 8 (ohne Klasse 9 / ohne Verbindlichkeiten)
|
||
- Verfahren: IST-Versteuerung; Konto 1390 „Verrechnungskonto Ist-Versteuerung" enthalten
|
||
- UStVA-Kennzeichen korrekt nach DATEV: 81/86 (Umsätze), 61/62 (Vorsteuer), 35/41 (steuerfrei)
|
||
- Migration: `013_reset_kontenrahmen_skr03_2026.sql`
|
||
|
||
---
|
||
|
||
## 2026-03-30 – KI-gestützte Belegerkennung (experimentell) + 30 % Eigenanteil Telefon/Internet
|
||
|
||
### Neu
|
||
- Eigenanteil von 30 % bei Buchungen auf Telefon- und Internetkosten-Konten (4920/4925) wählbar
|
||
- Experimentelle KI-Beleganalyse: erkennt Buchungstyp, Betrag, Konto und Lieferant aus PDF/Bild-Belegen
|
||
- Setzt lokales LLM (z. B. Ollama/Mistral) oder Remote-API-Schlüssel voraus
|
||
- Hoher Ressourcenbedarf bei lokaler Ausführung; Ergebnisqualität mit Mistral bisher mäßig
|
||
- Getestet mit `ollama run mistral`
|
||
|
||
### Betrifft
|
||
- `src/Services/KontierungsvorschlagService.php`
|
||
- `src/Services/LlmService.php`
|
||
- `src/Views/belege/detail.php`, `list.php`
|
||
- `Dockerfile`, `docker-compose.yml`
|
||
|
||
---
|
||
|
||
## 2026-03-30 – Fix: Lieferant-Eingabe in Metadaten-Leiste speichert korrekt
|
||
|
||
### Geändert
|
||
- `supplier-persistent-input`: Nach erfolgreichem AJAX-Speichern wird das Texteingabefeld durch den Inline-Trigger-Span ersetzt – visuelle Bestätigung, dass der Lieferant gespeichert wurde
|
||
- Fehlerbehandlung (`try/catch`) hinzugefügt: bei fehlgeschlagenem Speichern bleibt das Feld editierbar
|
||
- Das versteckte Metaformular (`supplier_name_input`) wird nach AJAX-Speichern synchronisiert, damit ein späteres Absenden des Metaformulars den Lieferanten nicht überschreibt
|
||
|
||
### Betrifft
|
||
- `src/Views/belege/detail.php`
|
||
|
||
---
|
||
|
||
## 2026-03-30 – Lieferant inline editierbar + KI-Lieferantenerkennung
|
||
|
||
### Geändert
|
||
- Lieferant in der Beleg-Info-Bar ist jetzt direkt inline editierbar (Klick auf ✎), wie Belegdatum und Rechnungsnr.
|
||
- KI-Kontierungsvorschlag extrahiert nun auch den Lieferantennamen aus dem Beleg
|
||
- Nach KI-Analyse: bekannter Lieferant wird automatisch eingetragen; unbekannter Lieferant öffnet das Lieferantenfeld sofort mit Fokus
|
||
- KI-Badge zeigt Lieferantenname an, unbekannte Lieferanten werden als „(neu – bitte prüfen)" markiert
|
||
- Validierung in `KontierungsvorschlagService` prüft `zahlungskonto_id` und `kategorie_konto_id` jetzt gegen die korrekte Kontenart statt gegen alle Konten
|
||
|
||
### Betrifft
|
||
- `src/Services/KontierungsvorschlagService.php`
|
||
- `src/Views/belege/detail.php`
|
||
- `public/static/js/app.js`
|
||
|
||
---
|
||
|
||
## 2026-03-29 – EÜR: Spaltenauswahl nach Kontenart statt Buchungstyp
|
||
|
||
### Geändert
|
||
- `EuerCalculator::calculate()` wertet `accounts.kontenart` aus statt `buchungstyp`
|
||
- `Betriebseinnahme` → Einnahmen-Spalte, `Betriebsausgabe` → Ausgaben-Spalte
|
||
- `Privat`, `Zahlungskonto`, `Verbindlichkeit` als Kategorie-Konto werden nicht in der EÜR ausgewiesen
|
||
- Vorzeichen von `betrag_netto` werden beibehalten (kein `abs()` mehr) – negative Beträge mindern die jeweilige Spalte
|
||
- Buchungen desselben Kontos werden unabhängig vom `buchungstyp` zu einem Eintrag zusammengefasst
|
||
|
||
### Betrifft
|
||
- `src/Services/EuerCalculator.php`
|
||
- `BERICHTE.md` (EÜR-Kapitel aktualisiert)
|
||
|
||
---
|
||
|
||
## 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
|