Steuerkram/docs/konfiguration.md

5 KiB
Raw Blame History

Konfiguration

Firmendaten hinterlegen

Nach dem ersten Login unter Einstellungen Firmendaten, Logo und ELSTER-Steuernummer eintragen. Diese Angaben erscheinen auf Ausgangsrechnungen und im EÜR/UStVA-Export.


Nummernkreise

Unter Einstellungen → Nummernkreise können Präfixe für die automatisch vergebenen Nummern konfiguriert werden:

Nummernkreis Standard Beispiel
Belege BLG BLG-2026-0001
Ausgangsrechnungen RE RE-2026-0001
Anlagen ANL ANL-2026-0001

Das Format ist immer {Präfix}-{Jahr}-{laufende Nummer}. Die laufende Nummer wird automatisch hochgezählt und kann nicht zurückgesetzt werden (GoBD).


KI-Kontierungsvorschlag einrichten

Der KI-Kontierungsvorschlag analysiert Belege automatisch beim Nextcloud-Import und füllt das Buchungsformular mit einem Vorschlag vor. Die Funktion ist standardmäßig deaktiviert und kann unter Einstellungen → KI-Kontierungsvorschlag aktiviert werden.

Voraussetzungen

  • Nextcloud-Import muss konfiguriert und aktiv sein (siehe unten)
  • Ein erreichbares LLM (lokal via Ollama oder Remote-API)
  • Für Bildbelege (JPEG, PNG, TIFF): ein Vision-fähiges Modell (z.B. qwen2.5vl, llava); ohne Vision-Unterstützung werden Bildbelege ohne Textextraktion verarbeitet
  • Für PDF-Belege: pdftotext und pdftoppm (Teil von poppler-utils, im Docker-Image enthalten)

Option A – Lokales Ollama

Kein API-Schlüssel nötig, aber hoher Ressourcenbedarf:

ollama pull qwen2.5vl   # Vision-fähig (empfohlen), alternativ mistral o.ä.

In .env ist keine weitere Konfiguration nötig – die App erkennt Ollama auf localhost:11434 automatisch. Modell und URL können optional überschrieben werden:

OLLAMA_URL=http://localhost:11434
OLLAMA_MODEL=qwen2.5vl

Option B – Remote-API (OpenAI-kompatibel)

z.B. OpenAI, OpenRouter, LM Studio:

LLM_API_URL=https://api.openai.com/v1
LLM_API_KEY=sk-...
LLM_MODEL=gpt-4o-mini

Hinweis: Die Ergebnisqualität hängt stark vom gewählten Modell ab. Für zuverlässige Ergebnisse wird ein Vision-fähiges Modell empfohlen.


Nextcloud-Import einrichten

Belege können automatisch aus einem Nextcloud-Ordner via WebDAV importiert werden. Das CLI-Skript scripts/container/nextcloud-import.php liest alle unterstützten Dateien (PDF, JPEG, PNG, TIFF, XML) aus dem konfigurierten Ordner, legt sie als Belege an und verschiebt sie anschließend in einen Erledigte-Ordner.

Zugangsdaten konfigurieren

Die Zugangsdaten werden in der Steuerkram-UI gepflegt: Einstellungen → Nextcloud-Belegimport.

Hinweis: Ein Nextcloud-App-Passwort verwenden (Nextcloud → Einstellungen → Sicherheit → App-Passwörter).

Manueller Aufruf

docker compose exec web php scripts/container/nextcloud-import.php

Automatisch per Cron

Cron-Eintrag auf dem Host anlegen (crontab -e):

*/15 * * * * docker compose -f /opt/Steuerkram/docker-compose.yml exec -T web \
    php scripts/container/nextcloud-import.php >> /var/log/steuerkram-import.log 2>&1

Das -T-Flag ist bei Cron zwingend erforderlich – ohne TTY schlägt docker compose exec sonst still fehl.

Damit docker compose exec ohne sudo funktioniert, muss der User in der Docker-Gruppe sein:

sudo usermod -aG docker $USER
# Danach neu einloggen

Verbindung analysieren

Meldet der Import „PROPFIND fehlgeschlagen" oder findet er keine Dateien, grenzt scripts/analyse-nextcloud.sh die Ursache ein. Das Skript wird auf dem Host aufgerufen (nicht im Container) und arbeitet rein lesend – es importiert, verschiebt und löscht nichts. Das Passwort wird nie im Klartext ausgegeben.

./scripts/analyse-nextcloud.sh            # Konfiguration, DNS, Verbindungsversuch
./scripts/analyse-nextcloud.sh --verbose  # zusätzlich ein Auszug der Server-Antwort

Ausgegeben werden die hinterlegte Konfiguration, die Namensauflösung samt IP-Pinning des SSRF-Schutzes, ein PROPFIND auf den Import-Ordner, der Inhalt des Ordners (inkl. Dateien, die wegen ihres Typs übersprungen würden) und die Erreichbarkeit des Erledigte-Ordners. Schlägt der Verbindungsversuch fehl, folgen Gegenproben ohne IP-Pinning sowie je Adressfamilie einzeln – daran ist ablesbar, ob Zugangsdaten, Ordnerpfad oder die Netzwerkverbindung (z.B. fehlende IPv6-Konnektivität) die Ursache sind. Exit-Code 0 bedeutet, dass die Verbindung steht.


Benutzer-Passwort zurücksetzen

Das Skript scripts/container/reset-password.php setzt das Passwort eines vorhandenen Benutzers auf einen neuen Wert. Es nimmt den Benutzernamen und das neue Passwort als Parameter entgegen, erzeugt einen bcrypt-Hash und aktualisiert den Eintrag in der Datenbank. Wird der Benutzer nicht gefunden, gibt es eine Fehlermeldung und ändert nichts.

docker compose exec web php scripts/container/reset-password.php <username> <neues_passwort>

# Beispiel:
docker compose exec web php scripts/container/reset-password.php Meinuser geheim123