{
  "name": "AI Araçlar - Yinelenen kayıt önleme pilotu",
  "nodes": [
    {
      "parameters": {},
      "id": "manual-trigger",
      "name": "Pilot testi başlat",
      "type": "n8n-nodes-base.manualTrigger",
      "typeVersion": 1,
      "position": [-620, 80]
    },
    {
      "parameters": {
        "jsCode": "return [\n  { json: { talep_id: 'T-1001', eposta: 'ada@example.com', ihtiyac: 'Ürün açıklaması' } },\n  { json: { talep_id: 'T-1002', eposta: 'mert@example.com', ihtiyac: 'Otomasyon kurulumu' } },\n  { json: { talep_id: 'T-1001', eposta: 'ada@example.com', ihtiyac: 'Aynı kayıt yeniden geldi' } },\n  { json: { talep_id: '', eposta: 'eksik@example.com', ihtiyac: 'Anahtar yok' } }\n];"
      },
      "id": "fixture-data",
      "name": "Sentetik test kayıtları",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [-390, 80]
    },
    {
      "parameters": {
        "jsCode": "const state = $getWorkflowStaticData('global');\nstate.seenIds ??= {};\nconst batchIds = new Set();\nreturn $input.all().map((item) => {\n  const key = String(item.json.talep_id ?? '').trim();\n  if (!key) return { json: { ...item.json, islem_durumu: 'hata', hata_notu: 'talep_id zorunlu' } };\n  const duplicate = batchIds.has(key) || Boolean(state.seenIds[key]);\n  batchIds.add(key);\n  if (!duplicate) state.seenIds[key] = new Date().toISOString();\n  return { json: { ...item.json, islem_durumu: duplicate ? 'tekrar' : 'yeni', hata_notu: duplicate ? 'talep_id daha önce işlendi' : '' } };\n});"
      },
      "id": "idempotency-guard",
      "name": "Benzersiz anahtarı denetle",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [-140, 80]
    },
    {
      "parameters": {
        "conditions": {
          "options": { "caseSensitive": true, "leftValue": "", "typeValidation": "strict", "version": 2 },
          "conditions": [{ "id": "is-new", "leftValue": "={{ $json.islem_durumu }}", "rightValue": "yeni", "operator": { "type": "string", "operation": "equals" } }],
          "combinator": "and"
        },
        "options": {}
      },
      "id": "route-record",
      "name": "Yalnız yeni kayıt mı?",
      "type": "n8n-nodes-base.if",
      "typeVersion": 2.2,
      "position": [110, 80]
    },
    {
      "parameters": { "jsCode": "return $input.all().map((item) => ({ json: { ...item.json, sonuc: 'İşleme kuyruğuna kabul edildi' } }));" },
      "id": "accepted",
      "name": "Yeni kayıt kuyruğu",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [360, -20]
    },
    {
      "parameters": { "jsCode": "return $input.all().map((item) => ({ json: { ...item.json, sonuc: item.json.islem_durumu === 'tekrar' ? 'Atlandı' : 'İnsan incelemesine gönderildi' } }));" },
      "id": "rejected",
      "name": "Tekrar ve hata kuyruğu",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [360, 180]
    },
    {
      "parameters": {
        "content": "## Kullanım sınırı\nBu pilot `talep_id` anahtarını aynı çalışma içinde ve düşük hacimli üretim çalışmaları arasında saklar. Eşzamanlı/yüksek hacimli kullanımda Data Table ya da veritabanında UNIQUE kısıtı kullanın. Gerçek kayda yazma düğümünü yalnız `Yeni kayıt kuyruğu` sonrasına bağlayın.",
        "height": 210,
        "width": 390
      },
      "id": "note",
      "name": "Kurulum notu",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [-620, -220]
    }
  ],
  "connections": {
    "Pilot testi başlat": { "main": [[{ "node": "Sentetik test kayıtları", "type": "main", "index": 0 }]] },
    "Sentetik test kayıtları": { "main": [[{ "node": "Benzersiz anahtarı denetle", "type": "main", "index": 0 }]] },
    "Benzersiz anahtarı denetle": { "main": [[{ "node": "Yalnız yeni kayıt mı?", "type": "main", "index": 0 }]] },
    "Yalnız yeni kayıt mı?": { "main": [[{ "node": "Yeni kayıt kuyruğu", "type": "main", "index": 0 }], [{ "node": "Tekrar ve hata kuyruğu", "type": "main", "index": 0 }]] }
  },
  "pinData": {},
  "active": false,
  "settings": { "executionOrder": "v1" },
  "versionId": "a6e1e182-47bf-4cf7-8980-efc320d08a91",
  "meta": { "templateCredsSetupCompleted": false },
  "tags": []
}
