- 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
26 KiB
26 KiB
Changelog
2026-05-10 – Feature: USt-Buchungszeilen für Ausgangsrechnungen
- Migration 046: Konten 1771 (USt 7 %) und 1776 (USt 19 %) erhalten
ustva_kz='84'/'83'`; bestehende Einnahme-Buchungen mit USt erhalten nachträglich USt-Kindzeilen Booking::create(): Bei Einnahme-Buchungen mit 7/19 % undsteuerart=normalwird analog zur VSt-Kindzeile eine USt-Zeile auf 1771/1776 angelegtUstvaCalculator: Kz 83/84 jetzt kontobasiert via 1771/1776 (betrag_netto), nicht mehr viabetrag_ustder Erlöskonten;KZ_ACCOUNT_MAPaktualisiertInvoice::cancel(): Nur Hauptbuchungen (parent_booking_id IS NULL) werden direkt storniert; Kindzeilen werden vonBooking::reverse()mitaufgehoben (verhindert Doppelstorno)- Tests 10 und 27 an geänderte Buchungsstruktur angepasst; Test 29 neu
2026-05-05 – Feature: Stornorechnung (§ 14 UStG)
Hinzugefügt
migrations/042_invoice_storno_of_id.sql: Neue Spaltestorno_of_idininvoices(FK auf Original)Invoice::createCancellation(): Legt Stornorechnung mit negierten Beträgen an, setzt Original auf „Storniert", erzeugt GoBD-konforme Stornobuchungen- Storno-Button in Rechnungsübersicht (
list.php) und Detailansicht (show.php) - Querverweise Original ↔ Stornorechnung in der Detailansicht
- PDF-Anpassung: Titel „STORNORECHNUNG", Referenzzeile, kein Zahlungshinweis, angepasster Dateiname
- Test
27_StornorechnungTest.php
2026-04-28 – Feature: E-Rechnung / ZUGFeRD EN16931
Hinzugefügt
src/Services/ZugferdService.php: Erzeugt ZUGFeRD-konformes EN16931-XML und bettet es in den PDF-String ein (viahorstoeko/zugferd)src/Services/PdfInvoiceService.php: PDF wird nach der mPDF-Generierung durchZugferdService::attachToPdf()geleitet; Ausgabe erfolgt jetzt manuell per Header/echo stattmpdf->Output('D')- Alle Ausgangsrechnungs-PDFs sind ab sofort gültige E-Rechnungen (ZUGFeRD EN16931 / Factur-X)
2026-04-27 – Feature: Neues Rechnungsnummernformat (PPPYYYYMM-nn)
Geändert
src/Models/Invoice.php:generateRechnungsNr()erzeugt jetzt das FormatPPPYYYYMM-nn(Prefix + Jahr + Monat + zweistellige Sequenz, die bei Bedarf wächst); Zähler wird monatlich zurückgesetztmigrations/038_invoice_nr_month.sql: Neue Spalteinvoice_nr_monthincompany_settings
2026-04-26 – Fix: Eigenanteil-Buchung als Einnahme statt Ausgabe
Geändert
src/Models/Booking.php:upsertKorrekturbuchung()setztbuchungstypjetzt korrekt aufEinnahme(war fälschlichAusgabe)
2026-04-26 – Feature #57: Lineare Abschreibungstabelle für Anlagegüter
Hinzugefügt
migrations/035_assets_abschreibung_flags.sql: Neue Spaltenautomatisch_berechnetundcent_im_ersten_jahrinassetsmigrations/036_asset_depreciation_schedule.sql: Neue Tabelleasset_depreciation_schedule(Jahr, Abschreibungsbetrag, Restwert)src/Models/AssetDepreciation.php: Berechnung (linear, Sofortabschreibung, Cent-Option), Persistenztests/26_AbschreibungstabelleTest.php: 22 Tests für alle AfA-Szenarien
Geändert
src/Models/Asset.php:create()undupdate()speichernautomatisch_berechnetundcent_im_ersten_jahrsrc/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 Tabellepublic/index.php: Neue Routen für Depreciation-Preview und -Speicherung
2026-04-26 – KI-Diagnose: Erreichbarkeitsprüfung und Fehlerlog für Ollama
Geändert
src/Services/LlmService.php: Neue MethodeisReachable()für Diagnosezwecke; Fehlerlog incallOllama()bei cURL-Fehler oder leerer Antwortsrc/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 aufOLLAMA_HOST=0.0.0.0:11434
2026-04-26 – Leistungszeitraum als freies Textfeld
Geändert
migrations/034_leistungszeitraum_text.sql: Spaltenleistungszeitraum_von(DATE) undleistungszeitraum_bis(DATE) wurden durch eine einzige Textspalteleistungszeitraum(VARCHAR 255) ersetzt; bestehende Datumswerte werden automatisch migriertsrc/Views/invoices/form.php: Zwei Datumsfelder durch ein Freitextfeld „Leistungszeitraum" ersetzt, Grid von 4 auf 3 Spalten angepasstsrc/Models/Invoice.php: INSERT/UPDATE verwenden jetztleistungszeitraumstattleistungszeitraum_von/leistungszeitraum_bissrc/Controllers/InvoiceController.php: Datums-Defaults fürleistungszeitraum_von/leistungszeitraum_bisentferntsrc/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_nrleer ist migrations/032_anlage_nr_backfill.sql: Anlage-Nummern für bestehende Anlagegüter ohneanlage_nrwerden 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 Tabelleassetsfür Wirtschaftsgütersrc/Models/Asset.php: CRUD-Model mit automatischer laufender Nummer und Geschäftsjahrzuordnungsrc/Controllers/AssetController.php: Liste, Anlegen, Bearbeiten, Löschensrc/Views/assets/list.php: Anlagenspiegel-Tabelle mit Bleistift- und Papierkorb-Aktionensrc/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änztdocs/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) vonZahlungskontoaufAnlagevermögenkorrigiertmigrations/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ögerungenscripts/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:
./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 überaccounts.ustva_kzgeroutet, sondern direkt ausbookings.ust_satzermittelt (buchungstyp='Ausgabe',betrag_ust != 0). Damit reicht ein einziges Aufwandskonto für beide USt-Sätze – separate VSt19-/VSt7-Konten sind nicht mehr erforderlichfetchBookingsForKz: Drill-down für Kz 61/62 nutzt jetzt ebenfalls buchungsbasierte FilterungBERICHTE.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 zugeschnittenscripts/nextcloud-import.php: CLI-Einstiegspunkt für Cron-Betrieb- Migration 023: Nextcloud-Zugangsdaten (
nextcloud_url,nextcloud_user,nextcloud_pass,nextcloud_folder,nextcloud_done) incompany_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 BerechnungfetchBookingsForKz: 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_filesizeundpost_max_sizeauf 20 MB gesetzt (zuvor PHP-Standard 2 MB)Dockerfile: bindetphp/uploads.inials PHP-Konfiguration ein
2026-04-10 – Belegtext-Speicherung für spätere Volltextsuche
Neu
- Migration 021: Spalte
beleg_text MEDIUMTEXTinbelege– speichert den perpdftotextoder 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_textautomatisch 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 viapdftotextlä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.mdinREADME.mdergänzt
Geändert (Navigation)
- Kontenrahmen (
/accounts) als eingerückter Untermenüpunkt unter „Einstellungen" in der Seitenleiste - Konten-Tabelle aus
/settingsentfernt (war redundant zu/accounts)
Geändert (UStVA-Kennzahlen, Migration 017)
- KZ
61→66für alle VSt19-Konten (normale Inlands-Vorsteuer, § 15 Abs. 1 Nr. 1 UStG) - KZ
62→66für alle VSt7-Konten - KZ
35→48für 8100/8105/8110 (steuerfreie Umsätze ohne VoSt-Abzug) - KZ
35→43fü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_zeileje 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
bewirtungsgrundundteilnehmerlistein derbookings-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 intotal_ausgabenundgewinnein - 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 echtemust_satzundbetrag_usterzeugtupsertKorrekturbuchung: neue ParameterustSatzundbetragUst; UPDATE und INSERT setzen jetztbetrag_ustundbetrag_bruttokorrekt- Vorher:
betrag_ust = 0auf 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_zeilein Tabelleaccounts: 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.phpsrc/Services/LlmService.phpsrc/Views/belege/detail.php,list.phpDockerfile,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
KontierungsvorschlagServiceprüftzahlungskonto_idundkategorie_konto_idjetzt gegen die korrekte Kontenart statt gegen alle Konten
Betrifft
src/Services/KontierungsvorschlagService.phpsrc/Views/belege/detail.phppublic/static/js/app.js
2026-03-29 – EÜR: Spaltenauswahl nach Kontenart statt Buchungstyp
Geändert
EuerCalculator::calculate()wertetaccounts.kontenartaus stattbuchungstypBetriebseinnahme→ Einnahmen-Spalte,Betriebsausgabe→ Ausgaben-SpaltePrivat,Zahlungskonto,Verbindlichkeitals Kategorie-Konto werden nicht in der EÜR ausgewiesen- Vorzeichen von
betrag_nettowerden beibehalten (keinabs()mehr) – negative Beträge mindern die jeweilige Spalte - Buchungen desselben Kontos werden unabhängig vom
buchungstypzu einem Eintrag zusammengefasst
Betrifft
src/Services/EuerCalculator.phpBERICHTE.md(EÜR-Kapitel aktualisiert)
2026-03-29 – UStVA: kontonummernbasierte Kennzahlenberechnung
Geändert
UstvaCalculator::calculate()wertet ausschließlichaccounts.ustva_kzdes Kategorie-Kontos aus –buchungstypundsteuerartwerden nicht mehr benötigtUstvaCalculator::fetchBookingsForKz()filtert überk.ustva_kz IN (...)statt über Buchungsfelder- Kz 83 und 84 kommen jetzt direkt aus
betrag_ustder Erlöskonten (stattKz81 × 19 %) - Kz 91 und 94 kommen direkt aus
betrag_ustder 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_kzvon'66'auf'61' - Alle Betriebsausgabe-Konten mit
steuercode='VSt7':ustva_kzvon'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 derbelege-Tabelle (Migration009_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.phpsrc/Controllers/BookingController.phpsrc/Models/Booking.php(neue MethodenupsertEigenanteil30,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 = 0erhalten – 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.phpriefInvoice::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 inInvoiceController::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
/supplierszum 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üsselsupplier_idinbelege - 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?) undzahlungskonto_id(Wie bezahlt?) - Kontenarten: Umbenannt von Aktiv/Passiv/Aufwand/Ertrag/Neutral zu Betriebseinnahme/Betriebsausgabe/Zahlungskonto/Verbindlichkeit/Privat
- EÜR-Berechnung: Vereinfacht – gruppiert direkt nach
buchungstypstatt komplexer Soll/Haben-Ableitung - UStVA-Berechnung: Verwendet
buchungstypstatt 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
/logindas Anlegen des ersten Administrator-Accounts - Abmelden-Button in der Seitenleiste
Geändert
AUTH_USERundAUTH_PASSentfernt – Zugangsdaten werden ausschließlich in der Datenbank verwaltet- Neue Datenbanktabelle
users(Migration005_users.sql)
Behoben
- Fehler in
BelegControllerbehoben
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