"""Anonymize fall_ids: replace Nachname with KVNR or random suffix. Revision ID: 006_anonymize_fall_ids Revises: 005_disclosure """ import random import string from alembic import op import sqlalchemy as sa revision = "006_anonymize_fall_ids" down_revision = "005_disclosure" branch_labels = None depends_on = None def _random_suffix(length=6): charset = string.ascii_uppercase + string.digits return "".join(random.choices(charset, k=length)) def upgrade(): conn = op.get_bind() cases = conn.execute( sa.text("SELECT id, fall_id, kvnr, jahr, kw, fallgruppe FROM cases") ).fetchall() for case in cases: case_id, old_fall_id, kvnr, jahr, kw, fallgruppe = case suffix = kvnr if kvnr else _random_suffix() new_fall_id = f"{jahr}-{kw:02d}-{fallgruppe}-{suffix}" conn.execute( sa.text("UPDATE cases SET fall_id = :new_id WHERE id = :case_id"), {"new_id": new_fall_id, "case_id": case_id}, ) def downgrade(): # Cannot restore original Nachname-based fall_ids — data is lost pass