{
  "name": "Pflegegeld-Extraktion",
  "nodes": [
    {
      "parameters": {
        "url": "https://www.dmrz.de/wissen/ratgeber/pflegegeld",
        "options": {
          "response": {
            "response": {
              "responseFormat": "text"
            }
          }
        }
      },
      "id": "90c982c0-62ee-4fc9-bb05-9d2e525c0c83",
      "name": "BMG Seite abrufen",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        -784,
        32
      ]
    },
    {
      "parameters": {
        "jsCode": "const html = $input.first().json.data;\n\nlet text = html\n  .replace(/<script[^>]*>[\\s\\S]*?<\\/script>/gi, '')\n  .replace(/<style[^>]*>[\\s\\S]*?<\\/style>/gi, '')\n  .replace(/<[^>]+>/g, ' ')\n  .replace(/&nbsp;/g, ' ')\n  .replace(/&amp;/g, '&')\n  .replace(/&euro;/g, '€')\n  .replace(/\\s+/g, ' ')\n  .trim();\n\nreturn [{ json: { extractedContent: text } }];"
      },
      "id": "b757833b-8b6d-4258-be78-59a7fb732e66",
      "name": "HTML bereinigen",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        -560,
        32
      ]
    },
    {
      "parameters": {
        "jsCode": "// Ollama-Antwort parsen und validieren\nconst response = $input.first().json;\nlet content = response.message?.content || '';\n\n// Markdown-Code-Blöcke entfernen falls vorhanden\ncontent = content.replace(/```json\\n?/g, '').replace(/```\\n?/g, '').trim();\n\ntry {\n  const data = JSON.parse(content);\n  \n  // Validierung\n  if (!data.pflegegeld || !Array.isArray(data.pflegegeld)) {\n    throw new Error('Feld pflegegeld fehlt oder ist kein Array');\n  }\n  \n  if (data.pflegegeld.length < 4) {\n    throw new Error('Weniger als 4 Pflegegrade gefunden');\n  }\n  \n  for (const pg of data.pflegegeld) {\n    if (!pg.pflegegrad || !pg.betrag_euro) {\n      throw new Error('Pflegegrad oder Betrag fehlt');\n    }\n    if (typeof pg.betrag_euro !== 'number' || pg.betrag_euro <= 0) {\n      throw new Error(`Ungültiger Betrag für Pflegegrad ${pg.pflegegrad}: ${pg.betrag_euro}`);\n    }\n  }\n  \n  return [{ json: { status: 'success', data: data, raw_response: content } }];\n  \n} catch (error) {\n  return [{ json: { status: 'error', error: error.message, raw_response: content } }];\n}"
      },
      "id": "c47ec70a-927d-4500-82ae-1882f69e7565",
      "name": "JSON validieren",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        -128,
        32
      ]
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict"
          },
          "conditions": [
            {
              "id": "condition-success",
              "leftValue": "={{ $json.status }}",
              "rightValue": "success",
              "operator": {
                "type": "string",
                "operation": "equals"
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "id": "e884554e-ebfc-4303-bafe-480f96d1d57e",
      "name": "Erfolgreich?",
      "type": "n8n-nodes-base.if",
      "typeVersion": 2.2,
      "position": [
        112,
        32
      ]
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "set-result",
              "name": "ergebnis",
              "value": "={{ JSON.stringify($json.data, null, 2) }}",
              "type": "string"
            },
            {
              "id": "set-status",
              "name": "status",
              "value": "Pflegegeld-Daten erfolgreich extrahiert",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "id": "4f76253c-97a8-4bee-bc52-cdccaa27339b",
      "name": "Ergebnis aufbereiten",
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        320,
        -80
      ]
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "set-error-msg",
              "name": "fehler",
              "value": "={{ $json.error }}",
              "type": "string"
            },
            {
              "id": "set-raw",
              "name": "raw_response",
              "value": "={{ $json.raw_response }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "id": "ced97580-1e1d-4b8c-a1f8-132bce32cb5d",
      "name": "Fehler protokollieren",
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        320,
        144
      ]
    },
    {
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "weeks",
              "triggerAtDay": [
                0,
                3
              ],
              "triggerAtHour": 7,
              "triggerAtMinute": 20
            }
          ]
        }
      },
      "type": "n8n-nodes-base.scheduleTrigger",
      "typeVersion": 1.3,
      "position": [
        -992,
        -16
      ],
      "id": "805959fe-fb5b-48fe-8a8b-9295d685c03e",
      "name": "Schedule Trigger"
    },
    {
      "parameters": {
        "jsCode": "const text = $input.first().json.extractedContent;\n\nconst body = {\n  model: \"llama3.1:8b\",\n  stream: false,\n  format: \"json\",\n  timeout: 14400000,\n  options: {\n    num_ctx: 16384\n  },\n  messages: [\n    {\n      role: \"system\",\n      content: \"Du gibst ausschließlich JSON zurück. Keine Erklärungen, kein Markdown, kein Fließtext. NUR valides JSON.\"\n    },\n    {\n      role: \"user\",\n      content: \"Finde im folgenden Text die monatlichen Pflegegeld-Beträge (§37 SGB XI) für die Pflegegrade 2, 3, 4 und 5. Pflegegrad 1 erhält kein Pflegegeld.\\n\\nAntwort NUR als JSON:\\n{\\\"stand\\\": \\\"2026\\\", \\\"pflegegeld\\\": [{\\\"pflegegrad\\\": 2, \\\"betrag_euro\\\": 0}, {\\\"pflegegrad\\\": 3, \\\"betrag_euro\\\": 0}, {\\\"pflegegrad\\\": 4, \\\"betrag_euro\\\": 0}, {\\\"pflegegrad\\\": 5, \\\"betrag_euro\\\": 0}]}\\n\\nErsetze die Nullen durch die echten Beträge aus dem Text.\\n\\nText:\\n\" + text\n    }\n  ]\n};\n\nconst response = await this.helpers.httpRequest({\n  method: 'POST',\n  url: 'http://localhost:11434/api/chat',\n  body: body,\n  json: true,\n  timeout: 14400000\n});\n\nreturn [{ json: response }];"
      },
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        -336,
        -16
      ],
      "id": "a592081f-a8dc-4f93-8636-01bf9b18d485",
      "name": "Ollama Extraction"
    },
    {
      "parameters": {
        "jsCode": "const input = $input.first().json;\nconst ollamaData = $('Ollama Extraction').first().json;\n\nconst logEntry = {\n  timestamp: new Date().toISOString(),\n  status: input.status || 'error',\n  quelle: 'dmrz.de/wissen/ratgeber/pflegegeld',\n  dauer_sekunden: Math.round((ollamaData.total_duration || 0) / 1000000000),\n  prompt_tokens: ollamaData.prompt_eval_count || null,\n  output_tokens: ollamaData.eval_count || null,\n  ergebnis: input.data || null,\n  fehler: input.error || null\n};\n\nreturn [{ json: logEntry }];"
      },
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        528,
        -80
      ],
      "id": "cfe96ed7-16e0-4b3d-9775-9726fe430a68",
      "name": "Code in JavaScript"
    },
    {
      "parameters": {
        "jsCode": "const input = $input.first().json;\nconst ollamaData = $('Ollama Extraction').first().json;\n\nconst logEntry = {\n  timestamp: new Date().toISOString(),\n  status: input.status || 'error',\n  quelle: 'dmrz.de/wissen/ratgeber/pflegegeld',\n  dauer_sekunden: Math.round((ollamaData.total_duration || 0) / 1000000000),\n  prompt_tokens: ollamaData.prompt_eval_count || null,\n  output_tokens: ollamaData.eval_count || null,\n  ergebnis: input.data || null,\n  fehler: input.error || null\n};\n\nreturn [{ json: logEntry }];"
      },
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        528,
        144
      ],
      "id": "b29fed0e-39d5-4b3b-99c9-5fa77ee80e6e",
      "name": "Code in JavaScript1"
    }
  ],
  "pinData": {},
  "connections": {
    "BMG Seite abrufen": {
      "main": [
        [
          {
            "node": "HTML bereinigen",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "HTML bereinigen": {
      "main": [
        [
          {
            "node": "Ollama Extraction",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "JSON validieren": {
      "main": [
        [
          {
            "node": "Erfolgreich?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Erfolgreich?": {
      "main": [
        [
          {
            "node": "Ergebnis aufbereiten",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Fehler protokollieren",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Schedule Trigger": {
      "main": [
        [
          {
            "node": "BMG Seite abrufen",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Ollama Extraction": {
      "main": [
        [
          {
            "node": "JSON validieren",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Ergebnis aufbereiten": {
      "main": [
        [
          {
            "node": "Code in JavaScript",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fehler protokollieren": {
      "main": [
        [
          {
            "node": "Code in JavaScript1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": true,
  "settings": {
    "executionOrder": "v1",
    "binaryMode": "separate",
    "timeSavedMode": "fixed",
    "callerPolicy": "workflowsFromSameOwner",
    "availableInMCP": false
  },
  "versionId": "54f0d299-e85e-4a5d-b503-e686920488ef",
  "meta": {
    "instanceId": "b73916e5e2f4292b31d2986bb3fac7ce8b69229d64cbf16a4baa9f997540f5a8"
  },
  "id": "eIQQ9bs8TgXafABB",
  "tags": []
}