feat: Buchungen lassen sich von Hand einem Abo zuordnen – und das merkt sich

Die Erkennung lief seit Stufe 3, aber nur automatisch: Was sie nicht
sicher traf, blieb liegen, und sehen konnte man davon nichts. Die
Endpunkte gab es, die Oberflaeche kannte keinen davon.

Jetzt steht in der Buchungsliste eine Spalte "Abo" – dieselbe Form wie
die Kategorie daneben: Die Auswahl zeigt, zu welchem Vertrag die Zahlung
gehoert, aendert es, und leer loest die Zuordnung. Uebertraege bleiben
aussen vor; sie verschieben nur Geld.

Und sie lernt. Musste man von Hand ran, hat der Erkennungstext nicht
gepasst – also wird der Empfaenger dieser Buchung der neue. Beim
naechsten Mal faellt dieselbe Zahlung von selbst zu, statt dass man
jeden Monat dasselbe klickt. Der Vertragsname bleibt als zweite Chance:
_passt_text prueft beide, nicht entweder/oder, sonst verlaere man beim
Lernen, was vorher schon getroffen hat.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Scarriffle
2026-10-15 09:59:55 +02:00
co-authored by Claude Opus 5
parent 493a98ab6b
commit 0ea2ab1322
7 changed files with 122 additions and 9 deletions
+6
View File
@@ -286,6 +286,12 @@ export const api = {
createSubscription: (body) => request("/subscriptions", { method: "POST", body }),
updateSubscription: (id, body) => request(`/subscriptions/${id}`, { method: "PATCH", body }),
deleteSubscription: (id) => request(`/subscriptions/${id}`, { method: "DELETE" }),
// Zuordnung Buchung -> Vertrag. Beim Zuordnen von Hand lernt der Vertrag
// den Empfaengertext der Buchung.
assignSubscription: (subId, txnId) =>
request(`/subscriptions/${subId}/buchungen/${txnId}`, { method: "POST" }),
unassignSubscription: (txnId) =>
request(`/subscriptions/buchungen/${txnId}`, { method: "DELETE" }),
// Das Logo geht als Datei raus, nicht als JSON – deshalb FormData statt body.
uploadSubscriptionLogo: (id, datei) => {
const fd = new FormData();