-- 158_dedup_doc_check_controls.sql
-- Behebt die historische Triplikation von compliance.doc_check_controls
-- (Dump-Artefakt: kein PK/Unique -> identische Zeilen mehrfach; prod 3x).
-- Idempotent + verhindert Wiederkehr. macmini ist bereits dedupt (no-op),
-- prod wird 1713->571 / 1143->381 / 225->75 dedupt.
-- [migration-approved]

-- 1) Dedup: pro (doc_type, control_id) nur die Zeile mit kleinster ctid behalten.
DELETE FROM compliance.doc_check_controls a
USING compliance.doc_check_controls b
WHERE a.ctid > b.ctid
  AND a.doc_type   IS NOT DISTINCT FROM b.doc_type
  AND a.control_id IS NOT DISTINCT FROM b.control_id;

-- 2) Wiederkehr verhindern: Unique-Constraint auf (doc_type, control_id).
DO $do$
BEGIN
  IF NOT EXISTS (
    SELECT 1 FROM pg_constraint
    WHERE conname = 'uq_doc_check_controls_doctype_control'
  ) THEN
    ALTER TABLE compliance.doc_check_controls
      ADD CONSTRAINT uq_doc_check_controls_doctype_control
      UNIQUE (doc_type, control_id);
  END IF;
END
$do$;
