{
  "name": "Erechio: E-Rechnung prüfen (Vorlage)",
  "nodes": [
    {
      "parameters": {},
      "id": "6f1c2a10-0001-4000-8000-000000000001",
      "name": "Start (manuell)",
      "type": "n8n-nodes-base.manualTrigger",
      "typeVersion": 1,
      "position": [0, 0]
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            { "id": "a1", "name": "erechio_url", "value": "https://HIER-BASISADRESSE-AUS-DER-MAIL", "type": "string" },
            { "id": "a2", "name": "erechio_key", "value": "pk_test_HIER-SCHLUESSEL-AUS-DER-MAIL", "type": "string" },
            { "id": "a3", "name": "rechnung_url", "value": "https://erechio.de/pruefen/beispiel/rechnung-mit-fehlern.xml", "type": "string" }
          ]
        },
        "options": {}
      },
      "id": "6f1c2a10-0002-4000-8000-000000000002",
      "name": "Einstellungen",
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [220, 0],
      "notes": "Basisadresse und Schlüssel aus der Mail eintragen. Für den Dauerbetrieb den Schlüssel besser als Credential „Header Auth“ (Name Authorization, Wert Bearer pk_…) im Knoten „Erechio prüfen“ hinterlegen."
    },
    {
      "parameters": {
        "url": "={{ $json.rechnung_url }}",
        "options": { "response": { "response": { "responseFormat": "text", "outputPropertyName": "xml" } } }
      },
      "id": "6f1c2a10-0003-4000-8000-000000000003",
      "name": "Rechnung laden",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [440, 0],
      "notes": "Ersetzen Sie diesen Knoten durch Ihre Quelle (Mail-Anhang, Datei, Rechnungsprogramm). Wichtig ist nur: Das XML steht als Text im Feld „xml“."
    },
    {
      "parameters": {
        "method": "POST",
        "url": "={{ $('Einstellungen').item.json.erechio_url }}/v1/validate",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            { "name": "Authorization", "value": "=Bearer {{ $('Einstellungen').item.json.erechio_key }}" }
          ]
        },
        "sendBody": true,
        "contentType": "raw",
        "rawContentType": "application/xml",
        "body": "={{ $json.xml }}",
        "options": { "response": { "response": { "fullResponse": true, "neverError": true } } }
      },
      "id": "6f1c2a10-0004-4000-8000-000000000004",
      "name": "Erechio prüfen",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [660, 0],
      "notes": "HTTP 200 heißt: Prüfung ausgeführt – nicht: Rechnung fehlerfrei. Maßgeblich ist body.vollstaendig_validiert."
    },
    {
      "parameters": {
        "conditions": {
          "options": { "caseSensitive": true, "leftValue": "", "typeValidation": "loose" },
          "conditions": [
            { "id": "c1", "leftValue": "={{ $json.statusCode === 200 && $json.body.vollstaendig_validiert === true }}", "rightValue": true, "operator": { "type": "boolean", "operation": "true", "singleValue": true } }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "id": "6f1c2a10-0005-4000-8000-000000000005",
      "name": "Vollständig validiert?",
      "type": "n8n-nodes-base.if",
      "typeVersion": 2,
      "position": [880, 0]
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            { "id": "b1", "name": "ergebnis", "value": "vollständig validiert – kann versendet werden", "type": "string" },
            { "id": "b2", "name": "regelstand", "value": "={{ $json.body.regelstand }}", "type": "string" }
          ]
        },
        "options": {}
      },
      "id": "6f1c2a10-0006-4000-8000-000000000006",
      "name": "Rechnung in Ordnung",
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [1100, -120]
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            { "id": "d1", "name": "ergebnis", "value": "={{ $json.statusCode !== 200 ? 'keine Prüfung: HTTP ' + $json.statusCode + ' ' + ($json.body.fehler ? $json.body.fehler.code + ' – ' + $json.body.fehler.text : '') : 'nicht validiert: ' + $json.body.fehler + ' Fehler, ' + $json.body.warnungen + ' Warnungen' }}", "type": "string" },
            { "id": "d2", "name": "zu_beheben", "value": "={{ $json.statusCode === 200 ? $json.body.meldungen.filter(m => m.level === 'fehler').map(m => m.code + ': ' + (m.erklaerung ? m.erklaerung.titel + ' – ' + m.erklaerung.beheben : m.text)).join('\\n') : '' }}", "type": "string" }
          ]
        },
        "options": {}
      },
      "id": "6f1c2a10-0007-4000-8000-000000000007",
      "name": "Fehler zum Beheben",
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [1100, 120]
    }
  ],
  "connections": {
    "Start (manuell)": { "main": [[{ "node": "Einstellungen", "type": "main", "index": 0 }]] },
    "Einstellungen": { "main": [[{ "node": "Rechnung laden", "type": "main", "index": 0 }]] },
    "Rechnung laden": { "main": [[{ "node": "Erechio prüfen", "type": "main", "index": 0 }]] },
    "Erechio prüfen": { "main": [[{ "node": "Vollständig validiert?", "type": "main", "index": 0 }]] },
    "Vollständig validiert?": { "main": [[{ "node": "Rechnung in Ordnung", "type": "main", "index": 0 }], [{ "node": "Fehler zum Beheben", "type": "main", "index": 0 }]] }
  },
  "settings": { "executionOrder": "v1" },
  "pinData": {},
  "meta": { "templateCredsSetupCompleted": true }
}
