Skip to content

Instantly share code, notes, and snippets.

@swiss-shift-ch
Created May 12, 2026 21:41
Show Gist options
  • Select an option

  • Save swiss-shift-ch/41bf3a328819abb454629754ab171dea to your computer and use it in GitHub Desktop.

Select an option

Save swiss-shift-ch/41bf3a328819abb454629754ab171dea to your computer and use it in GitHub Desktop.
Receipt processing for Swiss accounting firms — n8n template (Email → OCR → AI → Drive → Sheet). 15 nodes, Claude Haiku 4.5. MIT License.

Receipt Processing for Swiss Accounting Firms — n8n Template

A 15-node workflow for automated receipt processing: Email → OCR → AI classification → client matching → Google Drive routing → Sheet journaling. Uses Claude Haiku 4.5 (~$0.001 per receipt).

Use-case: Clients email PDF receipts to your accounting firm. The workflow extracts the PDF text, classifies it with Claude (invoice / payroll / receipt / etc.), automatically matches the right client, files the PDF into the correct Drive folder, and logs the result in a journal Sheet. Low-confidence cases land in a _Unzugeordnet ("unassigned") folder for human review.

Public template — initial release 2026-05-11 by Swiss Shift (Basel, Switzerland).

Note: the workflow's internal node names are in German because it was built for Swiss accounting firms. The structure and logic are language-agnostic. Setup instructions below are in English.


What you need

  • n8n self-hosted or Cloud (Docker, Hetzner, any VPS works)
  • Gmail account for incoming receipts (with OAuth2 credential in n8n)
  • Anthropic API key for Claude Haiku 4.5 (~$0.001 per receipt — cheap enough that 1000 receipts/month costs $1-2)
  • Google Drive + Google Sheets with OAuth2 credentials
  • Three subfolders per client in Drive: Rechnungen (invoices), Lohnabrechnungen (payroll), Quittungen (receipts) — name them whatever fits your filing structure, just match it in the code-node
  • One _Unzugeordnet folder for low-confidence cases
  • One journal Sheet with columns: Date / Client / DocType / Sender / Amount / Confidence / Owner

Setup steps

  1. Import: In n8n → Workflows → Import from File → beleg-workflow-treuhand-template.json
  2. Assign credentials: Each node with YOUR_*_CREDENTIAL_ID needs your own credential (Gmail, Anthropic, Google Drive, Google Sheets).
  3. Configure clients in the 🔍 Mandant zuordnen ("Match client") code-node — fill the mandanten array:
    {
      name: 'Acme AG',                                       // Display name
      aliases: ['Acme AG', 'Bahnhofstrasse 5'],              // Match strings (company name + addresses)
      ordner: 'Acme AG',                                     // Drive folder name
      sb: 'Anna Gerber',                                     // Owner / case manager
      email: 'anna@your-firm.ch',
      folders: {
        Rechnungen: 'DRIVE_FOLDER_ID_HERE',
        Lohnabrechnungen: 'DRIVE_FOLDER_ID_HERE',
        Quittungen: 'DRIVE_FOLDER_ID_HERE'
      }
    }
  4. Set UNZUGEORDNET_ID in the same node to your _Unzugeordnet folder ID.
  5. Set the Sheet ID in the 📊 Belegjournal node to your own journal sheet.
  6. Gmail filter: configure so only receipt-relevant emails trigger the workflow (label or search query in the Gmail trigger).

Architecture

📧 Email Eingang (Gmail trigger)
   ↓
📥 Attachment laden (load attachment)
   ↓
📤 In Unverarbeitet ablegen (Drive buffer — nothing lost on downstream failure)
   ↓
📄 PDF Text extrahieren (extract PDF text)
   ↓
🔧 AI Request vorbereiten (prompt building)
   ↓
🤖 AI Klassifikation (Claude → structured JSON)
   ↓
🔍 Mandant zuordnen (fuzzy match against alias list)
   ↓
✅ Mandant erkannt?  (client matched?)
   ├─ Yes → 📁 Move to client folder + 📊 Log in Journal
   └─ No → 🚨 Move to _Unzugeordnet + 📊 Log (confidence=0)
   ↓
🔗 Binary wiederherstellen (rebuild binary attachment)
   ↓
✔️ Als gelesen markieren (mark email as read)

Customization points

  • Different accounting software (bexio / Abacus / Banana / Xero / QuickBooks): replace the 📁 In Mandantenordner step with a direct API call into your accounting system. bexio has a REST API for receipt creation, Abacus too. The template stops at "PDF in Drive folder + Sheet row" — the booking-API integration is the next layer and software-specific.
  • Stronger AI model: swap Claude Haiku 4.5 for Sonnet 4.6 if you process complex or handwritten receipts. ~5x more expensive but better accuracy on edge cases.
  • Confidence thresholding: in the 🔍 Mandant zuordnen code-node, check ai.konfidenz > 0.85 and otherwise route directly to _Unzugeordnet. Catches edge cases without wrong postings.
  • Multi-language clients: the matcher aliases support DE / FR / IT / EN — useful for Switzerland where addresses often come in multiple languages.

Cost estimate

For 200 receipts/month × 5 clients = 1,000 receipts/month:

Component Monthly cost
Claude Haiku 4.5 $1-2
n8n self-hosted (Hetzner ARM) CHF 4
Google Workspace (Drive + Sheets) already paid
Total ~CHF 8-10 for a 5-client accounting firm

Known edge cases

  • Multi-page invoices with line-items across pages — n8n's PDF extraction sometimes splits these. Workaround: add concatenation logic in the 📄 PDF Text extrahieren node.
  • Handwritten receipts (rare long tail) — OCR accuracy drops to ~60%. The workflow logs these with confidence=0 and routes them to manual review.
  • Cross-border receipts (CH recipient, DE/AT sender with EUR amounts) — the workflow detects currency in the classification prompt, but the booking-API call needs separate VAT-handling logic (not included in this template).

License + Disclaimer

MIT License. Use at your own risk. We run this in production for our own use-case, but every accounting setup is different — test with 10-20 receipts before scaling to 200/month.

Questions or custom adaptations

swiss-shift.ch · info@swiss-shift.ch · We build workflow automation for Swiss SMBs. If this template helps and you want custom adaptations (bexio integration, multi-tenant version, confidence-feedback-loop), get in touch.


Changelog:

  • 2026-05-11: Initial public release. Anonymized + sanitized from production workflow.
{
"name": "[Demo] Belegverarbeitung Treuhand",
"description": null,
"nodes": [
{
"id": "YOUR_DRIVE_FOLDER_ID",
"name": "📧 Email Eingang",
"type": "n8n-nodes-base.gmail",
"typeVersion": 2.1,
"position": [
280,
304
],
"credentials": {
"gmailOAuth2": {
"id": "YOUR_GMAILOAUTH2_CREDENTIAL_ID",
"name": "Your gmailOAuth2 credential"
}
},
"parameters": {
"operation": "getAll",
"returnAll": false,
"limit": 20,
"filters": {
"q": "has:attachment filename:pdf is:unread"
},
"options": {
"downloadAttachments": true
}
}
},
{
"parameters": {
"operation": "pdf",
"binaryPropertyName": "attachment_0",
"options": {}
},
"id": "pdf-extract-01",
"name": "📄 PDF Text extrahieren",
"type": "n8n-nodes-base.extractFromFile",
"typeVersion": 1,
"position": [
720,
304
]
},
{
"parameters": {
"method": "POST",
"url": "https://api.anthropic.com/v1/messages",
"authentication": "predefinedCredentialType",
"nodeCredentialType": "anthropicApi",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "anthropic-version",
"value": "2023-06-01"
}
]
},
"sendBody": true,
"specifyBody": "json",
"jsonBody": "={{ $json.apiBody }}",
"options": {}
},
"id": "ai-class-01",
"name": "🤖 AI Klassifikation",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
1320,
304
],
"credentials": {
"anthropicApi": {
"id": "YOUR_ANTHROPICAPI_CREDENTIAL_ID",
"name": "Your anthropicApi credential"
}
},
"retryOnFail": true,
"maxTries": 5,
"waitBetweenTries": 3000
},
{
"parameters": {
"jsCode": "const allItems = $input.all();\nconst pdfItems = $('📄 PDF Text extrahieren').all();\nconst attachItems = $('📥 Attachment laden').all();\nconst uploadItems = $('📤 In Unverarbeitet ablegen').all();\n\nconst mandanten = [\n {name:'Beispiel A AG', aliases:['Beispiel A AG','Beispiel A','Musterstrasse 1','Beispiel-A'],\n ordner:'Beispiel A', sb:'Max Muster', email:'your-email@example.com',\n folders:{Rechnungen:'YOUR_DRIVE_FOLDER_ID',Lohnabrechnungen:'YOUR_DRIVE_FOLDER_ID',Quittungen:'YOUR_DRIVE_FOLDER_ID'}},\n {name:'Beispiel A', aliases:['Beispiel A','Musterstrasse 1','Beispiel-B'],\n ordner:'Beispiel A', sb:'Max Muster', email:'your-email@example.com',\n folders:{Rechnungen:'YOUR_DRIVE_FOLDER_ID',Lohnabrechnungen:'YOUR_DRIVE_FOLDER_ID',Quittungen:'YOUR_DRIVE_FOLDER_ID'}},\n {name:'M\\u00fcller AG', aliases:['Beispiel A','M\\u00fcller AG','Muller AG','Musterstrasse 1'],\n ordner:'Beispiel A', sb:'Max Muster', email:'your-email@example.com',\n folders:{Rechnungen:'YOUR_DRIVE_FOLDER_ID',Lohnabrechnungen:'YOUR_DRIVE_FOLDER_ID',Quittungen:'YOUR_DRIVE_FOLDER_ID'}}\n];\n\nconst UNZUGEORDNET_ID = 'YOUR_DRIVE_FOLDER_ID';\nconst typMap = {rechnung:'Rechnungen',lohnabrechnung:'Lohnabrechnungen',quittung:'Quittungen',spesenabrechnung:'Quittungen',steuerabrechnung:'Rechnungen',versicherung:'Rechnungen'};\n\nconst results = [];\n\nfor (let i = 0; i < allItems.length; i++) {\n try {\n const content = allItems[i].json.content[0].text;\n let jsonStr = content.trim();\n // Strip markdown code fences AND bare \"json\" prefix\n if (jsonStr.includes('```')) jsonStr = jsonStr.replace(/```json?\\n?/g,'').replace(/```/g,'').trim();\n if (jsonStr.startsWith('json')) jsonStr = jsonStr.replace(/^json\\s*/, '').trim();\n const ai = JSON.parse(jsonStr);\n\n const pdfText = (pdfItems[i] && pdfItems[i].json.text) || '';\n const emailSubject = (attachItems[i] && attachItems[i].json.subject) || '';\n const driveFileId = (uploadItems[i] && uploadItems[i].json.id) || '';\n\n const searchText = [ai.empfaenger||'',ai.absender||'',ai.zusammenfassung||'',pdfText,emailSubject].join(' ').toLowerCase();\n\n let m = null;\n for (const x of mandanten) {\n for (const a of x.aliases) {\n if (searchText.includes(a.toLowerCase())) { m = x; break; }\n }\n if (m) break;\n }\n\n const unterordner = typMap[ai.dokumenttyp] || 'Rechnungen';\n const zielordner_id = m ? (m.folders[unterordner] || m.folders['Rechnungen']) : UNZUGEORDNET_ID;\n const datum = (ai.datum||'').replace(/-/g,'');\n const absender = (ai.absender||'Unbekannt').replace(/[^a-zA-Z\\u00e4\\u00f6\\u00fc\\u00c4\\u00d6\\u00dc0-9]/g,'_');\n\n results.push({json:{\n dokumenttyp:ai.dokumenttyp, absender:ai.absender, empfaenger:ai.empfaenger,\n betrag:ai.betrag, datum:ai.datum, faellig_bis:ai.faellig_bis,\n referenz:ai.referenz, zusammenfassung:ai.zusammenfassung, konfidenz:ai.konfidenz,\n mandant_name: m?m.name:'UNBEKANNT',\n sachbearbeiter: m?m.sb:'Unbekannt',\n sachbearbeiter_email: m?m.email:'your-email@example.com',\n zielordner: m?'Mandanten/'+m.ordner+'/'+unterordner:'_Unzugeordnet',\n zielordner_id: zielordner_id,\n neuer_dateiname: datum+'_'+absender+'_'+ai.dokumenttyp+'_CHF'+ai.betrag+'.pdf',\n drive_file_id: driveFileId,\n matched: !!m,\n email_subject: emailSubject,\n verarbeitet_am: new Date().toISOString().split('T')[0]\n }});\n } catch(e) {\n results.push({json:{\n dokumenttyp:'unbekannt', absender:'Parse-Fehler', empfaenger:'',\n betrag:null, datum:null, faellig_bis:null, referenz:null,\n zusammenfassung:'Fehler: '+e.message, konfidenz:0,\n mandant_name:'UNBEKANNT', sachbearbeiter:'Unbekannt',\n sachbearbeiter_email:'your-email@example.com',\n zielordner:'_Unzugeordnet', zielordner_id:UNZUGEORDNET_ID,\n neuer_dateiname:'fehler_item_'+i+'.pdf',\n drive_file_id:(uploadItems[i] && uploadItems[i].json.id)||'',\n matched:false, email_subject:'', verarbeitet_am:new Date().toISOString().split('T')[0]\n }});\n }\n}\n\nreturn results;",
"mode": "runOnceForAllItems"
},
"id": "mandant-01",
"name": "🔍 Mandant zuordnen",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
1540,
304
]
},
{
"parameters": {
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": ""
},
"conditions": [
{
"id": "c1",
"leftValue": "={{ $json.matched }}",
"rightValue": true,
"operator": {
"type": "boolean",
"operation": "equals",
"singleValue": true
}
}
],
"combinator": "and"
},
"options": {}
},
"id": "if-match-01",
"name": "✅ Mandant erkannt?",
"type": "n8n-nodes-base.if",
"typeVersion": 2,
"position": [
1760,
304
]
},
{
"parameters": {
"operation": "append",
"documentId": {
"__rl": true,
"mode": "list",
"value": "YOUR_SHEET_ID",
"cachedResultName": "Belegjournal - demo-treuhand Treuhand (Demo)"
},
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultName": "Belegjournal"
},
"columns": {
"mappingMode": "autoMapInputData",
"value": {}
},
"options": {}
},
"id": "sheets-01",
"name": "📊 Belegjournal",
"type": "n8n-nodes-base.googleSheets",
"typeVersion": 4.5,
"position": [
2200,
204
],
"credentials": {
"googleSheetsOAuth2Api": {
"id": "YOUR_GOOGLESHEETSOAUTH2API_CREDENTIAL_ID",
"name": "Your googleSheetsOAuth2Api credential"
}
}
},
{
"id": "gmail-get-01",
"name": "📥 Attachment laden",
"type": "n8n-nodes-base.gmail",
"typeVersion": 2.1,
"position": [
500,
304
],
"credentials": {
"gmailOAuth2": {
"id": "YOUR_GMAILOAUTH2_CREDENTIAL_ID",
"name": "Your gmailOAuth2 credential"
}
},
"parameters": {
"operation": "get",
"messageId": "={{ $json.id }}",
"simple": false,
"options": {
"downloadAttachments": true
}
}
},
{
"id": "manual-trigger-01",
"name": "Manueller Start",
"type": "n8n-nodes-base.manualTrigger",
"typeVersion": 1,
"position": [
60,
304
],
"parameters": {}
},
{
"parameters": {
"inputDataFieldName": "attachment_0",
"name": "={{ $binary.attachment_0.fileName || 'beleg.pdf' }}",
"driveId": {
"__rl": true,
"mode": "list",
"value": "My Drive"
},
"folderId": {
"__rl": true,
"mode": "id",
"value": "YOUR_DRIVE_FOLDER_ID"
},
"options": {}
},
"type": "n8n-nodes-base.googleDrive",
"typeVersion": 3,
"position": [
1000,
304
],
"id": "b2b8dc1f-e7f5-4a40-b05f-1e35ac6ffda1",
"name": "📤 In Unverarbeitet ablegen",
"credentials": {
"googleDriveOAuth2Api": {
"id": "YOUR_GOOGLEDRIVEOAUTH2API_CREDENTIAL_ID",
"name": "Your googleDriveOAuth2Api credential"
}
}
},
{
"parameters": {
"operation": "move",
"fileId": {
"__rl": true,
"mode": "id",
"value": "={{ $json.drive_file_id }}"
},
"driveId": {
"__rl": true,
"mode": "list",
"value": "My Drive"
},
"folderId": {
"__rl": true,
"mode": "id",
"value": "={{ $json.zielordner_id }}"
},
"options": {}
},
"type": "n8n-nodes-base.googleDrive",
"typeVersion": 3,
"position": [
1980,
204
],
"id": "cee813b6-9aaf-4ad9-be5f-72918e417597",
"name": "📁 In Mandantenordner verschieben",
"credentials": {
"googleDriveOAuth2Api": {
"id": "YOUR_GOOGLEDRIVEOAUTH2API_CREDENTIAL_ID",
"name": "Your googleDriveOAuth2Api credential"
}
}
},
{
"parameters": {
"operation": "move",
"fileId": {
"__rl": true,
"mode": "id",
"value": "={{ $json.drive_file_id }}"
},
"driveId": {
"__rl": true,
"mode": "list",
"value": "My Drive"
},
"folderId": {
"__rl": true,
"mode": "id",
"value": "YOUR_DRIVE_FOLDER_ID"
},
"options": {}
},
"type": "n8n-nodes-base.googleDrive",
"typeVersion": 3,
"position": [
1980,
404
],
"id": "4ff8241a-fd2b-4836-938c-97b14cb9a02c",
"name": "🚨 In Unzugeordnet verschieben",
"credentials": {
"googleDriveOAuth2Api": {
"id": "YOUR_GOOGLEDRIVEOAUTH2API_CREDENTIAL_ID",
"name": "Your googleDriveOAuth2Api credential"
}
}
},
{
"parameters": {
"jsCode": "const items = $input.all();\nconst attachItems = $('📥 Attachment laden').all();\nreturn items.map((item, i) => ({\n json: item.json,\n binary: attachItems[i] ? attachItems[i].binary : {}\n}));"
},
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
830,
304
],
"id": "YOUR_DRIVE_FOLDER_ID",
"name": "🔗 Binary wiederherstellen"
},
{
"parameters": {
"mode": "runOnceForAllItems",
"jsCode": "const uploadItems = $input.all();\nconst pdfItems = $('📄 PDF Text extrahieren').all();\nconst attachItems = $('📥 Attachment laden').all();\nconst results = [];\n\nfor (let i = 0; i < uploadItems.length; i++) {\n const pdfText = (pdfItems[i] && pdfItems[i].json.text) || '';\n const subject = (attachItems[i] && attachItems[i].json.subject) || '';\n \n const body = {\n model: \"claude-sonnet-4-20250514\",\n max_tokens: 600,\n messages: [{\n role: \"user\",\n content: \"Du bist ein Schweizer Treuhand-Assistent. Analysiere diesen Beleg und extrahiere als reines JSON (kein Markdown, keine Erklaerung, NUR JSON).\\n\\nFelder: dokumenttyp (rechnung|lohnabrechnung|quittung|spesenabrechnung|steuerabrechnung|versicherung), absender, empfaenger, betrag (Zahl), datum (YYYY-MM-DD), faellig_bis (YYYY-MM-DD oder null), referenz, zusammenfassung (Einzeiler), konfidenz (0-1)\\n\\nEmail-Betreff: \" + subject + \"\\n\\nBeleg-Text:\\n\" + pdfText\n }]\n };\n \n results.push({json: {\n apiBody: JSON.stringify(body),\n driveId: uploadItems[i].json.id || '',\n driveName: uploadItems[i].json.name || ''\n }});\n}\n\nreturn results;"
},
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
1100,
304
],
"id": "482e8d8e-a9e0-4b65-8df4-990e38061646",
"name": "🔧 AI Request vorbereiten"
},
{
"parameters": {
"mode": "manual",
"duplicateItem": false,
"assignments": {
"assignments": [
{
"id": "a1",
"name": "datum",
"value": "={{ $('🔍 Mandant zuordnen').item.json.datum }}",
"type": "string"
},
{
"id": "a2",
"name": "absender",
"value": "={{ $('🔍 Mandant zuordnen').item.json.absender }}",
"type": "string"
},
{
"id": "a3",
"name": "empfaenger",
"value": "={{ $('🔍 Mandant zuordnen').item.json.empfaenger }}",
"type": "string"
},
{
"id": "a4",
"name": "dokumenttyp",
"value": "={{ $('🔍 Mandant zuordnen').item.json.dokumenttyp }}",
"type": "string"
},
{
"id": "a5",
"name": "betrag",
"value": "={{ $('🔍 Mandant zuordnen').item.json.betrag }}",
"type": "string"
},
{
"id": "a6",
"name": "referenz",
"value": "={{ $('🔍 Mandant zuordnen').item.json.referenz }}",
"type": "string"
},
{
"id": "a7",
"name": "faellig_bis",
"value": "={{ $('🔍 Mandant zuordnen').item.json.faellig_bis }}",
"type": "string"
},
{
"id": "a8",
"name": "mandant_name",
"value": "={{ $('🔍 Mandant zuordnen').item.json.mandant_name }}",
"type": "string"
},
{
"id": "a9",
"name": "sachbearbeiter",
"value": "={{ $('🔍 Mandant zuordnen').item.json.sachbearbeiter }}",
"type": "string"
},
{
"id": "a10",
"name": "zielordner",
"value": "={{ $('🔍 Mandant zuordnen').item.json.zielordner }}",
"type": "string"
},
{
"id": "a11",
"name": "konfidenz",
"value": "={{ $('🔍 Mandant zuordnen').item.json.konfidenz }}",
"type": "string"
},
{
"id": "a12",
"name": "zusammenfassung",
"value": "={{ $('🔍 Mandant zuordnen').item.json.zusammenfassung }}",
"type": "string"
}
]
},
"includeOtherFields": false
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
2000,
204
],
"id": "set-belegdaten-1776007836745",
"name": "📋 Belegdaten aufbereiten"
},
{
"id": "mark-read-01",
"name": "✔️ Als gelesen markieren",
"type": "n8n-nodes-base.gmail",
"typeVersion": 2.1,
"position": [
660,
460
],
"parameters": {
"operation": "markAsRead",
"messageId": "={{ $json.id }}"
},
"credentials": {
"gmailOAuth2": {
"id": "YOUR_GMAILOAUTH2_CREDENTIAL_ID",
"name": "Your gmailOAuth2 credential"
}
}
}
],
"connections": {
"Manueller Start": {
"main": [
[
{
"node": "📧 Email Eingang",
"type": "main",
"index": 0
}
]
]
},
"📧 Email Eingang": {
"main": [
[
{
"node": "📥 Attachment laden",
"type": "main",
"index": 0
}
]
]
},
"📥 Attachment laden": {
"main": [
[
{
"node": "✔️ Als gelesen markieren",
"type": "main",
"index": 0
},
{
"node": "📄 PDF Text extrahieren",
"type": "main",
"index": 0
}
]
]
},
"📄 PDF Text extrahieren": {
"main": [
[
{
"node": "🔗 Binary wiederherstellen",
"type": "main",
"index": 0
}
]
]
},
"🔗 Binary wiederherstellen": {
"main": [
[
{
"node": "📤 In Unverarbeitet ablegen",
"type": "main",
"index": 0
}
]
]
},
"📤 In Unverarbeitet ablegen": {
"main": [
[
{
"node": "🔧 AI Request vorbereiten",
"type": "main",
"index": 0
}
]
]
},
"🔧 AI Request vorbereiten": {
"main": [
[
{
"node": "🤖 AI Klassifikation",
"type": "main",
"index": 0
}
]
]
},
"🤖 AI Klassifikation": {
"main": [
[
{
"node": "🔍 Mandant zuordnen",
"type": "main",
"index": 0
}
]
]
},
"🔍 Mandant zuordnen": {
"main": [
[
{
"node": "✅ Mandant erkannt?",
"type": "main",
"index": 0
}
]
]
},
"✅ Mandant erkannt?": {
"main": [
[
{
"node": "📁 In Mandantenordner verschieben",
"type": "main",
"index": 0
}
],
[
{
"node": "🚨 In Unzugeordnet verschieben",
"type": "main",
"index": 0
}
]
]
},
"📁 In Mandantenordner verschieben": {
"main": [
[
{
"node": "📋 Belegdaten aufbereiten",
"type": "main",
"index": 0
}
]
]
},
"📋 Belegdaten aufbereiten": {
"main": [
[
{
"node": "📊 Belegjournal",
"type": "main",
"index": 0
}
]
]
}
},
"settings": {
"executionOrder": "v1",
"binaryMode": "separate"
},
"staticData": null
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment