Skip to main content

Invoice Processing & Approval

Automatically extract invoice data, verify vendors, and route for approval based on amount thresholds.

How It Works

Trigger: Integration trigger (new email with attachment) or Form submission Workflow:
  1. Agent: Extract invoice data from attachment
    • Vendor name and details
    • Invoice number and date
    • Line items and amounts
    • Payment terms
  2. HTTP Request: Verify vendor exists in approved vendor list
  3. Code: Calculate totals and validate
  4. Condition: Check if approval needed based on amount
    • Under $5,000 → Auto-approve
    • Over $5,000 → Require approval (Human in the Loop)
  5. Action: Create payment record in accounting system
  6. Action: Update invoice status in finance system

Configuration Example

Agent Node (Extract Invoice Data):
Model: GPT-4
Instructions: Extract all invoice information from this document:

Document: {{trigger.attachment}}

Return structured data with:
- Vendor name, address, contact
- Invoice number and date
- Line items (description, quantity, unit price)
- Subtotal, tax, total amount
- Payment terms and due date

Structured Output:
{
  "vendor_name": "string",
  "invoice_number": "string",
  "invoice_date": "string",
  "line_items": [{"description": "string", "amount": "number"}],
  "subtotal": "number",
  "tax": "number",
  "total": "number",
  "due_date": "string",
  "payment_terms": "string"
}
HTTP Request Node (Verify Vendor):
Method: GET
URL: https://api.yourcompany.com/vendors/search
Query Parameters:
  - name: {{agent.vendor_name}}
Headers:
  - Authorization: Bearer YOUR_TOKEN
Code Node (Validate):
// Check if vendor exists
const vendorExists = http_request.vendors && http_request.vendors.length > 0;

if (!vendorExists) {
  throw new Error(`Vendor ${agent.vendor_name} not found in approved list`);
}

// Validate amounts match
const calculatedTotal = agent.subtotal + agent.tax;
if (Math.abs(calculatedTotal - agent.total) > 0.01) {
  throw new Error("Invoice totals don't match");
}

return {
  vendor_verified: true,
  vendor_id: http_request.vendors[0].id,
  total_amount: agent.total,
  needs_approval: agent.total >= 5000
};
Condition Node:
If Needs Approval: {{ code.needs_approval === true }}
Else Auto-Approve: {{ code.needs_approval === false }}
Action Node (Requires Approval if over $5K):
Integration: Your Accounting System
Action: Create Payment

Settings:
✅ Require Approval (enabled for high-value path)
Approvers: Finance Manager
Message: "Approve payment of ${{agent.total}} to {{agent.vendor_name}}"

Fields:
- Vendor ID: {{code.vendor_id}}
- Amount: {{agent.total}}
- Invoice Number: {{agent.invoice_number}}
- Due Date: {{agent.due_date}}

Benefits

  • 90% reduction in manual data entry
  • All invoices processed within 24 hours
  • Automatic vendor verification
  • Approval workflow for high-value payments
  • Complete audit trail

Expense Report Validation

Automatically review and validate expense reports against company policies before approval.

How It Works

Trigger: Integration trigger (new expense report submitted) Workflow:
  1. Loop: For each expense item in report
    • Agent: Validate receipt and categorize expense
    • Code: Check against policy limits
    • Condition: Flag policy violations
  2. Code: Aggregate results and calculate totals
  3. Agent: Review overall report for anomalies
  4. Condition: Auto-approve or send for manual review
    • No violations + under limit → Auto-approve
    • Has violations → Require manual review
  5. Action: Update expense system with decision
  6. Send Notification: Notify employee of status

Configuration Example

Loop Node:
Input Array: {{trigger.expense_items}}
Loop Variable: expense
Max Iterations: 50
Agent Node (Inside Loop - Validate Each Item):
Model: GPT-3.5 Turbo
Instructions: Validate this expense item:

**Expense:**
- Description: {{expense.description}}
- Amount: ${{expense.amount}}
- Category: {{expense.category}}
- Date: {{expense.date}}
- Receipt: {{expense.receipt_url}}

Check for:
1. Does receipt match the description?
2. Is the amount reasonable for this category?
3. Is there any suspicious activity?
4. What is the appropriate expense category?

Structured Output:
{
  "receipt_valid": "boolean",
  "amount_reasonable": "boolean",
  "suggested_category": "string",
  "policy_compliant": "boolean",
  "notes": "string"
}
Code Node (Inside Loop - Check Policy Limits):
// Policy limits by category
const policyLimits = {
  'meals': 75,
  'transportation': 200,
  'accommodation': 300,
  'office_supplies': 150,
  'other': 100
};

const category = agent.suggested_category || expense.category;
const limit = policyLimits[category] || 100;
const overLimit = expense.amount > limit;

return {
  category: category,
  limit: limit,
  amount: expense.amount,
  over_limit: overLimit,
  violation: overLimit || !agent.policy_compliant,
  violation_reason: overLimit 
    ? `Amount $${expense.amount} exceeds limit $${limit}` 
    : agent.notes
};
Code Node (After Loop - Aggregate Results):
// Aggregate all expense validations
const expenses = loop.iterations || [];
const violations = expenses.filter(e => e.violation);
const totalAmount = expenses.reduce((sum, e) => sum + e.amount, 0);

return {
  total_expenses: expenses.length,
  total_amount: totalAmount.toFixed(2),
  violations_count: violations.length,
  has_violations: violations.length > 0,
  violation_details: violations,
  auto_approvable: violations.length === 0 && totalAmount < 1000
};
Agent Node (Final Review):
Model: GPT-4
Instructions: Review this expense report for any anomalies:

**Report Summary:**
- Total Items: {{code.total_expenses}}
- Total Amount: ${{code.total_amount}}
- Policy Violations: {{code.violations_count}}

**Violation Details:**
{{code.violation_details}}

Look for:
- Unusual patterns (multiple similar expenses)
- Suspicious timing or amounts
- Missing justifications

Structured Output:
{
  "anomalies_found": "boolean",
  "review_notes": "string",
  "recommendation": "approve|review|reject"
}
Condition Node:
If Auto-Approve: {{ code.auto_approvable === true && agent.anomalies_found === false }}
Else Needs Review: {{ true }}
Send Notification (Employee):
**Expense Report Status**

Your expense report has been {{code.has_violations ? 'flagged for review' : 'approved'}}.

**Summary:**
- Total: ${{code.total_amount}}
- Items: {{code.total_expenses}}
- Status: {{code.has_violations ? 'Under Review' : 'Approved'}}

{{#if code.has_violations}}
**Issues Found:**
{{code.violation_details}}

A manager will review your report within 24 hours.
{{else}}
Your reimbursement will be processed within 3-5 business days.
{{/if}}

Benefits

  • 80% of expense reports auto-approved
  • Policy compliance automatically enforced
  • Faster reimbursements for employees
  • Reduced finance team workload by 70%
  • Complete audit trail for all decisions

Next Steps