From 8614a473481641dff604d9d64e4004d65eeed697 Mon Sep 17 00:00:00 2001 From: Dylan Mendelowitz Date: Fri, 11 Feb 2022 10:03:17 -0500 Subject: [PATCH 1/5] Adding sortExtractors to index --- src/index.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/index.js b/src/index.js index 040cad44..0588a489 100644 --- a/src/index.js +++ b/src/index.js @@ -69,6 +69,7 @@ const { getConditionEntriesFromContext, getConditionsFromContext, getEncountersF const { parsePatientIds } = require('./helpers/appUtils'); const { getConfig, validateConfig } = require('./helpers/configUtils'); const configSchema = require('./helpers/schemas/config.schema.json'); +const { sortExtractors } = require('./helpers/dependencyUtils'); module.exports = { // CLI Related utilities @@ -143,6 +144,7 @@ module.exports = { logOperationOutcomeInfo, lowercaseLookupQuery, mEpochToDate, + sortExtractors, // Context operations getConditionEntriesFromContext, getConditionsFromContext, From a5462d0a177c5b7d4688b715ca7e1f0c5412f6ec Mon Sep 17 00:00:00 2001 From: julianxcarter Date: Tue, 1 Mar 2022 21:44:02 -0500 Subject: [PATCH 2/5] 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, }; From 0739800dc1f8c12914b4b01080b8199d5f4a3912 Mon Sep 17 00:00:00 2001 From: julianxcarter Date: Mon, 16 May 2022 16:39:35 -0400 Subject: [PATCH 3/5] npm audit fix --- package-lock.json | 39 ++++++++++++++++++--------------------- package.json | 2 +- 2 files changed, 19 insertions(+), 22 deletions(-) diff --git a/package-lock.json b/package-lock.json index 491962f9..f8f69f06 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2412,8 +2412,7 @@ }, "ansi-regex": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "resolved": "", "dev": true }, "ansi-styles": { @@ -2505,6 +2504,14 @@ "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", "dev": true }, + "async": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "requires": { + "lodash": "^4.17.14" + } + }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -4132,9 +4139,9 @@ "dev": true }, "follow-redirects": { - "version": "1.14.7", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.7.tgz", - "integrity": "sha512-+hbxoLbFMbRKDwohX8GkTataGqO6Jb7jGwpAlwgy2bIz25XtRm7KEzJM76R1WiNT5SwZkX4Y75SwBolkpmE7iQ==" + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.0.tgz", + "integrity": "sha512-aExlJShTV4qOUOL7yF1U5tvLCB0xQuudbf6toyYA0E/acBNw71mvjFTnLaRp50aQaYocMR0a/RMMBIHeZnGyjQ==" }, "for-in": { "version": "1.0.2", @@ -8437,9 +8444,9 @@ } }, "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", "dev": true }, "mixin-deep": { @@ -8473,9 +8480,9 @@ } }, "moment": { - "version": "2.26.0", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.26.0.tgz", - "integrity": "sha512-oIixUO+OamkUkwjhAVE18rAMfRJNsNe/Stid/gwHSOfHrOtw9EhAY2AHvdKZ/k/MggcYELFCJz/Sn2pL8b8JMw==" + "version": "2.29.3", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.3.tgz", + "integrity": "sha512-c6YRvhEo//6T2Jz/vVtYzqBzwvPT95JBQ+smCytzf7c50oMZRsR/a4w88aD34I+/QVSfnoAnSBFPJHItlOMJVw==" }, "ms": { "version": "2.0.0", @@ -10287,16 +10294,6 @@ "stack-trace": "0.0.x", "triple-beam": "^1.3.0", "winston-transport": "^4.3.0" - }, - "dependencies": { - "async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", - "requires": { - "lodash": "^4.17.14" - } - } } }, "winston-transport": { diff --git a/package.json b/package.json index 0217a45c..6ccf85cb 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "fhir-crud-client": "^1.2.2", "fhirpath": "2.1.5", "lodash": "^4.17.21", - "moment": "^2.26.0", + "moment": "^2.29.3", "nodemailer": "^6.7.2", "winston": "^3.2.1" }, From a9039b26dbf7cdab7a177947a530de58e79030e9 Mon Sep 17 00:00:00 2001 From: julianxcarter Date: Mon, 16 May 2022 16:39:42 -0400 Subject: [PATCH 4/5] 2.0.1 --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index f8f69f06..76438797 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "mcode-extraction-framework", - "version": "2.0.0", + "version": "2.0.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 6ccf85cb..219d57d2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "mcode-extraction-framework", - "version": "2.0.0", + "version": "2.0.1", "description": "", "contributors": [ "Julia Afeltra ", From ea88358bfa579100beb3f355b9a2de9c1d75ee8a Mon Sep 17 00:00:00 2001 From: julianxcarter Date: Tue, 17 May 2022 09:24:07 -0400 Subject: [PATCH 5/5] Codeowners update --- .github/CODEOWNERS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 91b974a3..db166b30 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1 +1 @@ -* @jafeltra @mgramigna @julianxcarter @dmendelowitz @dtphelan1 +* @julianxcarter @dmendelowitz @dtphelan1