LT-92: Modality criteria

This commit is contained in:
Leonardo Campos 2017-01-12 21:39:28 -02:00 committed by Bruno Alves de Faria
parent 774de08646
commit c822f71baa
2 changed files with 62 additions and 0 deletions

View File

@ -2,6 +2,7 @@ import { BaseChecker } from './BaseChecker';
import { MaxTargetPerOrganCriteria } from '../criterias/MaxTargetPerOrganCriteria';
import { MaxTargetsCriteria } from '../criterias/MaxTargetsCriteria';
import { MeasurementsLengthCriteria } from '../criterias/MeasurementsLengthCriteria';
import { ModalityCriteria } from '../criterias/ModalityCriteria';
export class RecistChecker extends BaseChecker {
@ -11,6 +12,7 @@ export class RecistChecker extends BaseChecker {
this.criterias.push(new MaxTargetsCriteria(5));
this.criterias.push(new MaxTargetPerOrganCriteria(2));
this.criterias.push(new MeasurementsLengthCriteria({}));
this.criterias.push(new ModalityCriteria(this.getModalityCheckerOptions()));
}
check(data) {
@ -24,4 +26,11 @@ export class RecistChecker extends BaseChecker {
return nonconformity;
}
getModalityCheckerOptions() {
return {
method: 'restrict',
modalities: ['US']
};
}
}

View File

@ -0,0 +1,53 @@
import { BaseCriteria } from './BaseCriteria';
import { _ } from 'meteor/underscore';
/*
* ModalityCriteria
* Check if a modality is allowed or restricted
* Options:
* method (string): allow, restrict
* modalities (string[]): list of allowed/restricted modalities
*/
export class ModalityCriteria extends BaseCriteria {
constructor(options) {
super();
this.options = options;
}
check(data) {
const measurementTypesIds = this.options.measurementTypesIds || ['targets'];
const modalitiesSet = new Set(this.options.modalities);
const validationMethod = this.options.method;
const measurements = [];
const invalidModalities = [];
let message;
measurementTypesIds.forEach(measurementTypesId => {
const items = data[measurementTypesId];
items.forEach(item => {
const measurement = item.measurement;
const metadata = item.metadata;
const modality = metadata.modality.toUpperCase();
if (((validationMethod === 'allow') && !modalitiesSet.has(modality)) ||
((validationMethod === 'restrict') && modalitiesSet.has(modality))) {
measurements.push(measurement);
invalidModalities.push(modality);
}
});
});
if (measurements.length) {
const uniqueModalities = _.uniq(invalidModalities);
const uniqueModalitiesText = uniqueModalities.join(', ');
const modalityText = uniqueModalities.length > 1 ? 'modalities' : 'modality';
message = `The ${modalityText} ${uniqueModalitiesText} should not be used as a method of measurement`;
}
return this.respond(message, measurements);
}
};