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