EFRM fraud users (ER Monthly)

PHOTO EMBED

Wed Apr 30 2025 10:38:06 GMT+0000 (Coordinated Universal Time)

Saved by @shubhangi.b

/* Daily ER append for EFRM fraud users */
SELECT
  DISTINCT SUBSTR(CAST(txn_date_switch AS VARCHAR(30)), 1, 7) AS txn_year_month,
  payer_vpa_switch,
  'NA' AS reporting_date,
  ingestion_date,
  'EFRM' AS source
FROM
  (
    SELECT
      txn_id AS upi_txn_id,
      DATE(MIN(dl_last_updated)) AS ingestion_date,
      CAST(REGEXP_REPLACE(txn_amount, ',', '') AS DOUBLE) AS txn_amount
    FROM
      frauds.efrm_data_snapshot_v3
    WHERE
     DATE(dl_last_updated) >= DATE_TRUNC('MONTH', CURRENT_DATE - INTERVAL '1 MONTH')
      AND DATE(dl_last_updated) < DATE_TRUNC('MONTH', CURRENT_DATE)
    GROUP BY
      1,
      3
  ) AS a
  INNER JOIN (
    SELECT
      DISTINCT DATE(b.created_on) AS txn_date_switch,
      a.txn_id AS upi_txn_id_switch,
      a.vpa AS payer_vpa_switch,
      b.vpa AS payee_vpa_switch,
      CAST(a.amount AS DOUBLE) AS txn_amount_switch,
      a.mcc AS payer_mcc_switch,
      b.mcc AS payee_mcc_switch,
      a.handle AS payer_handle,
      b.handle AS payee_handle,
      a.scope_cust_id,
      a.mobile_no AS payer_mobile_no,
      (
        CASE
          WHEN (
            LOWER(b.vpa) LIKE '%@paytm%'
            OR LOWER(b.vpa) LIKE '%@pt%'
          ) THEN 'paytm merchant/bene'
          ELSE 'others'
        END
      ) AS merchant_bene_type
    FROM
      switch.txn_participants_snapshot_v3 AS a
      INNER JOIN switch.txn_participants_snapshot_v3 AS b ON a.txn_id = b.txn_id
    WHERE
      DATE(a.dl_last_updated) >= DATE(CURRENT_DATE - INTERVAL '90' DAY)
      AND DATE(b.dl_last_updated) >= DATE(CURRENT_DATE - INTERVAL '90' DAY)
      AND DATE(a.created_on) >= DATE(CURRENT_DATE - INTERVAL '90' DAY)
      AND a.participant_type IN ('PAYER')
      AND b.participant_type IN ('PAYEE')
      AND (
        LOWER(a.vpa) LIKE '%@paytm%'
        OR LOWER(a.vpa) LIKE '%@pt%'
      )
  ) AS c ON a.upi_txn_id = c.upi_txn_id_switch
  AND a.txn_amount = c.txn_amount_switch
  AND C.txn_date_switch < a.ingestion_date
  INNER JOIN (
    SELECT
      DISTINCT txn_id,
      category,
      CAST(amount AS DOUBLE) AS amount,
      DATE(created_on) AS created_on
    FROM
      switch.txn_info_snapshot_v3
    WHERE
      dl_last_updated >= DATE(CURRENT_DATE - INTERVAL '90' DAY)
      AND created_on >= DATE(CURRENT_DATE - INTERVAL '90' DAY)
      AND UPPER(status) IN ('SUCCESS')
  ) AS e ON a.upi_txn_id = e.txn_id
  AND a.txn_amount = e.amount
  AND e.created_on < a.ingestion_date
content_copyCOPY