# Spend management

URL: /systems/spend · Id: `system:spend`

> Spend management controls money going out: budgets, bills, expenses and cards issued on Stripe, each paid against Limits and spend states.

Spend management controls money going out: [Bills](/business/nouns/bill), [Cards](/business/nouns/card) and receipts, each paid within a [Mandate](/business/nouns/mandate), its [Limit](/business/nouns/limit) and the [Startup](/business/nouns/startup)’s spend state. Cards are issued on Stripe, one per [Worker](/business/nouns/worker) and Mandate.

## Summary
| Part | This System |
| --- | --- |
| Group | Finance |
| Status | Beta: it works, and its Verbs may still change |
| Shelf | Front: offered from a Startup’s first days |

You can ask:

- “Pay this bill”
- “Issue a card with a monthly limit”
- “Approve the bills waiting on me”
- “What did we spend on software this month?”

## What you get
| Part | This System |
| --- | --- |
| Starts | On for every Startup at creation, with nothing to install. |
| Built from | [Payment rails](/systems/finance/payments), [Corporate cards](/systems/finance/cards), [Workflows](/code/platform/workflows), [Permissions](/code/platform/permissions) |

## Nouns it owns
| Noun | Definition |
| --- | --- |
| [Bill](/business/nouns/bill) | A Bill is an amount a Startup owes an outside Organization, coded to an account, approved within a Mandate, and paid by its due date. |
| [Card](/business/nouns/card) | A Card is a payment credential a Startup issues to one Worker under one Mandate, with controls compiled from that Mandate. |

## Verbs
| Verb | Object | Approval | Event |
| --- | --- | --- | --- |
| [Mandate.spend](/business/nouns/mandate/spend) | [Mandate](/business/nouns/mandate) | Asks first; waits 1 business hour | [`Mandate.spent`](/business/events/Mandate.spent) |
| [Bill.create](/business/nouns/bill/create) | [Bill](/business/nouns/bill) | None | `Bill.created` |
| [Bill.approve](/business/nouns/bill/approve) | [Bill](/business/nouns/bill) | Asks first; waits 1 business hour | [`Bill.approved`](/business/events/Bill.approved) |
| [Bill.pay](/business/nouns/bill/pay) | [Bill](/business/nouns/bill) | Asks first; waits 1 business hour | [`Bill.paid`](/business/events/Bill.paid) |
| [Card.issue](/business/nouns/card/issue) | [Card](/business/nouns/card) | None | [`Card.issued`](/business/events/Card.issued) |
| [Transaction.attach](/business/nouns/transaction/attach) | [Transaction](/business/nouns/transaction) | None | [`Transaction.attached`](/business/events/Transaction.attached) |

## Events
| Direction | Event | How |
| --- | --- | --- |
| Emits | [`Mandate.spent`](/business/events/Mandate.spent) | By [Mandate.spend](/business/nouns/mandate/spend) |
| Emits | `Bill.created` | By [Bill.create](/business/nouns/bill/create) |
| Emits | [`Bill.approved`](/business/events/Bill.approved) | By [Bill.approve](/business/nouns/bill/approve) |
| Emits | [`Bill.paid`](/business/events/Bill.paid) | By [Bill.pay](/business/nouns/bill/pay) |
| Emits | [`Card.issued`](/business/events/Card.issued) | By [Card.issue](/business/nouns/card/issue) |
| Emits | [`Transaction.attached`](/business/events/Transaction.attached) | By [Transaction.attach](/business/nouns/transaction/attach) |
| Consumes | [`Transaction.failed`](/business/nouns/transaction#transactionfailed) | Moves [Bill](/business/nouns/bill) to `approved` |
| Consumes | [`Mandate.paused`](/business/events/Mandate.paused) | Moves [Card](/business/nouns/card) to `frozen` |
| Consumes | [`Mandate.revoked`](/business/events/Mandate.revoked) | Moves [Card](/business/nouns/card) to `closed` |
| Consumes | [`Mandate.resumed`](/business/events/Mandate.resumed) | Moves [Card](/business/nouns/card) to `active` |
| Consumes | [`Transaction.settled`](/business/nouns/transaction#transactionsettled) | Acts on it |

## States
The lifecycle of a [Bill](/business/nouns/bill):

| State | Meaning | Moves to |
| --- | --- | --- |
| `received` (first) | It arrived and is coded to an account, waiting for approval. | `approved` by [Bill.approve](/business/nouns/bill/approve) |
| `approved` | Accepted within the approver’s Mandate and scheduled for its due date. | `paid` by [Bill.pay](/business/nouns/bill/pay) |
| `paid` | Its amount is sent to the Organization and reconciled to Entries. | `approved` on [`Transaction.failed`](/business/nouns/transaction#transactionfailed) when the rail refused the Transaction that paid this Bill |

Its other Nouns with a lifecycle: [Card](/business/nouns/card).

## Who operates it
| Part | This System |
| --- | --- |
| Accountable | [Finance Lead](/agents/finance/finance-lead) |
| Team | [Finance Team](/agents/finance) |
| Seat | A role agent holds it until a Human is seated. |
| Autonomy | `assist` |
| Also calls its Verbs | [Operations Lead](/agents/operations/operations-lead), [Treasurer](/agents/finance/treasurer), [Paid Media Manager](/agents/marketing/paid-media-manager) |

## Approvals and limits
| Verb | Rule | Detail |
| --- | --- | --- |
| [Mandate.spend](/business/nouns/mandate/spend) | A person says yes first | Waits 1 business hour |
| [Bill.approve](/business/nouns/bill/approve) | A person says yes first | Waits 1 business hour |
| [Bill.pay](/business/nouns/bill/pay) | A person says yes first | Waits 1 business hour |
| [Mandate.spend](/business/nouns/mandate/spend) | Limit for the [Treasurer](/agents/finance/treasurer) | $2,000 per month |
| [Mandate.spend](/business/nouns/mandate/spend) | Limit for the [Paid Media Manager](/agents/marketing/paid-media-manager) | $500 per week |

## Processes that use it
| Process | How it uses it |
| --- | --- |
| [Procure](/workflows/processes/procure) | A step calls [Card.issue](/business/nouns/card/issue) |
| [Expense approval](/workflows/processes/expense-approval) | A step calls [Transaction.attach](/business/nouns/transaction/attach) |
| [Payables](/workflows/processes/payables) | A step calls [Bill.approve](/business/nouns/bill/approve) |
| [Mail handling](/workflows/processes/mail-handling) | A step calls [Transaction.attach](/business/nouns/transaction/attach) |

## Rail underneath
Stripe’s products (Stripe’s names): **Issuing**, **Payments**.

| Noun | Stripe object | Source of truth |
| --- | --- | --- |
| [Card](/business/nouns/card) | **Issuing Card** (`issuing.card`) | The source of truth is db.sb, and Stripe holds a copy written from it. |

## Views and dashboards
| View | Shows | Metrics |
| --- | --- | --- |
| Spend | Bills waiting for a yes, Card spend against each Limit, and costs by category. | [Fully loaded Cost](/agents/finance#fully-loaded-cost) |
| The [Finance Lead](/agents/finance/finance-lead)’s view | The Metrics its accountable Role answers for. | [Cost coverage](/agents/finance#cost-coverage), [Contribution margin](/agents/finance#contribution-margin), [Acquisition payback](/agents/finance#cac-payback), [Lifetime value](/agents/finance#ltv), [Contribution per outcome](/agents/finance#contribution-per-outcome) |

## Access
What each Access level may call here.

| Access level | May call |
| --- | --- |
| `owner` | Every Verb (11) |
| `admin` | All but 3 of 11: `Bill.approve`, `Bill.pay`, `Mandate.spend` |
| `member` | All but 3 of 11: `Bill.approve`, `Bill.pay`, `Mandate.spend` |
| `viewer` | Read only (4 of 11) |

## Import and export
| Connector | Mode |
| --- | --- |
| Stripe | Import: edits made in the tool arrive as Changes. |

## Fees and pricing
A Card charge is spend, not a fee, and posts a Cost to its Task; paying a Bill passes Stripe’s outbound payment cost through at cost.

## Availability and limits
| Part | This System |
| --- | --- |
| Status | Beta: it works, and its Verbs may still change |
| Limit | Each Card spends within the Limit it was issued with. |

## Compliance notes
A Bill over the approver’s Limit waits for a yes; keeping the receipts stays the founder’s.

Controls it carries:

- [One-way Action windows](/systems/trust-and-governance/controls/one-way-windows)
- [Task-bound access](/systems/trust-and-governance/controls/task-bound-access)
- [Permission decay](/systems/trust-and-governance/controls/permission-decay)
- [Permission widening](/systems/trust-and-governance/controls/permission-widening)
- [Input validation](/systems/trust-and-governance/controls/input-validation)
- [Action completion](/systems/trust-and-governance/controls/action-completion)
- [Purpose limitation](/systems/trust-and-governance/controls/purpose-limitation)
- [Segregation of duties](/systems/trust-and-governance/controls/segregation-of-duties)
- [Bank detail changes](/systems/trust-and-governance/controls/bank-detail-changes)

## Related Systems
- [Ledger](/systems/ledger)
- [Treasury](/systems/treasury)

## Example
A [Directory](/products/templates/directory) of coworking spaces gives its [Marketing Lead](/agents/marketing/marketing-lead) [Agent](/business/nouns/agent) a Card that spends $500 a month on ads. A $1,200 annual sponsorship exceeds the Limit and opens an [Approval](/business/nouns/approval). When the latest [Forecast](/business/nouns/forecast) turns default dead, the spend state moves to `tight` and the Card’s Limit halves to $250.