# Changelog --- ## 2026-04-26 – Feature #57: Lineare Abschreibungstabelle für Anlagegüter ### Hinzugefügt - `migrations/035_assets_abschreibung_flags.sql`: Neue Spalten `automatisch_berechnet` und `cent_im_ersten_jahr` in `assets` - `migrations/036_asset_depreciation_schedule.sql`: Neue Tabelle `asset_depreciation_schedule` (Jahr, Abschreibungsbetrag, Restwert) - `src/Models/AssetDepreciation.php`: Berechnung (linear, Sofortabschreibung, Cent-Option), Persistenz - `tests/26_AbschreibungstabelleTest.php`: 22 Tests für alle AfA-Szenarien ### Geändert - `src/Models/Asset.php`: `create()` und `update()` speichern `automatisch_berechnet` und `cent_im_ersten_jahr` - `src/Controllers/AssetController.php`: Abschreibungstabelle wird nach Speichern automatisch generiert; neue Endpunkte `/assets/depreciation-preview` (AJAX-Vorschau) und `/assets/{id}/depreciation` (manuelle Speicherung) - `src/Views/assets/form.php`: Nutzungsdauer-Dropdown (sofort, 1–10, 12, 13, 15, 20, 25, 50 Jahre + individuell), Cent-Option, „AfA-Tabelle"-Button, Modal mit Auto/Manuell-Toggle und editierbarer Tabelle - `public/index.php`: Neue Routen für Depreciation-Preview und -Speicherung --- ## 2026-04-26 – Fix UStVA: Kennziffern auf offizielle ELSTER-Definitionen korrigiert ### Geändert - `src/Services/UstvaCalculator.php`: Kz 66 ist jetzt die primäre Inlandsvorsteuer (§§ 14, 14a) – alle Ausgabe-Buchungen mit Vorsteuer fließen direkt in Kz 66 (buchungsbasiert, unabhängig vom USt-Satz). Kz 61 ist jetzt Vorsteuer aus ig. Erwerben (§ 3d) = Kz89×0,19 + Kz93×0,07. Kz 62 (Einfuhrumsatzsteuer) und Kz 67 (§ 13b) werden auf 0 gesetzt. Kz 83 ist jetzt das Ergebnis (Verbleibende Vorauszahlung / Überschuss) statt der USt auf 19 %-Umsätze. Kz 35/44 (veraltet seit Migration 017) und Kz 91/94 (wurden fälschlich als USt-Beträge auf ig. Erwerb genutzt) entfernt. Kz 43 (Ausfuhren) und Kz 48 (steuerfreie Umsätze ohne VSt-Abzug) hinzugefügt. - `src/Services/ElsterXmlService.php`: Betragsfelder auf korrekte Kz aktualisiert (43/48 statt 35/44); Kz39-Export (Sondervorauszahlung) durch Kz83-Export (Vorauszahlung/Überschuss) ersetzt. - `src/Views/tax/ustva_show.php`: Abschnitte und Beschriftungen auf korrekte ELSTER-Kennziffern angepasst. - `src/Views/tax/ustva_kz_bookings.php`: Referenz auf Kz 69 → Kz 83 umgestellt. - `src/Controllers/UstvaController.php`: Whitelist gültiger Kennziffern aktualisiert. - `docs/berechnungslogik.md`: UStVA-Abschnitt vollständig neu beschrieben. --- ## 2026-04-26 – KI-Diagnose: Erreichbarkeitsprüfung und Fehlerlog für Ollama ### Geändert - `src/Services/LlmService.php`: Neue Methode `isReachable()` für Diagnosezwecke; Fehlerlog in `callOllama()` bei cURL-Fehler oder leerer Antwort - `src/Views/settings/form.php`: Einstellungsseite prüft jetzt aktiv, ob der Ollama-Server erreichbar ist (nicht nur ob er konfiguriert ist); zeigt bei Verbindungsfehler einen konkreten Hinweis auf `OLLAMA_HOST=0.0.0.0:11434` --- ## 2026-04-26 – Leistungszeitraum als freies Textfeld ### Geändert - `migrations/034_leistungszeitraum_text.sql`: Spalten `leistungszeitraum_von` (DATE) und `leistungszeitraum_bis` (DATE) wurden durch eine einzige Textspalte `leistungszeitraum` (VARCHAR 255) ersetzt; bestehende Datumswerte werden automatisch migriert - `src/Views/invoices/form.php`: Zwei Datumsfelder durch ein Freitextfeld „Leistungszeitraum" ersetzt, Grid von 4 auf 3 Spalten angepasst - `src/Models/Invoice.php`: INSERT/UPDATE verwenden jetzt `leistungszeitraum` statt `leistungszeitraum_von`/`leistungszeitraum_bis` - `src/Controllers/InvoiceController.php`: Datums-Defaults für `leistungszeitraum_von`/`leistungszeitraum_bis` entfernt - `src/Views/invoices/show.php`: Leistungszeitraum-Anzeige vereinfacht (kein Datumsformat, direkter Textausgabe) - `src/Services/PdfInvoiceService.php`: Leistungszeitraum-Ausgabe vereinfacht --- ## 2026-04-15 – KI-Erkennung: automatischer Aufruf aus Belegansicht entfernt ### Geändert - `src/Views/belege/detail.php`: KI-Analyse wird nicht mehr automatisch beim Öffnen eines Belegs ausgelöst; stattdessen wird ein Hinweis "KI-Analyse wird im Hintergrund durchgeführt …" mit einem "Jetzt generieren"-Button angezeigt, wenn noch kein Vorschlag vorhanden ist - Hintergrund: Die Analyse läuft bereits beim Nextcloud-Import (`ki-batch.php`); ein doppelter Aufruf aus der UI war überflüssig --- ## 2026-04-12 – Anlagevermögen: Anzeige-Fix und Daten-Backfill ### Fix - Buchungstabellen (Beleg-Detail, Journal, UStVA-Drill-down, EÜR-Drill-down): Anlage-Spalte zeigt jetzt auch die Bezeichnung als Fallback, wenn `anlage_nr` leer ist - `migrations/032_anlage_nr_backfill.sql`: Anlage-Nummern für bestehende Anlagegüter ohne `anlage_nr` werden nachgeneriert --- ## 2026-04-12 – Anlagevermögen (Wirtschaftsgüter) ### Neu - Navigation: neuer Abschnitt „Betriebsvermögen" mit Menüpunkt „Anlagevermögen" - `migrations/028_assets_anlagevermoegen.sql`: neue Tabelle `assets` für Wirtschaftsgüter - `src/Models/Asset.php`: CRUD-Model mit automatischer laufender Nummer und Geschäftsjahrzuordnung - `src/Controllers/AssetController.php`: Liste, Anlegen, Bearbeiten, Löschen - `src/Views/assets/list.php`: Anlagenspiegel-Tabelle mit Bleistift- und Papierkorb-Aktionen - `src/Views/assets/form.php`: Formular für Wirtschaftsgut (Bezeichnung, Anschaffungsdatum, Kosten, Zugänge, Abgänge, AfA, Nutzungsdauer, Notizen) - `tests/20_AnlagevermoegensTest.php`: 14 Tests für CRUD-Operationen --- ## 2026-04-12 – EÜR-Korrekturen: Gewerbesteuer + Bewirtungskonten ohne VSt ### Geändert - `migrations/028_euer_4320_bewirtung_ohne_vst.sql`: Gewerbesteuer (4320) von Z. 52 auf Z. 51 (§ 4 Abs. 5b EStG, KZ 165 nicht abzugsfähig) - `migrations/028_euer_4320_bewirtung_ohne_vst.sql`: Konten 4652 (Bewirtung 70 % ohne VSt, Z. 44) und 4657 (Bewirtung 30 % ohne VSt, Z. 51) ergänzt - `docs/kontenrahmen.md`: Dokumentation entsprechend aktualisiert --- ## 2026-04-12 – Klasse-0-Konten als Anlagevermögen klassifiziert ### Geändert - `docs/kontenrahmen.md`: Alle 10 Klasse-0-Konten (0027–0480) von `Zahlungskonto` auf `Anlagevermögen` korrigiert - `migrations/027_anlagevermögen_kontenart.sql`: Migration war bereits vorhanden und setzt die DB-Änderung beim nächsten Container-Start um --- ## 2026-04-12 – Backup: smarte Rotation und Lock-Schutz ### Geändert - `scripts/backup.sh`: Rotation auf 7 Tages- / 4 Wochen- / 12 Monats-Buckets umgestellt (statt pauschaler 90-Tage-Löschung) - `scripts/backup.sh`: `flock`-Lock verhindert parallele Läufe bei Verzögerungen - `scripts/backup.sh`: Pfade sind absolut (Script funktioniert auch aus Cron ohne Verzeichniswechsel) --- ## 2026-04-12 – Uploads: named Volume → Bind Mount ### Geändert - `docker-compose.yml`: Upload-Volume von named Volume (`steuerkram_uploads`) auf Bind Mount (`./uploads/`) umgestellt – konsistent mit `./data/mariadb/` - `scripts/migrate-uploads-to-bindmount.sh`: Einmalige Migration hinzugefügt ### Update auf Produktiv-System **Vor** `docker compose up` einmalig ausführen: ```bash ./scripts/migrate-uploads-to-bindmount.sh ``` Das Script kopiert alle Dateien aus dem named Volume in `./uploads/`, ist idempotent und gibt am Ende den Befehl zum Löschen des alten Volumes aus. --- ## 2026-04-11 – Buchungsbasierte Vorsteuer Kz 61/62 in UStVA ### Geändert - `UstvaCalculator`: Kz 61 und 62 werden nicht mehr über `accounts.ustva_kz` geroutet, sondern direkt aus `bookings.ust_satz` ermittelt (`buchungstyp='Ausgabe'`, `betrag_ust != 0`). Damit reicht ein einziges Aufwandskonto für beide USt-Sätze – separate VSt19-/VSt7-Konten sind nicht mehr erforderlich - `fetchBookingsForKz`: Drill-down für Kz 61/62 nutzt jetzt ebenfalls buchungsbasierte Filterung - `BERICHTE.md`: Routing-Logik für Kz 61/62 dokumentiert --- ## 2026-04-10 – Nextcloud-Belegimport via WebDAV ### Neu - `NextcloudImportService`: importiert Belege aus einem Nextcloud-Ordner via WebDAV (PROPFIND → GET → MOVE/DELETE); Duplikat-Erkennung via SHA-256; JPEG/PNG werden nach dem Download automatisch zugeschnitten - `scripts/nextcloud-import.php`: CLI-Einstiegspunkt für Cron-Betrieb - Migration 023: Nextcloud-Zugangsdaten (`nextcloud_url`, `nextcloud_user`, `nextcloud_pass`, `nextcloud_folder`, `nextcloud_done`) in `company_settings`; Konfiguration über Einstellungen → Nextcloud-Belegimport in der UI --- ## 2026-04-10 – UStVA Vorsteuer-Kz-Aufteilung (Migration 022) ### Fix - Migration 022: Vorsteuer-Konten von `ustva_kz='66'` auf `'61'` (VSt19) bzw. `'62'` (VSt7) aufgeteilt – Kz 61, 62 und 66 wurden zuvor stets als 0 ausgewiesen - `UstvaCalculator`: zweite Abfrage für steuerart-basierte EU-Kennzahlen (ig. Lieferung → Kz 41, Ausfuhr → Kz 44, ig. Erwerb → Kz 89/91/93/94); verhindert Doppelzählung gegenüber kontobasierter Berechnung - `fetchBookingsForKz`: UNION-Abfrage aus Konto-Kz und steuerart für korrekten Drill-down - Tests 4, 5, 6, 9: Kontonummern auf tatsächliche SKR03-Nummern korrigiert (8000→8400, 1400→1200) --- ## 2026-04-10 – Upload-Limit auf 20 MB erhöht ### Geändert - `php/uploads.ini`: `upload_max_filesize` und `post_max_size` auf 20 MB gesetzt (zuvor PHP-Standard 2 MB) - `Dockerfile`: bindet `php/uploads.ini` als PHP-Konfiguration ein --- ## 2026-04-10 – Belegtext-Speicherung für spätere Volltextsuche ### Neu - Migration 021: Spalte `beleg_text MEDIUMTEXT` in `belege` – speichert den per `pdftotext` oder Tesseract-OCR extrahierten Volltext - `KontierungsvorschlagService::extractText()`: neue public Methode zur Textextraktion (PDF + Bild), unabhängig vom KI-Vorschlag nutzbar - Beim Generieren des KI-Vorschlags wird `beleg_text` automatisch befüllt (einmalig, nur wenn noch leer) - `Beleg::saveBelegText()`: neue Methode im Model --- ## 2026-04-10 – OCR-Schalter unabhängig vom KI-Schalter ### Neu - Einstellungen: separater Schalter „OCR-Texterkennung" (`ocr_aktiv`) zum unabhängigen Ein-/Ausschalten der Tesseract-OCR bei Bildbelegen (Migration 020) - KI-Schalter und OCR-Schalter arbeiten nun vollständig unabhängig voneinander - `KontierungsvorschlagService::isOcrEnabled()`: neue Methode, prüft OCR-Einstellung - Bildbeleg-OCR wird nur noch ausgeführt, wenn `ocr_aktiv = 1`; PDF-Textextraktion via `pdftotext` läuft unabhängig davon --- ## 2026-04-02 – Kontenrahmen: Dokumentation und finale Korrekturen ### Neu - `Kontenrahmen.md`: Vollständige Dokumentation aller SKR03-Systemkonten mit UStVA-Kennzahlen und EÜR-Zeilennummern - Verweis auf `Kontenrahmen.md` in `README.md` ergänzt ### Geändert (Navigation) - Kontenrahmen (`/accounts`) als eingerückter Untermenüpunkt unter „Einstellungen" in der Seitenleiste - Konten-Tabelle aus `/settings` entfernt (war redundant zu `/accounts`) ### Geändert (UStVA-Kennzahlen, Migration 017) - KZ `61` → `66` für alle VSt19-Konten (normale Inlands-Vorsteuer, § 15 Abs. 1 Nr. 1 UStG) - KZ `62` → `66` für alle VSt7-Konten - KZ `35` → `48` für 8100/8105/8110 (steuerfreie Umsätze ohne VoSt-Abzug) - KZ `35` → `43` für 8120 (Ausfuhrlieferungen § 4 Nr. 1a UStG) ### Geändert (EÜR-Zeilennummern, Migration 019) - 8400/8570/8720: Z. 14 → Z. 16 (19 %-Erlöse netto; Z. 14 = Kleinunternehmer brutto) - 8120/8125: Z. 16 → Z. 18 (Ausfuhr/ig. Lieferungen) - 8950: Z. 18 → Z. 21 (nicht steuerbare Innenumsätze) - 4672: Z. 43 → Z. 51 (nicht abziehbarer Anteil Unternehmerreisekosten, § 4 Abs. 5 EStG) - 4288: Z. 52 → Z. 65 (häusl. Arbeitszimmer abziehbar, eigene Zeile seit EÜR 2023) - 4287: Z. 52 → Z. 66 (Tagespauschale häusl. Wohnung, eigene Zeile seit EÜR 2023) - 4856: Z. 49 → Z. 37 (Sonderabschreibungen § 7b EStG) ### Kanonischer Seed (Migration 018) - `018_seed_kontenrahmen_skr03_final.sql`: Alle 146 Systemkonten mit bereits korrekten UStVA-KZ und EÜR-Zeilen; Neuinstallationen erhalten den vollständigen aktuellen Stand ohne weitere Korrekturen --- ## 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