-- Reviewable local-only downgrade, deliberately outside migrations/. -- Run only via workflow_backup.py after shutdown, verified backup and audit export. -- Preserves customers, cases, time entries, tags, entity assignments and all actual -- card transactions/order drafts. Removes new workflow definitions/audit metadata. BEGIN; SET LOCAL lock_timeout = '10s'; DO $$ BEGIN IF current_database() <> 'bmc_hub' AND current_database() NOT LIKE 'bmc\_workflow\_test%' ESCAPE '\' THEN RAISE EXCEPTION 'Unexpected database'; END IF; END $$; DROP TRIGGER IF EXISTS bmc_case_generic_workflow ON sag_sager; DROP TRIGGER IF EXISTS bmc_tags_generic_workflow ON entity_tags; DROP TRIGGER IF EXISTS bmc_customer_generic_workflow ON customers; DROP TRIGGER IF EXISTS bmc_mail_generic_workflow ON email_messages; DROP TRIGGER IF EXISTS bmc_task_generic_workflow ON sag_todo_steps; DROP FUNCTION IF EXISTS bmc_capture_module_workflow(); DROP TRIGGER IF EXISTS bmc_time_workflow_capture ON tmodule_times; DROP TRIGGER IF EXISTS bmc_case_workflow_capture ON sag_sager; DROP TRIGGER IF EXISTS bmc_tag_workflow_capture ON entity_tags; DROP TRIGGER IF EXISTS workflow_entity_tag_audit ON entity_tags; DROP TRIGGER IF EXISTS bmc_workflow_version_immutable_trigger ON bmc_workflow_versions; DROP FUNCTION IF EXISTS bmc_capture_time_workflow(); DROP FUNCTION IF EXISTS bmc_invalidate_case_times(); DROP FUNCTION IF EXISTS bmc_invalidate_tag_times(); DROP FUNCTION IF EXISTS workflow_entity_tag_audit(); DROP FUNCTION IF EXISTS bmc_workflow_version_immutable(); DROP TABLE IF EXISTS bmc_workflow_exports; DROP TABLE IF EXISTS bmc_workflow_customer_activation_history; DROP TABLE IF EXISTS bmc_workflow_customer_activation; DROP TABLE IF EXISTS bmc_workflow_resource_history; DROP TABLE IF EXISTS bmc_workflow_settlements; DROP TABLE IF EXISTS bmc_workflow_effects; DROP TABLE IF EXISTS bmc_billing_decisions; DROP TABLE IF EXISTS bmc_workflow_executions; DROP TABLE IF EXISTS bmc_workflow_activation_history; DROP TABLE IF EXISTS workflow_tag_ai_jobs; DROP TABLE IF EXISTS workflow_tag_proposals; DROP TABLE IF EXISTS workflow_tag_history; DROP TABLE IF EXISTS workflow_tag_keywords; DROP TABLE IF EXISTS bmc_workflow_events; ALTER TABLE bmc_workflows DROP CONSTRAINT IF EXISTS bmc_workflows_active_version_fk; DROP TABLE IF EXISTS bmc_workflow_versions; DROP TABLE IF EXISTS bmc_workflows; DROP TABLE IF EXISTS bmc_workflow_runtime; DROP INDEX IF EXISTS prepaid_workflow_entry_once; ALTER TABLE tticket_prepaid_transactions DROP COLUMN IF EXISTS workflow_time_entry_id; ALTER TABLE tmodule_times DROP COLUMN IF EXISTS workflow_revision; ALTER TABLE entity_tags DROP COLUMN IF EXISTS source; ALTER TABLE tags DROP COLUMN IF EXISTS parent_id; ALTER TABLE tags DROP COLUMN IF EXISTS visibility; ALTER TABLE tags DROP COLUMN IF EXISTS billing_relevant; ALTER TABLE customer_fixed_price_agreements DROP COLUMN IF EXISTS workflow_coverage; ALTER TABLE customer_fixed_price_agreements DROP COLUMN IF EXISTS monthly_price; ALTER TABLE tticket_prepaid_cards DROP COLUMN IF EXISTS workflow_coverage; DELETE FROM group_permissions WHERE permission_id IN (SELECT id FROM permissions WHERE code IN ('workflows.view','workflows.manage','workflows.activate','workflows.decisions.view','workflows.override','workflows.settle')); DELETE FROM permissions WHERE code IN ('workflows.view','workflows.manage','workflows.activate','workflows.decisions.view','workflows.override','workflows.settle'); COMMIT;