Name

sn_rf.RFSimilarityWithTrendEvaluator

Description

Evaluation script for Similarity with trend Evalution type

Script

var RFSimilarityWithTrendEvaluator = Class.create();
RFSimilarityWithTrendEvaluator.prototype = Object.extendsObject(sn_rf.RFEvaluatorSNC, {
  category: 'rf_evaluation_script', // DO NOT REMOVE THIS LINE!

  getEvaluationOutputSchema: function(param) {
      var rfLogger = new RFLogger('RFSimilarityWithTrendEvaluator - getEvaluationOutputSchema');
      var inputs = param.inputs;
      var similarity = new RFSimilarityService(inputs.similarity_definition);
      if (!similarity.isSolutionDefValid()) {
          var errorDetails = new RFExceptionManager('INVALID_SIMILARITY_SOLUTION_DEFINITION');
          rfLogger.logError('Solution definition ' + inputs.similarity_definition + ' is invalid');
          return {
              'status': RFConstants.ERROR,
              'errorCode': errorDetails.getCode(),
              'errorMessage': errorDetails.getMessage()
          };
      }
      var trendDefinition = new RFTrendDefinitionService(inputs.trend_definition);
      if (!trendDefinition.hasValidRecord()) {
          errorDetails = new RFExceptionManager('INVALID_TREND_DEFINITION');
          rfLogger.logError('Trend definition ' + inputs.trend_definition + ' is invalid');
          return {
              'status': RFConstants.ERROR,
              'errorCode': errorDetails.getCode(),
              'errorMessage': errorDetails.getMessage()
          };
      }

      var trendType = trendDefinition.getTrendType();
      var schema = [];
      RFUtils.addToSchema(schema,
          RFConstants.evaluationOutputNames.OLDEST_CREATED_AT,
          RFConstants.evaluationOutputLabels.OLDEST_CREATED_AT,
          RFConstants.evaluationOutputTypes.STRING);
      RFUtils.addToSchema(schema,
          RFConstants.evaluationOutputNames.COUNT,
          RFConstants.evaluationOutputLabels.COUNT,
          RFConstants.evaluationOutputTypes.STRING);
      RFUtils.addToSchema(schema,
          RFConstants.evaluationOutputNames.HIGHEST_CONFIDENCE_RECORD,
          RFConstants.evaluationOutputLabels.HIGHEST_CONFIDENCE_RECORD,
          RFConstants.evaluationOutputTypes.REFERENCE,
          trendDefinition.getTable());
      RFUtils.addToSchema(schema,
          RFConstants.evaluationOutputNames.QUALIFIED_RECORD_IDS,
          RFConstants.evaluationOutputLabels.QUALIFIED_RECORD_IDS,
          RFConstants.evaluationOutputTypes.STRING);
      if (trendType == RFConstants.trendTypes.COMMON_VALUE) {
          RFUtils.addToSchema(schema,
              RFConstants.evaluationOutputNames.DISPLAY_VALUE,
              RFConstants.evaluationOutputLabels.DISPLAY_VALUE,
              RFConstants.evaluationOutputTypes.STRING);
          RFUtils.addToSchema(schema,
              RFConstants.evaluationOutputNames.VALUE,
              RFConstants.evaluationOutputLabels.VALUE,
              RFConstants.evaluationOutputTypes.STRING);
      }
      if (trendType == RFConstants.trendTypes.COMMON_REFERENCE) {
          RFUtils.addToSchema(schema,
              RFConstants.evaluationOutputNames.TREND_RECORD,
              RFConstants.evaluationOutputLabels.TREND_RECORD,
              RFConstants.evaluationOutputTypes.REFERENCE,
              trendDefinition.getSourceTable());
      }
      if (trendType == RFConstants.trendTypes.COMMON_CONDITION) {
          RFUtils.addToSchema(schema,
              RFConstants.evaluationOutputNames.SIMILARITY_DEFINITION_ID,
              RFConstants.evaluationOutputLabels.SIMILARITY_DEFINITION_ID,
              RFConstants.evaluationOutputTypes.STRING);
          RFUtils.addToSchema(schema,
              RFConstants.evaluationOutputNames.TREND_DEFINITION_ID,
              RFConstants.evaluationOutputLabels.TREND_DEFINITION_ID,
              RFConstants.evaluationOutputTypes.STRING);
      }

      var metaData = {};
      metaData['hidden'] = [RFConstants.evaluationOutputNames.QUALIFIED_RECORD_IDS];
      if (trendType == RFConstants.trendTypes.COMMON_VALUE) {
          metaData['uniqueKey'] = [RFConstants.evaluationOutputNames.VALUE];
      } else if (trendType == RFConstants.trendTypes.COMMON_REFERENCE) {
          metaData['uniqueKey'] = [RFConstants.evaluationOutputNames.TREND_RECORD];
      } else if (trendType == RFConstants.trendTypes.COMMON_CONDITION) {
          metaData['uniqueKey'] = [RFConstants.evaluationOutputNames.SIMILARITY_DEFINITION_ID,
              RFConstants.evaluationOutputNames.TREND_DEFINITION_ID
          ];
          metaData['hidden'].push(RFConstants.evaluationOutputNames.SIMILARITY_DEFINITION_ID);
          metaData['hidden'].push(RFConstants.evaluationOutputNames.TREND_DEFINITION_ID);
      }

      return {
          'status': RFConstants.SUCCESS,
          'schema': schema,
          'metaData': metaData
      };
  },

  getEvaluationOutputs: function(param) {
      var rfLogger = new RFLogger('RFSimilarityWithTrendEvaluator - getEvaluationOutputs');
      var inputs = param.inputs;
      var contextRecord = param.contextRecord;
      var evaluationOutputs = [];
      var similarity = new RFSimilarityService(inputs.similarity_definition);
      var trendDefinition = new RFTrendDefinitionService(inputs.trend_definition);

      if (!similarity.isSolutionDefValid()) {
          var errorDetails = new RFExceptionManager('INVALID_SIMILARITY_SOLUTION_DEFINITION');
          rfLogger.logError('Solution definition ' + inputs.similarity_definition + ' is invalid');
          return {
              'status': RFConstants.ERROR,
              'errorCode': errorDetails.getCode(),
              'errorMessage': errorDetails.getMessage()
          };
      }
      if (!trendDefinition.hasValidRecord()) {
          errorDetails = new RFExceptionManager('INVALID_TREND_DEFINITION');
          rfLogger.logError('Trend definition ' + inputs.trend_definition + ' is invalid');
          return {
              'status': RFConstants.ERROR,
              'errorCode': errorDetails.getCode(),
              'errorMessage': errorDetails.getMessage()
          };
      }

      var predictions = similarity.getPredictions(contextRecord);
      rfLogger.logDebug('Similarity solution ' + inputs.similarity_definition + ' returned ' + predictions.length + ' predictions');
      var similarRecordSysIds = [];
      for (var predictionIdx = 0; predictionIdx < predictions.length; predictionIdx++) {
          var similarRecordSysId = predictions[predictionIdx].predictedValueSysId();
          if (similarRecordSysId != contextRecord.sys_id) {
              similarRecordSysIds.push(similarRecordSysId);
          }
      }
      var trendResult = trendDefinition.getTrendResult(similarRecordSysIds);
      if (trendResult.status == RFConstants.ERROR) {
          return trendResult;
      }
      var trendData = trendResult.trendData;
      rfLogger.logDebug('Trend definition ' + inputs.trend_definition + ' returned ' + trendData.length + ' trends');
      if (trendDefinition.getTrendType() == RFConstants.trendTypes.COMMON_CONDITION) {
          //List trendData will always be of length 1 for 'Common condition' type of trend
          for (var trendDataIdx = 0; trendDataIdx < trendData.length; trendDataIdx++) {
              trendData[trendDataIdx][RFConstants.evaluationOutputNames.SIMILARITY_DEFINITION_ID] = similarity.getSimilarityDefinitionId();
          }
      }
      return {
          'status': RFConstants.SUCCESS,
          'evaluationOutputs': trendData
      };
  },

  type: 'RFSimilarityWithTrendEvaluator'
});

Sys ID

92b36d81530330107234ddeeff7b121c

Offical Documentation

Official Docs: