# 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. ```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 # Beispiel: docker compose exec web php scripts/container/reset-password.php Meinuser geheim123 ```