{
  "name": "Steuer-Radar \u2014 BMF-Meldungen klassifizieren und vorlegen",
  "nodes": [
    {
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "days",
              "triggerAtHour": 7
            }
          ]
        }
      },
      "id": "a1000000-0000-4000-8000-000000000001",
      "name": "T\u00e4glich 07:00",
      "type": "n8n-nodes-base.scheduleTrigger",
      "typeVersion": 1.2,
      "position": [
        0,
        0
      ]
    },
    {
      "parameters": {
        "command": "node /repo/bin/radar.mjs"
      },
      "id": "a1000000-0000-4000-8000-000000000002",
      "name": "Radar ausf\u00fchren",
      "type": "n8n-nodes-base.executeCommand",
      "typeVersion": 1,
      "position": [
        220,
        0
      ],
      "notes": "Ruft die getestete Bibliothek auf. Keine nachgebaute Logik in n8n."
    },
    {
      "parameters": {
        "fileSelector": "/repo/data/protokoll.jsonl",
        "options": {}
      },
      "id": "a1000000-0000-4000-8000-000000000003",
      "name": "Protokoll lesen",
      "type": "n8n-nodes-base.readWriteFile",
      "typeVersion": 1,
      "position": [
        440,
        0
      ]
    },
    {
      "parameters": {
        "jsCode": "// Nur der aktuelle Lauf, und nur was einem Menschen vorgelegt wird.\nconst text = Buffer.from($input.first().binary.data.data, 'base64').toString('utf8');\nconst heute = new Date().toISOString().slice(0, 10);\nreturn text.trim().split('\\n')\n  .filter(Boolean)\n  .map((z) => JSON.parse(z))\n  .filter((e) => e.zeitpunkt.startsWith(heute))\n  .filter((e) => e.vorlage !== 'archiv')\n  .map((json) => ({ json }));"
      },
      "id": "a1000000-0000-4000-8000-000000000004",
      "name": "Vorzulegendes filtern",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        660,
        0
      ]
    },
    {
      "parameters": {
        "jsCode": "// FREIGABESCHRITT \u2014 hier wird nichts automatisch wirksam.\n//\n// Ersetze diesen Node durch den Kanal, \u00fcber den DU entscheidest:\n// E-Mail, Slack, oder n8n \"Send and Wait for Response\" f\u00fcr Zustimmen/Ablehnen.\n// Die Freigabefelder im Protokoll (freigabe, freigegeben_von, freigegeben_am)\n// sind daf\u00fcr vorgesehen und bleiben bis dahin null.\nreturn $input.all().map((i) => ({ json: {\n  betreff: `[Steuer-Radar] ${i.json.vorlage === 'unklar' ? 'Unklar' : 'Relevant'}: ${i.json.titel}`,\n  text: [\n    i.json.titel,\n    '',\n    i.json.modellausgabe?.was_aendert_sich ?? '(keine g\u00fcltige Modellausgabe)',\n    i.json.modellausgabe?.bereiche?.length ? `Bereiche: ${i.json.modellausgabe.bereiche.join(', ')}` : '',\n    i.json.modellausgabe?.wirksam_ab ? `Wirksam ab: ${i.json.modellausgabe.wirksam_ab}` : '',\n    `Einstufung: ${i.json.vorlage} \u2014 ${i.json.grund}`,\n    '',\n    i.json.link,\n  ].filter(Boolean).join('\\n'),\n  link: i.json.link,\n} }));"
      },
      "id": "a1000000-0000-4000-8000-000000000005",
      "name": "Zur Freigabe aufbereiten",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        880,
        0
      ],
      "notes": "Platzhalter f\u00fcr den Freigabekanal \u2014 bewusst nicht automatisiert."
    }
  ],
  "connections": {
    "T\u00e4glich 07:00": {
      "main": [
        [
          {
            "node": "Radar ausf\u00fchren",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Radar ausf\u00fchren": {
      "main": [
        [
          {
            "node": "Protokoll lesen",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Protokoll lesen": {
      "main": [
        [
          {
            "node": "Vorzulegendes filtern",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Vorzulegendes filtern": {
      "main": [
        [
          {
            "node": "Zur Freigabe aufbereiten",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "settings": {
    "executionOrder": "v1"
  }
}