关于 tprm-issue-summarization
tprm-issue-summarization 是面向第三方风险团队的 ServiceNow 技能,可汇总 TPRM 问题并提供供应商或整体组合视角。它整合问题、评估、整改和合规信息,用于风险审查与报告。
主要功能
- 01按供应商和风险等级汇总问题
- 02识别逾期或未完成的评估
- 03汇总整改状态与用时
- 04关联问题与合规要求
- 05编制供应商风险摘要
适用场景
- 01准备供应商风险委员会报告
- 02在供应商入驻时审查风险
- 03供应商事件后评估风险敞口
- 04整理监管检查所需文档
MCP 相关
该技能使用 SN-Query-Table、SN-Execute-Background-Script、SN-Natural-Language-Search、SN-Discover-Table-Schema 和 SN-Add-Work-Notes 等 ServiceNow MCP 工具检索、分析并记录 TPRM 摘要。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ happy-technologies-llc/ happy-platform-skills --skill tprm-issue-summarization安装后在 Claude Code 中输入/tprm-issue-summarization确认已加载。
详细介绍
TPRM 问题摘要
概述
此技能可生成 ServiceNow 中第三方风险管理(TPRM)问题的综合摘要,涵盖:
- 按供应商、风险等级和评估周期汇总 TPRM 问题
- 从安全、运营、财务和合规维度评估供应商风险敞口
- 识别评估缺口,找出缺少最新或完整评估的供应商
- 跟踪未解决发现和逾期纠正措施的整改状态
- 将供应商问题映射到监管要求,衡量合规影响
- 生成适用于高管的仪表板,供供应商风险委员会使用
适用场景:
- 准备供应商风险委员会会议或董事会报告
- 开展年度或定期第三方评估审查
- 入驻新供应商并评估其风险状况
- 供应商发生安全事件后,需要快速分析风险敞口
- 应对监管检查,需要提供第三方风险文档
前提条件
- 角色:
sn_tprm.viewer、sn_tprm.manager、sn_grc.manager或admin - 插件:
com.sn_tprm(第三方风险管理)、com.sn_grc - 访问权限: 对 sn_tprm_assessment、sn_tprm_issue、sn_tprm_vendor_assessment、sn_grc_profile、core_company 表具有读取权限
- 知识: 了解供应商风险等级划分方法和组织的第三方风险承受能力
主要 TPRM 表
| 表 | 用途 | 主要字段 |
|---|---|---|
sn_tprm_assessment | TPRM 评估记录 | number、short_description、state、assessment_type、vendor、risk_tier、due_date、score |
sn_tprm_issue | 评估期间发现的问题 | number、short_description、state、priority、vendor、assessment、remediation_plan、due_date |
sn_tprm_vendor_assessment | 供应商级评估汇总 | vendor、assessment_status、overall_risk、last_assessment_date、next_assessment_date |
core_company | 供应商/公司主记录 | name、sys_id、vendor_type、stock_symbol、city、state、country |
sn_grc_profile | 与供应商关联的 GRC 配置文件 | number、short_description、profile_type、applies_to |
sn_grc_risk | 与供应商配置文件关联的风险记录 | number、risk_score、state、treatment、residual_risk、inherent_risk |
流程
步骤 1:检索未解决的 TPRM 问题
查询所有未关闭的 TPRM 问题,以了解当前的问题情况。
使用 MCP(Claude Code/Desktop):
Tool: SN-Query-Table
Parameters:
table_name: sn_tprm_issue
query: active=true^ORDERBYDESCpriority
fields: sys_id,number,short_description,description,state,priority,vendor,assessment,remediation_plan,due_date,assigned_to,category,risk_rating,sys_created_on
limit: 200
使用 REST API:
GET /api/now/table/sn_tprm_issue?sysparm_query=active=true^ORDERBYDESCpriority&sysparm_fields=sys_id,number,short_description,description,state,priority,vendor,assessment,remediation_plan,due_date,assigned_to,category,risk_rating&sysparm_limit=200&sysparm_display_value=true
步骤 2:收集供应商评估背景信息
对于存在问题的每个供应商,检索其评估历史和当前风险状况。
使用 MCP:
Tool: SN-Query-Table
Parameters:
table_name: sn_tprm_vendor_assessment
query: vendor=[vendor_sys_id]
fields: sys_id,vendor,assessment_status,overall_risk,last_assessment_date,next_assessment_date,risk_tier,assessment_score
limit: 10
使用 REST API:
GET /api/now/table/sn_tprm_vendor_assessment?sysparm_query=vendor=[vendor_sys_id]&sysparm_fields=sys_id,vendor,assessment_status,overall_risk,last_assessment_date,next_assessment_date,risk_tier,assessment_score&sysparm_limit=10&sysparm_display_value=true
步骤 3:识别评估缺口
查找评估逾期或缺失的供应商,以突出盲点。
使用 MCP:
Tool: SN-Execute-Background-Script
Parameters:
script: |
var gaps = [];
var va = new GlideRecord('sn_tprm_vendor_assessment');
va.addQuery('next_assessment_date', '<', new GlideDateTime().toString());
va.addOrCondition('assessment_status', 'incomplete');
va.addOrCondition('assessment_status', 'not_started');
va.query();
while (va.next()) {
var vendor = new GlideRecord('core_company');
vendor.get(va.vendor);
gaps.push({
vendor_name: vendor.name.toString(),
vendor_sys_id: va.vendor.toString(),
assessment_status: va.assessment_status.getDisplayValue(),
overall_risk: va.overall_risk.getDisplayValue(),
risk_tier: va.risk_tier.getDisplayValue(),
last_assessment: va.last_assessment_date.toString(),
next_assessment: va.next_assessment_date.toString(),
days_overdue: gs.dateDiff(va.next_assessment_date.toString(), new GlideDateTime().toString(), true)
});
}
gs.info('ASSESSMENT GAPS (' + gaps.length + ' vendors):\n' + JSON.stringify(gaps, null, 2));
description: "TPRM: Identify vendors with overdue or incomplete assessments"
步骤 4:生成供应商风险敞口摘要
汇总所有供应商和风险等级的指标。
使用 MCP:
Tool: SN-Execute-Background-Script
Parameters:
script: |
var summary = {
generated_date: new GlideDateTime().toString(),
issue_overview: { total_open: 0, critical: 0, high: 0, medium: 0, low: 0, overdue: 0 },
by_vendor: {},
by_category: {},
remediation_status: { with_plan: 0, without_plan: 0, plan_overdue: 0 },
assessment_coverage: { total_vendors: 0, assessed_current: 0, assessed_overdue: 0, never_assessed: 0 },
risk_tier_distribution: {}
};
var now = new GlideDateTime();
// Issue metrics
var gr = new GlideRecord('sn_tprm_issue');
gr.addQuery('active', true);
gr.query();
while (gr.next()) {
summary.issue_overview.total_open++;
var pri = gr.priority.toString();
if (pri == '1') summary.issue_overview.critical++;
else if (pri == '2') summary.issue_overview.high++;
else if (pri == '3') summary.issue_overview.medium++;
else summary.issue_overview.low++;
if (gr.due_date.toString() && new GlideDateTime(gr.due_date.toString()).compareTo(now) < 0) {
summary.issue_overview.overdue++;
}
var vendorName = gr.vendor.getDisplayValue() || 'Unknown';
summary.by_vendor[vendorName] = (summary.by_vendor[vendorName] || 0) + 1;
var cat = gr.category.getDisplayValue() || 'Uncategorized';
summary.by_category[cat] = (summary.by_category[cat] || 0) + 1;
if (gr.remediation_plan.toString()) {
summary.remediation_status.with_plan++;
if (gr.due_date.toString() && new GlideDateTime(gr.due_date.toString()).compareTo(now) < 0) {
summary.remediation_status.plan_overdue++;
}
} else {
summary.remediation_status.without_plan++;
}
}
// Assessment coverage
var va = new GlideRecord('sn_tprm_vendor_assessment');
va.query();
while (va.next()) {
summary.assessment_coverage.total_vendors++;
var tier = va.risk_tier.getDisplayValue() || 'Untiered';
summary.risk_tier_distribution[tier] = (summary.risk_tier_distribution[tier] || 0) + 1;
if (!va.last_assessment_date.toString()) {
summary.assessment_coverage.never_assessed++;
} else if (va.next_assessment_date.toString() && new GlideDateTime(va.next_assessment_date.toString()).compareTo(now) < 0) {
summary.assessment_coverage.assessed_overdue++;
} else {
summary.assessment_coverage.assessed_current++;
}
}
gs.info('TPRM EXECUTIVE SUMMARY:\n' + JSON.stringify(summary, null, 2));
description: "TPRM: Generate executive risk exposure summary"
步骤 5:分析整改成效
评估供应商组合中各项问题的整改成效。
使用 MCP:
Tool: SN-Execute-Background-Script
Parameters:
script: |
var remediation = {
avg_days_to_close: 0,
closed_on_time: 0,
closed_late: 0,
still_open_on_time: 0,
still_open_overdue: 0,
top_overdue_vendors: []
};
var now = new GlideDateTime();
var closedDays = [];
// Closed issues - resolution time
var closed = new GlideRecord('sn_tprm_issue');
closed.addQuery('active', false);
closed.addQuery('closed_at', '>=', gs.daysAgo(180));
closed.query();
while (closed.next()) {
var created = new GlideDateTime(closed.sys_created_on.toString());
var closedAt = new GlideDateTime(closed.closed_at.toString());
var days = gs.dateDiff(created.toString(), closedAt.toString(), true);
closedDays.push(parseInt(days));
if (closed.due_date.toString() && closedAt.compareTo(new GlideDateTime(closed.due_date.toString())) <= 0) {
remediation.closed_on_time++;
} else {
remediation.closed_late++;
}
}
if (closedDays.length > 0) {
var total = 0;
for (var i = 0; i < closedDays.length; i++) total += closedDays[i];
remediation.avg_days_to_close = Math.round(total / closedDays.length);
}
// Open issues - on-time vs overdue
var vendorOverdue = {};
var open = new GlideRecord('sn_tprm_issue');
open.addQuery('active', true);
open.query();
while (open.next()) {
if (open.due_date.toString() && new GlideDateTime(open.due_date.toString()).compareTo(now) < 0) {
remediation.still_open_overdue++;
var v = open.vendor.getDisplayValue() || 'Unknown';
vendorOverdue[v] = (vendorOverdue[v] || 0) + 1;
} else {
remediation.still_open_on_time++;
}
}
// Sort vendors by overdue count
var sorted = Object.keys(vendorOverdue).sort(function(a, b) { return vendorOverdue[b] - vendorOverdue[a]; });
for (var j = 0; j < Math.min(5, sorted.length); j++) {
remediation.top_overdue_vendors.push({ vendor: sorted[j], overdue_count: vendorOverdue[sorted[j]] });
}
gs.info('REMEDIATION ANALYSIS:\n' + JSON.stringify(remediation, null, 2));
description: "TPRM: Analyze remediation effectiveness across vendor portfolio"
步骤 6:生成合规影响说明
搜索涉及监管或合规影响的问题。
使用 MCP:
Tool: SN-Query-Table
Parameters:
table_name: sn_tprm_issue
query: 123TEXTQUERY321=data privacy GDPR SOC 2 regulatory compliance security controls
limit: 30
将摘要作为工作备注发布:
Tool: SN-Add-Work-Notes
Parameters:
table_name: sn_tprm_vendor_assessment
sys_id: [vendor_assessment_sys_id]
work_notes: |
=== TPRM ISSUE SUMMARY ===
Vendor: [vendor_name]
Report Date: [current_date]
Risk Tier: [tier]
OPEN ISSUES: [count] ([critical] critical, [high] high)
OVERDUE ISSUES: [overdue_count]
ASSESSMENT STATUS:
- Last Completed: [date]
- Next Due: [date]
- Coverage Gaps: [gap_details]
COMPLIANCE IMPACT:
- Regulatory Findings: [count]
- Affected Frameworks: [SOC 2, GDPR, HIPAA, etc.]
- Remediation Timeline: [estimated_completion]
RECOMMENDED ACTIONS:
1. [action_1]
2. [action_2]
3. [action_3]
工具用法
| 操作 | MCP 工具 | REST 端点 |
|---|---|---|
| 查询 TPRM 问题 | SN-Query-Table | GET /api/now/table/sn_tprm_issue |
| 按主题搜索问题 | SN-Natural-Language-Search | 不适用 |
| 查询评估 | SN-Query-Table | GET /api/now/table/sn_tprm_assessment |
| 查询供应商评估 | SN-Query-Table | GET /api/now/table/sn_tprm_vendor_assessment |
| 汇总分析 | SN-Execute-Background-Script | POST /api/now/table/sys_trigger |
| 架构发现 | SN-Discover-Table-Schema | GET /api/now/table/sys_dictionary |
| 发布摘要备注 | SN-Add-Work-Notes | PATCH /api/now/table/{table}/{sys_id} |
最佳实践
- 风险分级: 始终按风险等级(严重、高、中、低)划分供应商分析,以便合理安排关注重点和资源
- 评估时效性: 将评估时间超过 12 个月的任何 Tier 1 或 Tier 2 供应商标记为需要立即处理的差距
- 整改 SLA: 按问题严重程度明确整改时限:严重(30 天)、高(60 天)、中(90 天)、低(180 天)
- 趋势分析: 纳入季度环比趋势,以显示供应商风险状况是在改善还是恶化
- 集中度风险: 标出未解决问题数量过多的供应商,这可能表明风险管理存在系统性失效
- 第四方风险意识: 注明源自供应商分包商或第四方依赖项的供应商问题
- 法规映射: 将 TPRM 问题映射到具体法规要求(OCC、FFIEC、GDPR),以做好迎检准备
故障排除
供应商评估记录为空
症状: 对已知供应商查询 sn_tprm_vendor_assessment 时没有返回结果
原因: 供应商评估可能采用不同的关系模型,或者供应商记录位于 core_company 中,但未关联到 TPRM
解决方案:
Tool: SN-Discover-Table-Schema
Parameters:
table_name: sn_tprm_vendor_assessment
确认供应商引用字段的名称。某些配置使用 entity 或 company,而不是 vendor。
评估分数字段返回空值
症状: 评估已完成,但评估分数为空
原因: 分数可能是在问卷回答层级计算的,而非存储在评估记录中
解决方案: 使用评估 sys_id 查询 sn_tprm_assessment,检查是否存在子问卷记录或包含计算分数的 asmt_metric_result 条目。
问题与供应商的关联缺失
症状: 查询结果中的问题未显示关联的供应商
原因: 问题可能通过评估记录关联,而非直接关联到供应商
解决方案: 通过评估引用进行联接:查询问题的 assessment 字段,然后读取评估记录以查找其 vendor 字段。
示例
示例 1:季度供应商风险委员会报告
场景: 风险副总裁需要一份涵盖整个投资组合的 TPRM 摘要,用于季度委员会会议。
Tool: SN-Query-Table
Parameters:
table_name: sn_tprm_issue
query: active=true^priorityIN1,2^sys_updated_on>=javascript:gs.monthsAgoStart(3)
limit: 50
生成的摘要:
- 未解决问题总数: 34 家供应商共有 83 个问题(低于上一季度的 91 个)
- 严重/高优先级: 18 个问题需要立即处理
- 逾期整改: 12 个问题已超过到期日(逾期率为 14%)
- 首要风险类别: 数据安全(28 个问题,占 34%)
- 评估覆盖率: 92% 的 Tier 1 供应商评估处于有效期内;3 家 Tier 1 供应商已逾期
- 平均整改时间: 47 天(目标:严重问题为 30 天)
- 建议: 升级处理 3 家存在逾期严重发现项的 Tier 1 供应商;对 5 家即将进行年度评审的供应商启动重新评估
示例 2:事件发生后的供应商专项深入分析
场景: 一家关键供应商报告发生数据泄露;需要立即汇总风险敞口。
Tool: SN-Query-Table
Parameters:
table_name: sn_tprm_issue
query: vendor=[vendor_sys_id]^active=true
fields: sys_id,number,short_description,state,priority,category,due_date,remediation_plan
limit: 50
生成的详情:
- 供应商: DataCorp International(Tier 1 - 严重)
- 未解决问题: 7 个(2 个严重、3 个高、2 个中)
- 既有安全问题: 3 个与访问控制和加密相关的问题
- 上次评估: 2025-11-15(评分:62/100 - 低于可接受阈值)
- 逾期整改: 2 个严重发现项已超过 90 天 SLA
- 合规影响: 存在 SOC 2 Type II 差距;未满足 GDPR 第 28 条关于处理者的要求
- 建议措施: 行使合同审计权;要求制定 30 天整改计划;评估替代供应商
相关技能
grc/issue-summarization- 汇总一般 GRC 问题,提供更广泛的风险背景grc/risk-assessment-summarization- 深入分析供应商风险评分背后的原因grc/regulatory-alert-analysis- 监控影响第三方要求的法规变化grc/control-objective-management- 管理与供应商风险领域对应的控制措施security/audit-compliance- 提供供应商评估的审计跟踪和合规报告