From 46bff61b08a2b003ce0ef37c8a9ecf218c547387 Mon Sep 17 00:00:00 2001 From: Bruno Alves de Faria Date: Fri, 13 Jan 2017 15:14:16 -0200 Subject: [PATCH] LT-92: Creating JSON schema validation for conformance criteria --- LesionTracker/package.json | 1 + .../client/conformance/criteria/MaxTargets.js | 11 +++ ...argetPerOrgan.js => MaxTargetsPerOrgan.js} | 13 +++- .../criteria/MeasurementsLength.js | 70 +++++++++++++++++++ .../client/conformance/criteria/index.js | 12 ++-- .../evaluations/recistBaseline.json | 2 +- 6 files changed, 101 insertions(+), 8 deletions(-) rename Packages/ohif-measurements/client/conformance/criteria/{MaxTargetPerOrgan.js => MaxTargetsPerOrgan.js} (76%) diff --git a/LesionTracker/package.json b/LesionTracker/package.json index 4b1229585..320ce6257 100644 --- a/LesionTracker/package.json +++ b/LesionTracker/package.json @@ -9,6 +9,7 @@ "version": "1.0.0", "description": "", "dependencies": { + "ajv": "^4.10.4", "babel-runtime": "^6.18.0", "bcrypt": "^0.8.7", "meteor-node-stubs": "^0.2.3" diff --git a/Packages/ohif-measurements/client/conformance/criteria/MaxTargets.js b/Packages/ohif-measurements/client/conformance/criteria/MaxTargets.js index 96a2343d9..0fda1c40a 100644 --- a/Packages/ohif-measurements/client/conformance/criteria/MaxTargets.js +++ b/Packages/ohif-measurements/client/conformance/criteria/MaxTargets.js @@ -1,6 +1,17 @@ import { BaseCriterion } from './BaseCriterion'; import { _ } from 'meteor/underscore'; +export const MaxTargetsSchema = { + properties: { + limit: { + label: 'Max targets allowed in study', + type: 'integer', + minimum: 1 + } + }, + required: ['limit'] +}; + export class MaxTargetsCriterion extends BaseCriterion { constructor(options) { diff --git a/Packages/ohif-measurements/client/conformance/criteria/MaxTargetPerOrgan.js b/Packages/ohif-measurements/client/conformance/criteria/MaxTargetsPerOrgan.js similarity index 76% rename from Packages/ohif-measurements/client/conformance/criteria/MaxTargetPerOrgan.js rename to Packages/ohif-measurements/client/conformance/criteria/MaxTargetsPerOrgan.js index 12b2cab35..ec1c79abf 100644 --- a/Packages/ohif-measurements/client/conformance/criteria/MaxTargetPerOrgan.js +++ b/Packages/ohif-measurements/client/conformance/criteria/MaxTargetsPerOrgan.js @@ -1,6 +1,17 @@ import { BaseCriterion } from './BaseCriterion'; -export class MaxTargetPerOrganCriterion extends BaseCriterion { +export const MaxTargetsPerOrganSchema = { + properties: { + limit: { + label: 'Max targets allowed per organ', + type: 'integer', + minimum: 1 + } + }, + required: ['limit'] +}; + +export class MaxTargetsPerOrganCriterion extends BaseCriterion { constructor(options) { super(options); diff --git a/Packages/ohif-measurements/client/conformance/criteria/MeasurementsLength.js b/Packages/ohif-measurements/client/conformance/criteria/MeasurementsLength.js index d89cca3d0..ed6a9ca6a 100644 --- a/Packages/ohif-measurements/client/conformance/criteria/MeasurementsLength.js +++ b/Packages/ohif-measurements/client/conformance/criteria/MeasurementsLength.js @@ -1,5 +1,75 @@ import { BaseCriterion } from './BaseCriterion'; +export const MeasurementsLengthSchema = { + properties: { + longAxis: { + label: 'Minimum length of long axis', + type: 'number', + minimum: 0 + }, + shortAxis: { + label: 'Minimum length of short axis', + type: 'number', + minimum: 0 + }, + longAxisSliceThicknessMultiplier: { + label: 'Length of long axis multiplier', + type: 'number', + minimum: 0 + }, + shortAxisSliceThicknessMultiplier: { + label: 'Length of short axis multiplier', + type: 'number', + minimum: 0 + }, + modalityIn: { + label: 'Filter to evaluate only measurements with the specified modalities', + type: 'array', + items: { + type: 'string' + }, + minItems: 1, + uniqueItems: true + }, + modalityNotIn: { + label: 'Filter to evaluate only measurements without the specified modalities', + type: 'array', + items: { + type: 'string' + }, + minItems: 1, + uniqueItems: true + }, + locationIn: { + label: 'Filter to evaluate only measurements with the specified locations', + type: 'array', + items: { + type: 'string' + }, + minItems: 1, + uniqueItems: true + }, + locationNotIn: { + label: 'Filter to evaluate only measurements without the specified locations', + type: 'array', + items: { + type: 'string' + }, + minItems: 1, + uniqueItems: true + }, + message: { + label: 'Message to be displayed in case of nonconformity' + } + }, + oneOf: [ + { required: ['message', 'longAxis'] }, + { required: ['message', 'shortAxis'] }, + { required: ['message', 'longAxisSliceThicknessMultiplier'] }, + { required: ['message', 'shortAxisSliceThicknessMultiplier'] } + ] +}; + export class MeasurementsLengthCriterion extends BaseCriterion { constructor(options) { diff --git a/Packages/ohif-measurements/client/conformance/criteria/index.js b/Packages/ohif-measurements/client/conformance/criteria/index.js index b4b010241..b95fca63b 100644 --- a/Packages/ohif-measurements/client/conformance/criteria/index.js +++ b/Packages/ohif-measurements/client/conformance/criteria/index.js @@ -1,6 +1,6 @@ -export { MaxTargetPerOrganCriterion } from './MaxTargetPerOrgan'; -export { MaxTargetsCriterion } from './MaxTargets'; -export { MeasurementsLengthCriterion } from './MeasurementsLength'; -export { ModalityCriterion } from './Modality'; -export { NonTargetResponseCriterion } from './NonTargetResponse'; -export { TargetTypeCriterion } from './TargetType'; +export * from './MaxTargetsPerOrgan'; +export * from './MaxTargets'; +export * from './MeasurementsLength'; +export * from './Modality'; +export * from './NonTargetResponse'; +export * from './TargetType'; diff --git a/Packages/ohif-measurements/client/conformance/evaluations/recistBaseline.json b/Packages/ohif-measurements/client/conformance/evaluations/recistBaseline.json index 07108dcbb..5cc78e1f7 100644 --- a/Packages/ohif-measurements/client/conformance/evaluations/recistBaseline.json +++ b/Packages/ohif-measurements/client/conformance/evaluations/recistBaseline.json @@ -1,5 +1,5 @@ { - "MaxTargetPerOrgan": { + "MaxTargetsPerOrgan": { "limit": 2 }, "MaxTargets": {