{
  "schema": "ldwf",
  "version": 1,
  "name": "Projektstatus Report",
  "meta": {
    "exportedAt": "2025-11-16T16:54:55.004Z",
    "exporter": "client"
  },
  "graph": {
    "nodes": [
      {
        "type": "action",
        "data": {
          "comment": "☁️ CLOUD-SPEICHER UPLOAD\n\nBeschreibung:\nLädt den generierten PDF-Report automatisch in Google Drive hoch. Der Report wird im Ordner 'Projekt-Reports' abgelegt und mit Datum versehen.\n\nSetup (ERFORDERLICH):\n❗ Verbindung: Wählen Sie Ihre Google Drive-Verbindung aus\n\nSetup (OPTIONAL):\n• Folder ID: Die KI sucht automatisch nach 'Projekt-Reports'\n  → Wenn der Ordner nicht existiert, erstellen Sie ihn in Google Drive\n  → Alternativ: Lassen Sie leer für Upload ins Root-Verzeichnis\n\nPersonalisierungsoptionen:\n• Ordner-Name ändern:\n  - Ändern Sie den Prompt von 'Projekt-Reports' zu Ihrem Wunsch-Ordner\n  - Beispiel: 'Weekly Reports', 'Management Reports', 'IT-Projekte'\n• Ordner-Struktur:\n  - Nach Monat: 'Projekt-Reports/2024/Januar'\n  - Nach Team: 'Projekt-Reports/IT-Team'\n• Dateiname-Präfix anpassen (im vorherigen Code-Node)\n• Berechtigungen: In Google Drive nachträglich festlegen\n\nTipp: Erstellen Sie den Zielordner vorab in Google Drive für konsistente Ablage",
          "executionId": null,
          "errorHandling": {
            "strategy": "stop"
          },
          "slug": "uploadToDrive",
          "actionId": "0f25bde8-7c7a-4c9e-8cd4-f37c7f3f4ede",
          "config": {
            "connectionId": null,
            "requiresConfirmation": false,
            "modelId": "c968689a-c0d9-49de-aa76-b10ed15ebb0e",
            "fields": {
              "file": {
                "mode": "manual",
                "value": "{{generatePdfReport.output.path}}",
                "prompt": null
              },
              "fileName": {
                "mode": "manual",
                "value": "{{generatePdfReport.output.fileName}}",
                "prompt": null
              },
              "folderId": {
                "mode": "prompt",
                "value": null,
                "prompt": "Suche nach dem Ordner 'Projekt-Reports' und verwende dessen ID. Falls der Ordner nicht existiert, lass das Feld leer."
              }
            }
          }
        },
        "id": "29c81d8d-0c70-40fe-809f-d6c2e3ae9bba",
        "position": {
          "x": 2172,
          "y": 1540
        }
      },
      {
        "type": "trigger",
        "data": {
          "comment": "📅 ZEITBASIERTER TRIGGER\n\nBeschreibung:\nDieser Trigger startet den Workflow automatisch jeden Freitag um 16:00 Uhr. Er ist der Startpunkt für die wöchentliche Projekt-Report-Erstellung.\n\nSetup:\n✓ Bereits konfiguriert: Freitag 16:00 Uhr (Cron: 0 16 * * 5)\n\nPersonalisierungsoptionen:\n• Zeitpunkt ändern: Passen Sie die Cron-Expression an (z.B. '0 9 * * 1' für Montag 9:00 Uhr)\n• Häufigkeit ändern: Täglich, wöchentlich an anderen Tagen, monatlich\n• Tipp: Wählen Sie einen Zeitpunkt, zu dem die Projekt-Daten aktuell sind\n\nCron-Beispiele:\n- Täglich 9:00 Uhr: 0 9 * * *\n- Jeden Montag 8:00 Uhr: 0 8 * * 1\n- Erster Tag im Monat 10:00 Uhr: 0 10 1 * *",
          "executionId": null,
          "errorHandling": {
            "strategy": "stop"
          },
          "slug": "fridayReportTrigger",
          "name": "Freitag 16:00 Uhr",
          "kind": "scheduled",
          "cron": "0 16 * * 5"
        },
        "id": "e3367f4d-43e0-45a9-8c4e-b64b1f03db16",
        "position": {
          "x": 10,
          "y": 1540
        }
      },
      {
        "type": "code",
        "data": {
          "comment": "📄 PDF-REPORT GENERIERUNG\n\nBeschreibung:\nErstellt ein professionell formatiertes PDF-Dokument aus der KI-Analyse. Das PDF enthält:\n• Header mit Datum, Zeit und Status-Badge (farbcodiert)\n• Alle Analyse-Abschnitte in strukturierten Sektionen\n• Automatischer Dateiname mit Datum (z.B. Projekt-Report_2024-01-19.pdf)\n\nSetup:\n✓ Bereits vollständig konfiguriert\n\nPersonalisierungsoptionen:\n• Design anpassen:\n  - Farben ändern (statusColor-Objekt im Code)\n  - Schriftarten anpassen (font-family in CSS)\n  - Logo hinzufügen (img-Tag im HTML)\n  - Corporate Design integrieren\n• Dateiname-Format:\n  - Aktuell: Projekt-Report_YYYY-MM-DD.pdf\n  - Ändern zu: Weekly-Report_KW-XX.pdf\n  - Mit Abteilung: IT-Projekt-Report_YYYY-MM-DD.pdf\n• PDF-Einstellungen:\n  - Format: A4 (änderbar zu Letter, Legal, etc.)\n  - Ränder: 20mm/15mm (anpassbar)\n• Zusätzliche Abschnitte hinzufügen\n\nHinweis: Nutzt externe HTML-zu-PDF API für beste Formatierung",
          "executionId": null,
          "errorHandling": {
            "strategy": "stop"
          },
          "name": "PDF Report erstellen",
          "slug": "generatePdfReport",
          "language": "javascript",
          "code": "// Erstelle einen formatierten HTML-Report\nconst analysis = analyzeProjects.output.structured;\nconst now = new Date();\nconst dateStr = now.toISOString().split('T')[0];\nconst timeStr = now.toLocaleTimeString('de-DE', { hour: '2-digit', minute: '2-digit' });\n\n// Status-Farbe bestimmen\nconst statusColor = {\n  'Grün': '#28a745',\n  'Gelb': '#ffc107',\n  'Rot': '#dc3545'\n}[analysis.overall_status] || '#6c757d';\n\n// HTML-Report erstellen\nconst htmlContent = `\n<!DOCTYPE html>\n<html>\n<head>\n  <meta charset=\"UTF-8\">\n  <style>\n    body { font-family: Arial, sans-serif; margin: 40px; color: #333; }\n    h1 { color: #2c3e50; border-bottom: 3px solid ${statusColor}; padding-bottom: 10px; }\n    h2 { color: #34495e; margin-top: 30px; border-left: 4px solid ${statusColor}; padding-left: 10px; }\n    .header { background: #f8f9fa; padding: 20px; border-radius: 5px; margin-bottom: 30px; }\n    .status-badge { display: inline-block; padding: 8px 16px; background: ${statusColor}; color: white; border-radius: 4px; font-weight: bold; }\n    .section { margin: 20px 0; padding: 15px; background: #ffffff; border: 1px solid #dee2e6; border-radius: 5px; }\n    .footer { margin-top: 40px; padding-top: 20px; border-top: 1px solid #dee2e6; font-size: 12px; color: #6c757d; }\n    pre { white-space: pre-wrap; word-wrap: break-word; background: #f8f9fa; padding: 10px; border-radius: 4px; }\n  </style>\n</head>\n<body>\n  <div class=\"header\">\n    <h1>Wöchentlicher Projekt-Status-Report</h1>\n    <p><strong>Datum:</strong> ${dateStr} | <strong>Zeit:</strong> ${timeStr}</p>\n    <p><strong>Gesamtstatus:</strong> <span class=\"status-badge\">${analysis.overall_status}</span></p>\n  </div>\n\n  <h2>Executive Summary</h2>\n  <div class=\"section\">\n    <pre>${analysis.executive_summary}</pre>\n  </div>\n\n  <h2>Projekt-Fortschritt</h2>\n  <div class=\"section\">\n    <pre>${analysis.project_progress}</pre>\n  </div>\n\n  <h2>Risiken und Verzögerungen</h2>\n  <div class=\"section\">\n    <pre>${analysis.risks_and_delays}</pre>\n  </div>\n\n  <h2>Kritische Punkte & Handlungsempfehlungen</h2>\n  <div class=\"section\">\n    <pre>${analysis.critical_points}</pre>\n  </div>\n\n  <div class=\"footer\">\n    <p>Automatisch generiert am ${dateStr} um ${timeStr} Uhr</p>\n  </div>\n</body>\n</html>\n`;\n\n// Konvertiere HTML zu PDF mit puppeteer-ähnlicher API\nconst response = await ld.request({\n  url: 'https://api.html2pdf.app/v1/generate',\n  method: 'POST',\n  headers: {\n    'Content-Type': 'application/json'\n  },\n  body: {\n    html: htmlContent,\n    format: 'A4',\n    printBackground: true,\n    margin: {\n      top: '20mm',\n      right: '15mm',\n      bottom: '20mm',\n      left: '15mm'\n    }\n  },\n  responseType: 'binary'\n});\n\n// Erstelle Dateinamen mit Datum\nconst fileName = `Projekt-Report_${dateStr}.pdf`;\n\n// Rückgabe als File-Objekt\nreturn {\n  file: response,\n  fileName: fileName,\n  path: `/mnt/data/${fileName}`,\n  _metadata: {\n    name: fileName,\n    mimeType: 'application/pdf',\n    generatedAt: now.toISOString()\n  }\n};"
        },
        "id": "43396998-d1f2-480f-9a79-c7931baf67b3",
        "position": {
          "x": 1644,
          "y": 1540
        }
      },
      {
        "type": "agent",
        "data": {
          "comment": "🤖 KI-ANALYSE DER PROJEKT-DATEN\n\nBeschreibung:\nEin intelligenter Agent analysiert die Projekt-Daten und erstellt einen strukturierten Report mit:\n• Executive Summary (Zusammenfassung)\n• Projekt-Fortschritt (Status, Completion Rate)\n• Risiken & Verzögerungen (priorisiert)\n• Kritische Punkte & Handlungsempfehlungen\n• Gesamtstatus (Grün/Gelb/Rot)\n\nSetup:\n✓ Bereits konfiguriert mit optimiertem Analyse-Prompt\n\nPersonalisierungsoptionen:\n• Prompt anpassen: Fügen Sie spezifische Analyse-Kriterien hinzu\n  - Fokus auf bestimmte Projekt-Typen\n  - Besondere KPIs berücksichtigen\n  - Spezifische Risiko-Kategorien\n• Output Schema erweitern: Zusätzliche Felder hinzufügen (z.B. Budget-Analyse)\n• Bewertungs-Kriterien: Definieren Sie, wann Status Grün/Gelb/Rot ist\n\nBeispiel-Anpassungen:\n- 'Fokussiere besonders auf Budget-Überschreitungen'\n- 'Priorisiere Projekte mit Deadline in den nächsten 2 Wochen'\n- 'Analysiere Team-Auslastung und Bottlenecks'",
          "executionId": null,
          "errorHandling": {
            "strategy": "stop"
          },
          "slug": "analyzeProjects",
          "assistantId": null,
          "mode": "create",
          "name": "Projekt-Analyse",
          "prompt": {
            "mode": "manual",
            "value": "Analysiere die folgenden Projekt-Daten aus monday.com:\n\n{{getProjects.output}}\n\nDeine Aufgabe:\n1. Analysiere den Fortschritt aller Projekte\n2. Identifiziere potenzielle Risiken und Verzögerungen\n3. Erkenne kritische Punkte (z.B. nahende Deadlines, überlastete Personen)\n4. Bewerte den Gesamtstatus\n\nErstelle eine strukturierte Analyse mit:\n- Executive Summary (kurze Zusammenfassung)\n- Fortschritt pro Projekt (Status, Completion Rate)\n- Risiken und Verzögerungen (priorisiert nach Dringlichkeit)\n- Kritische Punkte und Handlungsempfehlungen\n- Gesamtbewertung (Grün/Gelb/Rot)\n\nSei präzise, datenbasiert und handlungsorientiert."
          },
          "attachmentIds": [],
          "output": "structured",
          "connectionOverrides": {},
          "outputSchema": [
            {
              "id": "d9596306-f97b-40d0-893c-eb1746c63eb7",
              "name": "executive_summary",
              "description": "Kurze Zusammenfassung des Gesamtstatus",
              "type": "string",
              "required": true
            },
            {
              "id": "f2e1a588-b3b3-4c4d-9c6e-61f82a98736e",
              "name": "project_progress",
              "description": "Detaillierter Fortschritt pro Projekt",
              "type": "string",
              "required": true
            },
            {
              "id": "4752fb7c-cfdf-4a80-b2cf-43d6fa80ac76",
              "name": "risks_and_delays",
              "description": "Identifizierte Risiken und Verzögerungen",
              "type": "string",
              "required": true
            },
            {
              "id": "cc187df8-e9a4-41c1-8c4b-367f40c63d9c",
              "name": "critical_points",
              "description": "Kritische Punkte und Handlungsempfehlungen",
              "type": "string",
              "required": true
            },
            {
              "id": "319f3d80-af01-4008-a5ab-a7d7cbef6a86",
              "name": "overall_status",
              "description": "Gesamtbewertung des Projektstatus",
              "type": "select",
              "required": true,
              "options": [
                "Grün",
                "Gelb",
                "Rot"
              ]
            },
            {
              "id": "1e237384-36bf-4b0c-a479-fa2155259ebf",
              "name": "output",
              "description": "Vollständiger Analysereport",
              "type": "string",
              "required": true
            },
            {
              "id": "73526671-794a-416e-aa02-5b3f4b632aa4",
              "name": "success",
              "description": "Ob die Analyse erfolgreich war",
              "type": "boolean",
              "required": true
            }
          ],
          "modelId": "c968689a-c0d9-49de-aa76-b10ed15ebb0e",
          "tools": [],
          "maxSteps": 25
        },
        "id": "f1c5a2dd-94f5-4e17-90a6-1c414ff09fa4",
        "position": {
          "x": 1100,
          "y": 1540
        }
      },
      {
        "type": "action",
        "data": {
          "comment": "📊 PROJEKT-DATEN ABRUFEN\n\nBeschreibung:\nRuft alle Items (Tasks, Projekte) von einem monday.com Board ab, inklusive aller relevanten Spalten wie Status, Deadlines, zugewiesene Personen, etc.\n\nSetup (ERFORDERLICH):\n❗ Verbindung: Wählen Sie Ihre monday.com-Verbindung aus\n❗ Board ID: Geben Sie die ID des Projekt-Boards ein\n   → Tipp: Nutzen Sie die 'Get boards' Aktion, um verfügbare Boards zu sehen\n   → Board ID finden: In monday.com URL (z.B. boards/1234567890)\n\nPersonalisierungsoptionen:\n• Column IDs: Beschränken Sie auf bestimmte Spalten (aktuell: alle Spalten)\n• Item Limit: Begrenzen Sie die Anzahl der abgerufenen Items (aktuell: unbegrenzt)\n• Filter: Nur aktive Projekte abrufen (erfordert Anpassung der Aktion)\n\nTipp: Lassen Sie 'Column IDs' auf Auto, damit die KI alle relevanten Daten erhält",
          "executionId": null,
          "errorHandling": {
            "strategy": "stop"
          },
          "slug": "getProjects",
          "actionId": "38f694d4-ede1-4048-8239-c10fb8de2a26",
          "config": {
            "connectionId": null,
            "requiresConfirmation": false,
            "modelId": "c968689a-c0d9-49de-aa76-b10ed15ebb0e",
            "fields": {
              "boardId": {
                "mode": "manual",
                "value": "",
                "prompt": null
              },
              "columnIds": {
                "mode": "auto",
                "value": null,
                "prompt": null
              },
              "itemLimit": {
                "mode": "none",
                "value": null,
                "prompt": null
              }
            }
          }
        },
        "id": "a69e6634-69d2-4803-b1b1-3f765cccbf21",
        "position": {
          "x": 540,
          "y": 1540
        }
      },
      {
        "type": "action",
        "data": {
          "comment": "📧 E-MAIL-VERSAND AN STAKEHOLDER\n\nBeschreibung:\nVersendet den Projekt-Report automatisch per E-Mail an alle definierten Stakeholder. Die E-Mail enthält:\n• Professionell formatierte Nachricht (KI-generiert)\n• Executive Summary im E-Mail-Body\n• Status-Übersicht (Grün/Gelb/Rot)\n• PDF-Report als Anhang\n\nSetup (ERFORDERLICH):\n❗ Empfänger: Tragen Sie E-Mail-Adressen ein (kommagetrennt)\n   Beispiel: chef@firma.de, teamlead@firma.de, pm@firma.de\n\nSetup (OPTIONAL):\n• CC: Zusätzliche Empfänger in Kopie\n• BCC: Versteckte Kopie-Empfänger\n\nPersonalisierungsoptionen:\n• E-Mail-Betreff anpassen:\n  - Aktuell: 'Wöchentlicher Projekt-Status-Report - [Datum]'\n  - Beispiele: '[Status] Projekt-Report KW XX', 'Management Report - Projekte'\n• E-Mail-Prompt erweitern:\n  - Tonalität ändern (formeller/lockerer)\n  - Zusätzliche Infos einbinden\n  - Call-to-Action hinzufügen\n  - Beispiel: 'Füge einen Hinweis hinzu, dass bei Status Rot ein Meeting erforderlich ist'\n• Empfänger-Liste dynamisch:\n  - Bei Status Rot: Zusätzliche Empfänger (z.B. Geschäftsführung)\n  - Verwenden Sie dafür eine Condition vor diesem Node\n\nTipp: Testen Sie zunächst mit Ihrer eigenen E-Mail-Adresse",
          "executionId": null,
          "errorHandling": {
            "strategy": "stop"
          },
          "slug": "sendReportEmail",
          "actionId": "7e540add-fe6d-44c2-b224-f7c384573cdf",
          "config": {
            "connectionId": null,
            "requiresConfirmation": false,
            "modelId": "c968689a-c0d9-49de-aa76-b10ed15ebb0e",
            "fields": {
              "cc": {
                "mode": "none",
                "value": null,
                "prompt": null
              },
              "bcc": {
                "mode": "none",
                "value": null,
                "prompt": null
              },
              "mailBody": {
                "mode": "prompt",
                "value": null,
                "prompt": "Erstelle eine professionelle E-Mail, die den Status-Report ankündigt. Verwende die Executive Summary aus der Analyse: {{analyzeProjects.output.structured.executive_summary}} und den Gesamtstatus: {{analyzeProjects.output.structured.overall_status}}. Die E-Mail soll höflich, informativ und handlungsorientiert sein. Verwende HTML-Formatierung mit <b> für wichtige Punkte und <br> für Zeilenumbrüche."
              },
              "attachments": {
                "mode": "manual",
                "value": "{{generatePdfReport.output.path}}",
                "prompt": null
              },
              "mailSubject": {
                "mode": "manual",
                "value": "Wöchentlicher Projekt-Status-Report - {{generatePdfReport.output._metadata.generatedAt}}",
                "prompt": null
              },
              "mailRecipient": {
                "mode": "manual",
                "value": "",
                "prompt": null
              }
            }
          }
        },
        "id": "3dc566f7-87c4-4588-bd5b-d2a228182ef4",
        "position": {
          "x": 2700,
          "y": 1540
        }
      }
    ],
    "edges": [
      {
        "id": "12c9bcb5-850c-4d64-babd-41d1f390ba96",
        "source": "e3367f4d-43e0-45a9-8c4e-b64b1f03db16",
        "target": "a69e6634-69d2-4803-b1b1-3f765cccbf21",
        "animated": false,
        "sourceHandle": "output-success",
        "targetHandle": "input-default",
        "conditionId": null
      },
      {
        "id": "c5e5c7ac-b399-4c4f-955e-916ed3b4a9c2",
        "source": "a69e6634-69d2-4803-b1b1-3f765cccbf21",
        "target": "f1c5a2dd-94f5-4e17-90a6-1c414ff09fa4",
        "animated": false,
        "sourceHandle": "output-success",
        "targetHandle": "input-default",
        "conditionId": null
      },
      {
        "id": "df6ec3e8-9539-4088-9588-df2ddccf09af",
        "source": "f1c5a2dd-94f5-4e17-90a6-1c414ff09fa4",
        "target": "43396998-d1f2-480f-9a79-c7931baf67b3",
        "animated": false,
        "sourceHandle": "output-success",
        "targetHandle": "input-default",
        "conditionId": null
      },
      {
        "id": "a0985164-8ed5-4283-ba57-e928646d130f",
        "source": "43396998-d1f2-480f-9a79-c7931baf67b3",
        "target": "29c81d8d-0c70-40fe-809f-d6c2e3ae9bba",
        "animated": false,
        "sourceHandle": "output-success",
        "targetHandle": "input-default",
        "conditionId": null
      },
      {
        "id": "579cba0d-48eb-41b9-b6fb-dd99ea86749e",
        "source": "29c81d8d-0c70-40fe-809f-d6c2e3ae9bba",
        "target": "3dc566f7-87c4-4588-bd5b-d2a228182ef4",
        "animated": false,
        "sourceHandle": "output-success",
        "targetHandle": "input-default",
        "conditionId": null
      }
    ]
  }
}