HR Sidebar Discussion Summarization
Overview
This skill provides a structured approach to generating concise sidebar summaries for HR service delivery cases. It covers:
- Extracting and condensing lengthy case discussion threads into actionable summaries
- Identifying key decision points made during case handling
- Highlighting stakeholder contributions and their roles in the discussion
- Capturing next actions and pending items requiring follow-up
- Producing formatted summaries suitable for sidebar display or quick reference
- Supporting handoff scenarios where a new agent needs rapid context
When to use: When HR cases have extensive discussion threads and agents need a quick overview of what has been discussed, decided, and what remains to be done. Particularly valuable during shift handoffs, manager escalations, or when multiple HR specialists collaborate on a case.
Plugin required: com.sn_hr_core (HR Service Delivery Core)
Prerequisites
- Roles:
sn_hr_core.case_reader,sn_hr_core.case_writer, orsn_hr_core.admin - Access: Read access to
sn_hr_core_case,sys_journal_field,sys_audit - Knowledge: Familiarity with HR case lifecycle states, escalation processes, and organizational HR structure
- Plugins:
com.sn_hr_coremust be activated
Procedure
Step 1: Retrieve the HR Case Record
Pull the case header information to establish context.
Using MCP:
Tool: SN-Get-Record
Parameters:
table_name: sn_hr_core_case
sys_id: [case_sys_id]
fields: sys_id,number,short_description,description,state,priority,hr_service,subject_person,subject_person.name,assigned_to,assignment_group,opened_at,sys_updated_on,escalation,active
Using REST API:
GET /api/now/table/sn_hr_core_case/[case_sys_id]?sysparm_fields=sys_id,number,short_description,description,state,priority,hr_service,subject_person,assigned_to,assignment_group,opened_at,sys_updated_on,escalation,active&sysparm_display_value=true
Step 2: Extract Discussion Thread (Work Notes and Comments)
Retrieve all journal entries (work notes and additional comments) for the case.
Using MCP:
Tool: SN-Query-Table
Parameters:
table_name: sys_journal_field
query: element_id=[case_sys_id]^name=sn_hr_core_case^elementINwork_notes,comments^ORDERBYsys_created_on
fields: sys_id,element,value,sys_created_by,sys_created_on
limit: 100
Using REST API:
GET /api/now/table/sys_journal_field?sysparm_query=element_id=[case_sys_id]^name=sn_hr_core_case^elementINwork_notes,comments^ORDERBYsys_created_on&sysparm_fields=sys_id,element,value,sys_created_by,sys_created_on&sysparm_display_value=true&sysparm_limit=100
Step 3: Retrieve Related Tasks
Pull associated HR tasks that provide additional context on actions taken.
Using MCP:
Tool: SN-Query-Table
Parameters:
table_name: sn_hr_core_task
query: parent=[case_sys_id]^ORDERBYsys_created_on
fields: sys_id,number,short_description,state,assigned_to,opened_at,closed_at,close_notes,work_notes
limit: 20
Using REST API:
GET /api/now/table/sn_hr_core_task?sysparm_query=parent=[case_sys_id]^ORDERBYsys_created_on&sysparm_fields=sys_id,number,short_description,state,assigned_to,opened_at,closed_at,close_notes,work_notes&sysparm_display_value=true&sysparm_limit=20
Step 4: Track State Changes and Escalations
Review the audit trail to understand how the case progressed.
Using MCP:
Tool: SN-Query-Table
Parameters:
table_name: sys_audit
query: tablename=sn_hr_core_case^documentkey=[case_sys_id]^fieldnameINstate,priority,assigned_to,assignment_group,escalation^ORDERBYsys_created_on
fields: sys_id,fieldname,oldvalue,newvalue,user,sys_created_on
limit: 50
Using REST API:
GET /api/now/table/sys_audit?sysparm_query=tablename=sn_hr_core_case^documentkey=[case_sys_id]^fieldnameINstate,priority,assigned_to,assignment_group,escalation^ORDERBYsys_created_on&sysparm_fields=sys_id,fieldname,oldvalue,newvalue,user,sys_created_on&sysparm_display_value=true&sysparm_limit=50
Step 5: Generate the Sidebar Summary
Compile the extracted data into a structured sidebar summary.
Using MCP:
Tool: SN-Execute-Background-Script
Parameters:
description: Generate a structured sidebar summary for an HR case
script: |
var caseId = '[case_sys_id]';
gs.info('=== HR CASE SIDEBAR SUMMARY ===');
// Case header
var caseGr = new GlideRecord('sn_hr_core_case');
caseGr.get(caseId);
gs.info('Case: ' + caseGr.number + ' | ' + caseGr.short_description);
gs.info('State: ' + caseGr.state.getDisplayValue() + ' | Priority: ' + caseGr.priority.getDisplayValue());
gs.info('Subject: ' + caseGr.subject_person.getDisplayValue());
gs.info('Assigned: ' + caseGr.assigned_to.getDisplayValue() + ' (' + caseGr.assignment_group.getDisplayValue() + ')');
gs.info('Opened: ' + caseGr.opened_at + ' | Updated: ' + caseGr.sys_updated_on);
// Discussion summary - key entries
gs.info('\n--- KEY DISCUSSION POINTS ---');
var journal = new GlideRecord('sys_journal_field');
journal.addQuery('element_id', caseId);
journal.addQuery('name', 'sn_hr_core_case');
journal.addQuery('element', 'work_notes');
journal.orderBy('sys_created_on');
journal.query();
var noteCount = 0;
while (journal.next()) {
noteCount++;
var noteText = journal.value.toString().replace(/<[^>]*>/g, '').substring(0, 200);
gs.info('[' + journal.sys_created_on + ' | ' + journal.sys_created_by + '] ' + noteText);
}
gs.info('Total work notes: ' + noteCount);
// State transitions
gs.info('\n--- STATE TRANSITIONS ---');
var audit = new GlideRecord('sys_audit');
audit.addQuery('tablename', 'sn_hr_core_case');
audit.addQuery('documentkey', caseId);
audit.addQuery('fieldname', 'state');
audit.orderBy('sys_created_on');
audit.query();
while (audit.next()) {
gs.info(audit.sys_created_on + ': ' + audit.oldvalue + ' -> ' + audit.newvalue + ' (by ' + audit.user + ')');
}
// Related tasks status
gs.info('\n--- RELATED TASKS ---');
var task = new GlideRecord('sn_hr_core_task');
task.addQuery('parent', caseId);
task.orderBy('sys_created_on');
task.query();
while (task.next()) {
gs.info(task.number + ': ' + task.short_description + ' | State: ' + task.state.getDisplayValue() + ' | Assigned: ' + task.assigned_to.getDisplayValue());
}
// Pending actions
gs.info('\n--- PENDING ACTIONS ---');
var pending = new GlideRecord('sn_hr_core_task');
pending.addQuery('parent', caseId);
pending.addQuery('state', '!=', 'closed_complete');
pending.addQuery('state', '!=', 'closed_incomplete');
pending.query();
if (!pending.hasNext()) {
gs.info('No pending tasks.');
}
while (pending.next()) {
gs.info('ACTION NEEDED: ' + pending.short_description + ' | Assigned: ' + pending.assigned_to.getDisplayValue());
}
Step 6: Format the Summary for Sidebar Display
Structure the output into a concise sidebar format.
Sidebar Summary Template:
=== CASE SUMMARY ===
[Case Number] - [Short Description]
Status: [State] | Priority: [Priority]
Employee: [Subject Person] | Dept: [Department]
Agent: [Assigned To] | Group: [Assignment Group]
Age: [Days since opened]
=== KEY DECISIONS ===
1. [Date] - [Decision description] (by [Person])
2. [Date] - [Decision description] (by [Person])
3. [Date] - [Decision description] (by [Person])
=== STAKEHOLDER INPUT ===
- [Person/Role]: [Summary of their contribution]
- [Person/Role]: [Summary of their contribution]
=== TIMELINE ===
[Date] - Case opened
[Date] - [Key event]
[Date] - [Key event]
[Date] - Current state reached
=== NEXT ACTIONS ===
[ ] [Action item 1] - Assigned to [Person]
[ ] [Action item 2] - Assigned to [Person]
[x] [Completed action] - Done by [Person]
Step 7: Save the Summary to the Case
Attach the generated summary as a work note for team visibility.
Using MCP:
Tool: SN-Add-Work-Notes
Parameters:
table_name: sn_hr_core_case
sys_id: [case_sys_id]
work_notes: |
=== SIDEBAR DISCUSSION SUMMARY ===
Generated: [current date/time]
KEY DECISIONS:
1. [Decision summary]
2. [Decision summary]
STAKEHOLDERS:
- [Name]: [Input summary]
NEXT ACTIONS:
- [Pending action 1]
- [Pending action 2]
CASE AGE: [X] days | NOTES: [count] entries
Tool Usage
MCP Tools Reference
| Tool | When to Use |
|---|---|
SN-Get-Record |
Retrieve HR case header details |
SN-Query-Table |
Query journal entries, audit trail, related tasks |
SN-Natural-Language-Search |
Natural language queries for case context |
SN-Update-Record |
Update case with summary or state changes |
SN-Add-Work-Notes |
Post the summary as a work note |
SN-Execute-Background-Script |
Generate comprehensive summaries from multiple data sources |
REST API Reference
| Endpoint | Method | Purpose |
|---|---|---|
/api/now/table/sn_hr_core_case |
GET/PATCH | Read case details and update with summary |
/api/now/table/sn_hr_core_task |
GET | Review related tasks and pending actions |
/api/now/table/sys_journal_field |
GET | Extract work notes and comments |
/api/now/table/sys_audit |
GET | Track state changes and escalation history |
/api/now/table/sn_hr_le_case_type |
GET | Understand case type context |
Best Practices
- Focus on Decisions: Highlight what was decided, not every comment; agents need actionable context
- Identify Blockers: Clearly flag any pending actions or approvals that are holding up the case
- Preserve Chronology: Present events in chronological order to show how the case evolved
- Attribute Contributions: Note who made key decisions or provided input for accountability
- Keep It Concise: Sidebar summaries should be scannable in 30 seconds; avoid lengthy prose
- Respect Privacy: Summarize sensitive details at a high level; do not reproduce PII in summaries
Troubleshooting
No Work Notes Found
Cause: Case communication happened through comments (visible to employee) rather than work notes (internal)
Solution: Query both work_notes and comments elements from sys_journal_field. Combine both for a complete picture.
Audit Trail Missing State Changes
Cause: Audit policies may not track all fields or auditing may be disabled for certain fields
Solution: Check System Audit configuration for the sn_hr_core_case table. Verify that state, priority, and assigned_to fields are audited.
Summary Too Long for Sidebar Display
Cause: Case has extensive discussion spanning many weeks or contributors Solution: Limit the summary to the most recent 5-7 key events. Focus on decisions and pending actions rather than verbose note content.
Related Tasks Not Appearing
Cause: Tasks may be on a different table or linked through a different relationship field
Solution: Check sn_hr_core_task.parent field matches the case sys_id. Also query for tasks linked via parent.parent for nested task structures.
Examples
Example 1: Quick Handoff Summary
# 1. Get case details
Tool: SN-Get-Record
Parameters:
table_name: sn_hr_core_case
sys_id: [case_sys_id]
fields: number,short_description,state,priority,assigned_to,assignment_group,opened_at
# 2. Get recent work notes (last 5)
Tool: SN-Query-Table
Parameters:
table_name: sys_journal_field
query: element_id=[case_sys_id]^name=sn_hr_core_case^element=work_notes^ORDERBYDESCsys_created_on
fields: value,sys_created_by,sys_created_on
limit: 5
# 3. Get pending tasks
Tool: SN-Query-Table
Parameters:
table_name: sn_hr_core_task
query: parent=[case_sys_id]^stateNOT INclosed_complete,closed_incomplete
fields: number,short_description,state,assigned_to
limit: 10
Example 2: Escalation Context Summary
Tool: SN-Query-Table
Parameters:
table_name: sys_audit
query: tablename=sn_hr_core_case^documentkey=[case_sys_id]^fieldnameINstate,priority,escalation,assignment_group^ORDERBYsys_created_on
fields: fieldname,oldvalue,newvalue,user,sys_created_on
limit: 30
Example 3: Multi-Case Summary for Manager Review
Tool: SN-Execute-Background-Script
Parameters:
description: Summarize all open cases for a specific HR team
script: |
var groupName = 'HR Benefits Team';
var gr = new GlideRecord('sn_hr_core_case');
gr.addQuery('assignment_group.name', groupName);
gr.addQuery('active', true);
gr.orderBy('priority');
gr.query();
gs.info('=== TEAM CASE SUMMARY: ' + groupName + ' ===');
gs.info('Open Cases: ' + gr.getRowCount());
while (gr.next()) {
var taskCount = new GlideAggregate('sn_hr_core_task');
taskCount.addQuery('parent', gr.sys_id.toString());
taskCount.addQuery('active', true);
taskCount.addAggregate('COUNT');
taskCount.query();
taskCount.next();
var pending = taskCount.getAggregate('COUNT');
gs.info(gr.number + ' | P' + gr.priority + ' | ' + gr.state.getDisplayValue() + ' | ' + gr.short_description + ' | Pending Tasks: ' + pending);
}
Related Skills
hrsd/email-recommendation- Draft email responses based on sidebar summary contexthrsd/kb-generation- Convert recurring discussion patterns into knowledge articleshrsd/case-summarization- Full case summarization for closing or reportingitsm/incident-summarization- Similar summarization approach for ITSM incidents