Chase invoices waiting for approval
Lists supplier invoices waiting for approval, with the expected approver and how long they have waited.
AP ManagerController๐
WeeklyIntermediateRead-only
Ask it like this
Which supplier invoices are waiting for approval, and with whom?
When to use it
Every week, to know which invoices are stuck in approval, with whom and since when.
What it produces
Total per currency, then a table of invoice / supplier / amount / due date / expected approver, overdue ones first.
How it works
- 1Counts pending invoices, with a total per currency
- 2Lists those invoices from oldest to most recent
- 3Finds the expected approver on each invoice
- 4Flags the ones already past their due date
- 5Prepares a chaser list, ready to send
What protects you
- This skill only reads: it changes nothing in Spendesk
- It acts with your permissions and your role, never beyond
- The assistant cannot approve or pay
โธTechnical detail85/100 ยท 4 tools
SuppliersComplianceget_invoices_summaryget_invoicesget_invoice_by_idget_users
# Supplier invoices waiting for approval
## What this skill covers โ and what it doesn't
The `get_invoices*` tools read **supplier invoices** (before and after approval). They are the right tools for "which invoices are waiting for approval" โ `get_requests` only covers card requests, and `get_payables` only holds an invoice once it is approved.
The MCP **cannot approve or reject** an invoice: no tool does that. This skill produces the list and the chaser draft; approval stays in Spendesk.
## Step 1 โ Volume and amounts (no paging)
```json
{ "tool": "get_invoices_summary", "params": { "approvalStatus": ["pending"] } }
```
Returns `count` and `totalsByCurrency` (one block per currency).
โ ๏ธ Three traps verified live:
- `amountDue` is **always 0** in the summary (not computed yet) โ never present it as an outstanding balance.
- `netAmount` is a lower bound: invoices with no captured net amount count as 0. Do not derive tax from it.
- Amounts are never added across currencies: present one total per currency.
## Step 2 โ List, oldest first
```json
{ "tool": "get_invoices", "params": { "approvalStatus": ["pending"], "sortBy": "createdAt", "sort": "asc", "pageSize": 100 } }
```
Useful fields: `invoiceNumber`, `supplier.name`, `grossAmount.formatted`, `dueDate`, `createdAt`, `purchaseOrders`.
- If `hasNextPage` is `true`, pass `meta.pagination.cursor` back as `cursor`.
- With no `type` filter, only invoices are listed; credit notes need a separate call with `type: "creditNote"`.
- Draft and incomplete invoices are never listed, not even under `pending`.
- `grossAmount` can be `null` on a pending invoice with no captured amount: `null` is not zero.
## Step 3 โ Who has to approve
The list does not carry the approval chain. For each invoice to chase:
```json
{ "tool": "get_invoice_by_id", "params": { "id": "<invoice id>" } }
```
Read `approval.steps`: the step whose `state` is `current` holds the expected `approvers`. These are raw `userId` values โ resolve them in one call:
```json
{ "tool": "get_users", "params": { "ids": ["<userId1>", "<userId2>"] } }
```
Never show a bare ID. If an ID does not resolve (a former member of the entity), say so. The invoice's `buyer` field also gives the requester, with their name.
## Recommended output format
```
Invoices waiting for approval โ <today's date>
Total: N invoices โ X EUR ยท Y USD (per currency, never added together)
| Invoice | Supplier | Amount | Due date | Received on | Expected approver(s) |
```
Flag first the invoices whose due date has already passed: they are late before even being approved.
## Observed result (demo account)
2 invoices pending: 1 in EUR (2,616.00) and 1 in USD (19,513.20). On the USD invoice, the current step expected two approvers, resolved with `get_users`. Both invoices were past their due date and had no linked purchase order.
## Example user prompts
- "Which supplier invoices are waiting for approval, and with whom?"
- "Draft a chaser for the approvers of invoices pending for more than 7 days"
- "How many invoices are stuck in approval, by currency?"
How to install this skill
/
- 1Download the file
s70-factures-attente-approbation.mdusing the button above. - 2Place the file in the
.claude/directory of your project (or~/.claude/for a global install).cp s70-factures-attente-approbation.md .claude/s70-factures-attente-approbation.md - 3Use in Claude Code โ the skill is automatically discovered. Describe your need in natural language and Claude will apply the skill instructions.
๐ก Make sure the Spendesk MCP is configured in your
.claude/settings.json with the tools get_invoices_summary, get_invoices, get_invoice_by_id, get_users.Similar skills
โ
Top