feat: Doppelt gebuchte Uebertraege auffindbar machen
Solange beim Anlegen eines Uebertrags nicht geprueft wurde, ob die Gegenseite schon gebucht ist, konnte dieselbe Bewegung zweimal auf einem Konto landen. Das ist seit dem vorigen Commit unterbunden – die Daten von vorher bleiben aber, wie sie sind. Das Skript findet sie: Zu jedem Uebertrag sieht es auf BEIDEN Konten nach, ob dort zusaetzlich eine passende Buchung steht (gleiche Tage, passender Betrag, ueber Waehrungen hinweg mit Spielraum), und rechnet zusammen, wieviel dann zu viel dasteht. Es aendert NICHTS und oeffnet die Datenbank nur lesend. Aufraeumen bleibt Sache des Nutzers, denn welche der beiden Zeilen falsch ist, haengt daran, ob Certain das Gegenkonto selbst abholt – das kann das Skript nicht wissen, und ein Aufraeumskript hat hier schon einmal Richtiges mit weggeraeumt. Beide Faelle stehen als Anleitung dabei. Dazu ein Regressionstest fuer genau den gemeldeten Fall: Gutschrift steht schon auf dem Zielkonto, die Belastung soll zum Uebertrag werden – das wird jetzt abgefangen, und der Saldo des Zielkontos bleibt unveraendert. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -433,3 +433,23 @@ def test_uebertrag_nimmt_den_kurs_der_bank_auch_nachtraeglich(admin):
|
||||
assert r.status_code == 200, r.text
|
||||
assert r.json()["to_amount_cents"] == 42532, "der Betrag der Bank, nicht der gerechnete"
|
||||
assert admin.get(f"/api/accounts/{eur['id']}").json()["balance_cents"] == 42532
|
||||
|
||||
|
||||
def test_lohnzahlung_auf_zwei_konten_wird_abgefangen(admin):
|
||||
"""Genau der gemeldete Fall: Die Gutschrift steht schon auf dem Zielkonto,
|
||||
die Belastung soll zum Uebertrag werden. Ohne Sperre stuenden 1'575 zweimal
|
||||
auf dem Zielkonto."""
|
||||
lohn = _konto(admin, name=f"Raiffeisen Lohn {secrets.token_hex(3)}", currency="CHF")
|
||||
revolut = _konto(admin, name=f"Revolut CHF {secrets.token_hex(3)}", currency="CHF")
|
||||
raus = admin.post("/api/transactions", json={
|
||||
"type": "expense", "date": "2026-08-25", "account_id": lohn["id"],
|
||||
"amount_cents": 157500, "payee": "Guido Schmit"}).json()
|
||||
admin.post("/api/transactions", json={
|
||||
"type": "income", "date": "2026-08-25", "account_id": revolut["id"],
|
||||
"amount_cents": 157500, "payee": "GUIDO SCHMIT"})
|
||||
|
||||
r = admin.post(f"/api/transactions/{raus['id']}/transfer",
|
||||
json={"to_account_id": revolut["id"]})
|
||||
assert r.status_code == 409, r.text
|
||||
assert admin.get(f"/api/accounts/{revolut['id']}").json()["balance_cents"] == 157500, \
|
||||
"das Geld darf nicht zweimal dastehen"
|
||||
|
||||
Reference in New Issue
Block a user