mcpField
T
tprm-issue-summarization

tprm-issue-summarization

github.com/happy-technologies-llc安全4141 次安装2 天前更新
代码仓库

关于 tprm-issue-summarization

tprm-issue-summarization 是面向第三方风险团队的 ServiceNow 技能,可汇总 TPRM 问题并提供供应商或整体组合视角。它整合问题、评估、整改和合规信息,用于风险审查与报告。

主要功能

  1. 01按供应商和风险等级汇总问题
  2. 02识别逾期或未完成的评估
  3. 03汇总整改状态与用时
  4. 04关联问题与合规要求
  5. 05编制供应商风险摘要

适用场景

  1. 01准备供应商风险委员会报告
  2. 02在供应商入驻时审查风险
  3. 03供应商事件后评估风险敞口
  4. 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_assessmentTPRM 评估记录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-TableGET /api/now/table/sn_tprm_issue
按主题搜索问题SN-Natural-Language-Search不适用
查询评估SN-Query-TableGET /api/now/table/sn_tprm_assessment
查询供应商评估SN-Query-TableGET /api/now/table/sn_tprm_vendor_assessment
汇总分析SN-Execute-Background-ScriptPOST /api/now/table/sys_trigger
架构发现SN-Discover-Table-SchemaGET /api/now/table/sys_dictionary
发布摘要备注SN-Add-Work-NotesPATCH /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 - 提供供应商评估的审计跟踪和合规报告

参考资料

评论

支持 Markdown