feat: CSV-Import ueber bestehende Pipeline mit dreiwertiger Saldo-Pruefung

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-19 21:45:53 +02:00
parent e2d713e960
commit ea4858c4de
7 changed files with 354 additions and 50 deletions

View File

@@ -18,8 +18,10 @@
</table>
<p>
Saldo-Status:
{% if balance_ok %}
<span class="badge badge-ok">Saldo stimmt</span>
{% if balance_ok is none %}
<span class="badge">Saldo-Prüfung: nicht verfügbar (Format ohne Saldodaten)</span>
{% elif balance_ok %}
<span class="badge badge-ok">Saldo plausibel</span>
{% else %}
<span class="badge badge-error">Saldo-Differenz bitte prüfen</span>
{% endif %}

View File

@@ -16,15 +16,24 @@
Über die Übersicht umbenennbar (z. B. "DKB Giro").
</li>
<li>
<strong>Kontoauszug-Import:</strong> PDF in die Drop-Zone auf der
Import-Seite ziehen (oder in die Inbox
<strong>Kontoauszug-Import:</strong> primärer Weg ist der
Kontoumsatz-CSV-Export der Bank (DKB, VR-Bank, HypoVereinsbank) in die
Drop-Zone auf der Import-Seite ziehen (oder in die Inbox
<code>~/.local/share/finance_pod/data/inbox/</code> legen und "Inbox
scannen"). Jeder Import wird geprüft (Anfangssaldo + Buchungen = Endsaldo)
und landet als Entwurf: erst nach Kontrolle der Vorschau "Übernehmen"
klicken. Duplikate werden erkannt und nicht doppelt übernommen. Bestätigte
Importe lassen sich als Ganzes zurückrollen (Auszug + alle seine
Buchungen), z. B. um einen Auszug mit einem verbesserten Parser neu zu
importieren; einzelne Buchungen bleiben unlöschbar.
scannen"). PDF-Kontoauszüge funktionieren weiterhin als Fallback, falls
kein CSV-Export vorliegt. Jeder Import landet als Entwurf: erst nach
Kontrolle der Vorschau "Übernehmen" klicken. Der Saldo-Status in der
Vorschau ist dreiwertig "Saldo plausibel" (Anfangssaldo + Buchungen =
Endsaldo bzw. lückenlose Saldo-Kette), eine rote Saldo-Differenz, oder
"Saldo-Prüfung nicht verfügbar", wenn das Format (z. B. HVB-CSV) keine
Saldodaten liefert dort lohnt ein Blick in die Zeilenzahl und
Stichproben vor dem Übernehmen. CSV-Importe mit Datei-Kontostand (DKB)
oder lückenloser Saldo-Kette (VR) aktualisieren beim Import automatisch
den Konto-Saldo-Anker, sofern er dadurch nicht älter würde als ein bereits
vorhandener. Duplikate werden erkannt und nicht doppelt übernommen.
Bestätigte Importe lassen sich als Ganzes zurückrollen (Auszug + alle
seine Buchungen), z. B. um einen Auszug mit einem verbesserten Parser neu
zu importieren; einzelne Buchungen bleiben unlöschbar.
</li>
<li>
<strong>Kategorien &amp; Regeln:</strong> Buchungen lassen sich kategorisieren;

View File

@@ -4,14 +4,14 @@
<h1>Import</h1>
<div id="dropzone">
Kontoauszug-PDF hier ablegen oder klicken zum Hochladen
<input type="file" id="file-input" accept="application/pdf" style="display:none">
Kontoumsatz-CSV oder Kontoauszug-PDF hier ablegen oder klicken zum Hochladen
<input type="file" id="file-input" accept=".csv,.pdf,application/pdf,text/csv" style="display:none">
</div>
<button type="button" hx-post="/api/imports/scan-inbox" hx-swap="none"
hx-on::after-request="if(event.detail.successful){htmx.trigger(document.getElementById('imports'), 'refresh')}">
Inbox scannen
</button>
<p class="muted">Durchsucht <code>~/.local/share/finance_pod/data/inbox/</code> nach neuen PDF-Kontoauszügen.</p>
<p class="muted">Durchsucht <code>~/.local/share/finance_pod/data/inbox/</code> nach neuen CSV- oder PDF-Kontoauszügen.</p>
<p id="upload-message"></p>
<h2>Importe</h2>