antragstracker/scripts/migrate_fristen.py
Dotty Dotter c10a16696b feat: Fristen-Tracking (Issue #17)
- DB-Migration: fristen-Tabelle mit Indices
- Backend API: CRUD für Fristen (/api/fristen)
  - GET mit Filtern (kette_id, status, typ, Paginierung)
  - POST (manuell anlegen), PATCH (Status ändern), DELETE
  - GET /api/fristen/ueberfaellig (auto-Status-Update)
- KI-Extraktion: Prompts in bewertung.py erweitert
  - Zusammenfassung + Ketten-Bewertung extrahieren Fristen
  - Automatisches Einfügen mit quelle='ki_extraktion'
- Frontend /fristen: Übersichtsseite mit Tabelle/Cards
  - Filter nach Status + Typ, Farbcodierung, Paginierung
  - Button 'Als erfüllt markieren'
- Explorer Panel 2: Fristen-Sektion pro Kette
  - Anzeige + Formular zum Hinzufügen + Erfüllt-Button
- Dashboard: Kachel 'X überfällige Fristen' (rot wenn > 0)
- Navigation: Fristen-Link in Desktop + Mobile Menu
2026-04-02 00:43:01 +02:00

45 lines
1.5 KiB
Python

#!/usr/bin/env python3
"""Migration: Erstellt die fristen-Tabelle für Fristen-Tracking (Issue #17)."""
import sqlite3
import sys
from pathlib import Path
DB_PATH = Path(__file__).resolve().parent.parent / "data" / "tracker.db"
def migrate(db_path: Path = DB_PATH):
conn = sqlite3.connect(str(db_path))
conn.execute("PRAGMA journal_mode = WAL")
conn.execute("PRAGMA foreign_keys = ON")
conn.execute("""
CREATE TABLE IF NOT EXISTS fristen (
id INTEGER PRIMARY KEY AUTOINCREMENT,
kette_id INTEGER REFERENCES ketten(id),
vorlage_id INTEGER REFERENCES vorlagen(id),
typ TEXT NOT NULL,
datum DATE NOT NULL,
beschreibung TEXT,
quelle TEXT DEFAULT 'manuell',
status TEXT DEFAULT 'offen',
erstellt_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
aktualisiert_at TIMESTAMP
)
""")
# Indices for common queries
conn.execute("CREATE INDEX IF NOT EXISTS idx_fristen_kette_id ON fristen(kette_id)")
conn.execute("CREATE INDEX IF NOT EXISTS idx_fristen_status ON fristen(status)")
conn.execute("CREATE INDEX IF NOT EXISTS idx_fristen_datum ON fristen(datum)")
conn.execute("CREATE INDEX IF NOT EXISTS idx_fristen_status_datum ON fristen(status, datum)")
conn.commit()
conn.close()
print(f"✅ Migration erfolgreich: fristen-Tabelle in {db_path}")
if __name__ == "__main__":
path = Path(sys.argv[1]) if len(sys.argv) > 1 else DB_PATH
migrate(path)