Inactive purchase orders audit

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

โ†“ Download skill (.md)
78/100ยท๐Ÿ“† MonthlyยทBeginnerProcurementController
Budget & POsReconciliationget_purchase_ordersget_payablesget_suppliers

๐ŸŽฏ Skill purpose

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

๐Ÿ“Š What it produces

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

โšก Benefit

Before

Dozens of inactive open POs lock up budget and distort financial projections without anyone noticing.

After

Regular PO portfolio cleanup, reliable budget commitments, and proactive follow-up on late deliveries.



# Audit of inactive purchase orders

## Purpose
Identify open purchase orders (POs) that have had no recent invoicing activity. Inactive POs tie up budget commitments, distort projections, and signal undelivered goods or suppliers to follow up with.

## Instructions

### Step 1 โ€” Retrieve all open POs
```
Call get_purchase_orders with status=open (or pending, active).
For each PO: note id, supplierId, budgetAmount, invoicedAmount,
currency, startDate, expectedDeliveryDate, description.

Calculate for each PO:
  remainingAmount = budgetAmount - invoicedAmount
  commitmentRate = invoicedAmount / budgetAmount ร— 100
  age = today - startDate (in days)
```

### Step 2 โ€” Identify inactive POs
```
A PO is "inactive" if no invoice has been received in the last X days.

For each PO:
  Call get_payables with:
    - supplierId of the PO
    - firstCreatedAt > startDate of the PO
  If no recent payable (last 60 days) โ†’ PO potentially inactive

Inactivity categories:
  ๐Ÿ”ด Inactive > 90 days: no invoice for 3 months
  ๐ŸŸก Inactive 60-90 days: to monitor
  โš ๏ธ Expired PO: expectedDeliveryDate passed but not closed
  ๐Ÿ“ฆ New unused PO: startDate < 30 days, commitmentRate = 0%
```

### Step 3 โ€” Resolve the suppliers involved
```
For inactive and expired POs:
  Call get_supplier_by_id for each unique supplierId.
  Retrieve: name, email (for potential follow-up).
```

### Step 4 โ€” Calculate the budget impact
```
For each category:
  Total locked commitments = sum of remainingAmounts of inactive POs
  This budget commitment is fictitious and can be released if the POs are closed.
```

### Step 5 โ€” Inactive POs report
```
Present:
1. Overview:
   Total open POs: X | Active: X | Inactive: X
   Locked budget commitment: Xโ‚ฌ

2. ๐Ÿ”ด Inactive POs > 90d:
   Supplier | PO amount | Remaining | Last payment | Age | Action

3. โš ๏ธ Expired POs (date passed, not closed):
   Supplier | PO amount | Expiration date | Remaining

4. ๐ŸŸก POs 60-90d with no activity:
   Supplier | PO amount | Remaining

5. Recommendations:
   - Close POs inactive > 90d
   - Follow up with suppliers on expired POs
   - Check for undelivered goods not yet invoiced
```

## Points of attention
- PO โ†’ Invoice matching is done by supplierId, not by direct PO reference (MCP limitation)
- A supplier may have several active POs โ€” inactivity may be normal if another order is in progress
- Never close a PO without checking with the requester that delivery has indeed been abandoned

## Example prompts
- "Which purchase orders are open with no activity for more than 3 months?"
- "Audit my open POs and identify which ones to close"
- "How much budget is locked up in inactive POs?"

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_payables, get_suppliers.

Similar skills

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

MCP coverage audit & gap analysis

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