{
  "schema": "ldwf",
  "version": 1,
  "name": "Mitarbeiter-Onboarding",
  "meta": {
    "exportedAt": "2025-11-16T16:53:28.731Z",
    "exporter": "client"
  },
  "graph": {
    "nodes": [
      {
        "type": "loop_end",
        "data": {
          "comment": "🔚 LOOP END: TASKS ABGESCHLOSSEN\n\n🎯 BESCHREIBUNG:\nBeendet die Loop nach Verarbeitung aller Tasks. Sammelt Statistiken und gibt Kontrolle an nachfolgende Schritte weiter.\n\n⚙️ SETUP-ANLEITUNG:\n1. Keine manuelle Konfiguration erforderlich\n2. Muss mit dem Loop-Start \"taskLoop\" verbunden sein\n3. Error Handling auf \"continue\" gesetzt (fährt trotz Fehler fort)\n\n📦 OUTPUT:\nNach Loop-Ende verfügbar:\n- {{taskLoop.output.total}}: Gesamtzahl verarbeiteter Tasks\n- {{taskLoop.output.successful}}: Erfolgreich erstellte Issues\n- {{taskLoop.output.failed}}: Fehlgeschlagene Versuche\n\n🎨 PERSONALISIERUNGSOPTIONEN:\n- Error Handling Strategy ändern:\n  * continue: Fährt fort auch bei Fehlern (Standard)\n  * stop: Stoppt Workflow bei Fehler in Loop\n- Zusätzliche Nodes nach Loop-Ende hinzufügen:\n  * Logging/Reporting\n  * Fehlerbehandlung\n  * Zusammenfassung erstellen",
          "executionId": null,
          "errorHandling": {
            "strategy": "continue"
          },
          "name": "Loop End",
          "slug": "taskLoopEnd",
          "loopEndSlug": "taskLoop"
        },
        "id": "135595bf-ac67-4a80-b234-2ff717167a48",
        "position": {
          "x": 2800,
          "y": 2870
        }
      },
      {
        "type": "trigger",
        "data": {
          "comment": "📌 WEBHOOK-TRIGGER FÜR NEUE MITARBEITER\n\n🎯 BESCHREIBUNG:\nDieser Webhook startet den Workflow automatisch, wenn ein neuer Mitarbeiter im Personio HR-System angelegt wird.\n\n⚙️ SETUP-ANLEITUNG:\n1. Kopieren Sie die Webhook-URL aus diesem Node (wird nach dem Speichern angezeigt)\n2. In Personio: Gehen Sie zu Einstellungen → Integrationen → Webhooks\n3. Erstellen Sie einen neuen Webhook für das Event \"Employee Created\"\n4. Fügen Sie die Webhook-URL ein\n5. Optional: Fügen Sie ein Secret hinzu für zusätzliche Sicherheit\n6. Testen Sie den Webhook mit einem Test-Event\n\n📦 ERWARTETE DATEN:\nDer Webhook sollte mindestens die Employee-ID enthalten:\n{\n  \"employee_id\": \"12345678\",\n  \"event\": \"employee.created\",\n  \"timestamp\": \"2024-01-15T10:30:00Z\"\n}\n\n🎨 PERSONALISIERUNGSOPTIONEN:\n- Secret hinzufügen für erhöhte Sicherheit\n- Webhook-Name anpassen\n- Error Handling Strategy ändern (stop/continue/callback)",
          "executionId": null,
          "errorHandling": {
            "strategy": "stop"
          },
          "slug": "newEmployeeWebhook",
          "name": "Neuer Mitarbeiter",
          "kind": "webhook"
        },
        "id": "4be1fff4-1b37-4eff-b449-06f35ae2931a",
        "position": {
          "x": 20,
          "y": 2870
        }
      },
      {
        "type": "action",
        "data": {
          "comment": "💻 SLACK-BENACHRICHTIGUNG AN IT-ABTEILUNG\n\n🎯 BESCHREIBUNG:\nInformiert die IT-Abteilung über den neuen Mitarbeiter, damit Hardware, Accounts und Zugriffe rechtzeitig vorbereitet werden können.\n\n⚙️ SETUP-ANLEITUNG:\n1. Verbinden Sie Ihr Slack-Workspace über \"Select connection\"\n2. Standard-Channel: #it-onboarding (kann angepasst werden)\n3. Stellen Sie sicher, dass der Bot im Channel ist\n\n📦 NACHRICHT ENTHÄLT:\n- Name und Position des neuen Mitarbeiters\n- Startdatum\n- Abteilung und Standort\n- Benötigte IT-Ausstattung (basierend auf Position)\n- Erforderliche Software-Lizenzen\n- Zugriffs-/Berechtigungsanforderungen\n\n🎨 PERSONALISIERUNGSOPTIONEN:\n- channelId anpassen:\n  Wert ändern zu: \"#it-department\", \"#helpdesk\" etc.\n- Nachrichtentext erweitern:\n  * Hardware-Checkliste\n  * Software-Anforderungen nach Abteilung\n  * Standard-Accounts (Email, VPN, etc.)\n  * Sicherheitsrichtlinien\n- Mehrere IT-Channels benachrichtigen:\n  Node duplizieren für #it-hardware, #it-security etc.\n- Ticket-System-Integration hinzufügen:\n  Zusätzlichen Node für ServiceNow/Jira erstellen",
          "executionId": null,
          "errorHandling": {
            "strategy": "stop"
          },
          "slug": "notifyIt",
          "actionId": "26a39d11-d5fe-4f46-b776-973dd20b8147",
          "config": {
            "connectionId": null,
            "requiresConfirmation": false,
            "modelId": "c968689a-c0d9-49de-aa76-b10ed15ebb0e",
            "fields": {
              "text": {
                "mode": "prompt",
                "prompt": "Erstelle eine Benachrichtigung für die IT-Abteilung über den neuen Mitarbeiter. Nutze folgende Daten:\n\nMitarbeiter: {{onboardingChecklist.output.structured.employee_name}}\nMitarbeiterdaten: {{getEmployeeData.output}}\n\nDie Nachricht soll alle relevanten IT-Setup-Informationen enthalten (z.B. Geräte, Accounts, Zugriffe)."
              },
              "channelId": {
                "mode": "manual",
                "value": "#it-onboarding"
              }
            }
          }
        },
        "id": "cfbf20db-bae6-4903-88c1-0bbbc0d58cb4",
        "position": {
          "x": 3344,
          "y": 3060
        }
      },
      {
        "type": "loop",
        "data": {
          "comment": "🔁 LOOP START: TASKS ITERIEREN\n\n🎯 BESCHREIBUNG:\nDurchläuft jedes einzelne Task-Element aus der generierten Checkliste, um es in Linear als Issue zu erstellen.\n\n⚙️ SETUP-ANLEITUNG:\n1. Keine manuelle Konfiguration erforderlich\n2. Loop iteriert automatisch über das tasks-Array vom Agent\n3. Jedes Task-Element wird als {{taskLoop.output.currentItem}} verfügbar gemacht\n\n📦 LOOP-DATEN:\n- Quelle: {{onboardingChecklist.output.structured.tasks}}\n- Max. Iterationen: 20 (kann erhöht werden, falls mehr Tasks)\n- Concurrency: Deaktiviert (Tasks werden nacheinander erstellt)\n\n🎨 PERSONALISIERUNGSOPTIONEN:\n- maxIterations erhöhen (aktuell 20), falls mehr als 20 Tasks erwartet\n- concurrency auf true setzen für parallele Verarbeitung (schneller, aber weniger kontrolliert)\n- Error Handling Strategy ändern:\n  * stop: Stoppt bei Fehler\n  * continue: Fährt trotz Fehler fort\n  * callback: Leitet zu Error-Handler weiter",
          "executionId": null,
          "errorHandling": {
            "strategy": "stop"
          },
          "name": "Task Loop",
          "slug": "taskLoop",
          "loopArrayValue": "{{onboardingChecklist.output.structured.tasks}}",
          "maxIterations": 20,
          "concurrency": false
        },
        "id": "eee9b242-9da4-48cf-b475-bc651773a514",
        "position": {
          "x": 1680,
          "y": 2870
        }
      },
      {
        "type": "action",
        "data": {
          "comment": "📄 MITARBEITERDATEN AUS PERSONIO ABRUFEN\n\n🎯 BESCHREIBUNG:\nRuft alle relevanten Mitarbeiterdaten aus Personio ab, inkl. Name, Position, Abteilung, Startdatum und Standort.\n\n⚙️ SETUP-ANLEITUNG:\n1. Verbinden Sie Ihr Personio-Konto über \"Select connection\"\n2. Die Employee-ID wird automatisch aus dem Webhook extrahiert\n3. Stellen Sie sicher, dass Ihr Personio API-Token die nötigen Berechtigungen hat\n\n📦 OUTPUT:\nDiese Action liefert alle Mitarbeiterdaten zurück:\n- Vor- und Nachname\n- Position/Job Title\n- Abteilung/Department\n- Startdatum\n- Standort/Office\n- E-Mail-Adresse\n- Manager-Informationen\n- Weitere Custom Fields aus Personio\n\n🎨 PERSONALISIERUNGSOPTIONEN:\n- Model-ID ändern für andere KI-Modelle bei der ID-Extraktion\n- Error Handling anpassen (z.B. callback bei Fehlern)\n- Prompt anpassen, falls Webhook andere Datenstruktur hat",
          "executionId": null,
          "errorHandling": {
            "strategy": "stop"
          },
          "slug": "getEmployeeData",
          "actionId": "eee13ee9-3ea2-42c1-a6ca-8a72973b77c9",
          "config": {
            "connectionId": null,
            "requiresConfirmation": false,
            "modelId": "64776bd9-4c58-42d0-8301-2c8a4566e68c",
            "fields": {
              "id": {
                "mode": "prompt",
                "prompt": "Extract the employee ID from the webhook data: {{newEmployeeWebhook.output}}"
              }
            }
          }
        },
        "id": "364a2743-ed95-4a9f-add6-761e0c54a394",
        "position": {
          "x": 560,
          "y": 2870
        }
      },
      {
        "type": "agent",
        "data": {
          "comment": "🤖 KI-AGENT: PERSONALISIERTE ONBOARDING-CHECKLISTE\n\n🎯 BESCHREIBUNG:\nEin intelligenter Agent, der eine maßgeschneiderte Onboarding-Checkliste basierend auf Position, Abteilung und Standort des neuen Mitarbeiters erstellt.\n\n⚙️ SETUP-ANLEITUNG:\n1. Der Agent ist bereits vorkonfiguriert und einsatzbereit\n2. Keine zusätzliche Konfiguration erforderlich\n3. Verwendet das Standard-KI-Modell des Workspaces\n\n📦 OUTPUT (Strukturiert):\n- tasks: Array mit 5-10 Onboarding-Tasks, jeder enthält:\n  * Titel\n  * Beschreibung\n  * Fälligkeitsdatum (relativ zum Startdatum)\n  * Priorität (1-4)\n- employee_name: Name des Mitarbeiters\n- success: Boolean, ob Generierung erfolgreich\n\n🎨 PERSONALISIERUNGSOPTIONEN:\n- Prompt anpassen für spezifische Unternehmensrichtlinien:\n  * Anzahl der Tasks ändern (aktuell 5-10)\n  * Zeitraum anpassen (aktuell 4 Wochen)\n  * Spezifische Tasks für bestimmte Abteilungen hinzufügen\n  * Compliance-Anforderungen integrieren\n- Model-ID ändern für andere KI-Modelle\n- Output-Schema erweitern (z.B. Verantwortliche, Kategorien)\n- maxSteps erhöhen, falls komplexere Logik benötigt wird",
          "executionId": null,
          "errorHandling": {
            "strategy": "stop"
          },
          "slug": "onboardingChecklist",
          "assistantId": null,
          "mode": "create",
          "name": "Onboarding Checkliste Generator",
          "prompt": {
            "mode": "manual",
            "value": "Erstelle eine detaillierte, personalisierte Onboarding-Checkliste für den neuen Mitarbeiter basierend auf folgenden Daten:\n\nMitarbeiterdaten: {{getEmployeeData.output}}\n\nDie Checkliste soll:\n- Spezifisch auf Position und Abteilung zugeschnitten sein\n- Alle wichtigen Tasks für die ersten 4 Wochen enthalten\n- Realistische Fälligkeitsdaten haben (relativ zum Startdatum)\n- Zwischen 5-10 Tasks enthalten\n- Priorisierung berücksichtigen\n\nGebe die Tasks als strukturiertes Array zurück."
          },
          "attachmentIds": [],
          "output": "structured",
          "connectionOverrides": {},
          "outputSchema": [
            {
              "id": "089d4a85-3afe-41c9-9057-bf4dfc1a31fa",
              "name": "tasks",
              "description": "Array mit allen Onboarding-Tasks",
              "type": "array",
              "required": true
            },
            {
              "id": "5f1aa503-9a10-4c5b-b390-8b40d21ab6b7",
              "name": "employee_name",
              "description": "Name des Mitarbeiters",
              "type": "string",
              "required": true
            },
            {
              "id": "bb6296c7-a3c8-439b-97cb-7ca1eb03027e",
              "name": "success",
              "description": "Ob die Generierung erfolgreich war",
              "type": "boolean",
              "required": true
            }
          ],
          "modelId": "c968689a-c0d9-49de-aa76-b10ed15ebb0e",
          "tools": [],
          "maxSteps": 25
        },
        "id": "337b094a-11dc-48f4-afa2-1f9bf3b50aa7",
        "position": {
          "x": 1120,
          "y": 2870
        }
      },
      {
        "type": "action",
        "data": {
          "comment": "✅ LINEAR ISSUE ERSTELLEN\n\n🎯 BESCHREIBUNG:\nErstellt für jeden Onboarding-Task ein separates Issue in Linear mit Titel, Beschreibung, Fälligkeitsdatum und Priorität.\n\n⚙️ SETUP-ANLEITUNG:\n1. Verbinden Sie Ihr Linear-Konto über \"Select connection\"\n2. Das Team wird automatisch ausgewählt (oder Sie können es manuell festlegen)\n3. Stellen Sie sicher, dass Ihr Linear-Token die nötigen Berechtigungen hat\n\n📦 ISSUE-FELDER:\n- teamId: Automatisch ermittelt (oder manuell setzen)\n- title: Task-Titel aus Checkliste\n- description: Detaillierte Task-Beschreibung\n- options: JSON mit:\n  * dueDate: Fälligkeitsdatum (YYYY-MM-DD)\n  * priority: 1 (Urgent), 2 (High), 3 (Medium), 4 (Low)\n\n🎨 PERSONALISIERUNGSOPTIONEN:\n- teamId manuell setzen für festes Team:\n  Mode auf \"manual\" ändern, Wert: \"team-id-hier\"\n- Zusätzliche Linear-Felder in options hinzufügen:\n  * assigneeId: Bestimmten User zuweisen\n  * labelIds: Labels hinzufügen\n  * stateId: Spezifischen Status setzen\n  * estimate: Story Points\n- Prompt anpassen für andere Task-Struktur\n- requiresConfirmation auf true setzen für manuelle Bestätigung",
          "executionId": null,
          "errorHandling": {
            "strategy": "stop"
          },
          "slug": "createLinearTask",
          "actionId": "9ab3ad9e-ab4c-4d2a-8e22-c0c231e6d36f",
          "config": {
            "connectionId": null,
            "requiresConfirmation": false,
            "modelId": "c968689a-c0d9-49de-aa76-b10ed15ebb0e",
            "fields": {
              "title": {
                "mode": "prompt",
                "prompt": "Extrahiere den Task-Titel aus: {{taskLoop.output.currentItem}}"
              },
              "teamId": {
                "mode": "auto",
                "value": null,
                "prompt": null
              },
              "options": {
                "mode": "prompt",
                "prompt": "Erstelle ein JSON-Objekt mit dueDate (im Format YYYY-MM-DD) und priority (1-4) basierend auf: {{taskLoop.output.currentItem}}"
              },
              "description": {
                "mode": "prompt",
                "prompt": "Extrahiere die Task-Beschreibung aus: {{taskLoop.output.currentItem}}"
              }
            }
          }
        },
        "id": "448b62e4-0ecf-41ba-9ace-51878e391305",
        "position": {
          "x": 2240,
          "y": 2870
        }
      },
      {
        "type": "action",
        "data": {
          "comment": "📧 SLACK-BENACHRICHTIGUNG AN MANAGER\n\n🎯 BESCHREIBUNG:\nSendet eine professionelle Benachrichtigung an den zuständigen Manager über den neuen Mitarbeiter und die erstellten Onboarding-Tasks.\n\n⚙️ SETUP-ANLEITUNG:\n1. Verbinden Sie Ihr Slack-Workspace über \"Select connection\"\n2. Der Manager-Channel/DM wird automatisch aus Personio-Daten extrahiert\n3. Alternativ: Festen Channel manuell setzen (z.B. #managers)\n\n📦 NACHRICHT ENTHÄLT:\n- Name des neuen Mitarbeiters\n- Position und Abteilung\n- Startdatum\n- Anzahl der erstellten Onboarding-Tasks\n- Link zu Linear (falls verfügbar)\n\n🎨 PERSONALISIERUNGSOPTIONEN:\n- channelId manuell setzen:\n  Mode auf \"manual\" ändern, Wert: \"#manager-channel\" oder User-ID\n- Nachrichtentext anpassen:\n  * Firmenspezifische Begrüßung\n  * Zusätzliche Informationen\n  * Formatierung mit Slack-Markdown\n  * Emojis hinzufügen\n- Mehrere Manager benachrichtigen:\n  Duplizieren Sie diesen Node für weitere Empfänger\n- requiresConfirmation auf true für manuelle Freigabe",
          "executionId": null,
          "errorHandling": {
            "strategy": "stop"
          },
          "slug": "notifyManager",
          "actionId": "26a39d11-d5fe-4f46-b776-973dd20b8147",
          "config": {
            "connectionId": null,
            "requiresConfirmation": false,
            "modelId": "c968689a-c0d9-49de-aa76-b10ed15ebb0e",
            "fields": {
              "text": {
                "mode": "prompt",
                "prompt": "Erstelle eine professionelle Benachrichtigung für den Manager über den neuen Mitarbeiter. Nutze folgende Daten:\n\nMitarbeiter: {{onboardingChecklist.output.structured.employee_name}}\nMitarbeiterdaten: {{getEmployeeData.output}}\nAnzahl Tasks erstellt: {{taskLoop.output.total}}\n\nDie Nachricht soll höflich und informativ sein."
              },
              "channelId": {
                "mode": "prompt",
                "prompt": "Extrahiere die Manager-ID oder den Manager-Channel aus den Mitarbeiterdaten: {{getEmployeeData.output}}"
              }
            }
          }
        },
        "id": "a5ca3042-0c61-4a73-b9e6-279e16ac1369",
        "position": {
          "x": 3344,
          "y": 2680
        }
      }
    ],
    "edges": [
      {
        "id": "91490978-2514-4ba1-a65c-f2b41c2fd24c",
        "source": "135595bf-ac67-4a80-b234-2ff717167a48",
        "target": "cfbf20db-bae6-4903-88c1-0bbbc0d58cb4",
        "animated": false,
        "sourceHandle": "output-success",
        "targetHandle": "input-default",
        "conditionId": null
      },
      {
        "id": "8428f2ce-fc25-42f7-93f7-c5933f7e5a26",
        "source": "364a2743-ed95-4a9f-add6-761e0c54a394",
        "target": "337b094a-11dc-48f4-afa2-1f9bf3b50aa7",
        "animated": false,
        "sourceHandle": "output-success",
        "targetHandle": "input-default",
        "conditionId": null
      },
      {
        "id": "6992c0b0-5cb2-4c36-94d0-249431e2798c",
        "source": "4be1fff4-1b37-4eff-b449-06f35ae2931a",
        "target": "364a2743-ed95-4a9f-add6-761e0c54a394",
        "animated": false,
        "sourceHandle": "output-success",
        "targetHandle": "input-default",
        "conditionId": null
      },
      {
        "id": "cb5779db-755d-41ac-8e01-2e305ade8710",
        "source": "337b094a-11dc-48f4-afa2-1f9bf3b50aa7",
        "target": "eee9b242-9da4-48cf-b475-bc651773a514",
        "animated": false,
        "sourceHandle": "output-success",
        "targetHandle": "input-default",
        "conditionId": null
      },
      {
        "id": "3363bcc8-9dd8-4e1c-970b-98779d2445a0",
        "source": "eee9b242-9da4-48cf-b475-bc651773a514",
        "target": "448b62e4-0ecf-41ba-9ace-51878e391305",
        "animated": false,
        "sourceHandle": "output-success",
        "targetHandle": "input-default",
        "conditionId": null
      },
      {
        "id": "0361c004-77ff-4c38-9622-af4361db6e95",
        "source": "448b62e4-0ecf-41ba-9ace-51878e391305",
        "target": "135595bf-ac67-4a80-b234-2ff717167a48",
        "animated": false,
        "sourceHandle": "output-success",
        "targetHandle": "input-default",
        "conditionId": null
      },
      {
        "id": "9a4423ab-a4a7-4dfb-a33c-df747a76d112",
        "source": "135595bf-ac67-4a80-b234-2ff717167a48",
        "target": "a5ca3042-0c61-4a73-b9e6-279e16ac1369",
        "animated": false,
        "sourceHandle": "output-success",
        "targetHandle": "input-default",
        "conditionId": null
      }
    ]
  }
}