"""Auszahlungs-Anträge: Status + Genehmigungs-Metadaten + Firmen-Opt-in Revision ID: 0042 Revises: 0041 Create Date: 2026-07-08 Erweitert hours_payouts um einen Genehmigungs-Workflow: Mitarbeiter beantragt eine Überstunden-Auszahlung (status='requested'), HR genehmigt/lehnt ab. Bestehende Zeilen und HR-Direktbuchungen sind 'approved'. companies.payout_request_enabled schaltet die Selbstbedienung pro Firma frei (Default aus → nur HR-Direktbuchung wie bisher). Keine RLS-Änderung nötig: nur neue Spalten auf bereits gefencten Tabellen (hours_payouts-Policy seit 0039, companies-Policy vorhanden) → conftest unverändert. """ from alembic import op revision = "0042" down_revision = "0041" branch_labels = None depends_on = None def upgrade() -> None: op.execute("ALTER TABLE hours_payouts ADD COLUMN IF NOT EXISTS status VARCHAR(12) NOT NULL DEFAULT 'approved'") op.execute("ALTER TABLE hours_payouts ADD COLUMN IF NOT EXISTS decided_by UUID REFERENCES users(id) ON DELETE SET NULL") op.execute("ALTER TABLE hours_payouts ADD COLUMN IF NOT EXISTS decided_at TIMESTAMPTZ") op.execute("ALTER TABLE hours_payouts ADD COLUMN IF NOT EXISTS rejection_reason TEXT") op.execute("ALTER TABLE companies ADD COLUMN IF NOT EXISTS payout_request_enabled BOOLEAN NOT NULL DEFAULT FALSE") def downgrade() -> None: op.execute("ALTER TABLE companies DROP COLUMN IF EXISTS payout_request_enabled") op.execute("ALTER TABLE hours_payouts DROP COLUMN IF EXISTS rejection_reason") op.execute("ALTER TABLE hours_payouts DROP COLUMN IF EXISTS decided_at") op.execute("ALTER TABLE hours_payouts DROP COLUMN IF EXISTS decided_by") op.execute("ALTER TABLE hours_payouts DROP COLUMN IF EXISTS status")