Name

sn_risk_advanced.RiskAssessmentComponentUtilsBase

Description

No description available

Script

var RiskAssessmentComponentUtilsBase = Class.create();
RiskAssessmentComponentUtilsBase.prototype = {
  initialize: function() {
      this.stateToAssessmentTypeMapping = {
          "2": "1",
          "3": "2",
          "4": "3",
          "10": "4"
      };

      this.defaultSectionLabels = {
          "2": {
              'section_title': gs.getMessage("Inherent assessment"),
              'qualitative_score_label': gs.getMessage("Inherent risk"),
              'quantitative_score_label': gs.getMessage("Inherent ALE")
          },
          "3": {
              'section_title': gs.getMessage("Control assessment"),
              'qualitative_score_label': gs.getMessage("Control effectiveness")
          },
          "4": {
              'section_title': gs.getMessage("Residual assessment"),
              'qualitative_score_label': gs.getMessage("Residual risk"),
              'quantitative_score_label': gs.getMessage("Residual ALE")
          },
          "10": {
              'section_title': gs.getMessage("Target assessment"),
              'qualitative_score_label': gs.getMessage("Target risk"),
              'quantitative_score_label': gs.getMessage("Target ALE")
          }
      };
  },

  getOverrideSectionInfo: function(assessmentId) {
      return this._getOverrideSectionInfo(assessmentId);
  },

  getAssigneesToReassign: function(userIntials, type, options) {
      return this._getAssigneesToReassign(userIntials, type, options);
  },

  getReasonsToReassign: function() {
      return this._getReasonsToReassign();
  },

  getAssessmentType: function(assessmentState) {
      return this._getAssessmentType(assessmentState);
  },

  getAssessmentData: function(assessmentId) {
      return this._getAssessmentData(assessmentId);
  },

  getNavigationInfo: function(instanceId) {
      return this._getNavigationInfo(instanceId);
  },

  updateRiskAssessmentComments: function(assessmentInstanceId, comments) {
      return this._updateRiskAssessmentComments(assessmentInstanceId, comments);
  },

  getApprover: function(instance) {
      return this._getApprover(instance);
  },

  getSectionLabels: function(ramId) {
      return this._getSectionLabels(ramId);
  },

  _getSectionLabels: function(ramId) {
      var result = {};
      var ram = new GlideRecord('sn_risk_advanced_risk_assessment_methodology');
      if (!ram.get(ramId)) {
          return;
      }

      var asmtTypeToAsmtStateMapping = {
          'sn_risk_advanced_inherent_assessment': '2',
          'sn_risk_advanced_control_assessment': '3',
          'sn_risk_advanced_residual_assessment': '4',
          'sn_risk_advanced_target_assessment': '10'
      };
      var asmtInstance = new GlideRecord('sn_risk_advanced_assessment_type');
      asmtInstance.addQuery('risk_assessment_methodology', ramId);
      asmtInstance.query();

      while (asmtInstance.next()) {
          var asmtType = asmtInstance.getValue('sys_class_name');
          result[asmtTypeToAsmtStateMapping[asmtType]] = {};
          result[asmtTypeToAsmtStateMapping[asmtType]]['section_title'] = this._getLabel(asmtInstance, asmtTypeToAsmtStateMapping[asmtType], 'section_title', false);
          result[asmtTypeToAsmtStateMapping[asmtType]]['qualitative_score_label'] = this._getLabel(asmtInstance, asmtTypeToAsmtStateMapping[asmtType], 'qualitative_score_label', false);
          result[asmtTypeToAsmtStateMapping[asmtType]]['quantitative_score_label'] = this._getLabel(asmtInstance, asmtTypeToAsmtStateMapping[asmtType], 'quantitative_score_label', false);

          // Get lowercase labels
          result[asmtTypeToAsmtStateMapping[asmtType]]['section_title_lowercase'] = this._getLabel(asmtInstance, asmtTypeToAsmtStateMapping[asmtType], 'section_title', true);
          result[asmtTypeToAsmtStateMapping[asmtType]]['qualitative_score_label_lowercase'] = this._getLabel(asmtInstance, asmtTypeToAsmtStateMapping[asmtType], 'qualitative_score_label', true);
          result[asmtTypeToAsmtStateMapping[asmtType]]['quantitative_score_label_lowercase'] = this._getLabel(asmtInstance, asmtTypeToAsmtStateMapping[asmtType], 'quantitative_score_label', true);
      }

      // For assessment types that are not present, append default terminology to the result
      for (var key in asmtTypeToAsmtStateMapping) {
          if (!result.hasOwnProperty(asmtTypeToAsmtStateMapping[key])) {
              result[asmtTypeToAsmtStateMapping[key]] = {};
              result[asmtTypeToAsmtStateMapping[key]]['section_title'] = this._getLabel(null, asmtTypeToAsmtStateMapping[key], 'section_title', false);
              result[asmtTypeToAsmtStateMapping[key]]['qualitative_score_label'] = this._getLabel(null, asmtTypeToAsmtStateMapping[key], 'qualitative_score_label', false);
              result[asmtTypeToAsmtStateMapping[key]]['quantitative_score_label'] = this._getLabel(null, asmtTypeToAsmtStateMapping[key], 'quantitative_score_label', false);

              // Get lowercase labels
              result[asmtTypeToAsmtStateMapping[key]]['section_title_lowercase'] = this._getLabel(null, asmtTypeToAsmtStateMapping[key], 'section_title', true);
              result[asmtTypeToAsmtStateMapping[key]]['qualitative_score_label_lowercase'] = this._getLabel(null, asmtTypeToAsmtStateMapping[key], 'qualitative_score_label', true);
              result[asmtTypeToAsmtStateMapping[key]]['quantitative_score_label_lowercase'] = this._getLabel(null, asmtTypeToAsmtStateMapping[key], 'quantitative_score_label', true);
          }
      }
      return result;
  },

  _getLabel: function(asmtInstance, state, label, convertToLowerCase) {
      var finalLabel = '';
      if (asmtInstance) {
          var sectionLabel = asmtInstance.getDisplayValue(label);
          if (sectionLabel)
              finalLabel = sectionLabel;
          else
              finalLabel = this.defaultSectionLabels[state][label];
      } else {
          finalLabel = this.defaultSectionLabels[state][label];
      }

      return convertToLowerCase ? this._convertLabelToLowerCase(finalLabel) : finalLabel;
  },

  _convertLabelToLowerCase: function(label) {
      if (!label) return null;

      var words = label.split(" ");
      for (var i = 0; i < words.length; i++) {
          if (words[i].toUpperCase() != words[i]) {
              words[i] = words[i].toLowerCase();
          }
      }
      return words.join(" ");
  },

  _updateRiskAssessmentComments: function(assessmentInstanceId, comments) {
      var assessmentInstance = new GlideRecord("sn_risk_advanced_risk_assessment_instance");
      if (!assessmentInstance.get(assessmentInstanceId))
          return;
      assessmentInstance.comments = comments;
      assessmentInstance.update();
  },

  _getAssessmentType: function(assessmentState) {
      return this.stateToAssessmentTypeMapping[assessmentState];
  },


  _getAssessmentData: function(assessmentId) {
      var data = {};
      var assessmentInstance = new GlideRecord("sn_risk_advanced_risk_assessment_instance");
      if (!assessmentInstance.get(assessmentId))
          return data;

      var state = assessmentInstance.getValue('state');
      var ramId = assessmentInstance.getValue('risk_assessment_methodology');

      var statesToFetchData = this._getStatesToFetchData(ramId, assessmentId);

      for (var i = 0; i < statesToFetchData.length; i++) {
          var stateToFetch = statesToFetchData[i];
          if (stateToFetch != 10 && stateToFetch > state)
              break;

          //If state is response fetch response data else fetch factors data
          if (stateToFetch == 5)
              data[stateToFetch] = new sn_risk_advanced.RiskAssessmentUtils().getRiskResponseData(assessmentId);
          else
              data[stateToFetch] = new sn_risk_advanced.RiskAssessmentUtils().getAssessmentResponseData(assessmentId, this.stateToAssessmentTypeMapping[stateToFetch], ramId);

      }

      var appetiteUtils = new sn_risk_advanced.RiskAppetiteUtils();
      data.riskResponseMandatoryData = new sn_risk_advanced.RiskAssessmentConfigurationUtils().isRiskResponseMandatory(assessmentInstance);
      data.lastStateCommentMandatoryData = appetiteUtils.isJustificationRequired(assessmentId);
      data.userInputMaxLengthInfo = this._gettMaxLengthOfUserInputFields();
      data.sectionLabels = this.getSectionLabels(ramId);
      data.isRiskResponseSingleSelect = assessmentInstance.risk_assessment_methodology.risk_response_single_select;
      return data;
  },

  _gettMaxLengthOfUserInputFields: function() {
      var data = {};
      var advancedRiskUtils = new sn_risk_advanced.AdvancedRiskUtils();
      data.factorResponseMaxLength = parseInt(advancedRiskUtils.getDictionaryFieldValue("sn_risk_advanced_risk_assessment_instance_response", "factor_response", "max_length"));
      data.factorCommentsMaxLength = parseInt(advancedRiskUtils.getDictionaryFieldValue("sn_risk_advanced_risk_assessment_instance_response", "additional_comments", "max_length"));
      data.inherentJustificationMaxLength = parseInt(advancedRiskUtils.getDictionaryFieldValue("sn_risk_advanced_risk_assessment_instance", "inherent_justification", "max_length"));
      data.controlJustificationMaxLength = parseInt(advancedRiskUtils.getDictionaryFieldValue("sn_risk_advanced_risk_assessment_instance", "control_justification", "max_length"));
      data.residualJustificationMaxLength = parseInt(advancedRiskUtils.getDictionaryFieldValue("sn_risk_advanced_risk_assessment_instance", "residual_justification", "max_length"));
      data.riskResponseJustificationMaxLength = parseInt(advancedRiskUtils.getDictionaryFieldValue("sn_risk_advanced_risk_assessment_instance", "risk_response_justification", "max_length"));
      data.targetJustificationMaxLength = parseInt(advancedRiskUtils.getDictionaryFieldValue("sn_risk_advanced_risk_assessment_instance", "target_justification", "max_length"));
      return data;
  },

  _getStatesToFetchData: function(ramdId, assessmentId) {
      var statesToFetchData = [];
      var ram = new GlideRecord("sn_risk_advanced_risk_assessment_methodology");
      ram.get(ramdId);

      if (ram.getValue('inherent_risk') == true)
          statesToFetchData.push(2);

      if (ram.getValue('control_effectiveness') == true)
          statesToFetchData.push(3);

      if (ram.getValue('residual_risk') == true)
          statesToFetchData.push(4);

      if (new sn_risk_advanced.RiskAssessmentUtils().hasTargetAssessment(ramdId, assessmentId))
          statesToFetchData.push(10);

      if (ram.getValue('enable_risk_response_workflow') == true)
          statesToFetchData.push(5);

      return statesToFetchData;

  },

  _getNavigationInfo: function(instanceId) {
      var navInfoObject = {};
      var scoreFieldMap = {
          'sn_risk_advanced_inherent_assessment': 'summary_inherent_risk',
          'sn_risk_advanced_control_assessment': 'summary_control_effectiveness',
          'sn_risk_advanced_residual_assessment': 'summary_residual_risk',
          'sn_risk_advanced_target_assessment': 'summary_target_risk',
          'sn_risk_advanced_inherent_assessment_state': '2',
          'sn_risk_advanced_control_assessment_state': '3',
          'sn_risk_advanced_residual_assessment_state': '4',
          'sn_risk_advanced_target_assessment_state': '10',
          'sn_risk_advanced_inherent_assessment_justification': 'inherent_justification',
          'sn_risk_advanced_control_assessment_justification': 'control_justification',
          'sn_risk_advanced_residual_assessment_justification': 'residual_justification',
          'sn_risk_advanced_target_assessment_justification': 'target_justification',
          'sn_risk_advanced_inherent_assessment_overridden': 'override_calculated_inherent_score',
          'sn_risk_advanced_control_assessment_overridden': 'override_calculated_control_effectiveness',
          'sn_risk_advanced_residual_assessment_overridden': 'override_calculated_residual_score',
          'sn_risk_advanced_target_assessment_overridden': 'override_calculated_target_score',
          'sn_risk_advanced_inherent_assessment_name': gs.getMessage('Inherent assessment'),
          'sn_risk_advanced_control_assessment_name': gs.getMessage('Control assessment'),
          'sn_risk_advanced_residual_assessment_name': gs.getMessage('Residual assessment'),
          'sn_risk_advanced_target_assessment_name': gs.getMessage('Target assessment')
      };


      var ratingCriteria = new GlideRecord('sn_risk_advanced_rating_criteria');
      var asmt = new GlideRecord("sn_risk_advanced_risk_assessment_instance");
      asmt.get(instanceId);
      navInfoObject.currentAsmtState = asmt.getValue('state');

      var reAssessmentInProgress = asmt.getValue('sub_state') == 0;

      var assessmentType = new GlideRecord('sn_risk_advanced_assessment_type');
      assessmentType.addQuery('risk_assessment_methodology', asmt.getValue('risk_assessment_methodology'));
      assessmentType.orderBy('display_order');
      assessmentType.query();

      var stageList = {};
      var stageInfo;
      while (assessmentType.next()) {
          if (assessmentType.getValue('sys_class_name') === 'sn_risk_advanced_target_assessment') {
              if (!new sn_risk_advanced.RiskAssessmentUtils().hasTargetAssessment(asmt.getValue('risk_assessment_methodology'), instanceId)) {
                  continue;
              }
          }
          var assessmentTypeCol = ((assessmentType.getValue('sys_class_name') === 'sn_risk_advanced_control_assessment') ? 'control_assessment_methodology' : 'calculate_based_on');
          stageInfo = {};
          stageInfo.name = scoreFieldMap[assessmentType.getValue('sys_class_name') + '_name'];
          stageInfo.score = asmt.getValue(scoreFieldMap[assessmentType.getValue('sys_class_name')] + '_score');
          stageInfo.state = scoreFieldMap[assessmentType.getValue('sys_class_name') + '_state'];
          stageInfo.overall_comments = asmt.getValue(scoreFieldMap[assessmentType.getValue('sys_class_name') + '_justification']);

          var rating = asmt.getValue(scoreFieldMap[assessmentType.getValue('sys_class_name')]);
          ratingCriteria.initialize();
          if (ratingCriteria.get(rating)) {
              stageInfo.riskRating = ratingCriteria.getValue('rating');
              stageInfo.ratingColor = ratingCriteria.risk_color_style.background_color + '';
              stageInfo.backgroundColor = ratingCriteria.risk_color_style.background_color_new + '';
          }

          var gr = new GlideRecord(assessmentType.getValue('sys_class_name'));
          gr.get(assessmentType.getUniqueValue());
          stageInfo.assessmentType = gr.getValue(assessmentTypeCol);
          stageInfo.assessmentContribution = gr.getValue('assessment_contribution');


          var factorsResponded = this._getAssessmentResponsesCount(asmt, this.stateToAssessmentTypeMapping[stageInfo.state]);

          stageInfo.totalMandatoryFactors = factorsResponded.totalMandatoryFactors + '';
          stageInfo.mandatoryFactorsAnswered = factorsResponded.mandatoryFactorsAnswered + '';
          stageInfo.isScoreOverridden = (asmt.getValue(scoreFieldMap[assessmentType.getValue('sys_class_name') + '_overridden']) == "1");
          stageInfo.isVisibleInWorkflow = true;
          stageInfo.reAssessmentInProgress = reAssessmentInProgress;

          if (assessmentType.getValue('sys_class_name') == "sn_risk_advanced_control_assessment" || assessmentType.getValue('sys_class_name') == "sn_risk_advanced_residual_assessment")
              stageInfo.isAssessmentNotApplicable = this._isAssessmentNotApplicable(asmt, assessmentType.getValue('sys_class_name'));

          if (assessmentType.getValue('sys_class_name') == "sn_risk_advanced_inherent_assessment")
              stageInfo.quantitativeScore = (assessmentType.getValue('assessment_contribution') != '2') ? new sn_risk_advanced.GrcARAIntegrationUtils().getCurrencyValue(asmt.final_inherent_ale.getSessionCurrencyCode() + ";" + asmt.final_inherent_ale.getSessionValue()) : "";
          else if (assessmentType.getValue('sys_class_name') == "sn_risk_advanced_residual_assessment")
              stageInfo.quantitativeScore = (assessmentType.getValue('assessment_contribution') != '2') ? new sn_risk_advanced.GrcARAIntegrationUtils().getCurrencyValue(asmt.final_residual_ale.getSessionCurrencyCode() + ";" + asmt.final_residual_ale.getSessionValue()) : "";
          else if (assessmentType.getValue('sys_class_name') == "sn_risk_advanced_target_assessment") {
              stageInfo.quantitativeScore = (assessmentType.getValue('assessment_contribution') != '2') ? new sn_risk_advanced.GrcARAIntegrationUtils().getCurrencyValue(asmt.final_target_ale.getSessionCurrencyCode() + ";" + asmt.final_target_ale.getSessionValue()) : "";
              stageInfo.isAssessmentMandatory = asmt.is_target_assessment_mandatory+'';
          }

          stageList[stageInfo.state] = stageInfo;
      }
      //Risk response
      if (asmt.risk_assessment_methodology.enable_risk_response_workflow) {
          stageInfo = {};
          stageInfo.name = gs.getMessage('Risk response');
          stageInfo.state = '5';
          stageInfo.risk_response = asmt.getValue('risk_response');
          stageInfo.comments = asmt.getValue('risk_response_justification');
          stageInfo.isVisibleInWorkflow = true;
          stageInfo.assessmentType = "RISK_RESPONSE";
          stageInfo.reAssessmentInProgress = reAssessmentInProgress;
          stageList[stageInfo.state] = stageInfo;
      }
      stageInfo = {};
      if (navInfoObject.currentAsmtState < 6 || navInfoObject.currentAsmtState == 10) {
          //Request approval/Mark as complete
          if (new sn_risk_advanced.RiskAssessmentUtils().showRequestApproval(asmt)) {
              stageInfo.name = 'Awaiting approval';
              stageInfo.state = '6';
              stageInfo.isVisibleInWorkflow = false;
          } else if (new sn_risk_advanced.RiskAssessmentUtils().showMarkComplete(asmt)) {
              stageInfo.name = 'Monitor';
              stageInfo.state = '7';
              stageInfo.isVisibleInWorkflow = false;
          }
      } else {
          stageInfo.name = asmt.state.getDisplayValue();
          stageInfo.state = navInfoObject.currentAsmtState;
          stageInfo.isVisibleInWorkflow = false;
      }
      if (!gs.nil(stageInfo))
          stageList[stageInfo.state] = stageInfo;
      navInfoObject.stageList = stageList;
      return navInfoObject;
  },

  _isAssessmentNotApplicable: function(asmt, asmtType) {
      if (asmtType == "sn_risk_advanced_control_assessment") {
          return asmt.getValue('mitigating_controls_to_assess') == "1";
      } else {
          return asmt.getValue("residual_risk_not_applicable") == "1";
      }
  },

  _getAssessmentResponsesCount: function(asmt, assessmentType) {
      var factorsResponded = {};
      var instanceResponse = new GlideRecord('sn_risk_advanced_risk_assessment_instance_response');
      instanceResponse.addQuery('assessment_instance_id', asmt.getUniqueValue());
      instanceResponse.addQuery('assessment_type', assessmentType);
      instanceResponse.addQuery('factor.mandatory_response', true);
      instanceResponse.addQuery('factor.sys_class_name', 'sn_risk_advanced_manual_factor');
      instanceResponse.query();
      var totalMandatoryFactors = 0,
          mandatoryFactorsAnswered = 0;

      while (instanceResponse.next()) {
          totalMandatoryFactors++;
          if (instanceResponse.getValue('factor_response') != null) {
              mandatoryFactorsAnswered++;
          }
      }

      factorsResponded.totalMandatoryFactors = totalMandatoryFactors;
      factorsResponded.mandatoryFactorsAnswered = mandatoryFactorsAnswered;
      return factorsResponded;
  },

  _getOverrideSectionInfo: function(assessmentId) {
      var result = {};

      var asmtInstanceRecord = new GlideRecord("sn_risk_advanced_risk_assessment_instance");
      asmtInstanceRecord.get(assessmentId);

      var ramId = asmtInstanceRecord.getValue("risk_assessment_methodology");
      var ram = new GlideRecord("sn_risk_advanced_risk_assessment_methodology");
      ram.get(ramId);

      //Get computed risk and ale scores and their colors
      this._getComputedValues(result, assessmentId);

      //Flag on ram to override of computed scores, if false return the calculated scores/ales
      var allow_override = ram.getValue("enable_override_of_assessment_results");
      result.allow_override = allow_override;
      if (allow_override == 0) {
          return result;
      }

      //Overriding score is allowed,hence can get relevant data required for overriding
      this._getParamsForVisibility(result, ramId);

      //Getting choices for responses in override section

      //Inherent Override Score choices
      result.inherent_overridden_risk_choices = this._getRiskScoreChoices(ramId, 'Inherent Assessment');
      result.inherent_overridden_risk = asmtInstanceRecord.getValue('inherent_overridden_risk');
      result.override_calculated_inherent_score = asmtInstanceRecord.getValue('override_calculated_inherent_score');
      result.inherent_overridden_ale_currency = asmtInstanceRecord.inherent_overridden_ale.getSessionCurrencyCode();
      result.inherent_overridden_ale_value = asmtInstanceRecord.inherent_overridden_ale.getSessionValue();

      //Residual Override Score choices
      result.residual_overridden_risk_choices = this._getRiskScoreChoices(ramId, 'Residual Assessment');
      result.residual_overridden_risk = asmtInstanceRecord.getValue('residual_overridden_risk');
      result.override_calculated_residual_score = asmtInstanceRecord.getValue('override_calculated_residual_score');
      result.residual_overridden_ale_currency = asmtInstanceRecord.residual_overridden_ale.getSessionCurrencyCode();
      result.residual_overridden_ale_value = asmtInstanceRecord.residual_overridden_ale.getSessionValue();

      //Control effectivenees override score choices
      result.control_overridden_effectiveness_choices = this._getRiskScoreChoices(ramId, 'Control Assessment');
      result.control_overridden_effectiveness = asmtInstanceRecord.getValue('control_overridden_effectiveness');
      result.override_calculated_control_effectiveness = asmtInstanceRecord.getValue('override_calculated_control_effectiveness');

      //Target Override Score choices
      result.target_overridden_risk_choices = this._getRiskScoreChoices(ramId, 'Target Assessment');
      result.target_overridden_risk = asmtInstanceRecord.getValue('target_overridden_risk');
      result.override_calculated_target_score = asmtInstanceRecord.getValue('override_calculated_target_score');
      result.target_overridden_ale_currency = asmtInstanceRecord.target_overridden_ale.getSessionCurrencyCode();
      result.target_overridden_ale_value = asmtInstanceRecord.target_overridden_ale.getSessionValue();

      return result;
  },

  _getRiskScoreChoices: function(ramId, assessmentName) {
      var ratingCriteria = new GlideRecord("sn_risk_advanced_rating_criteria");
      var score = [];
      var score_sysIdsQuery = new sn_risk_advanced.RiskAssessmentUtils().getRelatedRatingCriterias(ramId, assessmentName);
      ratingCriteria.addEncodedQuery(score_sysIdsQuery);
      ratingCriteria.orderBy("overridden_score");
      ratingCriteria.query();
      while (ratingCriteria.next()) {
          var item = {};
          item.id = ratingCriteria.getUniqueValue();
          item.label = ratingCriteria.getValue("concat_rating_overridden_score");
          item.color = ratingCriteria.getValue("background_color");
          score.push(item);
      }
      return score;
  },

  _getComputedValues: function(result, assessmentId) {
      var asmtInstanceRecord = new GlideRecord("sn_risk_advanced_risk_assessment_instance");
      asmtInstanceRecord.get(assessmentId);
      var ramId = asmtInstanceRecord.getValue("risk_assessment_methodology");

      result.inherent_computed_risk_score = asmtInstanceRecord.getDisplayValue('inherent_computed_risk_score');
      result.inherent_computed_ale = asmtInstanceRecord.inherent_computed_ale.getSessionDisplayValue();
      result.inherent_calculated_color = asmtInstanceRecord.inherent_computed_risk.background_color;

      result.residual_computed_risk_score = asmtInstanceRecord.getDisplayValue('residual_computed_risk_score');
      result.residual_computed_ale = asmtInstanceRecord.residual_computed_ale.getSessionDisplayValue();
      result.residual_calculated_color = asmtInstanceRecord.residual_computed_risk.background_color;

      result.control_computed_effectiveness_score = asmtInstanceRecord.getDisplayValue('control_computed_effectiveness_score');
      result.control_calculated_color = asmtInstanceRecord.control_computed_effectiveness.background_color;

      result.target_computed_risk = asmtInstanceRecord.getValue('target_computed_risk');
      result.target_computed_risk_score = asmtInstanceRecord.getValue('target_computed_risk_score');
      result.target_computed_ale = asmtInstanceRecord.target_computed_ale.getSessionDisplayValue();
      result.target_calculated_color = asmtInstanceRecord.target_computed_risk.background_color;
      result.target_computed_risk_choices = this._getRiskScoreChoices(ramId, 'Target Assessment');
      result.target_computed_ale_value = asmtInstanceRecord.target_computed_ale.getSessionValue();
      result.target_computed_ale_currency = asmtInstanceRecord.target_computed_ale.getSessionCurrencyCode();
  },

  _getParamsForVisibility: function(result, ramId) {
      //Flags for showing/hiding qualitative/quantitative assessment (initially set to false)
      result.inherent_show_override_score = false;
      result.inhernet_show_override_ale = false;
      result.residual_show_override_score = false;
      result.residual_show_override_ale = false;
      result.target_show_override_score = false;
      result.target_show_override_ale = false;

      //This overrides the showing/hiding params
      var assessmentTypeReference = new GlideRecord('sn_risk_advanced_assessment_type');
      assessmentTypeReference.addQuery('risk_assessment_methodology', ramId);
      assessmentTypeReference.query();
      while (assessmentTypeReference.next()) {
          if (assessmentTypeReference.name == "Inherent Assessment") {
              var inherentAssessmentContribution = assessmentTypeReference.assessment_contribution;
              if (inherentAssessmentContribution == "3") {
                  result.inherent_show_override_score = true;
                  result.inhernet_show_override_ale = true;
              } else if (inherentAssessmentContribution == "2") {
                  result.inherent_show_override_score = true;
                  result.inhernet_show_override_ale = false;
              } else {
                  result.inherent_show_override_score = false;
                  result.inhernet_show_override_ale = true;
              }
          }
          if (assessmentTypeReference.name == "Residual Assessment") {
              var residualAssessmentContribution = assessmentTypeReference.assessment_contribution;
              if (residualAssessmentContribution == "3") {
                  result.residual_show_override_score = true;
                  result.residual_show_override_ale = true;
              } else if (residualAssessmentContribution == "2") {
                  result.residual_show_override_score = true;
                  result.residual_show_override_ale = false;
              } else {
                  result.residual_show_override_score = false;
                  result.residual_show_override_ale = true;
              }
          }
          if (assessmentTypeReference.name == "Target Assessment") {
              var targetAssessmentContribution = assessmentTypeReference.assessment_contribution;
              if (targetAssessmentContribution == "3") {
                  result.target_show_override_score = true;
                  result.target_show_override_ale = true;
              } else if (targetAssessmentContribution == "2") {
                  result.target_show_override_score = true;
                  result.target_show_override_ale = false;
              } else {
                  result.target_show_override_score = false;
                  result.target_show_override_ale = true;
              }
          }
      }
  },

  _getAssigneesToReassign: function(userInitials, type, options) {
      var result = {};
      var resultFound = false;
      //Condition to check for domain or RAMs which can access extension points
      if (options.domain != 0 || gs.getProperty('sn_risk_advanced.rams_with_extension_points').includes(options.ramId)) {
          var hooks = new GlideScriptedExtensionPoint().getExtensions('sn_risk_advanced.getAssigneesToReassign');
          hooks.forEach(function(hook) {
              if (hook.handles(options)) {
                  result = hook.getUsersObject(userInitials, type, options);
              }
              //If result object returned not empty
              if (!(Object.keys(result).length === 0 && result.constructor === Object)) {
                  resultFound = true;
                  return;
              }
          });
      }
      if (resultFound) {
          return result;
      }
      var itemParent = {};

      //Get count of total no. of users matching filter 
      var totalUsers = 0;
      var userCount = new GlideAggregate('sys_user');
      if (type == 'assessor')
          userCount.addEncodedQuery("roles=sn_risk_advanced.ara_assessor^ORroles=sn_grc.business_user_lite^active=true");
      else
          userCount.addEncodedQuery("roles=sn_risk_advanced.ara_approver^active=true");
      if (userInitials)
          userCount.addEncodedQuery("^nameSTARTSWITH" + userInitials);
      userCount.addAggregate('COUNT');
      userCount.query();
      if (userCount.next()) {
          totalUsers = userCount.getAggregate('COUNT');
      }

      var heading = "";
      var assigneeChoices = [];
      var currentUser = gs.getUserID();
      var users = new GlideRecord("sys_user");
      if (type == 'assessor')
          users.addEncodedQuery("roles=sn_risk_advanced.ara_assessor^ORroles=sn_grc.business_user_lite^active=true");
      else
          users.addEncodedQuery("roles=sn_risk_advanced.ara_approver^active=true");
      if (userInitials)
          users.addEncodedQuery("^nameSTARTSWITH" + userInitials);
      users.orderBy("name");
      users.setLimit(25);
      users.query();
      if (totalUsers > 25) {
          heading = "Showing 1-25 out of " + totalUsers + " users";
      } else {
          if (totalUsers == 0) {
              heading = "No users found";
          } else {
              heading = "Showing 1-" + totalUsers + " out of " + totalUsers + " users";
          }
      }
      itemParent.label = heading;
      while (users.next()) {
          var item = {};
          item.id = users.getUniqueValue();
          item.label = users.getValue("name");
          item.sublabel = users.getValue("email");
          item.avatarProps = {
              "userName": "user_name",
              "imageSrc": users.getValue("avatar") + ".iix?t=small"
          };
          item.hasImage = users.getValue("avatar");
          assigneeChoices.push(item);
      }
      itemParent.children = assigneeChoices;
      result.assigneeChoices = [itemParent];
      return result;
  },

  _getReasonsToReassign: function() {
      var result = {};

      var reasonsForReassigning = [{
              "id": "incorrect",
              "label": gs.getMessage("Incorrect assignment")
          },
          {
              "id": "leave",
              "label": gs.getMessage("Going on leave")
          },
          {
              "id": "redistribute",
              "label": gs.getMessage("Workload redistribution")
          },
          {
              "id": "other",
              "label": gs.getMessage("Other")
          }
      ];

      var choices = {
          "reasonChoices": reasonsForReassigning,
          "defaultReasonId": "incorrect"
      };
      result = choices;
      return result;
  },

  _getApprover: function(instance) {
      if (instance.getValue("approver_type") == '1') {
          var approverUser = instance.getValue('approver_user');
          if (approverUser)
              return instance.approver_user.getDisplayValue();
      } else if (instance.getValue("approver_type") == '2') {
          var approverGroup = instance.getValue('approver_group');
          if (approverGroup)
              return instance.approver_group.getDisplayValue();
      } else if (instance.getValue("approver_type") == '3') {
          var mgr = new sn_risk_advanced.RiskAssessmentUtils().getAssessorManager(instance);
          if (mgr != '') {
              var user = new GlideRecord("sys_user");
              user.get(mgr);
              return user.getDisplayValue();
          }
      }
      return '';
  },



  type: 'RiskAssessmentComponentUtilsBase'
};

Sys ID

6782aaec53072010bad1ddeeff7b12ba

Offical Documentation

Official Docs: