Steuerkram/docs/konfiguration.md
fds2610-bot b7508fe401 Fix #209: analyse-nextcloud.sh prüft, ob das Importskript vorhanden und ladbar ist
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-20 17:33:07 +02:00

119 lines
5.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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:
```bash
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:
```dotenv
OLLAMA_URL=http://localhost:11434
OLLAMA_MODEL=qwen2.5vl
```
### Option B – Remote-API (OpenAI-kompatibel)
z.B. OpenAI, OpenRouter, LM Studio:
```dotenv
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
```bash
docker compose exec web php scripts/container/nextcloud-import.php
```
### Automatisch per Cron
Cron-Eintrag auf dem Host anlegen (`crontab -e`):
```cron
*/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:
```bash
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. Zum Schluss prüft die Analyse, ob `scripts/container/nextcloud-import.php` im Container vorhanden und ladbar ist (ohne es auszuführen), und nennt den Pfad, den der Host-Cronjob verwenden muss.
```bash
./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.
```bash
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
```