Spot inactive purchase orders

Identifies open purchase orders with no recent activity to release fictitious budget commitments and follow up with late suppliers.

ProcurementController๐Ÿ“† MonthlyBeginnerRead-only

Ask it like this

Which purchase orders are open but never invoiced?

When to use it

Every month, to spot purchase orders to chase, cancel or close.

What it produces

Inactive PO report by category (> 90 days, expired, new unused) with locked budget commitment and recommended actions.

How it works

  1. 1Lists open purchase orders
  2. 2Spots those whose period has ended with no invoice
  3. 3Flags those whose expected invoice is late
  4. 4Sizes the remaining commitment per category
  5. 5Suggests an action for each: chase, cancel or close

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 detail78/100 ยท 2 tools
Budget & POsReconciliationget_purchase_ordersget_supplier_by_id

# Inactive purchase orders audit

## Purpose

Spot open purchase orders that are no longer alive: no invoice received, period ended, expected invoice late. These purchase orders inflate commitments and await a decision: chase the supplier, cancel or close.

This skill only reads. Cancelling or closing a purchase order cannot be undone and belongs to the dedicated skill ("Manage purchase orders" permission, in Beta).

## Step 1 โ€” List open purchase orders

```json
{ "tool": "get_purchase_orders", "params": { "status": ["open"], "pageSize": 100 } }
```

Fields to read on each purchase order:

| Field | What it is |
|-------|------------|
| `purchaseOrderNumber`, `description` | To identify it |
| `amount` | **Current** committed amount (see limit) |
| `billedAmount` | Invoiced to date |
| `startDate`, `endDate` | Validity period |
| `invoices` | Attached invoices (empty when there are none) |
| `billingStatus` | Billing progress |

There is no `budgetAmount`, `invoicedAmount` or `expectedDeliveryDate` field. Page with `page` while `hasNextPage` is `true`.

## Step 2 โ€” Sort

No need to look up the supplier's invoices: the link is on the purchase order.

| Category | Criterion |
|----------|-----------|
| ๐Ÿ”ด Expired, never invoiced | `endDate` passed and `invoices` empty |
| ๐ŸŸ  Invoice late | `billingStatus` is `lateInvoice` |
| ๐ŸŸก Expired, part-invoiced | `endDate` passed, `billedAmount` lower than `amount` |
| โšช Running, not yet invoiced | `endDate` ahead and `invoices` empty: normal, to follow |

A purchase order stays `open` after its end date: nothing closes it automatically.

## Step 3 โ€” Put figures on it

- Remaining commitment on a purchase order = `amount` โˆ’ `billedAmount`.
- Total per category. Amounts are in each purchase order's own currency: total per currency.

## Step 4 โ€” Resolve suppliers

```json
{ "tool": "get_supplier_by_id", "params": { "id": "<supplierId>" } }
```

The supplier record holds no email: chasing goes through your own contacts.

## Report

```
Open purchase orders โ€” <today's date>: N, for X EUR committed

๐Ÿ”ด Expired, never invoiced: N โ€” X EUR
๐ŸŸ  Invoice late: N โ€” X EUR
๐ŸŸก Expired, part-invoiced: N โ€” X EUR left
โšช Running, not yet invoiced: N โ€” X EUR

| No. | Supplier | Purpose | Committed | Invoiced | Period end | Suggested action |
```

Suggested actions: chase the supplier (invoice late), cancel (expired, never invoiced, no associated expense), close (invoiced and fully paid).

## Limits to state

- `amount` is not the originally approved amount: Spendesk can realign it to the invoiced amount. A "remaining" of zero does not prove the initial budget was respected.
- A purchase order can only be cancelled while open with no invoice and no associated expense, and closed only when all its invoices are paid.
- An invoice from the same supplier not attached to the purchase order does not show here: see the invoice and purchase order matching skill.

## Observed result (demo account, 5 October 2026)

13 open purchase orders for EUR 96,338.00 committed, none invoiced. Only one was expired and flagged as late on invoicing: period ended 31 December 2025, EUR 558.00. Another fell due that very day. The remaining eleven were running.

## Example prompts
- "Which purchase orders are open but never invoiced?"
- "Are there expired purchase orders I should close or cancel?"
- "How much commitment is left on our open purchase orders?"

How to install this skill

/
  1. 1
    Download the file s59-inactive-pos.md using the button above.
  2. 2
    Place the file in the .claude/ directory of your project (or ~/.claude/ for a global install).
    cp s59-inactive-pos.md .claude/s59-inactive-pos.md
  3. 3
    Use 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_purchase_orders, get_supplier_by_id.

Similar skills

โ˜… Top
95/100ยท๐Ÿ” Ad hocยทExpert

Audit what the MCP covers

Probes all available MCP tools, re-evaluates coverage of 50 persona use cases, detects new fields or tools, and regenerates the gap analysis report.

CFOControllerAP Manager
90/100ยท๐Ÿ“… WeeklyยทBeginner

Card requests via get_requests

Explains how to use get_requests for card requests and why expense reimbursements don't appear there. Avoids a frequent source of confusion between two distinct workflows.

ControllerFinance Analyst
90/100ยท๐Ÿ” Ad hocยทIntermediate

Active vs archived cost centers

Distinguishes active cost centers from archived ones with correct use of get_cost_centers. Avoids the counter-intuitive isArchived vs isActive naming convention pitfall.

ControllerFinance Analyst

Interested in AI Agent services or Custom Integrations?