Files
certain/backend/migrations/versions/0023_bank_saldo.py
T
GuidoandClaude Opus 5 63de8368f0 feat: Kontostand von der Bank – die eigene Rechnung wird geprueft
Certain rechnet den Saldo bisher ausschliesslich selbst aus: Anfangsbestand
plus alle Buchungen. Stimmt eine Buchung nicht, faellt das erst auf, wenn man
von Hand mit dem Auszug vergleicht.

Der von der Bank gemeldete Saldo wird jetzt mitgefuehrt und danebengestellt.
Weicht er ab, fehlt oder doppelt eine Buchung – und man sieht es auf der
Kontenseite und in den Einstellungen sofort, statt es zu suchen.

Banken melden mehrere Saldi nebeneinander; ausgewaehlt wird der gebuchte, denn
nur der ist mit Certains Rechnung vergleichbar. Ein verfuegbarer Saldo enthaelt
Vorgemerktes oder einen Ueberziehungsrahmen.

Die Saldi kommen auch fuer noch nicht zugeordnete Konten: Bei mehreren
Revolut-Pockets ist der Betrag oft das Einzige, woran man sie unterscheidet.
Ein Fehler bei einem Konto beendet den Durchlauf nicht.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-26 23:08:56 +02:00

37 lines
1.2 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.
"""Kontostand, wie ihn die Bank fuehrt.
Certain rechnet den Saldo bisher ausschliesslich selbst aus: Anfangsbestand
plus alle Buchungen. Stimmt eine Buchung nicht, faellt das erst auf, wenn man
von Hand mit dem Auszug vergleicht – genau daran ist hier schon ein Abend
draufgegangen.
Der von der Bank gemeldete Saldo wird deshalb mitgefuehrt. Er ersetzt die
eigene Rechnung nicht, er prueft sie: Weichen beide voneinander ab, fehlt oder
doppelt eine Buchung, und man sieht es sofort.
Revision ID: 0023
Revises: 0022
"""
import sqlalchemy as sa
from alembic import op
revision = "0023"
down_revision = "0022"
branch_labels = None
depends_on = None
def upgrade() -> None:
with op.batch_alter_table("bank_account_links") as b:
b.add_column(sa.Column("balance_cents", sa.Integer(), nullable=True))
b.add_column(sa.Column("balance_type", sa.String(length=16), nullable=True))
b.add_column(sa.Column("balance_at", sa.DateTime(timezone=True), nullable=True))
def downgrade() -> None:
with op.batch_alter_table("bank_account_links") as b:
b.drop_column("balance_at")
b.drop_column("balance_type")
b.drop_column("balance_cents")