Skip to content

Commit 2052f86

Browse files
author
Mahalingam
committed
Validate against FHIR in BaseClient after extraction is complete
1 parent 6efc428 commit 2052f86

17 files changed

+31
-35
lines changed

package-lock.json

Lines changed: 4 additions & 10 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
},
2020
"license": "Apache-2.0",
2121
"dependencies": {
22+
"ajv": "^6.12.6",
2223
"axios": "^0.19.0",
2324
"commander": "^6.2.0",
2425
"csv-parse": "^4.8.8",
@@ -32,7 +33,6 @@
3233
},
3334
"devDependencies": {
3435
"@types/jest": "^26.0.14",
35-
"ajv": "^6.12.6",
3636
"cross-env": "^7.0.0",
3737
"eslint": "^6.6.0",
3838
"eslint-config-airbnb-base": "^14.0.0",

src/client/BaseClient.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
const { isValidFHIR } = require('../helpers/fhirUtils');
12
const logger = require('../helpers/logger');
23

34
class BaseClient {
@@ -69,6 +70,10 @@ class BaseClient {
6970
}
7071
}, Promise.resolve(contextBundle));
7172

73+
if (!isValidFHIR(contextBundle)) {
74+
logger.error('Extracted bundle is not valid FHIR.');
75+
}
76+
7277
return { bundle: contextBundle, extractionErrors };
7378
}
7479
}

src/helpers/fhirUtils.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,14 @@
11
const _ = require('lodash');
22
const fhirpath = require('fhirpath');
3+
const Ajv = require('ajv');
4+
const metaSchema = require('ajv/lib/refs/json-schema-draft-06.json');
5+
const schema = require('./schemas/fhir.schema.json');
36
const logger = require('./logger');
47

8+
const ajv = new Ajv({ logger: false });
9+
ajv.addMetaSchema(metaSchema);
10+
const validator = ajv.addSchema(schema, 'FHIR');
11+
512
// Unit codes and display values fo Vital Signs values
613
// Code mapping is based on http://hl7.org/fhir/R4/observation-vitalsigns.html
714
// and inferred from manually referencing display values of codes in
@@ -149,6 +156,8 @@ const logOperationOutcomeInfo = (operationOutcome) => {
149156
});
150157
};
151158

159+
const isValidFHIR = (resource) => validator.validate('FHIR', resource);
160+
152161
module.exports = {
153162
allResourcesInBundle,
154163
determineVersion,
@@ -163,4 +172,5 @@ module.exports = {
163172
logOperationOutcomeInfo,
164173
mapFHIRVersions,
165174
quantityCodeToUnitLookup,
175+
isValidFHIR,
166176
};

test/templates/cancerDiseaseStatus.test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
const { isValidFHIR } = require('../utils');
1+
const { isValidFHIR } = require('../../src/helpers/fhirUtils');
22
const maximalCancerDiseaseStatus = require('./fixtures/disease-status-resource.json');
33
const minimalCancerDiseaseStatus = require('./fixtures/minimal-disease-status-resource.json');
44
const { cancerDiseaseStatusTemplate } = require('../../src/templates/CancerDiseaseStatusTemplate');

test/templates/carePlanWithReview.test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
const { isValidFHIR } = require('../utils');
1+
const { isValidFHIR } = require('../../src/helpers/fhirUtils');
22
const minimalCarePlan = require('./fixtures/minimal-careplan-resource.json');
33
const maximalCarePlan = require('./fixtures/maximal-careplan-resource.json');
44
const { carePlanWithReviewTemplate } = require('../../src/templates/CarePlanWithReviewTemplate');

test/templates/condition.test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
const { isValidFHIR } = require('../utils');
1+
const { isValidFHIR } = require('../../src/helpers/fhirUtils');
22
const maximalValidExampleCondition = require('./fixtures/maximal-condition-resource.json');
33
const minimalValidExampleCondition = require('./fixtures/minimal-condition-resource.json');
44
const cancerValidExampleCondition = require('./fixtures/cancer-condition-resource.json');

test/templates/medication.test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
const { isValidFHIR } = require('../utils');
1+
const { isValidFHIR } = require('../../src/helpers/fhirUtils');
22
const maximalValidExampleMedication = require('./fixtures/maximal-medication-resource.json');
33
const minimalValidExampleMedication = require('./fixtures/minimal-medication-resource.json');
44
const { cancerRelatedMedicationTemplate } = require('../../src/templates/CancerRelatedMedicationTemplate.js');

test/templates/observation.test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
const { isValidFHIR } = require('../utils');
1+
const { isValidFHIR } = require('../../src/helpers/fhirUtils');
22
const maximalObservationResource = require('./fixtures/maximal-observation-resource.json');
33
const minimalObservationResource = require('./fixtures/minimal-observation-resource.json');
44
const { observationTemplate } = require('../../src/templates/ObservationTemplate');

0 commit comments

Comments
 (0)