Files
certain/backend/migrations/versions/0035_kreditrahmen.py
T
ScarriffleandClaude Opus 5 38697f828e feat: Eine Kreditkarte ist eine Schuld – der Rahmen ist kein Guthaben
Wer seinen Kreditrahmen festhalten wollte, hatte dafuer nur den
Anfangssaldo. Also standen dort 2.500, und Certain meldete ein Vermoegen,
das es nicht gibt: Das Geld ist nicht da, es darf nur ausgegeben werden.

Jetzt hat der Rahmen ein eigenes Feld – sichtbar nur bei Kreditkarten,
denn an einem Girokonto gaebe es nichts zu begrenzen. Die Kontokarte
zeigt daneben, was noch geht ("noch 1.754,50 von 2.500,00 frei") und
warnt, wenn der Rahmen ueberzogen ist.

Der Saldo selbst bleibt, was er ist: abbezahlt null, jede Ausgabe ins
Minus, die Rechnung holt ihn zurueck. Gerechnet werden musste dafuer
nichts neu – die Saldenrechnung war schon vorzeichenoffen.

Zwei Dinge fielen dabei auf und sind miterledigt:

- Die Summe "Gesamt" auf der Kontenseite zaehlte archivierte Konten mit,
  das Backend nicht. Zwei Zahlen fuer dieselbe Sache.
- "Gesamt" wurde ungefaerbt ausgegeben. Solange nur Guthaben
  zusammenkamen, fiel das nicht auf; mit einer Kartenschuld stuende ein
  negatives Gesamt still und unauffaellig da.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-30 20:27:30 +02:00

36 lines
1.1 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""Der Kreditrahmen bekommt einen eigenen Platz.
Bisher hatte niemand einen Ort fuer die Zahl, die eine Kreditkarte ausmacht:
wie viel sie ausgeben darf. Wer sie trotzdem festhalten wollte, trug sie als
Startsaldo ein – und sah fortan ein Guthaben, das es nicht gibt.
Eine Karte ist kein Konto mit Geld darauf. Abbezahlt steht sie auf null, jede
Ausgabe drueckt sie ins Minus, die Rechnung holt sie zurueck. Der Rahmen ist
eine Zusage der Bank, kein Besitz – und gehoert deshalb neben den Saldo, nicht
hinein.
Optional: Konten ohne Eintrag verhalten sich wie bisher.
Revision ID: 0035
Revises: 0034
"""
import sqlalchemy as sa
from alembic import op
revision = "0035"
down_revision = "0034"
branch_labels = None
depends_on = None
def upgrade() -> None:
# Ohne batch_alter_table, aus demselben Grund wie in 0034: Eine Spalte
# anhaengen kann SQLite direkt, der Tabellen-Umbau risse ueber ON DELETE
# CASCADE haengende Zeilen mit (tests/test_migrations.py).
op.execute(sa.text("ALTER TABLE accounts ADD COLUMN credit_limit_cents INTEGER"))
def downgrade() -> None:
op.execute(sa.text("ALTER TABLE accounts DROP COLUMN credit_limit_cents"))