"""Eskalation offener Fehlbestände (Karte 12): Tracking-Felder + Konfiguration Revision ID: 0006_add_eskalation_felder Revises: 0005_add_objektposition_code Create Date: 2026-09-04 Karte 12 / Prompt 24: Zeitstempel je Eskalationsstufe auf fehlbestand (damit dieselbe Stufe nicht bei jedem Prüflauf erneut verschickt wird), plus eine Singleton-Konfigurationstabelle für die Zeitschwellen - Nutzer-Vorgabe: die Schwellen dürfen nicht fix im Code stehen, müssen zur Laufzeit änderbar sein. """ from typing import Sequence, Union from alembic import op revision: str = "0006_add_eskalation_felder" down_revision: Union[str, None] = "0005_add_objektposition_code" branch_labels: Union[str, Sequence[str], None] = None depends_on: Union[str, Sequence[str], None] = None def upgrade() -> None: op.execute( """ ALTER TABLE fehlbestand ADD COLUMN erinnerung_gesendet_am TIMESTAMPTZ, ADD COLUMN eskalation_gesendet_am TIMESTAMPTZ; """ ) op.execute( """ CREATE TABLE eskalation_konfiguration ( id SERIAL PRIMARY KEY, erinnerung_tage INTEGER NOT NULL DEFAULT 3, leitung_tage INTEGER NOT NULL DEFAULT 7 ); """ ) op.execute("INSERT INTO eskalation_konfiguration (id, erinnerung_tage, leitung_tage) VALUES (1, 3, 7);") def downgrade() -> None: op.execute("DROP TABLE eskalation_konfiguration;") op.execute( """ ALTER TABLE fehlbestand DROP COLUMN erinnerung_gesendet_am, DROP COLUMN eskalation_gesendet_am; """ )