Adjusting new targets criterion

This commit is contained in:
Bruno Alves de Faria 2017-09-20 16:22:17 -03:00
parent 0cb54a1e8c
commit ef4a8d8684
7 changed files with 27 additions and 12 deletions

View File

@ -9,8 +9,8 @@
{{/if}} {{/if}}
<div class="type">{{toolGroup.name}}</div> <div class="type">{{toolGroup.name}}</div>
<div class="max {{#if gt numberOfMeasurements maxNumMeasurements}}warning{{/if}}"> <div class="max {{#if gt numberOfMeasurements maxNumMeasurements}}warning{{/if}}">
{{#if and maxNumMeasurements (eq toolGroup.id 'targets')}} {{#if getMax toolGroup.id}}
<p class="maxNumMeasurements">Max {{maxNumMeasurements}}</p> <p class="maxNumMeasurements">Max {{getMax toolGroup.id}}</p>
{{/if}} {{/if}}
</div> </div>
<div class="numberOfMeasurements">{{numberOfMeasurements}}</div> <div class="numberOfMeasurements">{{numberOfMeasurements}}</div>

View File

@ -9,11 +9,15 @@ Template.measurementTableHeaderRow.helpers({
return measurementRows.length ? measurementRows.length : null; return measurementRows.length ? measurementRows.length : null;
}, },
maxNumMeasurements() { getMax(toolGroupId) {
const { conformanceCriteria } = Template.instance().data; const { conformanceCriteria } = Template.instance().data;
if (!conformanceCriteria) return; if (!conformanceCriteria) return;
return conformanceCriteria.maxTargets.get(); if (toolGroupId === 'targets') {
return conformanceCriteria.maxTargets.get();
} else if (toolGroupId === 'newTargets') {
return conformanceCriteria.maxNewTargets.get();
}
}, },
anyUnmarkedLesionsLeft() { anyUnmarkedLesionsLeft() {

View File

@ -1,7 +1,8 @@
@import "{ohif:design}/app" @import "{ohif:design}/app"
.measurementTableView.scrollArea .measurementTableView.scrollArea
height: calc(100% - 105px) // height: calc(100% - 105px)
height: calc(100% - 50px)
overflow-x: hidden overflow-x: hidden
overflow-y: auto overflow-y: auto
margin-right: -36px margin-right: -36px

View File

@ -1,5 +1,5 @@
<template name="measurementTableWarningsDialog"> <template name="measurementTableWarningsDialog">
{{#dialogSimple (extend this dialogClass='modal-sm' title='Criteria nonconformities')}} {{#dialogSimple (extend this class='themed' dialogClass='modal-sm' title='Criteria nonconformities')}}
<ol> <ol>
{{#each message in this.messages}} {{#each message in this.messages}}
<li>{{message}}</li> <li>{{message}}</li>

View File

@ -15,6 +15,7 @@ class ConformanceCriteria {
this.nonconformities = new ReactiveVar(); this.nonconformities = new ReactiveVar();
this.groupedNonConformities = new ReactiveVar(); this.groupedNonConformities = new ReactiveVar();
this.maxTargets = new ReactiveVar(null); this.maxTargets = new ReactiveVar(null);
this.maxNewTargets = new ReactiveVar(null);
const validate = _.debounce(trialCriteriaType => { const validate = _.debounce(trialCriteriaType => {
if (!Session.get('MeasurementsReady')) return; if (!Session.get('MeasurementsReady')) return;
@ -45,6 +46,7 @@ class ConformanceCriteria {
mergedData.nonTargets = mergedData.nonTargets.concat(followupData.nonTargets); mergedData.nonTargets = mergedData.nonTargets.concat(followupData.nonTargets);
this.maxTargets.set(null); this.maxTargets.set(null);
this.maxNewTargets.set(null);
const resultBoth = this.validateTimepoint('both', trialCriteriaType, mergedData); const resultBoth = this.validateTimepoint('both', trialCriteriaType, mergedData);
const resultBaseline = this.validateTimepoint('baseline', trialCriteriaType, baselineData); const resultBaseline = this.validateTimepoint('baseline', trialCriteriaType, baselineData);
const resultFollowup = this.validateTimepoint('followup', trialCriteriaType, followupData); const resultFollowup = this.validateTimepoint('followup', trialCriteriaType, followupData);
@ -101,11 +103,16 @@ class ConformanceCriteria {
let nonconformities = []; let nonconformities = [];
evaluators.forEach(evaluator => { evaluators.forEach(evaluator => {
const maxTargets = evaluator.getMaxTargets(); const maxTargets = evaluator.getMaxTargets(false);
const maxNewTargets = evaluator.getMaxTargets(true);
if (maxTargets) { if (maxTargets) {
this.maxTargets.set(maxTargets); this.maxTargets.set(maxTargets);
} }
if (maxNewTargets) {
this.maxNewTargets.set(maxNewTargets);
}
const result = evaluator.evaluate(data); const result = evaluator.evaluate(data);
nonconformities = nonconformities.concat(result); nonconformities = nonconformities.concat(result);
}); });

View File

@ -24,10 +24,11 @@ export class CriteriaEvaluator {
}); });
} }
getMaxTargets() { getMaxTargets(newTarget=false) {
let result = 0; let result = 0;
_.each(this.criteria, criterion => { _.each(this.criteria, criterion => {
if (criterion instanceof Criteria.MaxTargetsCriterion) { const newTargetMatch = newTarget === !!criterion.options.newTarget;
if (criterion instanceof Criteria.MaxTargetsCriterion && newTargetMatch) {
const { limit } = criterion.options; const { limit } = criterion.options;
if (limit > result) { if (limit > result) {
result = limit; result = limit;

View File

@ -7,7 +7,7 @@ export const MaxTargetsSchema = {
limit: { limit: {
label: 'Max targets allowed in study', label: 'Max targets allowed in study',
type: 'integer', type: 'integer',
minimum: 1 minimum: 0
}, },
newTarget: { newTarget: {
label: 'Flag to evaluate only new targets', label: 'Flag to evaluate only new targets',
@ -64,9 +64,11 @@ export class MaxTargetsCriterion extends BaseCriterion {
}); });
let message; let message;
if (measurementNumbers.length > this.options.limit) { if (measurementNumbers.length > options.limit) {
const increment = options.newTarget ? 'new ' : ''; const increment = options.newTarget ? 'new ' : '';
message = options.message || `The study should not have more than ${this.options.limit} ${increment}targets.`; const plural = options.limit === 1 ? '' : 's';
const amount = options.limit === 0 ? '' : `more than ${options.limit}`;
message = options.message || `The study should not have ${amount} ${increment}target${plural}.`;
} }
return this.generateResponse(message); return this.generateResponse(message);