LT-92: NonTarget response criteria

This commit is contained in:
Leonardo Campos authored and Bruno Alves de Faria committed 2017-01-18 11:01:52 -02:00
1 parent c822f71baa
commit 2f73403682
6 files changed
+49 -12

No files matched your search

@@ -95,7 +95,6 @@ Template.measurementTableView.helpers({
},
newMeasurements(measurementType) {
console.warn('>>>>measurementType', measurementType);
const instance = Template.instance();
const measurementApi = instance.data.measurementApi;
const timepointApi = instance.data.timepointApi;
@@ -4,10 +4,9 @@ import { RecistChecker } from './checkers/RecistChecker';
class ConformanceCriteria {
constructor(measurementApi) {
if (measurementApi) {
this.measurementApi = measurementApi;
}
constructor(measurementApi, timepointApi) {
this.measurementApi = measurementApi;
this.timepointApi = timepointApi;
this.warnings = {};
}
@@ -36,9 +35,13 @@ class ConformanceCriteria {
measurements.forEach(measurement => {
const { studyInstanceUid, imageId } = measurement;
const metadata = this.getImageMetadata(studyInstanceUid, imageId);
const timepointId = measurement.timepointId;
const timepoint = this.timepointApi.timepoints.findOne({ timepointId });
data[measurementType].push({
measurement,
metadata
metadata,
timepoint
});
});
};
@@ -3,6 +3,7 @@ import { MaxTargetPerOrganCriteria } from '../criterias/MaxTargetPerOrganCriteri
import { MaxTargetsCriteria } from '../criterias/MaxTargetsCriteria';
import { MeasurementsLengthCriteria } from '../criterias/MeasurementsLengthCriteria';
import { ModalityCriteria } from '../criterias/ModalityCriteria';
import { NonTargetResponseCriteria } from '../criterias/NonTargetResponseCriteria';
export class RecistChecker extends BaseChecker {
@@ -12,7 +13,8 @@ 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()));
this.criterias.push(new ModalityCriteria(this.getModalityCriteriaOptions()));
this.criterias.push(new NonTargetResponseCriteria());
}
check(data) {
@@ -26,7 +28,7 @@ export class RecistChecker extends BaseChecker {
return nonconformity;
}
getModalityCheckerOptions() {
getModalityCriteriaOptions() {
return {
method: 'restrict',
modalities: ['US']
@@ -16,15 +16,15 @@ export class ModalityCriteria extends BaseCriteria {
}
check(data) {
const measurementTypesIds = this.options.measurementTypesIds || ['targets'];
const measurementTypes = this.options.measurementTypes || ['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];
measurementTypes.forEach(measurementType => {
const items = data[measurementType];
items.forEach(item => {
const measurement = item.measurement;
@@ -0,0 +1,32 @@
import { BaseCriteria } from './BaseCriteria';
export class NonTargetResponseCriteria extends BaseCriteria {
constructor() {
super();
}
check(data) {
const items = data.nonTargets;
const measurements = [];
let message;
items.forEach(item => {
const measurement = item.measurement;
const response = measurement.response.toLowerCase();
const timepoint = item.timepoint;
const timepointType = timepoint.timepointType.toLowerCase();
if ((timepointType === 'baseline') && (response !== 'present')) {
measurements.push(measurement);
}
});
if (measurements.length) {
message = 'Non-targets can only be assessed as "present"';
}
return this.respond(message, measurements);
}
}