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:
co-authored by
Claude Opus 5
parent
175d9f50e0
commit
991a8e4fc2
@@ -362,8 +362,13 @@ _MERGE_KEYS: dict[str, Callable[[dict], tuple | None]] = {
|
||||
"import_templates": lambda r: ("name", (r.get("name") or "").strip().lower()),
|
||||
"import_batches": lambda r: ("batch", r.get("account_id"), r.get("filename"),
|
||||
r.get("created_at")),
|
||||
# Die Kennung der Quelle zuerst: Sie ist die einzige EXAKTE Aussage, dass
|
||||
# zwei Zeilen dieselbe Zahlung sind – und ohne sie liefe „Ergaenzen" gegen
|
||||
# die Eindeutigkeit von (owner_id, source_uid), statt die Zeile zu
|
||||
# erkennen. Erst danach der Aehnlichkeits-Schluessel.
|
||||
"transactions": lambda r: (
|
||||
("hash", r["import_hash"]) if r.get("import_hash")
|
||||
("uid", r["source_uid"]) if r.get("source_uid")
|
||||
else ("hash", r["import_hash"]) if r.get("import_hash")
|
||||
else ("nat", r.get("date"), r.get("account_id"), r.get("amount_cents"),
|
||||
(r.get("payee") or "").strip().lower())
|
||||
),
|
||||
|
||||
Reference in New Issue
Block a user