From a5462d0a177c5b7d4688b715ca7e1f0c5412f6ec Mon Sep 17 00:00:00 2001 From: julianxcarter Date: Tue, 1 Mar 2022 21:44:02 -0500 Subject: [PATCH] Adverse Event context additions --- src/extractors/FHIRAdverseEventExtractor.js | 6 +++- src/helpers/contextUtils.js | 32 +++++++++++++++++++++ src/index.js | 11 ++++++- 3 files changed, 47 insertions(+), 2 deletions(-) diff --git a/src/extractors/FHIRAdverseEventExtractor.js b/src/extractors/FHIRAdverseEventExtractor.js index 82903518..7cff373b 100644 --- a/src/extractors/FHIRAdverseEventExtractor.js +++ b/src/extractors/FHIRAdverseEventExtractor.js @@ -18,8 +18,12 @@ class FHIRAdverseEventExtractor extends BaseFHIRExtractor { try { allResearchStudyResources = getResearchStudiesFromContext(context); } catch (e) { - logger.error(e.message); + logger.debug(e.message); logger.debug(e.stack); + if (!this.study) { + logger.error('There is no ResearchStudy id to complete a request for Adverse Event resources; please include a ClinicalTrialInformationExtractor,' + + ' ResearchStudyExtractor, or "study" constructorArg in your extraction configuration.'); + } } // The patient is referenced in the 'subject' field of an AdverseEvent diff --git a/src/helpers/contextUtils.js b/src/helpers/contextUtils.js index b970c681..f6cb8df6 100644 --- a/src/helpers/contextUtils.js +++ b/src/helpers/contextUtils.js @@ -47,6 +47,36 @@ function getConditionsFromContext(context) { return conditionsResourcesInContext; } +/** +* Parses context for AdverseEvent resources +* @param {Object} context - Context object consisting of a FHIR Bundle +* @return {Array} All the AdverseEvent resources found in context +*/ +function getAdverseEventsFromContext(context) { + logger.debug('Getting adverse event resources from context'); + const adverseEventResourcesInContext = getBundleResourcesByType(context, 'AdverseEvent', {}, false); + if (_.isEmpty(adverseEventResourcesInContext)) { + throw Error('Could not find any adverse events in context; ensure that an AdverseEventExtractor is used earlier in your extraction configuration'); + } + logger.debug(`AdverseEvent resources found in context. Found ${adverseEventResourcesInContext.length} adverse event resources.`); + return adverseEventResourcesInContext; +} + +/** +* Parses context for AdverseEvent entries, which themselves contain resources +* @param {Object} context - Context object consisting of a FHIR Bundle +* @return {Array} All the AdverseEvents entries found in context +*/ +function getAdverseEventEntriesFromContext(context) { + logger.debug('Getting adverse event entries from context'); + const adverseEventEntriesInContext = getBundleEntriesByResourceType(context, 'AdverseEvent', {}, false); + if (adverseEventEntriesInContext.length === 0) { + throw Error('Could not find any adverse events in context; ensure that an AdverseEventExtractor is used earlier in your extraction configuration'); + } + logger.debug(`AdverseEvent entries found in context. Found ${adverseEventEntriesInContext.length} adverse event resources.`); + return adverseEventEntriesInContext; +} + /** * Parses context for Encounter resources * @param {Object} context - Context object consisting of a FHIR Bundle @@ -78,4 +108,6 @@ module.exports = { getEncountersFromContext, getPatientFromContext, getResearchStudiesFromContext, + getAdverseEventEntriesFromContext, + getAdverseEventsFromContext, }; diff --git a/src/index.js b/src/index.js index 0588a489..5d2c5576 100644 --- a/src/index.js +++ b/src/index.js @@ -65,7 +65,14 @@ const { const { getDiseaseStatusCode, getDiseaseStatusEvidenceCode, mEpochToDate } = require('./helpers/diseaseStatusUtils'); const { formatDate, formatDateTime } = require('./helpers/dateUtils'); const { lowercaseLookupQuery, createLowercaseLookup, createInvertedLookup } = require('./helpers/lookupUtils'); -const { getConditionEntriesFromContext, getConditionsFromContext, getEncountersFromContext, getPatientFromContext } = require('./helpers/contextUtils'); +const { + getConditionEntriesFromContext, + getConditionsFromContext, + getEncountersFromContext, + getPatientFromContext, + getAdverseEventsFromContext, + getAdverseEventEntriesFromContext, +} = require('./helpers/contextUtils'); const { parsePatientIds } = require('./helpers/appUtils'); const { getConfig, validateConfig } = require('./helpers/configUtils'); const configSchema = require('./helpers/schemas/config.schema.json'); @@ -150,6 +157,8 @@ module.exports = { getConditionsFromContext, getEncountersFromContext, getPatientFromContext, + getAdverseEventEntriesFromContext, + getAdverseEventsFromContext, // Configuration file schema configSchema, };