LT-92: NonTarget response criteria

This commit is contained in:
Leonardo Campos 2017-01-12 23:22:59 -02:00 committed by Bruno Alves de Faria
parent c822f71baa
commit 2f73403682
6 changed files with 49 additions and 12 deletions

View File

@ -103,7 +103,8 @@ Template.viewer.onCreated(() => {
instance.data.measurementApi = new OHIF.measurements.MeasurementApi(instance.data.timepointApi);
console.warn('>>>>REMOVE THE LINES BELOW');
window.measurementApi = instance.data.measurementApi;
window.conformanceCriteria = new OHIF.measurements.ConformanceCriteria(window.measurementApi);
window.timepointApi = instance.data.timepointApi;
window.conformanceCriteria = new OHIF.measurements.ConformanceCriteria(window.measurementApi, instance.data.timepointApi);
const measurementsPromise = instance.data.measurementApi.retrieveMeasurements(patientId, timepointIds);
measurementsPromise.then(() => {
Session.set('MeasurementsReady', true);

View File

@ -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;

View File

@ -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
});
});
};

View File

@ -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']

View File

@ -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;

View File

@ -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);
}
}