13 KiB
Funktionen
Kontenrahmen SKR03
DATEV-konformer SKR03 2026 mit 157 Systemkonten (Klassen 0, 1, 2, 4, 8), zugeschnitten auf EÜR-Buchhalter ohne Bilanzierungspflicht. Alle Konten sind mit geprüften UStVA-Kennzahlen (ELSTER) und EÜR-Zeilennummern hinterlegt.
Vollständige Kontenliste: kontenrahmen.md
Belegverwaltung
- Upload von PDF, PNG, JPEG, TIFF und ZUGFeRD-XML
- SHA-256 Integritätsprüfung je Datei
- Automatischer Weißrand-Zuschnitt bei JPEG/PNG via GD
- KI-gestützter Kontierungsvorschlag (optional, siehe konfiguration.md)
- Nextcloud-Import via WebDAV (optional)
- Belege können nicht gelöscht werden, solange Buchungen darauf verweisen (GoBD)
Dashboard
Fünf Kacheln: Umsatz, Ausgaben, Gewinn/Verlust (jeweils Jahr, Vormonat und laufender Monat), offene Rechnungen und ungebuchte Belege. Darunter eine Ablagefläche für Belege per Drag & Drop sowie die zehn zuletzt erfassten Buchungen.
- Zuordnung wie in der EÜR: Umsatz, Ausgaben und Ergebnis richten sich nach der Kontenart des Kategorie-Kontos, nicht nach dem Buchungstyp. AfA-Buchungen zählen als Betriebsausgabe; Vorsteuer-, Anlage- und Privatkonten bleiben außen vor, nicht abzugsfähige Ausgaben (EÜR-Zeile 74) mindern das Ergebnis nicht. Die Kacheln stimmen damit mit der EÜR desselben Jahres überein.
- Detailansicht je Zahl (
/dashboard/buchungen/{einnahmen|ausgaben|ergebnis}/{jahr}[/{monat}]): Jede der neun Zahlen der ersten drei Kacheln führt auf die Einzelbuchungen, aus denen sie besteht – mit Belegverweis, Konten und Summenzeile. In der Ergebnisansicht werden Betriebsausgaben mit negativem Vorzeichen ausgewiesen, damit die Spaltensumme dem Kachelwert entspricht.
Ereignisse
Systemprotokoll unter /ereignisse – die letzten 500 Einträge, neueste zuerst.
- Alle Bereiche: Nextcloud-Import (importiert/übersprungen/Fehler), fehlgeschlagene Beleg-Uploads (
beleg-upload), jede dem Nutzer angezeigte Fehler- oder Warnmeldung (meldungen) sowie unbehandelte Ausnahmen und schwere PHP-Fehler (system) - Schweregrad je Eintrag (Info, Warnung, Fehler); filterbar zusammen mit dem Bereich über die beiden Auswahlfelder oben links
- Aktualisiert sich per Ein-/Aus-Button oben rechts automatisch alle 60 Sekunden unter Beibehaltung des Filters (Zustand wird im Browser gemerkt)
- Der frühere Pfad
/ereignisse/nextcloud-importleitet auf die nach diesem Bereich gefilterte Übersicht weiter
Buchungen
EÜR-Buchungsmodell (Einnahme/Ausgabe) mit Kategorie- und Zahlungskonto.
- Netto-/Brutto-Umschalter: Der Betrag kann in der Buchungsmaske wahlweise als Netto- oder Bruttobetrag eingegeben werden (Umschalt-Buttons oberhalb des Betragsfelds); der jeweils aktive Button bestimmt die Interpretation. Vermeidet manuelle Rundungsdifferenzen bei bekanntem Bruttobetrag.
- Steuerarten für Auslandsumsätze: Inland, steuerfreie ig. Lieferung (Kz 41), steuerfreie Ausfuhr (Kz 44), ig. Erwerb 19 % (Kz 89/91), ig. Erwerb 7 % (Kz 93/94)
- Bewirtungsausgaben: automatischer Split 70 %/30 % bei Konten 4650, 4651, 4652
- Eigenanteil (30 %) bei Telefon/Internet (Konten 4920/4925): optional zubuchbar
- Stornobuchungen: GoBD-konforme Gegenbuchung statt Löschung
- GoBD-Schutz: MariaDB
BEFORE UPDATE/DELETE-Trigger verhindern nachträgliche Manipulation gebuchter Sätze - Journal: gefilterte Übersicht aller Buchungen mit CSV-Export
Lieferantenverwaltung
CRUD für Lieferantenstammdaten. Lieferanten können Belegen zugeordnet werden; beim Buchen eines Belegs wird ein unbekannter Lieferant automatisch angelegt (findOrCreate). Der Lieferantenname ist direkt im Beleg inline editierbar. Sowohl in der Belegmetadaten-Bearbeitung (Buchungsmaske) als auch in der Belegliste bietet die Lieferanteneingabe eine Typeahead-Auswahl (HTML5-Datalist) der bereits vorhandenen Lieferanten, um Dubletten durch abweichende Schreibweisen zu vermeiden.
Kundenverwaltung
CRUD für Kundenstammdaten. Kunden werden beim Erstellen von Ausgangsrechnungen ausgewählt.
- Pro Kunde können neben der Haupt-E-Mail-Adresse zwei zusätzliche CC-Adressen hinterlegt werden. Beim Rechnungsversand werden diese automatisch in die CC-Felder des E-Mail-Dialogs übernommen.
Ausgangsrechnungen
- DIN 5008-konformes Layout, PDF-Export via mPDF
- Rechnungsnummernformat PPPYYYYMM-nn (konfigurierbarer Präfix + Jahr + Monat + laufende Nummer, monatlicher Reset)
- Nummernfreigabe beim Löschen: Wird eine Rechnung gelöscht (im Testmodus) und trug sie die zuletzt vergebene Nummer, zählt der Nummernkreis zurück – die Nummer wird als nächste wieder vergeben, statt eine Lücke zu hinterlassen. Für die Belegnummer des zugehörigen Belegs gilt dasselbe. War die Nummer nicht die letzte, bleibt der Zähler stehen; eine Nummer wird nie doppelt vergeben.
- Status-Workflow: Entwurf → Finalisiert (gesperrt für Bearbeitung) → Gesendet → Teilzahlung / Bezahlt / Überzahlt / Storniert
- Zahlungsstatus automatisch: Sobald dem Beleg einer Rechnung Zahlungsbuchungen zugeordnet werden, ergibt sich der Status aus der Summe der aktiven Einnahme-Buchungen – weniger als der Rechnungsbetrag →
Teilzahlung, exakt →Bezahlt, mehr →Überzahlt. Stornierte Buchungen zählen nicht mit; ohne aktive Buchung fällt die Rechnung aufGesendet(falls bereits versendet, Zeitpunkt insent_at) bzw.Finalisiertzurück. Entwürfe und stornierte Rechnungen bleiben unberührt. Der Button „Rechnung als bezahlt markieren" bleibt als manuelle Übersteuerung erhalten (z. B. bei Skonto), wird aber von der nächsten Buchungsänderung wieder überschrieben. - Das Zahlungs-Modal der Detailansicht und die Buchungsansicht zeigen Rechnungsbetrag, gezahlten Betrag und offenen Rest; der Betragsvorschlag entspricht dem offenen Restbetrag.
- Zahlungskonto-Auswahl auf Bankkonten (1200–1299) beschränkt: Analog zur Belegerfassung und den Buchungsvorlagen listet die Auswahl nur noch echte Bankkonten, keine Kasse, kein Verrechnungskonto und keine Umsatzsteuerkonten mehr (Fix #158).
- Buchungsworkflow: Finalisierung erzeugt automatisch einen Beleg und eine Buchung in der Belegverwaltung
- ZUGFeRD EN16931 (E-Rechnung): Jede generierte PDF enthält ein eingebettetes
factur-x.xmlnach EU-Norm EN 16931; Pflichtangaben laut § 14 UStG vollständig abgedeckt; Validierung möglich unter portal.e-rechnung-bund.de; Bibliothek:horstoeko/zugferdv1.x - XML-Rechnung als Einzeldatei: In der Detailansicht liefert das XML-Symbol neben dem PDF-Symbol die reine XML-Rechnung (
Rechnung-<Nr>.xml, Route/invoices/{id}/xml). Verwendet wird das Profil XRechnung 3.0 – eine CIUS von EN 16931, die zusätzlich die deutschen BR-DE-Regeln erfüllt und daher von Prüfdiensten wie dem E-Rechnungsvalidator ohne Beanstandung akzeptiert wird. Fehlen Stamm- oder Rechnungsdaten, wird die Datei trotzdem ausgeliefert; die Detailansicht listet die fehlenden Angaben mit ihrer BT-Nummer auf und färbt das Symbol als Warnung ein. - Für XRechnung zwingend sind unter anderem der Ansprechpartner des Verkäufers (BG-6: Inhaber, Telefon, E-Mail aus den Firmeneinstellungen) sowie die Kundennummer als Käuferreferenz (BT-10); fehlen sie, weist die Detailansicht darauf hin.
- E-Mail-Versand via SMTP direkt aus der Anwendung
- Stornorechnung (§ 14 UStG): Finalisierte, gesendete oder bezahlte Rechnungen können storniert werden; dabei entsteht automatisch eine nummerierte Stornorechnung mit negierten Beträgen (
storno_of_id), GoBD-konforme Stornobuchungen heben die Originalbuchungen auf; Querverweise in der Detailansicht, angepasstes PDF-Layout (Titel „STORNORECHNUNG", Referenzzeile)
Anlagevermögen
Anlagenspiegel für abnutzbare Wirtschaftsgüter – siehe anlagevermögen.md.
Bank buchen
- Import von Kontoauszügen über zwei Wege: CSV-Upload (TXT/XLSX ebenfalls) und Direktverbindung (API/FinTS)
- CSV-Upload: konfigurierbare Spalten- und Datumsformate je Bank, automatische Format-Erkennung beim Datei-Upload, Vorschau-Panel mit Headerzeile und Spalten-Zuordnung; bei unbekannten Formaten wird ein Vorschlag generiert und auf der Settings-Seite zum expliziten Speichern angeboten
- Neues CSV-Format manuell anlegen: im „Neue Direktverbindung"-Dialog (Importieren) kann per „+ CSV-Importformat…" ein neues CSV-Format mit Trennzeichen, Datums-/Dezimalformat etc. angelegt werden; Spaltenzuordnung wird anschließend unter Einstellungen → CSV Bankimport Formate verfeinert
- Direktverbindung „PayPal" (NVP/SOAP-API): API-Benutzer, API-Kennwort, Signature und Sandbox-Flag werden verschlüsselt abgelegt. Live-Log via Server-Sent Events
- Direktverbindung „FinTS" (Comdirect, DKB und weitere): BLZ, Benutzerkennung und PIN, optional FinTS-Server-URL (sonst Default aus dem Provider) und IBAN-Filter. PIN wird verschlüsselt abgelegt (AES-256-GCM). Leseabruf mit PIN; TAN-pflichtige Aktionen werden mit Fehlermeldung abgebrochen. Die FinTS-Server-URL wird beim Speichern und erneut vor jedem Abruf mit
SsrfGuardgeprüft: nurhttps://zu öffentlich erreichbaren Hosts ist erlaubt, private/interne Ziele (RFC1918, Loopback, Link-Local) werden abgelehnt (Schutz vor SSRF) - Bankleitzahl nachschlagen: im „Neue Direktverbindung"-Dialog (FinTS) kann die PIN/TAN-Server-URL über eine Live-Suche (BLZ, BIC, Name oder Ort) aus dem Bankleitzahlen-Verzeichnis übernommen werden, statt sie von Hand einzutragen
- Letzter Abrufzeitpunkt wird pro Verbindung gespeichert; nächster Abruf startet ab 00:00 dieses Tages (max. ein Tag Überlappung für Dedup)
- Kontostand: FinTS-Abrufe liefern den Schlusssaldo des letzten Statements, PayPal den aktuellen Saldo über
GetBalance; der Wert wird zusammen mit dem Abrufzeitpunkt auf der Verbindungskachel angezeigt und bleibt bei Abrufen ohne ermittelten Kontostand erhalten - Abrufen ab: Im Bearbeiten-Dialog kann pro Direktverbindung ausgewählt werden, ab wann der nächste Lauf Buchungen holt: Ab letztem Abruf (Default), Letzte 7 Tage, Aktueller Monat (ab 01.), Letzte 30 Tage oder Ohne Datum (letzte 365 Tage). Die Sonderauswahl gilt nur einmalig – nach erfolgreichem Abruf fällt die Verbindung wieder auf den Default zurück
- Dublettenprüfung: CSV-Import vergleicht Datum+Betrag+Text; Direktverbindungen nutzen eine
external_id(Hash aus IBAN/Datum/Betrag/Verwendungszweck bei FinTS, Transaktions-ID bei PayPal) - Beleg-Zuordnung: jede Banktransaktion kann einem oder mehreren Belegen zugeordnet werden; der zugeordnete Betrag wird separat erfasst
- Teilzuordnung: eine Transaktion kann schrittweise mehreren Belegen anteilig zugeordnet werden
- Status-Logik:
offen→ keine Zuordnung,teilweise→ Restsaldo > 0,01 €,gebucht→ vollständig zugeordnet - Direkter Beleg-Upload aus der Transaktionsansicht heraus (erzeugt neuen Beleg und verknüpft ihn)
- Verschlüsselung: Der
APP_KEYin.envist Pflicht für Direktverbindungen – im Backup mitsichern, Verlust = Verlust aller gespeicherten Credentials
UStVA (Umsatzsteuervoranmeldung)
- Monatliche Kennzahlen-Berechnung aus Buchungen (Kz 81, 89, 66, 61, 83)
- ELSTER XML-Export
- Drill-down: Klick auf eine Kennzahl zeigt alle zugehörigen Buchungszeilen
Zuordnungsregeln: berechnungslogik.md
EÜR (Einnahmen-Überschuss-Rechnung)
- Jahresauswertung: Einnahmen, Ausgaben, Gewinn je Kategorie-Konto
- Nicht abzugsfähige Betriebsausgaben (§ 4 Abs. 5 EStG, EÜR-Zeile 51) in separatem Abschnitt
- PDF-Export
- Drill-down: Klick auf ein Konto zeigt alle zugehörigen Buchungszeilen
Zuordnungsregeln: berechnungslogik.md
Einstellungen
- Firmendaten und Logo (erscheinen auf Rechnungen und im EÜR/UStVA-Export)
- ELSTER-Steuernummer
- Nummernkreis-Präfixe für Belege, Rechnungen und Anlagen
- SMTP-Konfiguration für E-Mail-Versand (Host, Port, Benutzer, Passwort, TLS/SSL)
- KI-Kontierungsvorschlag (Ollama oder OpenAI-kompatible API)
- Nextcloud-Belegimport (WebDAV-Zugangsdaten)
- Bankleitzahlen-Verzeichnis (
/settings/bankinstitute): nimmt die CSV-Institutsliste der Deutschen Kreditwirtschaft (hbci-zka.de) auf – BLZ, Institut, Ort, BIC und PIN/TAN-Zugangspunkt. „Nur prüfen" zeigt einen Prüfbericht (Zeilen, Bankleitzahlen, Zugangspunkte, Stand der Daten, Sichtprobe der ersten Zeilen) ohne die Datenbank zu ändern; „Übernehmen" ersetzt den gesamten Bestand. Die Datei selbst wird nicht gespeichert. Suche über Bankleitzahl, BIC, Name und Ort in einem Zug, Treffer in der Bankleitzahl stehen oben. Dient als Nachschlagequelle für die FinTS-Server-URL beim Anlegen einer Bank-Direktverbindung (siehe „Bank buchen")
Benutzerverwaltung
- Benutzer anlegen, bearbeiten, deaktivieren und löschen
- Session-basierte Authentifizierung mit 24 h Timeout
- Erste Benutzeranlage über Ersteinrichtungs-Dialog beim ersten Aufruf, dieser Benutzer erhält automatisch die Rolle
admin - Rollen
admin/user:/useradmin(Benutzer anlegen, Passwörter setzen, löschen, deaktivieren) ist ausschließlich Admins vorbehalten (Auth::requireAdmin()); der Menüpunkt ist für andere Benutzer ausgeblendet