{
  "name": "UTFPR - IA COVERSOR DE PDF",
  "nodes": [
    {
      "parameters": {
        "httpMethod": "POST",
        "path": "conversor",
        "responseMode": "responseNode",
        "options": {}
      },
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 2,
      "position": [
        -540,
        -80
      ],
      "id": "59c7b387-b0b2-4e59-a689-628a03636e3e",
      "name": "Webhook"
    },
    {
      "parameters": {
        "promptType": "define",
        "text": "={{ $json.text }}",
        "options": {
          "systemMessage": "={\n  \"name\": \"LeitorPDF\",\n  \"objectives\": [\n    \"[{{ $item(\"0\").$node[\"Extract from File\"].json[\"text\"] }}. Extraia SOMENTE os dados das tabelas do PDF conforme o padr\u00e3o de colunas abaixo e retorne EXCLUSIVAMENTE no formato CSV, SEM linhas ou c\u00e9lulas N/A, sem t\u00edtulos extras, sem coment\u00e1rios, exatamente no seguinte formato e separando cada campo por v\u00edrgula, uma linha para cada registro:\",\n    \"\",\n    \"TOMBO NOVO,TOMBO ANTIGO,INSTITUICAO,DESCRICAO DO BEM,LOCAL FISICO\",\n    \"\",\n    \"Exemplo:\",\n    \"834,1333,UTFPR,Cadeira,Q-108\",\n    \"11134,20421,UTFPR,Cadeira,Q-104\",\n    \"\",\n    \"IMPORTANTE:\",\n    \"- Na coluna 'DESCRICAO DO BEM', coloque APENAS o valor que aparece na coluna 'Descri\u00e7\u00e3o' da tabela do PDF.\",\n    \"- N\u00c3O inclua informa\u00e7\u00f5es de 'Estado de Conserva\u00e7\u00e3o', 'Situa\u00e7\u00e3o' ou qualquer outro campo nesta coluna.\",\n    \"- Cada coluna do CSV deve conter exclusivamente o valor correspondente da tabela original, sem concatena\u00e7\u00f5es ou misturas.\",\n    \"Se algum campo estiver vazio, apenas deixe em branco entre as v\u00edrgulas, sem colocar N/A, null ou aspas.\",\n    \"N\u00e3o inclua nenhum texto extra, t\u00edtulos duplicados ou coment\u00e1rios fora do padr\u00e3o CSV solicitado.\"\n  ],\n  \"general_rules\": [\n    \"Seja preciso e rigoroso ao preencher as colunas.\",\n    \"N\u00e3o coloque aspas em campos vazios ou inteiros.\",\n    \"N\u00e3o acrescente t\u00edtulos, coment\u00e1rios, legendas ou qualquer texto fora do padr\u00e3o CSV solicitado.\"\n  ]\n}\n"
        }
      },
      "id": "c2b16c0b-2e01-40de-be22-37790493d34c",
      "name": "Leitor PDF",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        260,
        -80
      ],
      "typeVersion": 1.8
    },
    {
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4o-mini"
        },
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "typeVersion": 1.2,
      "position": [
        180,
        160
      ],
      "id": "22a914d6-140d-4577-8bfb-37560e23e2d1",
      "name": "OpenAI Chat Model",
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "operation": "pdf",
        "binaryPropertyName": "=data",
        "options": {}
      },
      "type": "n8n-nodes-base.extractFromFile",
      "typeVersion": 1,
      "position": [
        -20,
        -80
      ],
      "id": "e409c0eb-e38f-4304-b197-b3b7beb9d59b",
      "name": "Extract from File"
    },
    {
      "parameters": {
        "jsCode": "return [\n  {\n    binary: {\n      data: {\n        data: $json.body.files[0].content,\n        mimeType: 'application/pdf',\n        fileName: $json.body.files[0].name || 'documento.pdf'\n      }\n    }\n  }\n];"
      },
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        -300,
        -80
      ],
      "id": "4ef4786c-5ecd-4282-b3fd-cd32334d056b",
      "name": "Code"
    },
    {
      "parameters": {
        "respondWith": "allIncomingItems",
        "options": {}
      },
      "type": "n8n-nodes-base.respondToWebhook",
      "typeVersion": 1.2,
      "position": [
        900,
        -80
      ],
      "id": "455eef1d-17a9-4f0f-8d0c-9667629b3f31",
      "name": "Respond to Webhook"
    },
    {
      "parameters": {
        "jsCode": "const inputData = $json[\"output\"].trim();\n\nconst linhas = inputData.split('\\n');\n// Ignora cabe\u00e7alho, se vier\nconst linhasDados = linhas.filter(l => l && !l.toLowerCase().includes('tombo novo'));\n\nconst registros = linhasDados.map(linha => {\n  const [tomboNovo, tomboAntigo, instituicao, descricao, localFisico] = linha.replace(/\"/g, '').split(',');\n\n  return {\n    \"Tombo Novo\": tomboNovo ? tomboNovo.trim() : \"\",\n    \"Tombo Antigo\": tomboAntigo ? tomboAntigo.trim() : \"\",\n    \"Institui\u00e7\u00e3o\": instituicao ? instituicao.trim() : \"\",\n    \"Descricao do Bem\": descricao ? descricao.trim().split(' ')[0] : \"\",\n    \"Local F\u00edsico\": localFisico ? localFisico.trim() : \"\"\n  };\n});\n\nreturn registros.map(item => ({ json: item }));\n"
      },
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        640,
        -80
      ],
      "id": "f528c6b0-9eab-4ed2-8353-3dc5117a6422",
      "name": "Code1"
    }
  ],
  "connections": {
    "Webhook": {
      "main": [
        [
          {
            "node": "Code",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Leitor PDF": {
      "main": [
        [
          {
            "node": "Code1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "Leitor PDF",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Code": {
      "main": [
        [
          {
            "node": "Extract from File",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract from File": {
      "main": [
        [
          {
            "node": "Leitor PDF",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Code1": {
      "main": [
        [
          {
            "node": "Respond to Webhook",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": true,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "9dc0129d-5275-4644-99a9-7071f9738a2d",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "id": "Hko5DKAkWcWtTmW5",
  "tags": []
}