Kleine selbst gehostete Web-App, um Arzt-, Apotheken- und Therapierechnungen gegenüber der privaten Krankenversicherung im Blick zu behalten:
- Nicht erstattet: Ablehnungen und Kürzungen mit Begründung, Betrag, Hinweis-Code und Auszügen aus den Schreiben der Versicherung; Status (offen / in Arbeit / erledigt) und Notizen pro Vorgang.
- Neue Rechnungen: PDF oder Foto hochladen; Status „wartet auf Einreichung“ → „eingereicht“ → „erstattet“.
- Automatischer Abgleich Versicherung ↔ Konto: Kontoumsätze kommen stündlich aus einem Banking-Backend (
sync.py: liest direkt und nur lesend die SQLite-DB eines figo/YAXI-Backends auf demselben Server,FIGO_DB, oder dessen API überFIGO_API_URL/FIGO_API_TOKENin/etc/dkv-app/env), Leistungsabrechnungen per API (/api/import/dkv-text) oder notfalls als PDF/CSV-Upload; die App ordnet Zahlungen den abgerechneten Positionen zu und zeigt: bezahlt ohne Erstattung (mit Tagen), gekürzt/abgelehnt, abgerechnet ohne eigene Zahlung, ausstehende Gutschriften. - API für Automatisierung (z. B. ein wöchentlicher Abgleich, der Abrechnungen und Kontoumsätze einträgt).
Flask + SQLite, hinter nginx mit Basic Auth. Keine externen Ressourcen, keine Tracker.
cp server/config.example.env server/config.env # SSH_TARGET, DOMAIN, EMAIL eintragen
./deploy.shinstall.sh legt beim ersten Lauf an: venv, systemd-Dienst dkv-app (gunicorn auf 127.0.0.1:8095), nginx-vHost mit Basic Auth (/etc/dkv-app/.htpasswd, Benutzer ich und claude) und ein Let's-Encrypt-Zertifikat. Daten liegen in /var/lib/dkv-app (SQLite + hochgeladene Dateien) und bleiben bei Updates unangetastet.
Startdaten: optional server/seed.json (Format wie server/seed.example.json, nicht im Repo) – wird nur in eine leere Datenbank geladen.
| Methode | Pfad | Zweck |
|---|---|---|
| GET | /api/items, /api/rechnungen[?status=bereit], /api/meta/summary |
lesen |
| PUT / PATCH | /api/<items|rechnungen|meta>/<id> |
Dokument setzen / zusammenführen (JSON) |
| POST | /api/rechnungen |
Rechnung hochladen (multipart: files, person, rechnungssteller, rechnungsdatum, betrag, notiz) |
| GET | /api/files/<fileId> |
Datei abrufen |
| POST | /api/import/n26 |
Konto-CSV importieren (multipart file) |
| POST | /api/import/dkv |
Leistungsabrechnungen als PDF einlesen (multipart files) |
| POST | /api/import/dkv-text |
Abrechnungstext einlesen ({"name","text"}) |
| GET | /api/abgleich[?von=YYYY-MM-DD] |
Zuordnung Zahlungen ↔ Positionen, Gutschriften |
| POST | /api/abgleich/vorgang |
Position als Vorgang übernehmen |
| POST | /api/sync |
Kontoumsätze sofort abrufen |
| POST | /api/import/einreichungen |
Einreichungen (Status aus dem Versicherungs-Postfach) übernehmen |
meta/summary.abgleich steuert die Zuordnung: zusatz (weitere Empfänger, die als medizinisch gelten), ignorieren, namenspaare (Kontoname → Name in der Abrechnung).
meta/summary kann titel, personen (Liste für das Upload-Formular), stand, alertTitle, alertText enthalten.