fix: Die Kennung der Bank steht jetzt an der Buchung selbst

Bisher lag sie nur am Eingangs-Eintrag. Das reicht nicht: Der Eintrag ist eine
Zwischenstation und faellt weg, wenn ein Konto geloescht wird oder ein aelteres
Backup ihn nicht kannte. Dann war die Zahlung fuer den naechsten Abruf neu,
obwohl sie laengst gebucht war.

Am schlimmsten bei einem als Uebertrag gebuchten Umsatz: Der ist von der
Aehnlichkeitspruefung ausgenommen, dort griff also gar nichts mehr.

Die Kennung gehoert deshalb an die Buchung (transactions.source_uid, mit der
Quelle davor). Dort ueberlebt sie alles, was mit dem Eingang passiert, und die
Eindeutigkeit haelt die Datenbank selbst durch – nicht erst der pruefende Code
davor. Gestempelt wird an allen drei Buchungswegen: Eingang, Kurzbefehl und
Uebertrag.

Vorhandene Buchungen bekommen die Kennung nachgetragen, solange ihr
Eingangs-Eintrag noch da ist.

Ohne Kennung – von Hand erfasst, aus einer CSV-Datei – bleibt es beim
bisherigen Schutz ueber die Aehnlichkeit.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Scarriffle
2026-09-07 11:59:43 +02:00
co-authored by Claude Opus 5
parent 175d9f50e0
commit 991a8e4fc2
8 changed files with 308 additions and 3 deletions
+5 -1
View File
@@ -30,7 +30,7 @@ from ..models import (
User,
)
from ..schemas import InboxItemOut, QuickBookingIn, QuickBookingOut
from ..services import csv_import, currency
from ..services import csv_import, currency, eingang
router = APIRouter(prefix="/quick", tags=["quick"])
@@ -118,6 +118,10 @@ def quick_booking(
category_id=kategorie_id,
payee=(payload.payee or None),
description=(payload.note or None),
# Die Kennung des Kurzbefehls gehoert auch an die Buchung, nicht nur an
# den Eingangs-Eintrag darueber: Nur dort ueberlebt sie, wenn der
# Eintrag einmal wegfaellt.
source_uid=eingang.quell_kennung(InboxSource.shortcut, payload.external_id),
)
db.add(txn)
db.flush()