Procesamiento automático de recibos y clasificación fiscal con PDF Vector y Google Drive

Intermedio

Este es unInvoice Processing, AI Summarization, Multimodal AIflujo de automatización del dominio deautomatización que contiene 9 nodos.Utiliza principalmente nodos como Code, GoogleDrive, GoogleSheets, ManualTrigger, PdfVector. Procesamiento automatizado de recibos y clasificación fiscal con PDF Vector y Google Drive

Requisitos previos
  • Credenciales de API de Google Drive
  • Credenciales de API de Google Sheets
Vista previa del flujo de trabajo
Visualización de las conexiones entre nodos, con soporte para zoom y panorámica
Exportar flujo de trabajo
Copie la siguiente configuración JSON en n8n para importar y usar este flujo de trabajo
{
  "meta": {
    "instanceId": "placeholder"
  },
  "nodes": [
    {
      "id": "overview-note",
      "name": "Resumen de Recibos",
      "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": "Fuentes de Entrada",
      "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": "Categorías Fiscales",
      "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": "Activador Manual",
      "type": "n8n-nodes-base.manualTrigger",
      "notes": "Process receipt",
      "position": [
        250,
        300
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "google-drive",
      "name": "Google Drive - Obtener Recibo",
      "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 - Extraer Recibo",
      "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 - Categorización Fiscal",
      "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": "Procesar Datos de Gastos",
      "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": "Guardar en Hoja de Gastos",
      "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
          }
        ]
      ]
    }
  }
}
Preguntas frecuentes

¿Cómo usar este flujo de trabajo?

Copie el código de configuración JSON de arriba, cree un nuevo flujo de trabajo en su instancia de n8n y seleccione "Importar desde JSON", pegue la configuración y luego modifique la configuración de credenciales según sea necesario.

¿En qué escenarios es adecuado este flujo de trabajo?

Intermedio - Procesamiento de facturas, Resumen de IA, IA Multimodal

¿Es de pago?

Este flujo de trabajo es completamente gratuito, puede importarlo y usarlo directamente. Sin embargo, tenga en cuenta que los servicios de terceros utilizados en el flujo de trabajo (como la API de OpenAI) pueden requerir un pago por su cuenta.

Información del flujo de trabajo
Nivel de dificultad
Intermedio
Número de nodos9
Categoría3
Tipos de nodos6
Descripción de la dificultad

Adecuado para usuarios con experiencia intermedia, flujos de trabajo de complejidad media con 6-15 nodos

Autor
PDF Vector

PDF Vector

@pdfvector

A 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.

Enlaces externos
Ver en n8n.io

Compartir este flujo de trabajo

Categorías

Categorías: 34