Automatisierte Quittungsverarbeitung und Steuerklassifizierung mit PDF Vector und Google Drive
Dies ist ein Invoice Processing, AI Summarization, Multimodal AI-Bereich Automatisierungsworkflow mit 9 Nodes. Hauptsächlich werden Code, GoogleDrive, GoogleSheets, ManualTrigger, PdfVector und andere Nodes verwendet. Automatisierte Belegverarbeitung und Steuerklassifizierung mit PDF Vector und Google Drive
- •Google Drive API-Anmeldedaten
- •Google Sheets API-Anmeldedaten
Verwendete Nodes (9)
{
"meta": {
"instanceId": "placeholder"
},
"nodes": [
{
"id": "overview-note",
"name": "Belegübersicht",
"type": "n8n-nodes-base.stickyNote",
"position": [
50,
50
],
"parameters": {
"color": 5,
"width": 350,
"height": 180,
"content": "## 🧾 Receipt & Tax Tracker\n\nAutomated expense management:\n• **Monitors** receipt folder hourly\n• **Extracts** data from photos/PDFs\n• **Categorizes** for tax purposes\n• **Calculates** deductions\n• **Syncs** with QuickBooks"
},
"typeVersion": 1
},
{
"id": "input-note",
"name": "Eingabequellen",
"type": "n8n-nodes-base.stickyNote",
"position": [
450,
450
],
"parameters": {
"width": 250,
"height": 150,
"content": "## 📸 Receipt Input\n\nHandles all formats:\n• Phone photos\n• Scanned PDFs\n• Email forwards\n• Poor quality images\n\n💡 OCR enhancement"
},
"typeVersion": 1
},
{
"id": "tax-note",
"name": "Steuerkategorien",
"type": "n8n-nodes-base.stickyNote",
"position": [
850,
450
],
"parameters": {
"color": 4,
"width": 260,
"height": 160,
"content": "## 💰 Tax Logic\n\n**Auto-categorizes:**\n• Travel expenses\n• Office supplies\n• Meals (50% deduction)\n• Utilities\n\n⚠️ Consult tax advisor!"
},
"typeVersion": 1
},
{
"id": "manual-trigger",
"name": "Manueller Auslöser",
"type": "n8n-nodes-base.manualTrigger",
"notes": "Process receipt",
"position": [
250,
300
],
"parameters": {},
"typeVersion": 1
},
{
"id": "google-drive",
"name": "Google Drive - Beleg abrufen",
"type": "n8n-nodes-base.googleDrive",
"notes": "Retrieve receipt from Drive",
"position": [
450,
300
],
"parameters": {
"fileId": "={{ $json.fileId }}",
"operation": "download"
},
"typeVersion": 3
},
{
"id": "pdfvector-extract",
"name": "PDF Vector - Beleg extrahieren",
"type": "n8n-nodes-pdfvector.pdfVector",
"notes": "Extract receipt data",
"position": [
650,
300
],
"parameters": {
"prompt": "Extract all receipt information from this document or image including merchant name and address, transaction date and time, all items with descriptions and prices, subtotal, tax amount and rate, tip if applicable, total amount, payment method, and any loyalty or membership numbers. Use OCR if this is a scanned receipt or image.",
"schema": "{\"type\":\"object\",\"properties\":{\"merchant\":{\"type\":\"object\",\"properties\":{\"name\":{\"type\":\"string\"},\"address\":{\"type\":\"string\"},\"phone\":{\"type\":\"string\"},\"taxId\":{\"type\":\"string\"}}},\"transaction\":{\"type\":\"object\",\"properties\":{\"date\":{\"type\":\"string\"},\"time\":{\"type\":\"string\"},\"receiptNumber\":{\"type\":\"string\"},\"cashier\":{\"type\":\"string\"}}},\"items\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"name\":{\"type\":\"string\"},\"description\":{\"type\":\"string\"},\"quantity\":{\"type\":\"number\"},\"unitPrice\":{\"type\":\"number\"},\"totalPrice\":{\"type\":\"number\"},\"taxable\":{\"type\":\"boolean\"}}}},\"financial\":{\"type\":\"object\",\"properties\":{\"subtotal\":{\"type\":\"number\"},\"taxRate\":{\"type\":\"number\"},\"taxAmount\":{\"type\":\"number\"},\"tip\":{\"type\":\"number\"},\"total\":{\"type\":\"number\"},\"currency\":{\"type\":\"string\"}}},\"payment\":{\"type\":\"object\",\"properties\":{\"method\":{\"type\":\"string\"},\"lastFourDigits\":{\"type\":\"string\"},\"authCode\":{\"type\":\"string\"}}},\"loyalty\":{\"type\":\"object\",\"properties\":{\"memberNumber\":{\"type\":\"string\"},\"pointsEarned\":{\"type\":\"number\"},\"pointsBalance\":{\"type\":\"number\"}}}},\"required\":[\"merchant\",\"financial\"],\"additionalProperties\":false}",
"resource": "document",
"inputType": "file",
"operation": "extract",
"binaryPropertyName": "data"
},
"typeVersion": 1
},
{
"id": "pdfvector-categorize",
"name": "PDF Vector - Steuerkategorisierung",
"type": "n8n-nodes-pdfvector.pdfVector",
"notes": "Categorize for taxes",
"position": [
850,
300
],
"parameters": {
"prompt": "Based on this receipt document or image, determine: 1) The most appropriate tax category (meals, travel, supplies, equipment, etc.), 2) Whether this is likely tax deductible for business, 3) If this is a meal receipt, what percentage would typically be deductible, 4) Any special considerations for tax purposes. Process any image format using OCR if needed.",
"resource": "document",
"inputType": "file",
"operation": "ask",
"binaryPropertyName": "data"
},
"typeVersion": 1
},
{
"id": "process-expense",
"name": "Ausgabendaten verarbeiten",
"type": "n8n-nodes-base.code",
"notes": "Validate and categorize",
"position": [
1050,
300
],
"parameters": {
"jsCode": "// Process receipt data and tax categorization\nconst receiptData = $node['PDF Vector - Extract Receipt'].json.data;\nconst taxCategory = $node['PDF Vector - Tax Categorization'].json.answer;\n\n// Validate financial calculations\nlet validationErrors = [];\nif (receiptData.items && receiptData.items.length > 0) {\n const calculatedSubtotal = receiptData.items.reduce((sum, item) => sum + (item.totalPrice || 0), 0);\n if (Math.abs(calculatedSubtotal - receiptData.financial.subtotal) > 0.02) {\n validationErrors.push('Item totals do not match subtotal');\n }\n}\n\n// Calculate tax consistency\nconst expectedTax = receiptData.financial.subtotal * (receiptData.financial.taxRate / 100);\nif (Math.abs(expectedTax - receiptData.financial.taxAmount) > 0.02) {\n validationErrors.push('Tax calculation inconsistency');\n}\n\n// Determine expense category and deductibility\nlet expenseCategory = 'Other';\nlet deductiblePercentage = 100;\nlet taxNotes = '';\n\nif (taxCategory.toLowerCase().includes('meal')) {\n expenseCategory = 'Meals & Entertainment';\n deductiblePercentage = 50; // Typical meal deduction\n taxNotes = 'Business meal - 50% deductible';\n} else if (taxCategory.toLowerCase().includes('travel')) {\n expenseCategory = 'Travel';\n deductiblePercentage = 100;\n taxNotes = 'Business travel expense';\n} else if (taxCategory.toLowerCase().includes('supplies')) {\n expenseCategory = 'Office Supplies';\n deductiblePercentage = 100;\n taxNotes = 'Business supplies';\n}\n\n// Create processed expense record\nconst processedExpense = {\n // Receipt data\n merchant: receiptData.merchant.name,\n date: receiptData.transaction.date,\n amount: receiptData.financial.total,\n currency: receiptData.financial.currency || 'USD',\n \n // Tax information\n expenseCategory,\n deductiblePercentage,\n deductibleAmount: (receiptData.financial.total * deductiblePercentage / 100).toFixed(2),\n taxNotes,\n \n // Original data\n originalReceipt: receiptData,\n aiCategorization: taxCategory,\n \n // Validation\n isValid: validationErrors.length === 0,\n validationErrors,\n \n // Metadata\n processedAt: new Date().toISOString(),\n taxYear: new Date(receiptData.transaction.date).getFullYear()\n};\n\nreturn [{ json: processedExpense }];"
},
"typeVersion": 2
},
{
"id": "save-spreadsheet",
"name": "In Ausgabenliste speichern",
"type": "n8n-nodes-base.googleSheets",
"notes": "Track in spreadsheet",
"position": [
1250,
300
],
"parameters": {
"data": "={{ [[$json.date, $json.merchant, $json.expenseCategory, $json.amount, $json.deductibleAmount, $json.deductiblePercentage + '%', $json.taxNotes, $json.processedAt]] }}",
"range": "A:H",
"sheetId": "{{ $json.taxYear }}-expenses",
"operation": "append"
},
"typeVersion": 1
}
],
"connections": {
"manual-trigger": {
"main": [
[
{
"node": "google-drive",
"type": "main",
"index": 0
}
]
]
},
"process-expense": {
"main": [
[
{
"node": "save-spreadsheet",
"type": "main",
"index": 0
}
]
]
},
"google-drive": {
"main": [
[
{
"node": "pdfvector-extract",
"type": "main",
"index": 0
}
]
]
},
"pdfvector-extract": {
"main": [
[
{
"node": "pdfvector-categorize",
"type": "main",
"index": 0
}
]
]
},
"pdfvector-categorize": {
"main": [
[
{
"node": "process-expense",
"type": "main",
"index": 0
}
]
]
}
}
}Wie verwende ich diesen Workflow?
Kopieren Sie den obigen JSON-Code, erstellen Sie einen neuen Workflow in Ihrer n8n-Instanz und wählen Sie "Aus JSON importieren". Fügen Sie die Konfiguration ein und passen Sie die Anmeldedaten nach Bedarf an.
Für welche Szenarien ist dieser Workflow geeignet?
Fortgeschritten - Rechnungsverarbeitung, KI-Zusammenfassung, Multimodales KI
Ist es kostenpflichtig?
Dieser Workflow ist völlig kostenlos. Beachten Sie jedoch, dass Drittanbieterdienste (wie OpenAI API), die im Workflow verwendet werden, möglicherweise kostenpflichtig sind.
Verwandte Workflows
PDF Vector
@pdfvectorA fully featured PDF APIs for developers - Parse any PDF or Word document, extract structured data, and access millions of academic papers - all through simple APIs.
Diesen Workflow teilen