skills/catalog/approval-workflows/SKILL.md
Complete guide to configuring catalog approval rules, multi-level approvals, delegation, and escalation
npx skillsauth add happy-technologies-llc/happy-servicenow-skills approval-workflowsInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
This skill covers approval management for service catalog items:
When to use: When setting up approval processes for catalog items, troubleshooting stuck approvals, or implementing complex approval routing.
catalog_admin, approval_admin, or admincatalog/item-creation should be completed firstApproval Tables: | Table | Purpose | |-------|---------| | sysapproval_approver | Individual approval records (one per approver) | | sysapproval_group | Group-based approvals | | sc_ic_aprvl_type_defn | Catalog approval type definitions | | sc_ic_aprvl_defn | Catalog-specific approval definitions | | sys_approval_rule | System-wide approval rules |
Approval Flow:
Request Submitted
↓
Approval Rule Evaluated
↓
Approval Records Created (sysapproval_approver)
↓
Approvers Notified
↓
Approver Takes Action
↓
Next Level (if multi-level) OR Complete
Approval States: | State | Value | Description | |-------|-------|-------------| | Not Yet Requested | not yet requested | Approval not triggered | | Requested | requested | Waiting for approver action | | Approved | approved | Approver approved | | Rejected | rejected | Approver rejected | | Cancelled | cancelled | Approval cancelled | | Duplicate | duplicate | Duplicate approval skipped | | Not Required | not_required | Approval waived |
Find pending approvals for a request:
Tool: SN-Query-Table
Parameters:
table_name: sysapproval_approver
query: sysapproval=[ritm_sys_id]
fields: sys_id,approver,state,due_date,source_table,sys_created_on
limit: 50
Find all pending approvals for a user:
Tool: SN-Query-Table
Parameters:
table_name: sysapproval_approver
query: approver=[user_sys_id]^state=requested
fields: sys_id,sysapproval,document_id,source_table,sys_created_on
limit: 100
Find overdue approvals:
Tool: SN-Query-Table
Parameters:
table_name: sysapproval_approver
query: state=requested^due_date<javascript:gs.nowDateTime()
fields: sys_id,approver,sysapproval,due_date,source_table
limit: 100
Note: This uses the legacy approval rule system. For new implementations, consider using Flow Designer or Catalog Builder approval types.
Create basic approval rule:
Tool: SN-Create-Record
Parameters:
table_name: sys_approval_rule
data:
name: "Manager Approval for Hardware > $1000"
active: true
table: sc_req_item
condition: cat_item.price>1000^cat_item.category.title=Hardware
approval_type: "single"
approver_field: "opened_by.manager"
order: 100
Catalog approval types define reusable approval patterns.
Query existing approval types:
Tool: SN-Query-Table
Parameters:
table_name: sc_ic_aprvl_type_defn
query: active=true
fields: sys_id,name,description,approval_type
limit: 50
Create approval type definition:
Tool: SN-Create-Record
Parameters:
table_name: sc_ic_aprvl_type_defn
data:
name: "Manager Approval"
description: "Requires approval from requester's manager"
active: true
approval_type: "approver_user_field"
approver_user_field: "requested_for.manager"
wait_for: "everyone" # everyone, anyone
mandatory: true
Approval Type Options: | approval_type | Description | |--------------|-------------| | approver_user_field | User from field on record | | approver_group_field | Group from field on record | | specific_user | Hardcoded user | | specific_group | Hardcoded group | | script | Custom script determines approver |
Multi-level approvals execute in sequence based on order.
Create Level 1 - Manager Approval:
Tool: SN-Create-Record
Parameters:
table_name: sc_ic_aprvl_defn
data:
catalog_item: [catalog_item_sys_id]
name: "Manager Approval"
approval_type_definition: [manager_approval_type_sys_id]
order: 100
active: true
condition: "" # Always apply
Create Level 2 - Director Approval (for high-value requests):
Tool: SN-Create-Record
Parameters:
table_name: sc_ic_aprvl_defn
data:
catalog_item: [catalog_item_sys_id]
name: "Director Approval"
approval_type_definition: [director_approval_type_sys_id]
order: 200
active: true
condition: "price>5000" # Only for requests over $5000
Create Level 3 - Finance Approval (for very high value):
Tool: SN-Create-Record
Parameters:
table_name: sc_ic_aprvl_defn
data:
catalog_item: [catalog_item_sys_id]
name: "Finance Approval"
approval_type_definition: [finance_approval_type_sys_id]
order: 300
active: true
condition: "price>10000"
Parallel approvals execute simultaneously at the same level.
Create Parallel Approvers (same order = parallel):
Tool: SN-Create-Record
Parameters:
table_name: sc_ic_aprvl_defn
data:
catalog_item: [catalog_item_sys_id]
name: "IT Security Review"
approval_type_definition: [security_approval_type_sys_id]
order: 100 # Same order as other parallel approval
active: true
Tool: SN-Create-Record
Parameters:
table_name: sc_ic_aprvl_defn
data:
catalog_item: [catalog_item_sys_id]
name: "Legal Review"
approval_type_definition: [legal_approval_type_sys_id]
order: 100 # Same order = parallel execution
active: true
Wait For Options:
everyone - All approvers must approveanyone - First approval completes the levelmajority - Majority of approvers must approveCreate group-based approval type:
Tool: SN-Create-Record
Parameters:
table_name: sc_ic_aprvl_type_defn
data:
name: "Change Advisory Board"
description: "CAB approval required for major changes"
active: true
approval_type: "specific_group"
approver_group: [cab_group_sys_id]
wait_for: "everyone"
Query group approval status:
Tool: SN-Query-Table
Parameters:
table_name: sysapproval_group
query: parent=[ritm_sys_id]
fields: sys_id,group,approval,sys_created_on
Delegation allows users to assign approval authority to others during absence.
Query existing delegations:
Tool: SN-Query-Table
Parameters:
table_name: sys_user_delegate
query: delegate=[user_sys_id]^active=true
fields: sys_id,user,delegate,starts,ends,approval
limit: 50
Create delegation record:
Tool: SN-Create-Record
Parameters:
table_name: sys_user_delegate
data:
user: [original_approver_sys_id]
delegate: [delegate_user_sys_id]
starts: "2026-02-10"
ends: "2026-02-24"
approval: true # Delegate approvals
active: true
Approval with Due Date:
Tool: SN-Update-Record
Parameters:
table_name: sysapproval_approver
sys_id: [approval_sys_id]
data:
due_date: "2026-02-13 17:00:00"
Create Escalation via SLA: Configure through SLA Definitions (sla) table:
Tool: SN-Create-Record
Parameters:
table_name: contract_sla
data:
name: "Approval Escalation - 48 Hours"
table: sysapproval_approver
condition: "state=requested"
duration: "2 00:00:00" # 48 hours
workflow: [escalation_workflow_sys_id]
active: true
Approve a request:
Tool: SN-Update-Record
Parameters:
table_name: sysapproval_approver
sys_id: [approval_sys_id]
data:
state: "approved"
comments: "Approved - budget verified and manager confirmed need"
Reject a request:
Tool: SN-Update-Record
Parameters:
table_name: sysapproval_approver
sys_id: [approval_sys_id]
data:
state: "rejected"
comments: "Rejected - request exceeds department budget. Please resubmit next quarter."
Cancel pending approvals:
Tool: SN-Update-Record
Parameters:
table_name: sysapproval_approver
sys_id: [approval_sys_id]
data:
state: "cancelled"
comments: "Approval cancelled - request withdrawn by user"
Count pending approvals by group:
Tool: SN-Query-Table
Parameters:
table_name: sysapproval_approver
query: state=requested^sys_created_on>=javascript:gs.beginningOfLastMonth()
fields: sys_id,approver.u_group,state
limit: 1000
Find approval bottlenecks:
Tool: SN-Query-Table
Parameters:
table_name: sysapproval_approver
query: state=requested^sys_created_onRELATIVELE@dayofweek@ago@5
fields: sys_id,approver,sysapproval,sys_created_on
limit: 100
# 1. Create Manager Approval Type
Tool: SN-Create-Record
Parameters:
table_name: sc_ic_aprvl_type_defn
data:
name: "Requester Manager"
description: "Approval from requester's direct manager"
active: true
approval_type: "approver_user_field"
approver_user_field: "requested_for.manager"
wait_for: "everyone"
mandatory: true
# Result: sys_id = "type_manager"
# 2. Create IT Director Approval Type
Tool: SN-Create-Record
Parameters:
table_name: sc_ic_aprvl_type_defn
data:
name: "IT Director"
description: "IT Director approval for large hardware purchases"
active: true
approval_type: "specific_user"
specific_user: [it_director_sys_id]
wait_for: "everyone"
mandatory: true
# Result: sys_id = "type_director"
# 3. Create Level 1 Approval Definition (always required)
Tool: SN-Create-Record
Parameters:
table_name: sc_ic_aprvl_defn
data:
catalog_item: [hardware_item_sys_id]
name: "Manager Approval"
approval_type_definition: "type_manager"
order: 100
active: true
condition: ""
# 4. Create Level 2 Approval Definition (only for > $2000)
Tool: SN-Create-Record
Parameters:
table_name: sc_ic_aprvl_defn
data:
catalog_item: [hardware_item_sys_id]
name: "IT Director Approval"
approval_type_definition: "type_director"
order: 200
active: true
condition: "price>2000"
# 5. Verify configuration
Tool: SN-Query-Table
Parameters:
table_name: sc_ic_aprvl_defn
query: catalog_item=[hardware_item_sys_id]
fields: name,approval_type_definition,order,condition,active
┌──────────────────┐
│ not yet requested│
└─────────┬────────┘
│ Workflow triggers
┌─────────▼────────┐
│ requested │
└─────────┬────────┘
│
┌───────────────────────┼───────────────────────┐
│ │ │
┌─────────▼────────┐ ┌─────────▼────────┐ ┌─────────▼────────┐
│ approved │ │ rejected │ │ cancelled │
└──────────────────┘ └──────────────────┘ └──────────────────┘
│
│ All approvals approved
┌─────────▼──────────────────────┐
│ Request proceeds to fulfillment│
└────────────────────────────────┘
| Operation | MCP Tool | Table | |-----------|----------|-------| | Query approvals | SN-Query-Table | sysapproval_approver | | Process approval | SN-Update-Record | sysapproval_approver | | Create approval type | SN-Create-Record | sc_ic_aprvl_type_defn | | Create approval definition | SN-Create-Record | sc_ic_aprvl_defn | | Configure delegation | SN-Create-Record | sys_user_delegate | | Query group approvals | SN-Query-Table | sysapproval_group |
Symptom: Request submitted but no approval record created Causes:
Tool: SN-Query-Table
Parameters:
table_name: sc_ic_aprvl_defn
query: catalog_item=[item_sys_id]^active=true
fields: name,condition,active,order
Symptom: Approval pending but approver claims to have acted Causes:
Tool: SN-Query-Table
Parameters:
table_name: sysapproval_approver
query: sysapproval=[ritm_sys_id]
fields: sys_id,approver,state,order,sys_updated_on
Symptom: Request continues despite rejection Cause: Business rule or workflow not honoring rejection Solution: Check workflow for proper rejection handling
Symptom: Delegate not receiving approval requests Causes:
Tool: SN-Query-Table
Parameters:
table_name: sys_user_delegate
query: user=[original_user_sys_id]^active=true
fields: delegate,starts,ends,approval,active
catalog/item-creation - Creating catalog items (prerequisite)catalog/request-fulfillment - Processing approved requestsadmin/workflow-management - Building approval workflowsadmin/notification-management - Approval notification setuptesting
Manage supplier onboarding, qualification, performance monitoring, and offboarding with auditable lifecycle controls
tools
Identify emerging risks, prioritize intake signals, and route candidates into formal GRC risk assessment workflows
documentation
Screen inbound documents for completeness, policy risk, and routing readiness before extraction or case workflows
testing
Generate concise task summaries with status, timeline, blockers, SLA risk, and recommended next actions