{
  "name": "automate_directory_subflow_v2",
  "nodes": [
    {
      "parameters": {
        "fileSelector": "={{ $json.filePath }}{{ $json.fileName }}",
        "options": {}
      },
      "type": "n8n-nodes-base.readWriteFile",
      "typeVersion": 1,
      "position": [
        0,
        -100
      ],
      "id": "2a8bc324-bb79-4b81-83aa-ffefa651acb7",
      "name": "Read/Write Files from Disk"
    },
    {
      "parameters": {
        "operation": "pdf",
        "options": {}
      },
      "type": "n8n-nodes-base.extractFromFile",
      "typeVersion": 1,
      "position": [
        340,
        40
      ],
      "id": "a3dfd4e5-251d-4dae-936d-d87e0c0f7c78",
      "name": "Extract from File"
    },
    {
      "parameters": {
        "promptType": "define",
        "text": "= Analysiere den Dateinamen und den Inhalt des Dokuments und gib ausschließlich die passende Kategorie oder den Pfad aus. Die möglichen Kategorien sind: Reise, Studium, Erfindungsmeldung, Arbeitsmedizin, promotion, unklar. Wenn es sich um einen Härtefallantrag, eine Verlängerung oder eine Ausgabe für eine Bachelor- oder Masterarbeit handelt, gib stattdessen genau den Pfad Studium/Härtefallantrag, Studium/Verlängerung oder Studium/Ausgabe zurück (es gibt KEIN studium/erfindungsmeldung, der hat einen einzelnen Ordner). Für die Reise sollte es auch in Reise/dienstreiseabrechnung oder Reise/reisekostenvorschuss einkategorisiert werden. Promotionsanfragen gehören ausschließlich zur Kategorie promotion, nicht zu Studium. Gib nur die entsprechende Kategorie oder Pfadangabe als Antwort aus. Keine Anführungszeichen, keine Erläuterung, keine sonstigen Zeichen oder Zusätze.\nANTWORTE AUSSCHLIESSLICH MIT DEM KATEGORIENAMEN. KEIN ANDERER TEXT.\n\nFilename: {{ $('Read/Write Files from Disk').item.json.fileName }}\n\nFilecontent: {{ $json.text }}",
        "options": {
          "passthroughBinaryImages": true
        }
      },
      "type": "@n8n/n8n-nodes-langchain.agent",
      "typeVersion": 1.9,
      "position": [
        220,
        620
      ],
      "id": "dd4582ff-54c1-4b27-8981-3a6d3ef4441b",
      "name": "AI Agent",
      "alwaysOutputData": true
    },
    {
      "parameters": {
        "model": {
          "__rl": true,
          "value": "mistral-7b-instruct-v0.3",
          "mode": "list",
          "cachedResultName": "mistral-7b-instruct-v0.3"
        },
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "typeVersion": 1.2,
      "position": [
        100,
        700
      ],
      "id": "33e50a92-25f1-46da-93f7-b7f68f8f46e6",
      "name": "OpenAI Chat Model",
      "credentials": {
        "openAiApi": {
          "id": "hv7fc6Zl8O9801Is",
          "name": "QWEN Model"
        }
      }
    },
    {
      "parameters": {
        "operation": "write",
        "fileName": "=/home/erik/Dokumente/projekte/directory_organizer/{{ $json.output }}/{{ $('Read/Write Files from Disk').item.json.fileName }}",
        "options": {}
      },
      "type": "n8n-nodes-base.readWriteFile",
      "typeVersion": 1,
      "position": [
        1320,
        -20
      ],
      "id": "5d4c0be8-302a-4cd5-9771-4a3a3ce47eb5",
      "name": "Read/Write Files from Disk1",
      "retryOnFail": true
    },
    {
      "parameters": {
        "mode": "combine",
        "combineBy": "combineAll",
        "options": {}
      },
      "type": "n8n-nodes-base.merge",
      "typeVersion": 3.1,
      "position": [
        1180,
        -20
      ],
      "id": "267b90f3-e674-4590-bf52-1afb81d99f45",
      "name": "Merge"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "b9523513-2036-437a-9823-f8cbc8efdcc7",
              "name": "output",
              "value": "",
              "type": "string"
            }
          ]
        },
        "includeOtherFields": true,
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        980,
        -100
      ],
      "id": "2e47677b-1cba-4206-aa41-d4299fb4e433",
      "name": "Edit Fields"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "36d30d97-2edc-4a31-8b42-1de76f725712",
              "name": "mimeType",
              "value": "={{ $('Read/Write Files from Disk').item.json.mimeType }}",
              "type": "string"
            },
            {
              "id": "005c5119-27e3-4c39-ade2-f42406608b08",
              "name": "fileType",
              "value": "={{ $('Read/Write Files from Disk').item.json.fileType }}",
              "type": "string"
            },
            {
              "id": "1a90d050-3f18-4e47-b55a-4b7e55644921",
              "name": "fileName",
              "value": "={{ $('Read/Write Files from Disk').item.json.fileName }}",
              "type": "string"
            },
            {
              "id": "f471bb1e-c11f-4df5-8d60-42ca2ecedf0a",
              "name": "fileExtension",
              "value": "={{ $('Read/Write Files from Disk').item.json.fileExtension }}",
              "type": "string"
            },
            {
              "id": "e5c69de9-193a-49ac-80a3-4666a7636f80",
              "name": "fileSize",
              "value": "={{ $('Read/Write Files from Disk').item.json.fileSize }}",
              "type": "string"
            },
            {
              "id": "3bdf0d65-21ff-4c5c-8008-06508dc0552b",
              "name": "output",
              "value": "={{ $json.output }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        980,
        40
      ],
      "id": "01c6b40f-efa9-4f00-a1f2-d437f3acedaf",
      "name": "Edit Fields1"
    },
    {
      "parameters": {
        "jsCode": "// Loop over input items and add a new field called 'myNewField' to the JSON of each one\nfor (const item of $input.all()) {\n if (item.json && typeof item.json.output === 'string') {\n    // Entferne führende und abschließende Leerzeichen vom 'output'-Feld\n    item.json.output = item.json.output.trim();\n    item.json.output = item.json.output.toLowerCase();\n  }\n}\n\nreturn $input.all();"
      },
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        800,
        40
      ],
      "id": "d8d1829b-d7be-4e15-a124-2ec55a36475d",
      "name": "Code"
    },
    {
      "parameters": {
        "workflowInputs": {
          "values": [
            {
              "name": "filePath"
            },
            {
              "name": "fileName"
            }
          ]
        }
      },
      "type": "n8n-nodes-base.executeWorkflowTrigger",
      "typeVersion": 1.1,
      "position": [
        -200,
        -100
      ],
      "id": "068255bc-8fc1-44d9-ab12-3fcb35b957fd",
      "name": "When Executed by Another Workflow"
    },
    {
      "parameters": {
        "promptType": "define",
        "text": "= Analysiere den Dateinamen und den Inhalt des Dokuments und gib ausschließlich die passende Kategorie oder den Pfad aus. Die möglichen Kategorien sind: Reise, Studium, Erfindungsmeldung, Arbeitsmedizin, promotion, unklar. Wenn es sich um einen Härtefallantrag, eine Verlängerung oder eine Ausgabe für eine Bachelor- oder Masterarbeit handelt, gib stattdessen genau den Pfad Studium/Härtefallantrag, Studium/Verlängerung oder Studium/Ausgabe zurück (es gibt KEIN studium/erfindungsmeldung, der hat einen einzelnen Ordner). Für die Reise sollte es auch in Reise/dienstreiseabrechnung oder Reise/reisekostenvorschuss einkategorisiert werden. Promotionsanfragen gehören ausschließlich zur Kategorie promotion, nicht zu Studium. Gib nur die entsprechende Kategorie oder Pfadangabe als Antwort aus. Keine Anführungszeichen, keine Erläuterung, keine sonstigen Zeichen oder Zusätze.\nANTWORTE AUSSCHLIESSLICH MIT DEM KATEGORIENAMEN. KEIN ANDERER TEXT.\n\nFilename: {{ $('Read/Write Files from Disk').item.json.fileName }}\n\nFilecontent: {{ $json.text }}",
        "options": {
          "passthroughBinaryImages": true
        }
      },
      "type": "@n8n/n8n-nodes-langchain.agent",
      "typeVersion": 1.9,
      "position": [
        500,
        40
      ],
      "id": "b28a4168-3ae5-4b04-88de-43a868e71fad",
      "name": "AI Agent1",
      "alwaysOutputData": true
    },
    {
      "parameters": {
        "model": {
          "__rl": true,
          "value": "mistral:7b",
          "mode": "list",
          "cachedResultName": "mistral:7b"
        },
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "typeVersion": 1.2,
      "position": [
        540,
        160
      ],
      "id": "861bd6ac-47d4-44a6-8396-bf6101a45978",
      "name": "OpenAI Chat Model1",
      "credentials": {
        "openAiApi": {
          "id": "hv7fc6Zl8O9801Is",
          "name": "QWEN Model"
        }
      }
    },
    {
      "parameters": {
        "content": "## Datei auswählen\n- sucht Datei über weitergegebenen Dateinamen\n- wählt diese Datei aus und gibt sie weiter  ",
        "height": 320,
        "width": 340,
        "color": 7
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -40,
        -220
      ],
      "id": "f628eac2-6419-4435-86b2-94477f43eec7",
      "name": "Sticky Note"
    },
    {
      "parameters": {
        "content": "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n## Auswertung der PDF\n- zunächst wird über n8n Informationen aus dem PDF extrahiert\n- extrahierte Informationen und Dateinamen an den KI-Agenten weitergegeben\n- KI-Agent wertet basierend auf dem Prompt die Inhalte aus\n- KI-Agent ist mit lokalem LLM verbunden (Jan.AI), kann aber auch über normalen API Key mit ChatGPT oder anderen anbietern verbunden werden\n- Output soll der Ende des Zielpfades für den Ordner sein (Bspw: studium/härtefallantrag)",
        "height": 460,
        "width": 780,
        "color": 7
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        320,
        20
      ],
      "id": "18f2ca71-9b58-4ebb-be69-9c2f902d2f7b",
      "name": "Sticky Note1"
    },
    {
      "parameters": {
        "content": "## Kopieren der Datei an Zielort\n- PDF wird über den übergebenen neuen Pfad kopiert und in den dementsprechenden Ordener kopiert\n- hierbei wird die KI-Ausgabe mit dem bereits bekannten Teilpfad kombiniert",
        "height": 380,
        "width": 400,
        "color": 7
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        1160,
        -220
      ],
      "id": "c6dfe010-4496-42c2-93e7-a7fbf7c7cc2f",
      "name": "Sticky Note2"
    }
  ],
  "pinData": {
    "When Executed by Another Workflow": [
      {
        "json": {
          "filePath": "/home/erik/Dokumente/projekte/directory_organizer/all_files/neu/",
          "fileName": "Vorsorgeauftrag_Daniel_Hoffmann.pdf"
        }
      }
    ]
  },
  "connections": {
    "Read/Write Files from Disk": {
      "main": [
        [
          {
            "node": "Edit Fields",
            "type": "main",
            "index": 0
          },
          {
            "node": "Extract from File",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract from File": {
      "main": [
        [
          {
            "node": "AI Agent1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "AI Agent": {
      "main": [
        []
      ]
    },
    "OpenAI Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "AI Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Merge": {
      "main": [
        [
          {
            "node": "Read/Write Files from Disk1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Edit Fields": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Edit Fields1": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Code": {
      "main": [
        [
          {
            "node": "Edit Fields1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "When Executed by Another Workflow": {
      "main": [
        [
          {
            "node": "Read/Write Files from Disk",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model1": {
      "ai_languageModel": [
        [
          {
            "node": "AI Agent1",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "AI Agent1": {
      "main": [
        [
          {
            "node": "Code",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "30647e20-e905-4c31-a572-36735113e615",
  "meta": {
    "templateCredsSetupCompleted": true,
    "instanceId": "7015a221cde2c8910447ba79f73dadb400355d58bef066d421f69d635154e3c7"
  },
  "id": "ztuJJrjCicH0Fwm5",
  "tags": []
}