diff --git a/backend/alembic/versions/006_anonymize_fall_ids.py b/backend/alembic/versions/006_anonymize_fall_ids.py new file mode 100644 index 0000000..78bdaa9 --- /dev/null +++ b/backend/alembic/versions/006_anonymize_fall_ids.py @@ -0,0 +1,42 @@ +"""Anonymize fall_ids: replace Nachname with KVNR or random suffix. + +Revision ID: 006_anonymize_fall_ids +Revises: 005_add_disclosure_requests +""" + +import random +import string + +from alembic import op +import sqlalchemy as sa + +revision = "006_anonymize_fall_ids" +down_revision = "005_add_disclosure_requests" +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