-- SQL запрос для проверки дубликатов claim_id в таблице clpr_claims
-- Показывает записи с одинаковым claim_id в payload, но разными ID

-- 1. Найти все claim_id, которые встречаются более одного раза
WITH claim_id_counts AS (
  SELECT 
    payload->>'claim_id' AS claim_id,
    COUNT(*) AS count,
    array_agg(id ORDER BY updated_at DESC) AS ids,
    array_agg(updated_at ORDER BY updated_at DESC) AS updated_dates
  FROM clpr_claims
  WHERE payload->>'claim_id' IS NOT NULL
  GROUP BY payload->>'claim_id'
  HAVING COUNT(*) > 1
)
SELECT 
  claim_id,
  count AS duplicate_count,
  ids AS record_ids,
  updated_dates,
  -- Показываем разницу во времени между записями
  updated_dates[1] - updated_dates[array_length(updated_dates, 1)] AS time_diff
FROM claim_id_counts
ORDER BY count DESC, claim_id
LIMIT 20;

-- 2. Детальная информация о дубликатах (для конкретного claim_id)
-- Замените 'YOUR_CLAIM_ID' на реальный claim_id
/*
SELECT 
  id,
  payload->>'claim_id' AS claim_id,
  status_code,
  channel,
  created_at,
  updated_at,
  -- Показываем, есть ли send_to_form_approve в разных записях
  CASE 
    WHEN payload->'send_to_form_approve' IS NOT NULL THEN 'YES'
    ELSE 'NO'
  END AS has_send_to_form_approve,
  -- Показываем размер payload для сравнения
  pg_column_size(payload) AS payload_size_bytes
FROM clpr_claims
WHERE payload->>'claim_id' = 'YOUR_CLAIM_ID'
ORDER BY updated_at DESC;
*/

-- 3. Статистика: сколько всего дубликатов
SELECT 
  COUNT(*) AS total_duplicate_claim_ids,
  SUM(count) AS total_duplicate_records
FROM (
  SELECT 
    payload->>'claim_id' AS claim_id,
    COUNT(*) AS count
  FROM clpr_claims
  WHERE payload->>'claim_id' IS NOT NULL
  GROUP BY payload->>'claim_id'
  HAVING COUNT(*) > 1
) AS duplicates;

