Convoy AI

Process Station · Finance

Expense reports

CommunityTemplate

Check a receipt, apply the limit, ask for approval above the threshold.

The control station, in brief

This station links several tools into one journey. The agent follows the steps in order, and every step goes through the rules below.

Linked toolsAccountingMail

It can

  • Check a receipt
  • Submit an expense up to 150 EUR

It asks a human for

  • Submit an expense above 150 EUR

It never has access to

  • Submit without a receipt

Scenario Replays

An agent works through the station. Simulated scenarios, no real data, no key required.

42 EUR expense

What you will see: Small amount, valid receipt: the agent goes all the way alone.

Agent connected to the station through MCP
  1. HumanFile my 42 EUR client lunch, here is the receipt.
  2. AgentI'll check the receipt, then submit the expense.
  3. MCP callcheckReceipt(file: "ticket.jpg")
  4. StationReceipt is readable: 42 EUR, restaurant, today's date.OKRule applied: receipt-required
  5. MCP callsubmitExpense(amount: 4200)
  6. StationExpense submitted, under the 150 EUR threshold.OKRule applied: approval-threshold
These rules are not yours?

Copy the station, change a limit or an approval step in its configuration file, and get your own station.

Copy and adapt

The configuration in detail

expense-reports.yamlRead the docs →

Everything the station does fits in this file. The replay above applies it, and a copy starts from it. The values are examples to adapt, not a recommendation.

station:
  id: expense-reports
  kind: process
  policies:
    - {policy: receipt-required, at: submit}
    - {policy: approval-threshold, at: submit}

global:
  language: en
  timezone: Europe/Paris

apis:
  - id: accounting
    operations:
      checkReceipt:        {access: read}
      applyLimit:          {access: write, risk: low}
      submitExpense:       {access: write, risk: medium}

profiles:
  finance-assistant:
    allow: [checkReceipt, applyLimit, submitExpense]

policies:
  receipt-required:
    type: rule
    when: "action == submitExpense and not receipt_ok"
    effect: deny
    reason: "An expense without a valid receipt is not submitted."
  approval-threshold:
    type: rule
    when: "action == submitExpense and amount > 15000"
    effect: needs-human
    reason: "Above 150 EUR, the manager approves."

skills:
  - {id: check-receipt, uses: checkReceipt}
  - {id: apply-limit, uses: applyLimit}
  - {id: submit-expense, uses: submitExpense}

playbooks:
  - id: file-an-expense
    tasks: [check-receipt, apply-limit, submit-expense]

Shared copies

Copies that their authors choose to share will appear here. Each one keeps a link to this original station.