purchase-order-summarization
About purchase-order-summarization
A structured skill for summarizing purchase orders in ServiceNow Sourcing and Procurement Operations, for procurement staff reviewing order status, budgets, and delivery risk. It brings together PO headers, line items, receiving records, and vendor details.
Key features
- 01Retrieve PO headers and line items
- 02Track goods receipt progress
- 03Compare PO spend with budgets
- 04Identify late-delivery risks
- 05Link orders to requisitions
Use cases
- 01Review a purchase order’s full status
- 02Track deliveries against commitments
- 03Assess budget consumption
- 04Find orders with potential delivery delays
MCP support
The skill describes using SN-Get-Record and SN-Query-Table MCP tools to retrieve purchase orders, line items, receipts, and vendor records.
Install
Copy the command and run it in a terminal.
npx skills add https:/ / github.com/ happy-technologies-llc/ happy-platform-skills --skill purchase-order-summarizationAfter installing, type/purchase-order-summarizationin Claude Code to confirm it loaded.
Details
From the project READMEPurchase Order Summarization
Overview
This skill provides a structured approach to summarizing purchase orders in ServiceNow Sourcing and Procurement Operations. It helps you:
- Retrieve complete PO details including all line items from
proc_poandproc_po_item - Track delivery status and receipt progress via
proc_rec_slip_item - Assess budget impact by comparing PO spend against planned budgets
- Identify orders at risk of late delivery based on expected delivery dates and receipt gaps
- Link POs back to originating requisitions and requested items
When to use: When procurement staff need a consolidated view of PO status, when tracking deliveries against commitments, or when assessing budget consumption and delivery risk.
Prerequisites
- Roles:
sn_procurement.manager,sn_procurement.analyst, orprocurement_user - Plugins:
com.sn_procurement(Sourcing and Procurement Operations) activated - Access: Read access to
proc_po,proc_po_item,proc_rec_slip_item,core_company,sc_req_item - Knowledge: Understanding of your organization's PO lifecycle states and delivery SLAs
Procedure
Step 1: Retrieve the Purchase Order Header
Fetch core PO details including vendor, amounts, and dates.
Using MCP (Claude Code/Desktop):
Tool: SN-Get-Record
Parameters:
table_name: proc_po
sys_id: [po_sys_id]
fields: sys_id,number,vendor,total_cost,state,ordered_date,expected_delivery,currency,ship_to,bill_to,requested_by,purchase_order_type,payment_terms,contract,description,short_description
If searching by PO number:
Tool: SN-Query-Table
Parameters:
table_name: proc_po
query: number=PO0012345
fields: sys_id,number,vendor,total_cost,state,ordered_date,expected_delivery,currency,ship_to,bill_to,requested_by,purchase_order_type,payment_terms,contract
limit: 1
Using REST API:
GET /api/now/table/proc_po?sysparm_query=number=PO0012345&sysparm_fields=sys_id,number,vendor,total_cost,state,ordered_date,expected_delivery,currency,ship_to,bill_to,requested_by,purchase_order_type,payment_terms,contract&sysparm_limit=1&sysparm_display_value=true
Step 2: Retrieve Line Items
Fetch all line items on the purchase order.
Using MCP:
Tool: SN-Query-Table
Parameters:
table_name: proc_po_item
query: purchase_order=[po_sys_id]^ORDERBYline_number
fields: sys_id,line_number,item_description,model,part_number,quantity,unit_price,total_cost,received_quantity,state,expected_delivery,cat_item,requested_item
limit: 100
Using REST API:
GET /api/now/table/proc_po_item?sysparm_query=purchase_order=[po_sys_id]^ORDERBYline_number&sysparm_fields=sys_id,line_number,item_description,model,part_number,quantity,unit_price,total_cost,received_quantity,state,expected_delivery,cat_item,requested_item&sysparm_limit=100&sysparm_display_value=true
Step 3: Check Goods Receipt Status
Query receiving slip items to determine what has been delivered.
Using MCP:
Tool: SN-Query-Table
Parameters:
table_name: proc_rec_slip_item
query: purchase_order=[po_sys_id]^ORDERBYreceived_date
fields: sys_id,po_item,quantity_received,received_date,receiving_slip,condition,notes,accepted_quantity,rejected_quantity
limit: 100
Using REST API:
GET /api/now/table/proc_rec_slip_item?sysparm_query=purchase_order=[po_sys_id]^ORDERBYreceived_date&sysparm_fields=sys_id,po_item,quantity_received,received_date,receiving_slip,condition,notes,accepted_quantity,rejected_quantity&sysparm_limit=100&sysparm_display_value=true
Step 4: Retrieve Vendor Details
Get supplier information for context.
Using MCP:
Tool: SN-Query-Table
Parameters:
table_name: core_company
query: sys_id=[vendor_sys_id]
fields: sys_id,name,stock_symbol,vendor_type,city,state,country,phone,contact,vendor_rating
limit: 1
Using REST API:
GET /api/now/table/core_company/[vendor_sys_id]?sysparm_fields=sys_id,name,vendor_type,city,state,country,phone,contact,vendor_rating&sysparm_display_value=true
Step 5: Identify Late Delivery Risks
Query POs where expected delivery has passed but items remain unreceived.
Using MCP:
Tool: SN-Query-Table
Parameters:
table_name: proc_po
query: expected_delivery<javascript:gs.nowDateTime()^state=ordered^ORstate=partially_received
fields: sys_id,number,vendor,total_cost,expected_delivery,ordered_date,state
limit: 50
order_by: expected_delivery
For line-level risk assessment:
Tool: SN-Query-Table
Parameters:
table_name: proc_po_item
query: expected_delivery<javascript:gs.nowDateTime()^received_quantity<quantity^stateNOT INcancelled,received
fields: sys_id,purchase_order,item_description,quantity,received_quantity,expected_delivery,state
limit: 50
order_by: expected_delivery
Using REST API:
# POs past expected delivery
GET /api/now/table/proc_po?sysparm_query=expected_delivery<javascript:gs.nowDateTime()^state=ordered^ORstate=partially_received&sysparm_fields=sys_id,number,vendor,total_cost,expected_delivery,ordered_date,state&sysparm_limit=50&sysparm_display_value=true
# Line items past expected delivery with outstanding quantities
GET /api/now/table/proc_po_item?sysparm_query=expected_delivery<javascript:gs.nowDateTime()^received_quantityLESSTHANquantity^stateNOT INcancelled,received&sysparm_fields=sys_id,purchase_order,item_description,quantity,received_quantity,expected_delivery,state&sysparm_limit=50&sysparm_display_value=true
Step 6: Link to Originating Requests
Trace PO line items back to requested items and requisitions.
Using MCP:
Tool: SN-Query-Table
Parameters:
table_name: sc_req_item
query: sys_id=[requested_item_sys_id]
fields: sys_id,number,short_description,request,requested_for,state,stage,price,quantity
limit: 1
Using REST API:
GET /api/now/table/sc_req_item/[requested_item_sys_id]?sysparm_fields=sys_id,number,short_description,request,requested_for,state,stage,price,quantity&sysparm_display_value=true
Step 7: Build the PO Summary
Assemble the collected data:
=== PURCHASE ORDER SUMMARY ===
PO Number: PO0012345
State: [state] | Type: [purchase_order_type]
Vendor: [vendor_name] ([city], [country])
Ordered: [ordered_date] | Expected Delivery: [expected_delivery]
Total Cost: [currency] [total_cost]
LINE ITEMS: [count] items
| # | Description | Qty | Unit Price | Total | Received | Status |
|---|------------|-----|-----------|-------|----------|--------|
| 1 | [desc] | 100 | $10.00 | $1,000| 100 | Received |
| 2 | [desc] | 50 | $25.00 | $1,250| 30 | Partial |
| 3 | [desc] | 25 | $50.00 | $1,250| 0 | Ordered |
RECEIPT STATUS:
Total Items: [total_qty] | Received: [received_qty] ([pct]%)
Fully Received Lines: [count] of [total_lines]
Last Receipt Date: [date]
DELIVERY RISK:
- Line 2: 20 units outstanding, [days] days past expected delivery
- Line 3: 25 units not yet shipped, delivery due in [days] days
BUDGET IMPACT:
Requisition: REQ0009876 | Requested By: [name]
Original Estimate: $[est] | PO Total: $[actual] | Variance: $[diff] ([pct]%)
RELATED INVOICES:
- INV-2024-0456: $[amount] - [state]
Tool Usage
MCP Tools Reference
| Tool | When to Use |
|---|---|
SN-Query-Table | Query POs, line items, receipts, vendors, and requisitions |
SN-Natural-Language-Search | Natural language search (e.g., "find overdue purchase orders for Dell") |
SN-Get-Record | Retrieve a single PO record with all fields |
REST API Reference
| Endpoint | Method | Purpose |
|---|---|---|
/api/now/table/proc_po | GET | Query purchase orders |
/api/now/table/proc_po_item | GET | Retrieve PO line items |
/api/now/table/proc_rec_slip_item | GET | Check goods receipt status |
/api/now/table/core_company | GET | Vendor details |
/api/now/table/sc_req_item | GET | Originating requested items |
/api/now/table/sn_spo_requisition | GET | Requisition details |
/api/now/table/sn_proc_invoice | GET | Related invoices |
Best Practices
- Track Partial Receipts: Always compare
received_quantityagainstquantityat the line item level, not just PO totals - Flag Overdue Items Early: Set up risk thresholds (e.g., 3 days before expected delivery with no receipt)
- Include Vendor Context: Vendor rating and history provide important context for risk assessment
- Compare to Budget: Always link PO spend back to the originating requisition to track budget variance
- Use Display Values: Include
sysparm_display_value=trueto get readable vendor names and states - Check for Amendments: Look for PO revision history or related POs that may indicate change orders
Troubleshooting
"PO line items not found"
Cause: The PO may have been created without line items or items are on a related table
Solution: Verify the purchase_order reference field on proc_po_item matches the PO sys_id; check if items use a custom line item table
"Received quantity exceeds ordered quantity"
Cause: Over-shipment by vendor or duplicate receiving slip entries
Solution: Query proc_rec_slip_item by po_item to check for duplicates; verify with warehouse receiving team
"Expected delivery date is empty"
Cause: The field was not populated when the PO was created
Solution: Check individual line item expected_delivery fields which may be set independently; contact the vendor for updated delivery estimates
"Cannot link PO to requisition"
Cause: The PO may have been created directly without a requisition
Solution: Check the requested_item field on PO line items; alternatively search sn_spo_requisition by vendor and date range
Examples
Example 1: Single PO Summary
Scenario: Summarize PO0023456 for a status meeting.
Tool: SN-Query-Table
Parameters:
table_name: proc_po
query: number=PO0023456
fields: sys_id,number,vendor,total_cost,state,ordered_date,expected_delivery,currency
limit: 1
Tool: SN-Query-Table
Parameters:
table_name: proc_po_item
query: purchase_order.number=PO0023456
fields: line_number,item_description,quantity,unit_price,total_cost,received_quantity,state
limit: 50
Output:
PO0023456 - SUMMARY
Vendor: TechSupply Inc | State: Partially Received
Ordered: Feb 28, 2026 | Expected: Mar 15, 2026 (4 DAYS OVERDUE)
Total: $47,500.00
LINE ITEMS:
1. Laptop Dell Latitude 5540 x20 @ $1,200 = $24,000 - RECEIVED (20/20)
2. Docking Station WD22TB4 x20 @ $350 = $7,000 - RECEIVED (20/20)
3. Monitor Dell U2723QE x40 @ $412.50 = $16,500 - PARTIAL (25/40)
RISK: Line 3 has 15 monitors outstanding, 4 days past expected delivery.
ACTION: Contact TechSupply for updated ETA on remaining monitors.
Example 2: Late Delivery Risk Report
Scenario: Generate a report of all POs at risk of late delivery.
Tool: SN-Query-Table
Parameters:
table_name: proc_po
query: expected_delivery<javascript:gs.nowDateTime()^stateINordered,partially_received^ORDERBYexpected_delivery
fields: number,vendor,total_cost,expected_delivery,state
limit: 25
Output:
LATE DELIVERY RISK REPORT - Mar 19, 2026
OVERDUE (past expected delivery):
1. PO0023456 - TechSupply Inc - $16,500 remaining - 4 days overdue
2. PO0023401 - Office Depot - $3,200 remaining - 7 days overdue
3. PO0023389 - Cisco Systems - $142,000 remaining - 12 days overdue
AT RISK (delivery within 3 days, no receipt activity):
4. PO0023501 - AWS Corp - $28,000 - due Mar 21
5. PO0023498 - Grainger - $5,600 - due Mar 22
TOTAL AT RISK: $195,300 across 5 POs
RECOMMENDED: Escalate PO0023389 (Cisco) - 12 days overdue, high value.
Example 3: Budget Impact Analysis
Scenario: Compare PO actuals against requisition estimates for Q1.
Tool: SN-Query-Table
Parameters:
table_name: proc_po
query: ordered_date>=2026-01-01^ordered_date<2026-04-01^state!=cancelled
fields: number,vendor,total_cost,ordered_date,state
limit: 200
Output:
Q1 2026 BUDGET IMPACT
Total POs Issued: 67
Total Committed: $1,245,600
Total Received/Invoiced: $892,300
Outstanding Commitments: $353,300
BY CATEGORY:
IT Hardware: $456,000 (37% of total)
Software Licenses: $312,000 (25%)
Office Supplies: $98,600 (8%)
Professional Services: $379,000 (30%)
VARIANCE FROM BUDGET:
Allocated: $1,400,000
Committed: $1,245,600
Remaining: $154,400 (11% under budget)
Related Skills
procurement/invoice-management- Three-way matching and invoice processingprocurement/procurement-summarization- Procurement case and pipeline overviewprocurement/sourcing-summarization- Sourcing events and bid analysisprocurement/supplier-recommendation- Vendor performance and scoringcatalog/request-fulfillment- Track fulfillment of catalog requests